Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍

这是Claude Code通关手册的第八篇,推荐5个实用的Hook,代码质量提升 3 倍

上周三下午,我让 Claude Code 帮我重构一个老模块。

它干得挺快,噼里啪啦一顿输出。我切出去喝了口水,回来一看------它正准备把我一个还没有提交git的源文件直接覆盖掉

手抖着点了"拒绝",后背全是冷汗。

那一刻我突然意识到:不是 Claude 坏,是我太信任它了

每次它问"我可以执行这个命令吗?"我都点"允许",点多了就麻了。它要 rm -rf 我也点,它要改 .env 我也点------我把 AI 当成了不会犯错的神,但它只是个能力很强的实习生

我翻了一遍 Claude Code 的文档,又刷了创始人 Boris 的 X。他分享了自己在用的几个 hooks,我全抄下来,砍掉一半,最后剩下 5 个。

装上之后,Claude 还是那个 Claude,但我再也没怕过它。

Hook 到底是什么?3 秒钟理解

你每次让 Claude 跑命令、改文件,它都会弹窗问你"行不行?"------这就是最后一道防线。

Hook 就是在弹窗之前或之后,自动跑一段你写好的脚本。

  • 你想让它自动允许某些命令?Hook 能干。

  • 你想让它打死也不准 rm -rf?Hook 能干。

  • 你想让它每次写完代码自动格式化?Hook 也能干。

说白了,Hook 就是给 Claude 装上"自动驾驶 + 刹车片"。

Claude Code 总共支持 27 种 hook,我挑 5 个最实用的,每天救我于水火。

Hook 1:每次启动,自动给 Claude "补课"

痛点 :每天早上打开 Claude Code,它都像失忆了一样。

"当前分支是什么?"

"最近改了啥?"

"TODO 文件在哪?"

你敲三行字,它回三句废话,两分钟没了。

解决方案SessionStart hook

Claude 一启动,自动跑一个脚本,把当前分支、最近 5 条 commit、未提交的改动一股脑塞给它。

脚本长这样(你复制就行):

bash 复制代码
#!/bin/bash
echo "Current branch: $(git branch --show-current)"
echo ""
echo "Recent commits:"
git log --oneline -5
echo ""
echo "Uncommitted changes:"
git status --short

效果:Claude 一开机就知道你昨天干到哪了,冷启动时间归零。

Hook 2:打死也不准 rm -rf

痛点 :Claude 有时候真的很"勇"。

它觉得临时文件太多,就想 rm -rf ./

它觉得环境变量该更新,就想直接覆盖 .env

你手一抖点了"允许",哭都来不及。

解决方案PreToolUse hook

在任何危险命令执行之前拦截。你可以选择:

  • allow(放行)
  • deny(拒绝)
  • ask(问你要不要)
  • 甚至偷偷改参数 (比如把 rm -rf ./ 改成 rm -rf ./dist,缩小爆炸半径)

拦截 rm -rf 的脚本核心就这几行:

bash 复制代码
if echo "$COMMAND" | grep -qE 'rm\s+-rf'; then
  # 返回 deny,并说明原因
  jq -n '{permissionDecision: "deny", ...}'
fi

效果 :再也不用担心 Claude 把你家目录删了。

Boris 还用这个 hook 记录每一条 bash 命令------相当于审计日志,随时回溯 Claude 干过啥。

Hook 3:写完代码自动格式化,再也不卡 CI

痛点 :Claude 写的代码,10 次里有 9 次没问题,但总有 1 次漏个分号、缩进不对、行尾多个空格。

CI 一跑就挂,你还得手动修,烦不烦?

解决方案PostToolUse hook

Claude 写完文件之后,自动跑一次格式化工具。

bash 复制代码
case "$FILE_PATH" in
  *.ts|*.tsx|*.js) prettier --write "$FILE_PATH" ;;
  *.py) black "$FILE_PATH" ;;
  *.go) gofmt -w "$FILE_PATH" ;;
esac

效果:Claude 专注写逻辑,格式问题交给脚本。CI 再也不因为空格报错了。

Boris 原话:

Claude usually generates well-formatted code out of the box, and the hook handles the last 10% to avoid formatting errors in CI later.

那 10% 不值得人管,让 hook 干。

Hook 4:Claude 说"搞定了"?先让它自己跑测试

痛点 :Claude 经常自信满满:"重构完成,可以合入了!"

你信了,一跑测试------全红。

你又得回去跟它掰扯"为什么你没测边界条件"。

解决方案Stop hook

Claude 觉得活干完了 的那一刻,自动跑测试、跑 lint。

挂了就返回 block,Claude 必须继续改,直到全绿为止。

脚本核心:

bash 复制代码
if ! mvn test --quiet; then
	jq -n '{decision: "block", reason: "Maven 单元测试失败,请修复后再结束。"}'
    exit 0
fi

效果 :Claude 变成了一个"不把测试跑通就不下班"的卷王。

你再也不用当验收员了。

Hook 5:活干完了,手机通知我

痛点 :大重构经常跑十几分钟。

你切出去开会、刷手机、吃饭,回来一看------Claude 卡在一个权限问题上等了半小时,进度条一动不动。

解决方案Stop hook + 飞书/钉钉/企业微信机器人

Claude 跑完活(无论成功还是卡住),自动往你手机发一条消息。

配置都不用写脚本,直接填 webhook:

bash 复制代码
{
  "hooks": {
    "Stop": [{
      "hooks": [{
        "type": "http",
        "url": "https://open.feishu.cn/open-apis/bot/v2/hook/xxx",
        "headers": { "Content-Type": "application/json" }
      }]
    }]
  }
}

效果:Claude 跑完活,你手机"叮"一声。再也不用来回切窗口看它好了没。

不过现在 Claude Code 出了 remote control,我直接手机上看状态,这个 hook 用得少了。但如果你还没升,它依然很香。

最后:别把 AI 当魔法,把它当基础设施

Boris 有句话我特别认同:

Treat Claude Code as infrastructure, not magic.

基础设施的意思是:该有护栏的地方要有护栏,该自动化的地方要自动化。

Hooks 就是这基础设施里的"水泥"。

你不需要装 27 个,从你最疼的地方开始

  • 每次启动都要重新交代状态 → 装 SessionStart
  • 怕它删库跑路 → 装 PreToolUse 拦危险命令
  • 烦透格式问题卡 CI → 装 PostToolUse 自动格式化
  • 不想当验收员 → 装 Stop 自动跑测试
  • 想手机收通知 → 装 Stop + 飞书机器人

5 个 hook,一下午配好,之后天天受益。

未来已来,Enjoy AI!但记得给它装好刹车。

你还有什么好用的 hook 用法?评论区交个朋友~