Claude Code 的 Stop hook 里藏着一个数字差异,能让自动检查从"白跑一趟"变成"自己修好"。Anthropic 的 Lydia Hallie 把技巧讲得很直白:想让 Claude 在检查失败后自动重试,hook 必须以 exit code 2 退出,不是 1。
区别在阻塞语义。exit 2 会阻塞退出,Claude Code 把 hook 的 stderr 原样回传给 Claude,模型读到报错就知道哪里不对,于是重新开工。exit 1 则是非阻塞的——脚本失败了,流程照常往下走,Claude 该收尾收尾,检查形同虚设。不少人把 lint 脚本挂上去,跑完发现毫无反应,问题就出在这一个数字上。
写法其实很简单:Stop hook 里跑 Lint、类型检查或者测试,失败时把具体报错写进 stderr,再 exit 2。注意 stderr 不是日志,是喂给模型的提示词,写清楚哪个文件、哪一行、报了什么,重试才有意义。只想留痕、不想打断流程的检查,交给 exit 1。搞清这条边界,Stop hook 才算真正接上了 Claude Code 的自我修正回路。

