楼主补充(11 月 3 日):官方文档对 CLAUDE.md 的定位
这个问题后来我们又核对了 Claude Code 的官方记忆文档,有几点和规则写法直接相关:
- CLAUDE.md 在每次会话开始时加载,但 Claude 把它当作上下文,而不是强制执行的配置;要不管 Claude 怎么判断都拦住某个操作,应该用 PreToolUse hook。
- 指令写得越具体、越简洁,Claude 遵守得越稳定。指令含糊或互相矛盾时,不保证严格遵守。
- 可以在 Claude Code 里运行
/context,看 Memory files 下有没有你的 CLAUDE.md,确认它真的被加载了。 - 项目根目录的 CLAUDE.md 在
/compact之后会重新读入;只在对话里说过的要求,压缩后可能就丢了。
所以楼上那几种写法依然有用,但「绝对不能做」的事,最好再用 hooks 或权限规则拦一道。具体配置整理在这两帖:
- Claude 不按我写的强制规范来,怎么办?:PreToolUse 拦截、压缩后重新注入规范的示例
- 22 万星的 CLAUDE.md:Karpathy 吐槽的 4 类毛病写成的规则
欢迎继续贴你觉得管用的规则。