交付门控 — Claude Code 的机械式质量门控
一个停止钩子,在 Claude 能够结束会话之前检查三项内容,仅使用确定性检查 — 文件修改时间戳、磁盘使用量和转录文本的正则表达式模式。无 AI 推理。
这与推理门控(如 self-audit)不同:delivery-gate 检查机器可验证的事实;self-audit 在四个推理维度上检查输出质量。它们共同构成纵深防御:
- delivery-gate:“学习库今天是否被更新?磁盘空间是否安全?”
- self-audit:“文件内容是否正确、完整、诚实?”
这与 CI 流水线门控的模式相同 — 自动化的、确定性的检查,验证机器可读的事实,而非信任自我报告的状态。
检查项
| 检查项 | 机制 | 命中时行为 |
|---|---|---|
| 合理化模式 | 对转录文本尾部进行正则匹配 | 仅警告(永不阻塞) |
| 过时的学习库 | 对 5 个可配置路径进行 mtime 检查 | 部分过时时警告;阻塞条件:>=3 个过时 或 growth-log 过时且任务复杂 |
| 磁盘空间 < 50GB | shutil.disk_usage | 警告 |
| 磁盘空间 < 15GB | shutil.disk_usage | 阻塞(退出码 2) |
合理化检测会警告诸如“暂时跳过测试”和“预先存在的 bug”等模式 — 这些是思考可能被中断的表面信号。它永远不会单独阻塞,因为正则启发式方法可能产生误报。阻塞条件是:磁盘临界、>=3 个学习库过时,或 growth-log 特别过时(均要求复杂任务 >=3 次编辑)。
为什么需要
Claude Code 的内置检查涵盖代码质量(构建 → 类型检查 → 检查 → 测试)。但存在另一种失败模式:代理生成了可用的代码,但会话卫生被忽视 — 学习未被记录、合理化的捷径、磁盘空间悄然耗尽。
在多次“交付即忘”的会话中,人类没有成长。此钩子强制执行习惯:复杂任务 → 必须更新学习库。
安装
cp quality-gate.py ~/.claude/scripts/
添加到 ~/.claude/settings.json:
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "python3 ~/.claude/scripts/quality-gate.py",
"timeout": 5000
}]
}]
}
}
学习库
在项目的 memory 目录中创建这些文件。钩子会检查今天是否至少有一个被更新:
memory/
├── growth-log/ # 每日学习条目(目录)
├── decisions/log.md # 决策日志
├── output-index.md # 会话输出索引
├── ratings-tracker.md # 随时间变化的技能评分
└── tooling_capabilities.md # 已知工具清单
自定义 LIBS 字典以匹配你自己的文件结构。
配置
编辑 quality-gate.py:
| 变量 | 默认值 | 用途 |
|---|---|---|
RATIONALIZE | 4 条模式 | 用于检测合理化模式的正则表达式 |
LIBS | 5 个库 | 要检查今日更新的文件/目录 |
COMPLEX_THRESHOLD | 3 | 将编辑/写入调用归类为复杂任务的门槛 |
DISK_WARN_GB | 50 | 低于此值发出警告 |
DISK_CRIT_GB | 15 | 低于此值阻塞 |
示例
简单会话 — 允许通过:
edit_count=1 (< 3,非复杂任务) → 退出码 0
复杂任务,学习已记录 — 允许通过:
edit_count=5 (复杂) → 检查 LIBS → growth-log 今天已更新 → 退出码 0
复杂任务,无学习记录 — 被阻塞:
edit_count=4 (复杂) → 检查 LIBS → 全部 5 个过时 → 退出码 2
stderr: "Blocked: complex task completed but no learning captured today."
磁盘空间低 — 被阻塞:
disk_free=12GB < 15GB 临界 → 退出码 2
stderr: "Blocked: disk space at 12GB (threshold: 15GB)."
局限性
此钩子强制执行触及学习库的习惯,而非记录内容的质量。如果 output-index.md 已更新但 growth-log 被跳过,钩子会通过(5 个库中的 1 个被触及)。这是设计使然:机械门控检查机器可验证的事实。对于内容质量验证,请与 self-audit 配合使用。
兼容性
- Python 3.8+(使用
from __future__ import annotations) - 跨平台:Windows、macOS、Linux
- 零依赖,仅使用标准库
质量
此代码经过了 4 轮自动化代码审查(CodeRabbit + Greptile),发现并修复了 9 个真实 bug。
另见
self-audit— 推理质量门控(完整性/一致性/基于实际/诚实性)verification-loop— 代码质量检查(构建/类型检查/检查/测试)gateguard— PreToolUse 安全门控