Anthropic 官方课程第 12 课,3 分 21 秒。你可以在 CLAUDE.md 里告诉 Claude 每次改完文件都跑 Prettier——大多数时候它会做,有时不会。钩子保证这件事每次都发生,没有例外。

钩子(Hooks)让你在 Claude Code 生命周期的特定节点跑命令。它跟技能、子代理、MCP 有一个硬差别:钩子是确定性的,总会跑。

常见用法:编辑后自动格式化、把执行过的命令记下来做合规、拦住改生产文件这类危险操作、Claude 干完活给你发通知。

配置写在 settings.json 里:选事件、可选匹配器、再给一条命令。常见事件有 PreToolUse、PostToolUse、UserPromptSubmit、Stop、Notification。会话里敲 /hooks 也能配。

最常见的是编辑后自动格式化——PostToolUse 匹配 Edit 或 MultiEdit,Claude 一改文件就触发。看扩展名再调工具:TypeScript 用 Prettier,Go 用 gofmt,Python 用 Ruff。

PreToolUse 能在执行前拦住。退出码 0 继续,2 拦住并把 stderr 反馈给 Claude;其他退出码只报错不拦。这就是硬规则:拦住写生产配置、拦住带 rm -rf 的 bash、拦住往 main 提交——要保证的,不是建议的。

写在 .claude/settings.json 里的是项目级,进版本控制后整个团队自动拿到。命令里用 CLAUDE_PROJECT_DIR 引用项目脚本,不管 Claude 当时在哪个目录都能跑。

如果某件事必须每次都毫无例外地发生,不要把它放进提示里。把它放进钩子里。

视频来自 Anthropic 官方频道 @claude《Hooks in Claude Code》,Claude Code 101 第 12 课,中文字幕是我做的。