Claude Code Hooks 实战:自动验证而不是自动乱改
Claude Code Hooks 很容易被误用。很多人一听到 hook,就想让它在每次改文件后自动修复、自动提交、自动部署。这样做不是自动化,而是在放大风险。
更稳的做法是:让 hooks 自动收集验证证据,而不是自动替你做高风险决策。
Hooks 应该放在工作流的哪里
Claude Code 的核心流程可以拆成:
1 | 读项目 → 出方案 → 改文件 → 运行验证 → 解释结果 → 人工确认 |
Hooks 适合插在“改文件”和“运行验证”之间,用来自动触发低风险检查。
| 阶段 | 适合 hook 吗 | 原因 |
|---|---|---|
| 读取项目 | 不太需要 | 普通上下文读取即可 |
| 写文件后 | 适合 | 可以自动跑格式/测试/扫描 |
| 测试失败后 | 谨慎 | 可以报告,不应无限自动修 |
| commit 前 | 适合 | 检查 secret、lint、测试 |
| push / deploy | 不建议自动化 | 外部可见动作必须人工确认 |
安全的 Hooks 用法
安全 hook 的共同点是:只读、可重复、失败可解释。
适合:
- 格式检查;
- 单元测试;
- 类型检查;
- secret 扫描;
- 生成验证摘要;
- 检查是否改了禁止目录;
- 提醒用户运行构建。
不适合:
- 自动改业务逻辑;
- 自动覆盖用户未提交文件;
- 自动 commit / push;
- 自动发布;
- 自动修改数据库;
- 自动调用外部平台。
示例一:文件修改后提醒验证
一个保守 hook 可以不自动修,只输出下一步验证建议。
1 | { |
这看起来简单,但比自动乱跑修复安全得多。
示例二:commit 前检查敏感信息
如果项目里容易出现 API Key、token、密码,可以把 secret 检查放到提交前。
1 | { |
注意:这只是示意。真实项目最好用成熟 secret scanner,而不是只靠 grep。
示例三:内容站改文后提醒构建
PromptNet 这类 Hexo 站,内容改动后不能只看 Markdown。要看构建产物。
Hook 可以提醒:
1 | 文章已修改,请运行 npm run build,并检查目标 URL、meta description、canonical 和内链。 |
不要让 hook 自动提交 URL,也不要自动推送 IndexNow。外部可见动作必须人工确认。
Hook 配置检查表
- 是否只做低风险检查?
- 是否会修改文件?如果会,是否真的必要?
- 是否可能覆盖用户未提交内容?
- 失败时是否有清晰输出?
- 是否会触发外部服务?
- 是否有无限循环风险?
- 是否需要人工确认?
如果一个 hook 失败后又触发 Claude 自动改文件,再次失败又继续改,这就是危险循环。
常见错误
错误一:把 hook 当自动修复器
自动修复可以用于格式化,但不适合业务逻辑。业务逻辑需要计划、测试和 review。
错误二:把部署放进 hook
部署、push、邮件、表单提交、站长平台提交都属于外部可见动作。不能自动跑。
错误三:没有区分项目类型
前端、后端、CLI、内容站的验证命令不同。一个全局 hook 不能适合所有项目。
和验证清单配合
Hooks 只能提醒或自动执行一部分验证。最终仍要回到 Claude Code 验证清单:真实入口、命令输出、构建产物、diff 范围都要看。
如果你还没有完整流程,可以先看 Claude Code 实战工作流 和 Claude Code Git 工作流。
FAQ
Hooks 能不能自动运行测试?
可以,但要控制范围。小测试、格式检查、类型检查适合;耗时长或依赖外部服务的测试不一定适合自动触发。
Hooks 能不能自动修代码?
只建议用于格式化或明确无歧义的机械修复。业务代码不要自动改。
Hooks 会不会让 Claude Code 更安全?
它能增加验证和提醒,但安全边界仍然要靠权限、人工确认、Git diff 和 review。
总结
Claude Code Hooks 的正确用法不是“让 AI 自动做更多事”,而是“让验证更稳定地发生”。把 hooks 用在测试、扫描、提醒和证据收集上,把业务判断、提交、部署和外部操作留给人确认,这才是可控的 AI 编程自动化。