本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!
- 🚀 魔都架构师 | 全网30W技术追随者
- 🔧 大厂分布式系统/数据中台实战专家
- 🏆 主导交易系统百万级流量调优 & 车联网平台架构
- 🧠 AIGC应用开发先行者 | 区块链落地实践者
- 🌍 以技术驱动创新,我们的征途是改变世界!
- 👉 实战干货:编程严选网
0 前言
Claude Code 中的 Hooks 允许你在工具调用执行前或执行后进行拦截和控制,从而可以对 Claude 在开发环境中的行为进行精细化管理。
1 构建 Hook

创建一个 Hook 通常四步:
- 选择使用 PreToolUse 或 PostToolUse Hook —— PreToolUse 在工具执行前拦截并阻止调用,而 PostToolUse 在工具执行完成后运行
- 确定需要监听的工具类型 —— 你需明确指定哪些工具调用会触发该 Hook
- 编写接收工具调用信息的命令 —— 该命令会通过标准输入接收包含工具调用信息的 JSON 数据
- (如有需要)向 Claude 提供反馈 —— 通过命令的退出码来告知 Claude 是否允许此次操作
2 可用工具
Claude Code内置工具,你可通过 Hook 监控它们的使用情况。
Tool列表
| Tool Name | Purpose |
|---|---|
| Read | Read a file |
| Edit, MultiEdit | Edit an existing file |
| Write | Create a file and write to it |
| Bash | Execute a command |
| Glob | Find files/folders based upon a pattern |
| Grep | Search for content |
| Task | Create a sub-agent to complete a particular task |
| WebFetch, WebSearch | Search or fetch a particular page |
想看当前环境有哪些工具,直接询问 Claude 获取列表。特别是添加自定义 MCP 服务器后,这点尤为有用,因为可用工具可能变化。
$ List out the names of all the tools you haveaccess to, bullet point list.

3 工具调用的数据结构
当 Hook 命令被执行时,Claude 会通过标准输入发送一段 JSON 数据,其中包含此次工具调用的详细信息。
Tool Call Data,命令行中的标准输入:
{
"session_id": "2d6a1e4d-6...",
"transcript_path": "/Users/sg/...",
"hook_event_name": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "/code/queries/.env"
}
}
你的命令需要从标准输入读取这段 JSON,解析其中的信息,然后根据工具名称和输入参数判断是放行还是拦截此次操作。
4 退出码与控制流程
Hook 命令通过退出码向 Claude 反馈执行结果:
flowchart TD
A["Your command"] --> B["Exit Code 0<br>All is well!"]
A --> C["Exit Code 2<br>Tool blocked!<br>(PreToolUse only)"]
C --> D["Stderr logs sent to<br>Claude as feedback"]
style A fill:#e8d5a9,stroke:#333,strokeWidth:2
style B fill:#f0f0f0,stroke:#333,strokeWidth:1
style C fill:#f0f0f0,stroke:#333,strokeWidth:1
style D fill:#fafafa,stroke:#333,strokeWidth:1
- 退出码 0 —— 表示一切正常,允许工具调用继续执行
- 退出码 2 —— 表示阻止该工具调用(仅适用于 PreToolUse Hook)
在 PreToolUse Hook 中以退出码 2 结束时,你写入标准错误输出的任何信息都会被发送给 Claude,用于说明为啥该操作被阻止。
5 示例用法
一个常见的应用场景是阻止 Claude 读取敏感文件,如 .env 文件。由于 Read 和 Grep 工具都可访问文件内容,你需同时监听这两类工具,并检查它们是否尝试访问受限制的文件路径。
就可全面掌控 Claude 对文件系统的访问,同时也能为被限制的操作提供清晰的反馈说明。本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!
- 🚀 魔都架构师 | 全网30W技术追随者
- 🔧 大厂分布式系统/数据中台实战专家
- 🏆 主导交易系统百万级流量调优 & 车联网平台架构
- 🧠 AIGC应用开发先行者 | 区块链落地实践者
- 🌍 以技术驱动创新,我们的征途是改变世界!
- 👉 实战干货:编程严选网
0 前言
Claude Code 中的 Hooks 允许你在工具调用执行前或执行后进行拦截和控制,从而可以对 Claude 在开发环境中的行为进行精细化管理。
1 构建 Hook

创建一个 Hook 通常四步:
- 选择使用 PreToolUse 或 PostToolUse Hook —— PreToolUse 在工具执行前拦截并阻止调用,而 PostToolUse 在工具执行完成后运行
- 确定需要监听的工具类型 —— 你需明确指定哪些工具调用会触发该 Hook
- 编写接收工具调用信息的命令 —— 该命令会通过标准输入接收包含工具调用信息的 JSON 数据
- (如有需要)向 Claude 提供反馈 —— 通过命令的退出码来告知 Claude 是否允许此次操作
2 可用工具
Claude Code内置工具,你可通过 Hook 监控它们的使用情况。
Tool列表
| Tool Name | Purpose |
|---|---|
| Read | Read a file |
| Edit, MultiEdit | Edit an existing file |
| Write | Create a file and write to it |
| Bash | Execute a command |
| Glob | Find files/folders based upon a pattern |
| Grep | Search for content |
| Task | Create a sub-agent to complete a particular task |
| WebFetch, WebSearch | Search or fetch a particular page |
想看当前环境有哪些工具,直接询问 Claude 获取列表。特别是添加自定义 MCP 服务器后,这点尤为有用,因为可用工具可能变化。
$ List out the names of all the tools you haveaccess to, bullet point list.

3 工具调用的数据结构
当 Hook 命令被执行时,Claude 会通过标准输入发送一段 JSON 数据,其中包含此次工具调用的详细信息。
Tool Call Data,命令行中的标准输入:
{
"session_id": "2d6a1e4d-6...",
"transcript_path": "/Users/sg/...",
"hook_event_name": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "/code/queries/.env"
}
}
你的命令需要从标准输入读取这段 JSON,解析其中的信息,然后根据工具名称和输入参数判断是放行还是拦截此次操作。
4 退出码与控制流程
Hook 命令通过退出码向 Claude 反馈执行结果:
flowchart TD
A["Your command"] --> B["Exit Code 0<br>All is well!"]
A --> C["Exit Code 2<br>Tool blocked!<br>(PreToolUse only)"]
C --> D["Stderr logs sent to<br>Claude as feedback"]
style A fill:#e8d5a9,stroke:#333,strokeWidth:2
style B fill:#f0f0f0,stroke:#333,strokeWidth:1
style C fill:#f0f0f0,stroke:#333,strokeWidth:1
style D fill:#fafafa,stroke:#333,strokeWidth:1
- 退出码 0 —— 表示一切正常,允许工具调用继续执行
- 退出码 2 —— 表示阻止该工具调用(仅适用于 PreToolUse Hook)
在 PreToolUse Hook 中以退出码 2 结束时,你写入标准错误输出的任何信息都会被发送给 Claude,用于说明为啥该操作被阻止。
5 示例用法
一个常见的应用场景是阻止 Claude 读取敏感文件,如 .env 文件。由于 Read 和 Grep 工具都可访问文件内容,你需同时监听这两类工具,并检查它们是否尝试访问受限制的文件路径。
就可全面掌控 Claude 对文件系统的访问,同时也能为被限制的操作提供清晰的反馈说明。