排查 Claude Code 不遵守项目指令
文章指出 CLAUDE.md 属于模型上下文,不能保证指令严格执行,并梳理未加载、压缩丢失、文件过长和规则冲突等七类原因。排查思路强调先确认加载与上下文状态,再检查规则是否清晰且一致。
原文暂未完整获取,基于公开信息的快读
CLAUDE.md 写了「不要直接向 main 提交」,Claude Code 却照样提交,再加一遍 IMPORTANT 也没解决。dev.to 上的一篇排查文章把问题指向了指令的加载和使用方式:项目规则进入模型上下文,并不等于获得强制执行的保证。现有节选列出了七类原因,也给出了排查顺序。
目前能确认什么
按作者的解释,CLAUDE.md 属于模型上下文,不是严格执行的配置。上下文是模型生成回答、选择操作时参考的信息;规则能被读取,与规则一定被遵守,是两回事。
文章列出的原因包括:文件没有加载、指令在上下文压缩时丢失、文件太长、规则互相冲突、表述含糊、内置指导与项目规则竞争,以及子目录文件被截断。
排查先从 /context 的 Memory files 入手,确认文件是否出现。作者指出,子目录里的 CLAUDE.md 按需加载,启动时没出现不一定是异常;启动目录也会影响加载范围。
接着检查会话是否经历过压缩,再看规则长度和冲突。上下文压缩会用摘要腾出空间,不能把它理解成逐字保留。节选还提醒,用 @imports 拆文件不会降低同时加载的上下文成本;个人、项目和子目录规则里的 npm、pnpm 要求,也可能彼此打架。
我的判断
规则失效时,先确认模型收到了什么,再修改规则措辞。
对程序员来说,这个顺序能省掉不少无效尝试:没加载就检查目录与加载条件,长会话后失效就检查压缩后的上下文,操作反复不一致就查规则冲突。「IMPORTANT」解决不了这些问题。
「不要直接提交 main」这类要求,还应通过分支保护或权限控制落实。自然语言规则负责指导,仓库机制负责拦截违规操作。
目前拿到的内容并不完整,子目录截断限制的说明也在中途结束。节选涉及的命令、设置项和加载行为是否适用于读者当前安装的版本,仍需官方文档确认,不能直接当成所有版本通用的修复方案。