SuperAPI AI 工具集

create-hooks

编程与开发

查看项目

更新于 10-16 10:38

技能介绍

用途

create-hooks 是一个指导用户创建 Claude Code hooks 的技能。Claude Code hooks 是用户自定义的 shell 命令,在 Claude Code 生命周期的特定时间点执行,为行为提供确定性的控制,而不依赖 LLM 的决策。当用户想要创建 hook、自动化工作流、添加事件处理器、自动格式化代码、保护文件、记录操作日志,或提到创建/配置/构建 hook 时,可使用本技能。

创建流程

创建新 hook 时遵循以下工作流:

  1. 识别事件——哪个生命周期事件应触发 hook?
  2. 定义动作——应执行什么 shell 命令?
  3. 配置 matcher——哪些工具应触发(特定工具或 * 表示全部)?
  4. 测试命令——验证 shell 命令能独立工作。
  5. 添加到 settings.json——在 ~/.claude/settings.json 中注册 hook。
  6. 在 Claude Code 中测试——验证 hook 正确执行。
  7. 审查安全性——确保无凭据泄露或恶意行为。

九种 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 行为。

限制

资料未提供该技能的具体安装命令、版本信息、是否收费或价格、以及支持平台的完整清单,这些事实暂未提供。