用途
Delivery Gate 是一个面向 Claude Code 的机械式质量门禁(Stop Hook),在 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 | 拦截(exit 2) |
合理化检测会对"先跳过测试""既有 bug"之类的表述发出警告——这些是思考可能被草率收尾的表面信号。它从不单独触发拦截,因为正则启发式可能产生误报。触发拦截的条件是:磁盘临界、≥3 个学习库过期,或 growth-log 特定过期(均要求为复杂任务,即 ≥3 次编辑)。
设计动机
Claude Code 内置检查覆盖代码质量(build → type → lint → test)。但存在另一种失败模式:智能体产出了可运行的代码,却忽略了会话卫生——学习未被记录、合理化的捷径、磁盘在无声中被耗尽。
经过多次"交付即遗忘"的会话,人并没有成长。此 hook 强制养成习惯:复杂任务 → 必须触碰学习库。
安装方式
从 ECC 仓库根目录:
mkdir -p ~/.claude/scripts
cp skills/delivery-gate/hooks/quality-gate.py ~/.claude/scripts/
添加到 ~/.claude/settings.json:
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "python3 ~/.claude/scripts/quality-gate.py",
"timeout": 5000
}]
}]
}
}
学习库
在项目的 memory 目录中创建以下文件。hook 会检查其中至少一个是否在今天被更新:
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 | 判定为复杂任务的 Edit/Write 调用次数 |
| DISK_WARN_GB | 50 | 低于此值警告 |
| DISK_CRIT_GB | 15 | 低于此值拦截 |
示例
简单会话——允许:
edit_count=1 (< 3, 非复杂) → exit 0
复杂任务,已记录学习——允许:
edit_count=5 (复杂) → 检查 LIBS → growth-log 今天已更新 → exit 0
复杂任务,无学习记录——被拦截:
edit_count=4 (复杂) → 检查 LIBS → 全部 5 个过期 → exit 2
stderr: "Blocked: complex task completed but no learning captured today."
磁盘空间不足——被拦截:
disk_free=12GB < 15GB 临界 → exit 2
stderr: "Blocked: disk space at 12GB (threshold: 15GB)."
限制
该 hook 强制的是"触碰学习库"这一习惯,而非所记录内容的质量。如果 output-index.md 被更新但 growth-log 被跳过,hook 仍会通过(5 个库中触碰了 1 个)。这是有意设计:机械门禁检查机器可验证的事实。若需内容质量验证,请搭配 self-audit 使用。
兼容性
- Python 3.8+(使用 from future import annotations)
- 跨平台:Windows、macOS、Linux
- 除标准库外零依赖
质量说明
该代码经过 4 轮自动化代码审查(CodeRabbit + Greptile),发现并修复了 9 个真实 bug。
相关工具
- self-audit —— 推理质量门禁(完整性/一致性/有据性/诚实性)
- verification-loop —— 代码质量检查(build/type/lint/test)
- gateguard —— PreToolUse 安全门禁