Claude Code 学习站
Mingyu's Library

学习站 / 实战 Tip / A · 稳定与质量

CLAUDE.md 写了它不听—多半是太长

明明在 CLAUDE.md 里写了规则,Claude 还是我行我素——先别怀疑模型,先数一下你的文件有多少行。

CLAUDE.md 在每个会话开始时整份载入上下文,它是“上下文”而不是“强制配置”。文件越长,单条规则在噪音里越容易被淹没——官方文档直接写明:臃肿的 CLAUDE.md 会导致 Claude 忽略你真正的指令。

一句话结论

结论 把 CLAUDE.md 砍到 200 行以内,只留“每个会话都用得上”的事实;局部规则挪到 .claude/rules/ 做路径限定,多步流程挪成 skill,必须 100% 执行的动作改写成 hook。官方官方给出的判断标准:每一行都问“删掉它 Claude 会犯错吗?”不会就删。

做法步骤

  1. 先确认文件真的加载了。会话里跑 /context,在 Memory files 列表里找你的 CLAUDE.md。官方不在列表里 Claude 就看不见——那是路径问题,不是长度问题。在列表里但不遵守,继续往下。
  2. 逐行做“删除测试”。官方官方建议单文件控制在 200 行以内,更长会消耗更多上下文并降低遵循度;并明确警告“如果 Claude 无视某条规则,多半是文件太长、规则淹没在噪音里”。该留和该删的典型:
    该留(Claude 猜不到的)该删(Claude 自己能搞定的)
    猜不出来的构建/测试命令读代码就能推断的一切
    和默认值不同的代码风格语言的标准惯例
    仓库礼仪(分支命名、PR 规范)详细 API 文档(放链接即可)
    项目特有的架构决策、环境坑逐文件的代码库描述、长篇教程
    非显而易见的 gotcha“写干净的代码”这类废话
  3. 把“只在局部生效”的规则挪去 .claude/rules/官方rules 目录里的 markdown 可用 YAML frontmatter 的 paths 字段限定文件范围(如 src/api/**/*.ts),只在 Claude 读到匹配文件时才载入上下文,不匹配就不占空间。没有 paths 的 rule 仍然每次都载入,注意别只是换个目录堆放。
  4. 把“偶尔才用的多步流程”挪成 skill。官方skills 按需加载:你主动调用或 Claude 判断相关时才进上下文,适合领域知识和可复用工作流。判断口径:CLAUDE.md 放“每个会话都成立的事实”,skill 放“某类任务才需要的流程”。
  5. 把“必须每次都发生”的动作改成 hook。官方CLAUDE.md 是建议性上下文,没有强制力;要求“提交前必须 lint”“禁改 migrations 目录”这类硬约束,写成 hook 才保证执行。官方修复建议原话方向:Claude 不需要提醒也能做对的指令,删掉或转成 hook。
  6. 清理矛盾与偷懒的拆分。官方两条规则互相冲突时 Claude 可能任选一条;另外 @path/to/file import 只是组织手段,被 import 的文件启动时照样全部载入,不省任何上下文。v2.1.206 起可跑 /doctor,它会对入库的 CLAUDE.md 提出裁剪建议:砍掉能从代码推导的目录结构、依赖清单,保留坑、理由和非默认约定。
  7. 验证效果。本站观点精简后观察几个会话:之前被无视的规则是否开始被遵守。官方也建议对个别关键规则加 “IMPORTANT” / “YOU MUST” 强调——但这是最后的调味料,不是长文件的解药。

可直接抄的 prompt

帮我精简 @CLAUDE.md,目标 200 行以内:
1. 逐行审查,对每一行回答:“删掉它你会犯错吗?”不会就列入待删。
2. 找出互相矛盾或重复的规则,给出保留哪条的建议。
3. 把只和特定目录/文件类型相关的规则,改写成 .claude/rules/ 下带 paths
   frontmatter 的 rule 文件;把多步操作流程改写成 .claude/skills/ 下的 skill。
4. 把“必须每次强制执行”的动作(如提交前 lint)列出来,建议对应的 hook 配置。
5. 输出:精简后的 CLAUDE.md 全文 + 迁移清单(哪条去了哪里、为什么)。
先给我看方案,确认后再改文件。

来源与最后核实日期