Hooks 允许你在 Claude Code 生命周期的特定时间点运行命令。Hooks 与本课程涵盖的其他内容的关键区别在于 hooks 是 确定性的——它们总是会运行。
你可以在 CLAUDE.md 中告诉 Claude 在每次文件编辑后运行 Prettier。大多数时候它会这样做。但有时不会。Hook 确保每次都这样做,没有例外。
常见用例包括:
Hooks 在你的 settings.json 中配置。你选择一个事件,可选地设置匹配器来指定适用的工具,然后提供要运行的命令。一些最常见的事件:
这些只是你可以挂钩的事件中的一部分——Claude Code 支持更多。完整列表请参阅 hooks 参考。
你可以通过 Claude Code 内的 /hooks 命令或直接编辑 settings.json 来配置它们。
最常见的 hook:编辑后自动格式化。设置一个 PostToolUse hook,匹配器为 "Edit|MultiEdit|Write",这样它会在 Claude 修改文件时触发。命令检查文件扩展名并运行相应的格式化程序——TypeScript 用 Prettier,Go 用 gofmt,或你项目使用的任何工具。
PreToolUse hooks 可以在工具调用执行前 阻止它们。你的 hook 通过 stdin 接收工具名称和输入(JSON 格式)。退出码决定行为:
这就是你执行硬性规则的方式。阻止写入生产配置目录。阻止包含 rm -rf 的 bash 命令。阻止提交到 main 分支。无论你的团队需要 保证 什么,而不是建议。
在 .claude/settings.json 中配置的 hooks 是项目级的,可以提交到仓库中。这意味着你的整个团队会自动获得相同的 hooks。在命令中使用 环境变量来引用存储在项目中的脚本,这样无论 Claude 的当前工作目录是什么,它们都能正常工作。
登录 参与讨论
CLAUDE_PROJECT_DIRHooks 让你对 Claude Code 的行为进行确定性控制。使用 PostToolUse 进行自动格式化和日志记录。使用 PreToolUse 阻止危险操作。使用 /hooks 或在 settings.json 中配置它们。并将它们提交到仓库中,这样你的团队也能获得它们。
如果某件事需要每次都发生且不能失败,不要把它放在提示中。把它放在 hook 中。