用途
create-hooks 是一个指导用户创建 Claude Code hooks 的技能。Claude Code hooks 是用户自定义的 shell 命令,在 Claude Code 生命周期的特定时间点执行,为行为提供确定性的控制,而不依赖 LLM 的决策。当用户想要创建 hook、自动化工作流、添加事件处理器、自动格式化代码、保护文件、记录操作日志,或提到创建/配置/构建 hook 时,可使用本技能。
创建流程
创建新 hook 时遵循以下工作流:
- 识别事件——哪个生命周期事件应触发 hook?
- 定义动作——应执行什么 shell 命令?
- 配置 matcher——哪些工具应触发(特定工具或
*表示全部)? - 测试命令——验证 shell 命令能独立工作。
- 添加到 settings.json——在
~/.claude/settings.json中注册 hook。 - 在 Claude Code 中测试——验证 hook 正确执行。
- 审查安全性——确保无凭据泄露或恶意行为。
九种 Hook 事件
- PreToolUse:工具调用执行前触发,可拦截(退出码 2)。用于文件保护、校验、日志、权限检查。
- PostToolUse:工具调用完成后触发,不可拦截。用于代码格式化、lint、测试、通知、清理。
- UserPromptSubmit:用户提交提示、处理前触发,可拦截。用于输入校验、提示日志、预处理、安全检查。
- Notification:Claude Code 发送通知时触发,不可拦截。用于自定义通知系统、过滤、聚合、状态面板。
- Stop:Claude Code 完成响应时触发,不可拦截。用于会话日志、指标收集、清理、状态更新。
- SubagentStop:子代理任务完成时触发,不可拦截。用于子代理结果日志、多代理工作流跟踪、性能指标、编排协调。
- PreCompact:压缩操作前触发,可拦截。用于备份、校验、状态保存、历史归档。
- SessionStart:会话启动或恢复时触发,不可拦截。用于环境设置、项目初始化、日志、资源分配。
- SessionEnd:会话终止时触发,不可拦截。用于清理、会话摘要日志、资源释放、统计报告。
配置格式
Hooks 在 ~/.claude/settings.json 中配置:
{
"hooks": {
"EventName": [
{
"matcher": "ToolName or *",
"hooks": [
{
"type": "command",
"command": "shell_command_here"
}
]
}
]
}
}
- EventName:九种 hook 事件之一。
- matcher:特定工具名(如
Edit、Bash、Write),或*表示全部;区分大小写,必须与工具名完全匹配。 - type:shell hook 固定为
"command"。 - command:要执行的 shell 命令(Unix 下为 bash,Windows 下为 cmd)。
输入数据结构
命令通过 stdin 接收 JSON 输入。通用字段包括 description、tool_name、tool_input。不同工具有不同的 tool_input,例如 Edit 含 file_path/old_string/new_string,Bash 含 command,Write 含 file_path/content。可使用 jq 解析,例如 jq -r '.tool_input.file_path'。
退出码与拦截
- 退出码 0:成功。PreToolUse 允许继续执行。
- 退出码 2:拦截执行(仅 PreToolUse),并向 Claude 发送反馈。用于文件保护、校验失败。
- 其他退出码:视为错误但不拦截。
示例
资料提供了多个完整示例,包括:自动格式化 JavaScript/TypeScript(PostToolUse + Prettier)、记录所有 Bash 命令(PreToolUse 追加日志)、保护敏感文件(PreToolUse,匹配 .env.production、secrets.json 并以退出码 2 拦截)、桌面通知(Notification + macOS osascript)、代码变更后运行测试、编辑后 git 自动提交、修改前备份、多语言格式化(black/gofmt/rustfmt/google-java-format)、会话日志(SessionStart/SessionEnd),以及使用 Python 脚本处理复杂逻辑。
安全注意事项
资料给出关键警告:hooks 会在代理循环中自动运行,并携带当前环境的凭据,恶意 hook 可能泄露敏感数据、未经同意修改文件、执行任意命令、泄露凭据或 API 密钥。
安全最佳实践包括:添加前审查所有 hook;除非绝对必要,避免网络调用;处理文件路径或命令前校验输入;使用退出码 2 拦截不安全操作;记录 hook 执行以便审计;限制 hook 脚本权限(chmod 700);绝不在 hook 命令中提交凭据;集成前独立测试;文件保护使用允许列表而非阻止列表;定期监控 hook 行为。
资料同时列出应避免的危险模式(如向外部服务发送数据、eval 文件内容、无校验删除文件、在命令中暴露凭据)与安全模式(校验、允许列表、本地日志轮转、退出码 2 拦截)。
测试与调试
测试方法包括:独立测试 shell 命令、使用模拟数据、验证退出码、在 Claude Code 中测试(添加 hook、重启、触发事件、检查日志、验证行为)。
调试部分列出常见问题(hook 未执行、意外拦截、静默失败)及对应排查方向,并给出调试技巧,如添加详细日志、捕获错误(stderr 重定向)、导出 hook 数据等。
高级模式
包括条件多步骤 hook、事件挂载多个 hook(hook 链)、以及基于时间等条件的动态 hook 行为。
限制
资料未提供该技能的具体安装命令、版本信息、是否收费或价格、以及支持平台的完整清单,这些事实暂未提供。