有关 hooks 的参考文档,请参阅 Hooks 参考。
- 通知:自定义当 Claude Code 等待您的输入或运行某些内容的权限时如何获得通知。
- 自动格式化:在每次文件编辑后对 .ts 文件运行
prettier,对 .go 文件运行gofmt等。 - 日志记录:跟踪和计算所有执行的命令以进行合规性检查或调试。
- 反馈:当 Claude Code 生成不符合您代码库约定的代码时提供自动反馈。
- 自定义权限:阻止对生产文件或敏感目录的修改。
在添加 hooks 时,您必须考虑 hooks 的安全影响,因为 hooks 在代理循环期间使用您当前环境的凭据自动运行。
例如,恶意 hooks 代码可能会泄露您的数据。在注册 hooks 之前,请始终检查您的 hooks 实现。有关完整的安全最佳实践,请参阅 hooks 参考文档中的安全注意事项。
Hook 事件概述
Claude Code 提供了几个在工作流程不同点运行的 hook 事件:- PreToolUse:在工具调用之前运行(可以阻止它们)
- PostToolUse:在工具调用完成后运行
- UserPromptSubmit:当用户提交提示时运行,在 Claude 处理之前
- Notification:当 Claude Code 发送通知时运行
- Stop:当 Claude Code 完成响应时运行
- SubagentStop:当子代理任务完成时运行
- PreCompact:在 Claude Code 即将运行压缩操作之前运行
- SessionStart:当 Claude Code 开始新会话或恢复现有会话时运行
- SessionEnd:当 Claude Code 会话结束时运行
快速入门
在这个快速入门中,您将添加一个记录 Claude Code 运行的 shell 命令的 hook。先决条件
安装jq 用于命令行中的 JSON 处理。
步骤 1:打开 hooks 配置
运行/hooks 斜杠命令并选择 PreToolUse hook 事件。
PreToolUse hooks 在工具调用之前运行,可以阻止它们,同时向 Claude 提供关于如何做不同事情的反馈。
步骤 2:添加匹配器
选择+ Add new matcher… 以仅在 Bash 工具调用上运行您的 hook。
为匹配器输入 Bash。
您可以使用
* 来匹配所有工具。步骤 3:添加 hook
选择+ Add new hook… 并输入此命令:
步骤 4:保存您的配置
对于存储位置,选择User settings,因为您要记录到您的主目录。然后此 hook 将应用于所有项目,而不仅仅是您当前的项目。
然后按 Esc 直到返回到 REPL。您的 hook 现在已注册!
步骤 5:验证您的 hook
再次运行/hooks 或检查 ~/.claude/settings.json 以查看您的配置:
步骤 6:测试您的 hook
要求 Claude 运行一个简单的命令,如ls,并检查您的日志文件:
更多示例
有关完整的示例实现,请参阅我们公共代码库中的 bash 命令验证器示例。
代码格式化 Hook
编辑后自动格式化 TypeScript 文件:Markdown 格式化 Hook
自动修复 markdown 文件中缺失的语言标签和格式问题:.claude/hooks/markdown_formatter.py:
- 检测未标记代码块中的编程语言
- 为语法高亮添加适当的语言标签
- 修复过多的空行,同时保留代码内容
- 仅处理 markdown 文件(
.md、.mdx)