Claude Code 完整指南(四):Hooks(自动化事件触发)

Claude Code 完整指南(四):Hooks(自动化事件触发)p p h4 id E6 96 87 E7 AB A0 E7 9B AE E5 BD 95 文章目录 h4 ul li 1 引言 li li 2 Hooks 是什么 li li 3 Hooks 配置 用户级 vs li ul

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



 

文章目录

  • 1. 引言
  • 2. Hooks 是什么?
  • 3. Hooks 配置(用户级 vs 项目级)
  • 4. 八种事件类型汇总
  • 5. 命令型 Hooks
    • 5.1 基础语法(最常用)
    • 5.2 Hook 能拿到什么上下文?
    • 5.3 退出码怎么控制“阻断/不阻断”?
  • 6. 提示型 Hooks
    • 6.1 基础语法
    • 5.2 响应格式(核心)
  • 7. 案例模板
    • 7.1 案例:SessionStart 做环境体检(不阻断)
    • 7.2 案例:PreToolUse 拦截危险 Bash(阻断)
    • 7.3 案例:PreToolUse 做敏感信息检测(阻断)
    • 7.4 案例:PostToolUse 自动格式化 + 自动跑测试(不阻断)
    • 7.5 案例:Notification 做系统通知(不阻断)
  • 8. 常见问题
  • 9. 文末

在这里插入图片描述

在前面的博客,博主已经讲解了 Claude Code 相关的概念,有兴趣的同学可以参考下:

  • 《Claude Code 完整指南(一):安装、CLI 实战、IDE 集成一次讲透》
  • 《Claude Code 完整指南(二):终端命令全解析(收藏级)》
  • 《Claude Code 完整指南(三):命令背后的数据流动》

如果你已经在用 Claude Code 写代码,你一定遇到过这些“重复但必要”的动作:

  • 写完文件要跑格式化、lint、单测
  • 运行危险 Bash 之前想要一层保险(尤其是 、)
  • 想在会话开始时自动检查环境(Node/Python 版本、依赖是否安装)
  • 想在 Claude “准备停下”时强制做一次自检:测试过了吗?有未提交的改动吗?

Hooks 的价值就在于把这些动作从“ 你记得做” 变成 “系统自动做” ,并且可以做到“该阻断就阻断、该后台跑就后台跑、该提醒就提醒”

Hooks 是 Claude Code 的事件驱动自动化系统:在特定事件触发时,自动执行一组 Hook。

它主要有两种形态:

  1. 命令型 Hooks(command):运行 Shell 命令/脚本,适合自动化与校验(格式化、检查、通知、跑测试……)。
  2. 提示型 Hooks(prompt):在 / 事件里,让 Claude 再做一次“停下前的质量检查”,根据结果决定继续还是停止。

你可以把它理解为:

  • SessionStart/End:会话生命周期钩子
  • PreToolUse/PostToolUse:工具执行前/后钩子(Write/Edit/Bash/Read…)
  • Stop/SubagentStop:模型准备结束前的“收尾门禁”
  • Notification:系统通知的自定义处理

支持分层配置,Hooks 通常按是否团队共享来决定目录。

项目级(推荐团队共享):

  • 文件:
  • 适合:团队统一的格式化、测试、危险命令拦截、质量门禁等
  • 配套建议:把脚本也放进仓库,例如 ,让团队开箱即用

项目级本地(仅自己用,不提交):

  • 文件:
  • 适合:个人路径相关脚本、个人通知方式、私有工具等
  • 配套建议:加入

用户级(跨项目生效)

  • 文件:
  • 适合:你个人的通用 Hooks(比如任何项目都启用的通知/危险命令拦截)
小贴士:团队规范建议 “项目级为主、用户级为辅”,项目级让仓库可复制;用户级放个人偏好。
事件 触发时机 Hook 类型 常见用途 SessionStart 会话开始 命令型 初始化环境、检查依赖、打印提示 SessionEnd 会话结束 命令型 清理临时文件、记录统计 UserPromptSubmit 用户提交输入前 命令型 输入验证、关键词拦截、注入上下文 PreToolUse 工具执行前 命令型 危险命令拦截、参数校验、审计 PostToolUse 工具执行后 命令型 自动格式化、自动测试、生成变更摘要 Stop Claude 决定停止前 提示型 质量门禁(lint/test/git status) SubagentStop 子代理停止前 提示型 子任务验收(比如“测试是否补齐”) Notification Claude 发送通知时 命令型 转发通知(系统通知/Slack/飞书等)

写脚本就能自动化
GPT plus 代充 只需 145

关键点:

  • :用于筛选工具(通常写正则/或模式串),比如 、。
    • :Hook 失败会阻断当前动作(适合安全校验、门禁)
    • :Hook 失败不阻断(适合格式化、统计、通知)

命令型 Hooks 通常可以通过环境变量拿到上下文(不同事件变量略有差异,常见如):

变量名 说明 TOOL_NAME 工具名称(如 //) TOOL_INPUT 工具输入(JSON 字符串) TOOL_INPUT_FILE_PATH 文件路径(Write/Edit 常用) TOOL_OUTPUT 工具输出(PostToolUse 常用) USER_MESSAGE 用户输入(UserPromptSubmit) CLAUDE_WORKING_DIR 当前工作目录 NOTIFICATION_MESSAGE 通知内容(Notification,JSON)

更稳妥的写法:脚本里同时支持读取 (JSON)与环境变量,避免某些环境差异导致取不到值。

常见约定(建议你按这个写,团队最好统一):

 
  
让 Claude 在“停下前”做质量门禁

提示型 Hooks 仅用于 / :当 Claude 觉得“差不多可以结束了”,会先跑一次这个提示,让它自检并输出 JSON 决策。

GPT plus 代充 只需 145
 
  

你可以用它来实现 “Claude 自己给自己验收” 的体验,不满足条件就继续把事情做完,满足才停。

下面的模板尽量遵循一个原则:高风险校验 blocking=true,耗时工作 blocking=false

依赖提示:后面的脚本示例会用到 来解析 JSON(macOS 可用 )。
:检查 Node/Python/Git 状态、依赖是否安装等(按你的项目改)。

配置如下:

GPT plus 代充 只需 145

示例代码如下:

 
  
思路:从 (或 stdin JSON)里取出 ,匹配 、 等高危模式,命中就 并在 stderr 输出原因。
GPT plus 代充 只需 145

示例代码如下:

 
  
适用场景:Write/Edit 写入内容前,扫描是否疑似 Key/密码/Token,命中直接拦截。
GPT plus 代充 只需 145

示例代码如下:

 
  
GPT plus 代充 只需 145

示例代码如下:

 
  

示例代码如下:

GPT plus 代充 只需 145

建议:

  • 格式化脚本按后缀选择
  • 测试脚本“只跑与当前文件相关的最小集合”,避免每次都全量测试拖慢体验
(macOS)可以用 或 ,从 里取 发系统通知。
 
  

示例脚本如下:

GPT plus 代充 只需 145

问题一:Hook 不执行

可以通过如下方式排查:

开调试

 
  

检查脚本可执行权限

GPT plus 代充 只需 145

脚本自测(用 stdin 模拟 JSON)

 
  

问题二:无故被阻断

的 Hook 一定要做到:

  • 只在命中明确条件时才
  • stderr 输出清晰原因(让 Claude 能把“为什么被拦”解释给你)

问题 三:变慢很明显

  • 把耗时任务(全量测试、扫描整个仓库)改成 或改成“增量/抽样”
  • 在脚本里加超时/短路条件(比如只对特定目录、特定后缀执行)

通过阅读本文,相信大家已经系统理解了 Claude Code 中 Hooks 的整体设计与实战价值:它并不是零散的脚本技巧,而是一套事件驱动的自动化与质量门禁机制。通过在 Session、Tool 执行前后以及 Stop 阶段合理配置命令型与提示型 Hooks,可以将格式化、测试、危险命令拦截、敏感信息校验等“重复但关键”的操作交由系统自动完成,把人为自觉升级为流程约束。

希望本文能对大家深入理解和落地使用 Claude Code Hooks 有所帮助,也欢迎在评论区分享你的实战配置、踩坑经验与优化思路。感谢阅读,本文完!

小讯
上一篇 2026-03-20 19:04
下一篇 2026-03-20 19:02

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/241166.html