Claude Code Hooks 怎么用?把格式化、检查、提醒自动接上

Claude Code Hooks 怎么用?把格式化、检查、提醒自动接上

关键词:Claude Code Hooks, Claude Code 钩子, PreToolUse PostToolUse, Claude Code 自动化

这篇继续围绕 Claude Code 展开,主题是「Claude Code Hooks 怎么用?把格式化、检查、提醒自动接上」。前面几篇已经讲过安装、settings.json、-p 模式和 CLAUDE.md,这次往真实使用流程里再拆细一点。

Hooks 是什么

如果你把 Claude Code 想成一个「会调工具的助手」,那 Hooks 就是「在它每次调工具的前后插一段你自己的脚本」。它能让你在 AI 行为发生之前或之后做一些事情,比如:

  • 让它在写完文件后,自动跑一遍 lint
  • 让它在删除文件前,先打印一条警告
  • 让它在任务结束时,发一条桌面通知

说白了,Hooks 把 Claude Code 从「单一工具」变成「可编程的工作台」。

常见 Hook 类型

根据社区里讨论比较多的几类(请以你使用版本的官方文档为准):

1. PreToolUse

在调用工具之前触发。可以用来做权限检查、阻止危险命令、记录日志。

2. PostToolUse

在调用工具之后触发。最常见的用途是:写完文件自动跑 formatter,比如 prettier、black、gofmt。

3. Stop

在一次任务结束时触发。可以用来发通知、写总结、推 Slack 消息。

4. UserPromptSubmit

在你提交一个新提示词时触发。可以用来在提示前注入额外上下文,比如把 git status 当前状态自动加进去。

5. Notification

模型有问题要问你时触发,可以转成系统通知,免得你忘了它在等你。

一个实际场景:写完代码自动格式化

假设你的项目用 Prettier,每次 Claude Code 写完 .ts 文件,你都希望自动跑一遍格式化。

你可以配置一个 PostToolUse hook,监听文件写入事件,触发 prettier --write 命令。这样 AI 写出来的代码就永远是规范风格,不用你提醒。

类似的还有:

  • Python 项目:写完 .py 自动跑 ruff 或 black
  • Go 项目:写完 .go 自动跑 gofmt
  • 前端项目:写完文件自动跑 eslint --fix

第二个场景:危险命令拦截

你可能担心 Claude Code 不小心跑 rm -rf 或者 git push --force。这种情况可以用 PreToolUse hook:

  • 检查它要执行的 shell 命令
  • 如果命中危险关键字,直接拒绝执行
  • 如果是中等风险命令,要求人工确认

这条 hook 本质上是给你的项目加了一层「软防火墙」。

第三个场景:任务结束发通知

用 Stop hook,在每次任务结束时调一下 osascript(Mac)或者 notify-send(Linux)或者推一条 Slack 消息。

好处是:你让 AI 跑一个长任务时,可以去做别的事情,任务一结束你就能收到提醒。

配置思路

Hooks 一般在 settings.json 或专门的 hooks 配置文件里声明,结构大致是:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write",
        "command": "prettier --write $FILE"
      }
    ]
  }
}

(具体字段以你使用版本为准。)

核心是三件事:触发时机、匹配条件、执行命令。

几个注意事项

  • hook 脚本要快:每次工具调用都跑,慢一点就拖慢整体节奏
  • hook 失败不要默默吞掉:要打印明显错误,否则你不知道 lint 其实没跑
  • 不要在 hook 里做关键决策:hook 是「辅助」,关键路径还是模型自己的判断
  • 危险命令拦截要白名单 + 黑名单结合:纯黑名单容易漏,纯白名单又太死板

小结

Hooks 是 Claude Code 从「能用」到「好用」的一个关键升级。它不会让 AI 变聪明,但能让你把日常重复动作(格式化、检查、通知)从大脑里卸载下来,让协作更顺滑。

Claude Code Hooks 怎么用?把格式化、检查、提醒自动接上 流程图
时间轴流程图:用户提问 → UserPromptSubmit hook → 模型调用工具 → PreToolUse hook(拦截)→ 工具执行 → PostToolUse hook(格式化)→ 任务结束 → Stop hook(通知),每个 hook 用不同颜色标记

延伸阅读

如果你还没看前面的基础篇,可以先看《Claude Code 从零搭建》《settings.json 权限配置》《CLAUDE.md 项目规则》这几篇,再回来看本文会更顺。

小结

Claude Code 真正好用的地方,不是让它一次性替你完成所有事,而是把流程拆清楚:哪些让 AI 做,哪些必须人来确认,哪些结果要留下验证记录。这个习惯养成之后,它就更像一个靠谱的编程搭档。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注