Skip to main content

Hooks 事件参考

更新 2026-07-13 3 分钟阅读 在 GitHub 上编辑 ↗

Claude Code 的 Hook 系统支持 29 种事件类型5 种 Hook 类型按事件的匹配器 以及 智能行为。Hook 是智能体 Harness 中唯一保证"一定会执行"的确定性 (deterministic) 控制点 — 提示词可能被忽略,但 Hook 不会。

Hook 的基本概念与配置方法请参阅 Hooks 指南。本页是完整的事件参考。

Hook 类型

可用的 Hook 类型有五种。

类型说明示例
command执行 Shell 脚本".claude/hooks/moai/handle-session-start.sh"
promptLLM 评估由 LLM 执行提示词文本并返回结果
agent子智能体校验由智能体校验工作并返回结果
httpWebhook 端点通过 HTTP POST 请求传递事件
mcp_tool执行 MCP 工具远程调用 MCP 服务器工具

完整事件参考(29 个)

生命周期事件

事件说明匹配器
SessionStart会话开始
SessionEnd会话结束
PostSession会话结束后执行(self-hosted runner 生命周期事件,CC 2.1.169+)。在会话完全释放后、晚于 SessionEnd 触发。MoAI-ADK 目前未接线此 Hook。此处将其记录为需要会话后清理/遥测的 self-hosted 部署的可用选项。
Stop智能体停止
SubagentStop子智能体停止
SubagentStart子智能体启动
StopFailure停止失败errorType
Setup初始设置

工具事件

事件说明匹配器
PreToolUse工具执行前toolName
PostToolUse工具执行后toolName
PostToolUseFailure工具执行失败toolName, errorType
PostToolBatch并行工具批次执行后 (v2.1.89+)

上下文事件

事件说明匹配器
PreCompact上下文压缩前
PostCompact上下文压缩后
InstructionsLoaded指令加载完成

输入事件

事件说明匹配器
UserPromptSubmit用户提交提示词
UserPromptExpansion斜杠命令提示词展开 (v2.1.90+)
ElicitationElicitation 开始
ElicitationResultElicitation 完成

安全事件

事件说明匹配器
PermissionRequest权限请求toolName
PermissionDenied权限被拒toolName

团队事件

事件说明匹配器
TeammateIdle团队成员转入空闲
TaskCompleted任务标记完成
TaskCreated任务创建

Worktree 事件

事件说明匹配器
WorktreeCreate创建 worktree
WorktreeRemove删除 worktree

环境事件

事件说明匹配器
ConfigChange配置变更configSource
CwdChanged工作目录变更
FileChanged文件变更

UI 事件

事件说明匹配器
Notification用户通知

智能行为 (Smart Behaviors)

MoAI-ADK 的 Hook 超越简单的事件处理,执行智能化的行为。

PermissionDenied 自动重试

当只读工具(Read、Grep、Glob)的权限被拒时,Hook 会自动触发重试。这缓解了后台智能体中权限提示不显示的问题。

StopFailure 错误类型响应

智能体停止失败时,按错误类型提供差异化响应。保障长时间运行会话的稳定性。

PostCompact 会话备忘恢复

上下文压缩后自动恢复重要的会话备忘(进度状态、SPEC 引用)。上下文压缩是一笔用信息换代币的交易,而这个 Hook 在损失中守住了核心信息。

SubagentStart 上下文注入

子智能体启动时自动注入所需上下文(项目规则、MX 标签、进度状态)。

匹配器 (Matchers)

使用匹配器可以过滤 Hook,使其只在特定条件下执行。给所有事件都挂 Hook 会相应增加执行成本,因此用匹配器收窄范围是基本做法。

json
{
  "hooks": {
    "PreToolUse": [{
      "matcher": { "toolName": "Bash" },
      "hooks": [{
        "type": "command",
        "command": "echo 'Bash tool detected'",
        "timeout": 5
      }]
    }]
  }
}

可用的匹配器字段

匹配器字段适用事件说明
toolNamePreToolUse, PostToolUse, PostToolUseFailure, PermissionRequest, PermissionDenied按工具名过滤
errorTypeStopFailure, PostToolUseFailure按错误类型过滤
configSourceConfigChange按配置来源过滤

CLAUDE_ENV_FILE

通过 CwdChangedFileChanged Hook 可以持续管理环境变量。

bash
# .claude/hooks/moai/handle-cwd-changed.sh
# 通过 CLAUDE_ENV_FILE 持久化环境变量
echo "MOAI_PROJECT_DIR=$(pwd)" >> "$CLAUDE_ENV_FILE"

由此可以在会话之间保持环境变量,并在目录变更时自动重置环境。

MoAI-ADK 使用的主要 Hook

事件MoAI 处理器角色
SessionStarthandle-session-start.sh初始化 Statusline、开始指标会话
PostToolUsehandle-post-tool.sh记录 Task 指标
TeammateIdlehandle-teammate-idle.shLSP 质量门禁校验
TaskCompletedhandle-task-completed.sh确认 SPEC 文档存在
WorktreeCreate(无 — MoAI 默认不注册)使用 Claude Code 默认 worktree 行为(供 isolation: worktree 智能体使用)。若注册,则须履行 active creator 契约(创建目录 + 向 stdout 回显路径)。
WorktreeRemove(无 — MoAI 默认不注册)使用 Claude Code 默认 worktree 清理行为。若注册,则为 observer-only 契约(无需输出)。
UserPromptSubmithandle-user-prompt.sh自动执行质量门禁

下一步