关于 vow-enforcement
vow-enforcement 是用于代码库的约束设计与审查技能,帮助团队决定规则应依靠指引、钩子还是外部验证。它按约束性质和违规情况划分三种执行层级,并定义升级、降级与阶段审查流程。
主要功能
- 01划分软规则、硬规则和 Nen Court
- 02依据违规情况升级约束
- 03用验证器审查阶段产出
- 04支持用户覆盖审查结果
适用场景
- 01为代码库设计新约束
- 02检查现有规则的执行缺口
- 03决定规则应采用钩子还是技能
- 04在工作流阶段审查验证结果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ athola/ claude-night-market --skill vow-enforcement安装后在 Claude Code 中输入/vow-enforcement确认已加载。
详细介绍
依赖意志力的规则在压力下会失效。 通过让正确的路径成为唯一的路径, 强制执行才能赢得信任。
誓约强制执行
问题
ODCV-Bench 发现,当目标发生冲突时,Agent 有 30-50% 的概率违反自我设定的约束。实践者的共识也证实:软性规则超过 150 条后,所有规则的合规率都会下降,不仅仅是新规则。
核心观点是:“settings.json 是防火墙;CLAUDE.md 是员工手册。”员工手册适用于指导,防火墙适用于强制执行。混淆两者会造成虚假的安全感。
三个强制执行层
| 层级 | 机制 | 合规率 | 示例 |
|---|---|---|---|
| 软性誓约 | 技能说明、CLAUDE.md 规则 | ~80% | “先编写测试”,“保持提交小而精” |
| 硬性誓约 | 钩子(PreToolUse/PostToolUse)、settings.json 权限 | ~100% | 禁止 --no-verify,强制执行文件大小限制 |
| 念能力审判庭 | 审查输出的外部验证 Agent | 确定性 | Lint 检查、测试运行、约束审计 |
软性誓约依赖模型合规。添加成本低、迭代容易,但在目标冲突时并不可靠。当约束需要判断、违规虽恼人但不危险,或者你仍在摸索正确规则时,请使用软性誓约。
硬性誓约通过钩子和 settings.json 权限,在禁止的操作执行前将其拦截。当约束是二元的、违规会造成实际损害,或者软性誓约版本屡次被违反时,请使用硬性誓约。
念能力审判庭会在阶段完成后启动外部验证 Agent 来审计输出。当约束需要分析(而非模式匹配)、钩子无法表达规则,或者检查需要代码库上下文时,请使用念能力审判庭。
誓约分类流程
添加新约束时,请按以下顺序操作:
步骤 1:从软性誓约开始
将规则添加到相关技能或 CLAUDE.md 中。这是成本最低的做法:零成本,几分钟即可部署,合规率约为 80%。
步骤 2:监控违规率
通过执行日志、事后审计(imbue:justify 报告)、用户投诉,以及念能力审判庭在相关审计中的发现来跟踪违规情况。
步骤 3:视需要升级
如果 30 天窗口内的违规率超过 20%:
- 二元约束? 升级为硬性誓约(钩子)。
- 判断型约束? 升级为念能力审判庭。
- 不明确? 先尝试硬性誓约。如果误报超过 10%,则改用念能力审判庭。
夜市誓约清单
现有约束的当前分类:
| 约束 | 当前层级 | 目标层级 | 备注 |
|---|---|---|---|
| 铁律(没有失败测试不得实现) | 念能力审判庭 | 念能力审判庭 | validators/iron_law.py 审计提交顺序 (#406) |
禁止 --no-verify | 硬性 | 硬性 | 已可通过钩子强制执行 |
| 范围守卫价值评分 | 软性 | 软性 | 需要判断,非二元 |
| 工作证明证据 | 念能力审判庭 | 念能力审判庭 | validators/proof_of_work.py 检查 [Ex] 引用和状态 (#406) |
| 有界发现读取 | 硬性 | 硬性 | vow_bounded_reads.py 使用 fcntl.flock 确保并行安全 (#418) |
| 提交中不得出现 AI 归属说明 | 硬性 | 硬性 | 钩子对 git commit 命令进行模式匹配 |
| Markdown 行宽限制为 80 个字符 | 念能力审判庭 | 念能力审判庭 | validators/markdown_wrap.py 标记超过 80 个字符的正文行 (#406) |
| 提交中不得使用表情符号 | 硬性 | 硬性 | 钩子对 git commit 命令进行模式匹配 |
验证器调用
三个念能力审判庭验证器都是位于
plugins/imbue/validators/ 下的独立脚本。每个脚本从 stdin 读取 JSON,并将
判定 JSON 写入 stdout,使用退出码 0(通过)、1(违规)和
2(无法判定)。示例:
# Markdown wrap audit on a list of files
echo '{"files": ["README.md", "docs/guide.md"]}' \
| python plugins/imbue/validators/markdown_wrap.py
# Iron Law audit on an explicit commit log
echo '{"commits": [
{"sha": "abc", "ts": 100, "files": ["tests/test_x.py"]},
{"sha": "def", "ts": 200, "files": ["src/x.py"]}
]}' | python plugins/imbue/validators/iron_law.py
# Proof-of-work audit on agent output
echo '{"text": "Tested foo [E1] [E2] [E3]. Status: PASS.", "min_evidence": 3}' \
| python plugins/imbue/validators/proof_of_work.py
任务编排器集成:在每个阶段边界分派相应的验证器 (参见下文的念能力审判庭协议),并将退出 码 1 视为阻断关卡,退出码 2 视为提示。
誓约毕业标准
满足以下任一条件时,誓约即可毕业:
- 频率:30 天内检测到 3 次或更多违规
- 严重性:单次违规导致回滚、 数据丢失或 CI 故障
- 用户升级要求:用户明确要求 强制执行(“让 X 不可能发生”)
毕业流程
- 用证据记录违规模式
- 设计钩子或验证器 Agent
- 单独测试强制执行机制
- 与软性誓约一起部署(影子模式)
- 连续 1 周没有误报后,停用 软性誓约
降级
硬性誓约可以降级为软性誓约,条件如下:
- 钩子的误报率超过 10%
- 约束过于激进(阻碍 合理的工作)
- 底层问题已不再适用
Nen Court 协议
Nen Court 在任务编排器生命周期的阶段边界运行:
specify之后:验证规格的完整性plan之后:验证计划的可行性execute之后:验证 Iron Law、增量偏向、 工作成果证明pr-prep之前:执行最终合规审计
验证器 Agent 契约
validator:
name: iron-law-court
constraint: "Tests must drive implementation"
inputs:
- git log with timestamps
- diff of test files vs implementation files
checks:
- test file modified before implementation file
- no test assertions changed to match output
- coverage did not decrease
output:
verdict: pass | violation | inconclusive
evidence: [list of specific findings]
recommendation: [action if violation]
判定结果
| 判定结果 | 含义 | 操作 |
|---|---|---|
| pass | 满足约束 | 阶段推进 |
| violation | 有证据表明违反约束 | 阶段受阻,直到问题修复或用户覆盖判定 |
| inconclusive | 无法确定是否合规 | 标记为需要人工审核,不阻止推进 |
用户覆盖
用户可以覆盖 Nen Court 的任何判定:
- “仍然继续”或“覆盖”可以解除阻止
- 覆盖操作会记录下来,以供日后审计
- 频繁覆盖同一项约束,说明该约束需要修订, 而不是加强执行
集成点
imbue:scope-guard:软性誓约层。价值评估 属于判断,应由技能处理。imbue:proof-of-work:混合式强制执行。 证据规则属于软性约束;证据内容可由 Nen Court 验证器 验证。imbue:justify:事后 Nen Court 审计。 它已作为验证器 Agent,用于检查增量偏向、 Iron Law 和测试突变。- Mission Orchestrator:在阶段间设置 Nen Court 检查点作为门禁,进行阶段路由:
specify -> [Nen Court: spec review] -> plan
plan -> [Nen Court: plan review] -> execute
execute -> [Nen Court: justify] -> pr-prep
只有当 Nen Court 返回 pass 或用户明确
覆盖判定时,阶段才会推进。
适用场景
- 为代码库设计新约束
- 审计现有约束,查找执行漏洞
- 判断规则需要钩子还是技能
- 在阶段边界审查 Nen Court 的发现
- 审计后提出约束毕业建议
不适用场景
- 仅适用于单个任务的一次性规则
- 已通过硬性方式强制执行且 运作正常的约束
- 会因约束而减缓学习的探索性工作
相关技能
imbue:karpathy-principles- 本技能管理的 论述层(誓约执行决定哪些原则从技能 晋升为钩子)imbue:scope-guard、imbue:proof-of-work、leyline:additive-bias-defense- 软性誓约示例, 誓约执行会对其进行分类并可能将其晋升- 查看
docs/quality-gates.md#skill-level-quality-gate-composition了解本技能管理的联邦机制
完成标准
- 为每项正在审查的约束分配且仅分配一个 执行层(软性誓约、硬性誓约或 Nen Court),并记录 分类理由
- 对 30 天内违规 3 次或更多的任何软性誓约评估 毕业标准:二元约束晋升为硬性誓约, 判断类约束晋升至 Nen Court
- 在阶段边界调用的 Nen Court 验证器通过
退出代码 0、1、2 返回三种判定结果之一
(
pass、violation、inconclusive);除非用户明确覆盖, 退出代码 1 会阻止阶段推进 - 记录任何从硬性誓约降级为软性誓约的情况, 并注明误报率(>10%)或 已不再适用的具体问题