Hook 是挂在 Claude Code 某个事件上的脚本:事件一发生就必然执行,不经过 AI 的判断,也就不会被 AI”忘掉”。

一个具体例子

你跟员工说:“每次下班记得锁门。“他十次有一次忘。

你在 prompt 或 CLAUDE.md 里跟 Claude 说:“每次改完代码记得跑格式化。“它大部分时候照办——但上下文一长、任务一杂,它也会忘。

于是你装一个门禁:在配置里挂一个 PostToolUse hook,规则是”每当 Claude 编辑完文件,自动运行格式化命令”。从此这件事和 Claude 的记性无关了——门自己锁。

它是什么 / 不是什么

:配置在 .claude/settings.json 里的”事件 → 脚本”映射。Claude Code 暴露了 27 种事件:工具调用前(PreToolUse,可以拦截甚至阻止)、工具调用后、会话开始、任务完成、上下文压缩前……每种事件发生时,对应脚本自动运行。常见用法:危险命令拦截、自动格式化、完成时播提示音、强制检查清单。

不是写给 AI 看的指令。这是 hook 和其他所有机制的本质区别:CommandSkill、CLAUDE.md 里写的规矩,都要经过 AI 的”脑子”,AI 可能理解偏、可能忘;hook 跑在 AI 的循环外面,是确定性的代码。一句话:prompt 是恳求,hook 是法律。

为什么这个概念存在

因为有些事不能靠概率。AI 99% 的时候会遵守你的规矩,但”不要把密钥提交到 git”这种事,1% 的失误就是事故。凡是”必须 100% 发生/100% 不发生”的规矩,都不该写在 prompt 里,该写成 hook。

没有它会怎样:你的所有安全线和质量线都建立在”AI 今天记性好”上。

相关概念

Subagent 的启动和结束也是 hook 事件,且 subagent 可以在定义里挂自己的 hook;判断一条规矩该放哪:偶尔参考 → CLAUDE.md(Memory),按需调用 → Skill,必然执行 → Hook。