Skip to main content
Hooks 允许你在 AI 会话的关键生命周期节点注入自定义逻辑,支持审计日志、安全控制、上下文注入和动态行为修改。

事件概览

完整事件类型定义见 Hooks Reference

配置

QueryOptions.hooks 中配置 hooks:

Matcher

matcher 字段为正则表达式,只有工具名称匹配时 hook 才会触发:

回调函数

每个 hook 回调接收事件输入、工具调用 ID 和 abort signal:

输入

所有事件共享通用字段:hook_event_name(事件类型)、session_id(会话 ID)、transcript_path(记录文件路径)、cwd(工作目录)。每个事件还有专属字段,如 PreToolUsetool_nametool_input 完整输入类型定义见 Hooks Reference

输出

回调返回一个对象,通过以下字段控制行为:
  • continue: false — 终止会话
  • decision: "block" + reason — 阻止工具执行或阻止 AI 停止
  • hookSpecificOutput — 事件专属输出,如修改工具输入(updatedInput)、覆盖工具输出(updatedToolOutput)、注入上下文(additionalContext
完整输出类型定义见 Hooks Reference

示例

安全拦截(PreToolUse)

拦截危险的 shell 命令:

脱敏敏感信息(PostToolUse)

覆盖工具输出,替换 AK/Token 等敏感信息:

裁剪过长输出(PostToolUse)

截断超长的 Bash 输出,保留头尾:

强制继续(Stop)

阻止 AI 在任务未完成时停止:

自动批准权限(PermissionRequest)

自动放行 Read 工具的权限请求:
完整权限模型请参见权限文档

审计与安全控制(综合)

组合审计日志和安全拦截:

注意事项

  • Hook 回调应尽快返回,避免阻塞 AI 执行。
  • matcher 使用 JavaScript 正则语法,匹配 tool_name 字段。
  • continue: false 可终止会话——仅对 PreToolUsePostToolUsePostToolUseFailureUserPromptSubmitStopSubagentStop 事件有效,观察类事件(如 SessionEndCwdChanged)会忽略此字段。
  • 当多个 hook 返回冲突的 decision 值时,"deny" / "block" 优先(最严格的规则生效)。
  • 当多个 hook 都设置了 updatedToolOutput 时,最后一个非空值生效。如需链式执行多个转换(如先脱敏再裁剪),请在单个回调内按顺序执行。