钩子介绍
钩子允许你在 Claude 尝试运行工具之前或之后运行命令。它们对于实现自动化工作流程非常有用,比如在文件编辑后运行代码格式化程序、文件更改时执行测试,或阻止访问特定文件。
钩子的工作原理
为了理解钩子,让我们首先回顾一下当你与 Claude Code 交互时的正常流程。当你向 Claude 询问某事时,你的查询会与工具定义一起发送给 Claude 模型。Claude 可能会通过提供格式化的响应来决定使用某个工具,然后 Claude Code 执行该工具并返回结果。
钩子会插入到这个过程中,允许你在工具执行之前或之后执行代码。
有两种类型的钩子:
-
• PreToolUse 钩子- 在调用工具之前运行 -
• PostToolUse 钩子- 在调用工具之后运行
钩子配置
钩子在 Claude 设置文件中定义。你可以将它们添加到:
-
• 全局- ~/.claude/settings.json(影响所有项目) -
• 项目- .claude/settings.json(与团队共享) -
• 项目(未提交)- .claude/settings.local.json(个人设置)
你可以在这些文件中手动编写钩子,或者在 Claude Code 内使用 /hooks命令。
配置结构包括两个主要部分:
PreToolUse 钩子
PreToolUse 钩子在工具执行之前运行。它们包含一个匹配器,用于指定要目标的工具类型:
"PreToolUse": [
{
"matcher": "Read",
"hooks": [
{
"type": "command",
"command": "node /home/hooks/read_hook.ts"
}
]
}
]
在执行 'Read' 工具之前,此配置会运行指定的命令。你的命令会接收有关 Claude 想要进行的工具调用的详细信息,你可以:
-
• 允许操作正常进行 -
• 阻止工具调用并向 Claude 发送错误消息
PostToolUse 钩子
PostToolUse 钩子在工具执行后运行。以下是一个在写入、编辑或多重编辑操作后触发的示例:
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "node /home/hooks/edit_hook.ts"
}
]
}
]
由于工具调用已经发生,PostToolUse 钩子无法阻止操作。但是,它们可以:
-
• 运行后续操作(比如格式化刚编辑的文件) -
• 向 Claude 提供有关工具使用的额外反馈
实际应用
以下是使用钩子的一些常见方式:
-
• 代码格式化- Claude 编辑文件后自动格式化 -
• 测试- 文件更改时自动运行测试 -
• 访问控制- 阻止 Claude 读取或编辑特定文件 -
• 代码质量- 运行代码检查器或类型检查器并向 Claude 提供反馈 -
• 日志记录- 跟踪 Claude 访问或修改的文件 -
• 验证- 检查命名约定或编码标准
关键洞察是钩子让你通过将自己的工具和流程集成到工作流程中来扩展 Claude Code 的功能。PreToolUse 钩子让你控制 Claude 能做什么,而 PostToolUse 钩子让你增强 Claude 已经完成的工作。

