以前每次让它改代码,都要在对话里重复一遍规矩:不要动 lock 文件、不要改 public 目录、提交前跑 lint。说十遍它记一遍。

后来直接把规则丢进 settings.json 的 hooks,PreToolUse 拦 Edit/Write:

  • 命中 package-lock.json、pnpm-lock.yaml、public/** → 直接 deny,返回原因
  • 命中 src/** → 放行,但要求后续必须执行 npm run lint

写法不复杂,关键是 deny 的原因要写人话,模型读到原因会自己绕路,比单纯报错好得多。

实测两周,锁文件被误改的次数从每周三四次掉到零。返工主要是它自己写的 TS 类型不对,那个还得靠 CLAUDE.md 里写清楚项目用的 zod 版本。

一个坑:hook 里别写耗时的命令,每次工具调用都跑一遍,超过两秒整个交互就废了。

主楼