tool_name 匹配的正则表达式) 来筛选会触发你的钩子的工具调用。
除了下方特定于事件的字段外,每个 stdin payload 都包含一个稳定的、按会话区分的 session_id,以及一个按轮次区分的 prompt_id (每次用户提示时都会更新;对于在第一次用户提示之前触发的事件,例如 SessionStart,则不存在) ——参见 Command 钩子。
PreToolUse
在工具执行前触发。可用于阻止、修改工具调用,或为其添加上下文。 Stdin 数据:
示例 — 阻止危险命令:
src/ 之外的写入操作进行确认:
使用一个脚本来检查工具输入并返回决策:
hookSpecificOutput.updatedInput 打印到 stdout,透明地重写工具输入 (请参阅输出格式) 。例如,一个将 shell 命令通过包装器转发的钩子脚本:
PostToolUse
在工具执行后触发。可用于记录日志、验证,或触发后续操作。 Stdin 数据:
示例——记录所有 shell 命令:
PermissionRequest
当 Agent 需要进行权限判定时触发。可用它来实现自定义审批逻辑。 Stdin 数据:
示例 — 自动批准 git 命令:
UserPromptSubmit
当用户提交消息时触发。可用于添加上下文或触发工作流程。 Stdin 数据:
示例 — 在每个提示中注入上下文:
additionalContext 输出到 stdout 中的 hookSpecificOutput 对象内,并附带事件名称标签。该文本会被注入到 Agent 的上下文中:
Stop
当 Agent 决定停止 (结束当前回合) 时触发。可用它来添加后续指示,或防止过早停止。 Stdin 数据:
示例 — 提醒 Agent 执行测试:
PostCompaction
在上下文压缩成功完成后触发。可用于记录日志、触发后续操作,或重新注入在压缩过程中可能丢失的上下文。 Stdin 数据:
示例 — 记录压缩事件:
SessionStart
当新会话开始时触发。可用于初始化、日志记录或环境准备。 Stdin 数据:
示例 — 运行初始化脚本:
hookSpecificOutput 对象中向 stdout 输出 additionalContext 来注入上下文:
SessionEnd
在会话结束时触发。可用于清理或记录最终日志。 Stdin 数据:匹配多个事件
一个 hooks 文件可以为多个事件定义钩子:使用 matcher
matcher 字段是一个正则表达式,用于匹配钩子事件的 tool_name。它适用于与工具相关的事件:PreToolUse、PostToolUse 和 PermissionRequest。
对于非工具事件 (UserPromptSubmit、Stop、PostCompaction、SessionStart 和 SessionEnd) ,不存在 tool_name;请使用 "" 或省略 matcher,以便钩子在该类型的每个事件上运行。
matcher 不是权限 glob。像
mcp__github__* 这样的模式可用于权限,但钩子的 matcher 使用的是正则表达式。在钩子 matcher 中,请使用 mcp__github__.*。你可以匹配的工具名称
钩子匹配器匹配的是钩子脚本通过 stdin 中的tool_name 接收到的、同样对外可见的工具名称。具体有哪些可用工具名称,可能因 CLI 模式、模型以及启用的集成而有所不同。
按类别划分的核心工具名称:
MCP 服务器工具的名称格式为
mcp__<server>__<tool>。例如,github MCP 服务器中名为 create_issue 的工具会显示为 mcp__github__create_issue。
对于其他工具,请匹配钩子 stdin 中显示的确切 tool_name。要确认当前会话中完整的可用工具集,请添加一个临时的 PostToolUse 钩子,将 matcher 设为 "",并记录 stdin payload。
