用途:该技能帮助为 Claude Code 创建事件钩子(hooks)。钩子是用户定义的 shell 命令、LLM 提示或智能体评估,在特定生命周期节点自动执行,通过 stdin 接收 JSON 上下文,并以退出码、stdout、stderr 返回结果。
主要能力:支持多种事件与匹配器,包括 PreToolUse(拦截、自动批准、修改工具输入)、PostToolUse(如 Write|Edit 后运行格式化)、PostToolUseFailure(记录工具失败)、PermissionRequest(处理权限)、UserPromptSubmit(校验提示,退出码 2 拦截,stdout 添加上下文)、Notification(桌面通知)、Stop 与 SubagentStop(强制继续或子智能体生命周期)、SessionStart(写入 CLAUDE_ENV_FILE 持久化环境变量)、SessionEnd(会话清理,不可拦截终止)、PreCompact(上下文压缩前触发)。命令钩子可设 async: true 后台运行;支持 type: "prompt" 单轮 LLM 检查与 type: "agent" 多轮带工具验证。
使用方式:在配置中定义钩子,按事件选择匹配器。拦截工具调用用退出码 2 或 JSON permissionDecision: "deny";自动批准用 permissionDecision: "allow";修改输入用 updatedInput。PreToolUse 需用 hookSpecificOutput.permissionDecision 与 permissionDecisionReason,而非顶层 decision/reason。复杂脚本应抽到文件并用 "$CLAUDE_PROJECT_DIR" 引用。注意 JSON 仅在退出码 0 时处理,退出码 2 时使用 stderr。
适用场景:拦截危险命令、写入后自动格式化、保护敏感文件、自定义通知、环境初始化、强制项目规范、自动批准安全工具、变更后运行测试。
限制:不适用于静态上下文注入(用 CLAUDE.md)、简单权限规则(用 allowlist 设置)或一次性设置(直接用 shell 脚本)。Stop 与 UserPromptSubmit 忽略匹配器;CLAUDE_ENV_FILE 仅在 SessionStart 可用;需为慢钩子设置 timeout(默认命令 600s、prompt 30s、agent 60s);Stop 钩子需检查 stop_hook_active 防止无限循环;每个钩子应统一使用退出码或 JSON 决策之一。
其他:可通过 Explore 智能体发现现有钩子,用 Task 智能体验证行为,交由 code-reviewer 审查脚本。参考资料涵盖事件类型、匹配器、输入模式、配置、退出码、JSON 输出、环境变量及常见自动化模板。