事件概览
完整事件类型定义见 Hooks Reference。
配置
在QueryOptions.hooks 中配置 hooks:
Matcher
matcher 字段为正则表达式,只有工具名称匹配时 hook 才会触发:
回调函数
每个 hook 回调接收事件输入、工具调用 ID 和 abort signal:输入
所有事件共享通用字段:hook_event_name(事件类型)、session_id(会话 ID)、transcript_path(记录文件路径)、cwd(工作目录)。每个事件还有专属字段,如 PreToolUse 的 tool_name 和 tool_input。
完整输入类型定义见 Hooks Reference。
输出
回调返回一个对象,通过以下字段控制行为:continue: false— 终止会话decision: "block"+reason— 阻止工具执行或阻止 AI 停止hookSpecificOutput— 事件专属输出,如修改工具输入(updatedInput)、覆盖工具输出(updatedToolOutput)、注入上下文(additionalContext)
示例
安全拦截(PreToolUse)
拦截危险的 shell 命令:脱敏敏感信息(PostToolUse)
覆盖工具输出,替换 AK/Token 等敏感信息:裁剪过长输出(PostToolUse)
截断超长的 Bash 输出,保留头尾:强制继续(Stop)
阻止 AI 在任务未完成时停止:自动批准权限(PermissionRequest)
自动放行 Read 工具的权限请求:完整权限模型请参见权限文档。
审计与安全控制(综合)
组合审计日志和安全拦截:注意事项
- Hook 回调应尽快返回,避免阻塞 AI 执行。
matcher使用 JavaScript 正则语法,匹配tool_name字段。continue: false可终止会话——仅对PreToolUse、PostToolUse、PostToolUseFailure、UserPromptSubmit、Stop、SubagentStop事件有效,观察类事件(如SessionEnd、CwdChanged)会忽略此字段。- 当多个 hook 返回冲突的
decision值时,"deny"/"block"优先(最严格的规则生效)。 - 当多个 hook 都设置了
updatedToolOutput时,最后一个非空值生效。如需链式执行多个转换(如先脱敏再裁剪),请在单个回调内按顺序执行。