定义 Hooks
Hooks 让你在工具调用前后拦截并控制 Claude 的行为,从而对开发环境拥有更细粒度的掌控。
构建一个 Hook 的步骤
Section titled “构建一个 Hook 的步骤”
- 选择 PreToolUse 或 PostToolUse:前者可阻止工具执行,后者只能在执行后处理
- 确定要监控的工具类型:明确哪些工具触发 Hook
- 编写接收工具调用的命令:通过标准输入获取 JSON 数据
- 必要时向 Claude 反馈:用退出码控制允许/阻止

可用工具会随着 MCP 服务器变化,因此可直接让 Claude 列出当前工具列表以确认。
工具调用的数据结构
Section titled “工具调用的数据结构”
{ "session_id": "2d6a1e4d-6...", "transcript_path": "/Users/sg/...", "hook_event_name": "PreToolUse", "tool_name": "Read", "tool_input": { "file_path": "/code/queries/.env" }}Hook 命令读取该 JSON,并决定是否允许当前工具调用。
退出码与控制逻辑
Section titled “退出码与控制逻辑”
- 退出码 0:允许工具正常执行
- 退出码 2:阻止工具执行(仅 PreToolUse 有效)
如果你在 PreToolUse 中返回 2,写到标准错误的内容会被 Claude 当作反馈信息。
最常见的用途是阻止 Claude 读取敏感文件,例如 .env。因为 Read 和 Grep 都可能访问文件内容,你需要同时监控这两个工具,并检测是否指向敏感路径。
这样既能保护文件系统,又能清晰告诉 Claude 为什么被拦截。