Claude Code Hooks 很容易被误用。很多人一听到 hook,就想让它在每次改文件后自动修复、自动提交、自动部署。这样做不是自动化,而是在放大风险。

更稳的做法是:让 hooks 自动收集验证证据,而不是自动替你做高风险决策

Hooks 应该放在工作流的哪里

Claude Code 的核心流程可以拆成:

1
读项目 → 出方案 → 改文件 → 运行验证 → 解释结果 → 人工确认

Hooks 适合插在“改文件”和“运行验证”之间,用来自动触发低风险检查。

阶段适合 hook 吗原因
读取项目不太需要普通上下文读取即可
写文件后适合可以自动跑格式/测试/扫描
测试失败后谨慎可以报告,不应无限自动修
commit 前适合检查 secret、lint、测试
push / deploy不建议自动化外部可见动作必须人工确认

安全的 Hooks 用法

安全 hook 的共同点是:只读、可重复、失败可解释。

适合:

  • 格式检查;
  • 单元测试;
  • 类型检查;
  • secret 扫描;
  • 生成验证摘要;
  • 检查是否改了禁止目录;
  • 提醒用户运行构建。

不适合:

  • 自动改业务逻辑;
  • 自动覆盖用户未提交文件;
  • 自动 commit / push;
  • 自动发布;
  • 自动修改数据库;
  • 自动调用外部平台。

示例一:文件修改后提醒验证

一个保守 hook 可以不自动修,只输出下一步验证建议。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "echo 'Files changed. Review diff and run the relevant test/build command before saying done.'"
}
]
}
]
}
}

这看起来简单,但比自动乱跑修复安全得多。

示例二:commit 前检查敏感信息

如果项目里容易出现 API Key、token、密码,可以把 secret 检查放到提交前。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash(git commit:*)",
"hooks": [
{
"type": "command",
"command": "git diff --cached | grep -Ei 'api[_-]?key|secret|password|token' && exit 1 || exit 0"
}
]
}
]
}
}

注意:这只是示意。真实项目最好用成熟 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 编程自动化。