3.1 介绍Hooks
Hooks 允许你在 Claude 尝试调用某个工具的前后运行命令。它们非常适合实现自动化工作流,比如在文件编辑后运行代码格式化器、在文件变更时执行测试,或阻止访问特定文件。
一、Hooks 如何工作
先回顾与 Claude Code 的常规交互流程:当你向 Claude 提问时,请求会连同工具定义一起发送到 Claude 模型。Claude 可能通过特定格式的响应决定使用某个工具,随后 Claude Code 执行该工具并返回结果。
Hooks 会插入到这个流程中,使你能在工具执行“之前”或“之后”运行代码。

Hooks 有两种类型:
1.PreToolUse:在调用工具之前运行
2.PostToolUse:在调用工具之后运行
二、Hook 配置
Hooks 在 Claude 的设置文件中定义,你可以把它们添加到:
1.全局:~/.claude/settings.json(影响所有项目)
2.项目:.claude/settings.json(与团队共享)
3.项目(不提交):.claude/settings.local.json(个人设置)
你可以手动在这些文件里编写 hooks,或在 Claude Code 中使用 /hooks 命令。

配置结构包含两个主要部分。

三、PreToolUse(工具前)Hooks
PreToolUse 在工具执行前运行,并带有一个匹配器(matcher)来指定目标工具类型:
“PreToolUse”: [
{
“matcher”: “Read”,
“hooks”: [
{
“type”: “command”,
“command”: “node /home/hooks/read_hook.ts”
}
]
}
]
在执行 “Read” 工具之前,这段配置会运行指定命令。你的命令会接收 Claude 计划调用的工具细节,你可以:
1.允许操作正常进行
2.阻止该工具调用并向 Claude 返回错误信息
四、PostToolUse(工具后)Hooks
PostToolUse 在工具执行后运行。下面是写入、编辑或多重编辑后触发的示例:
“PostToolUse”: [
{
“matcher”: “Write|Edit|MultiEdit”,
“hooks”: [
{
“type”: “command”,
“command”: “node /home/hooks/edit_hook.ts”
}
]
}
]
由于工具调用已发生,PostToolUse 不能阻止操作,但可以:
1.执行后续步骤(如格式化刚编辑的文件)
2.为 Claude 提供关于此次工具使用的额外反馈

五、常见用法
1.代码格式化:在 Claude 编辑文件后自动格式化。
2.测试:当文件变更时自动运行测试。
3.访问控制:阻止 Claude 读取或编辑某些文件。
4.代码质量:运行 linter 或类型检查,并向 Claude 提供反馈。
5.日志记录:跟踪 Claude 访问或修改了哪些文件。
6.规范校验:检查命名约定或编码标准。
关键点是:Hooks 让你把自有工具与流程融入 Claude Code 的工作流中。PreToolUse 控制 Claude “能做什么”,PostToolUse 则增强 Claude “已经做的事”。