Skip to content

CLAUDE.md 别写成第二份 README

第一次配 Claude Code,很多人把 README 复制一份改名,或者把 CLAUDE.md 的规矩原样塞回 README。两边越写越像,改一处要改两遍,代理还是漏最关键的那几条。

它们不是同一份文档的两个副本。

README 写给人。讲这是什么、怎么装、怎么跑、怎么参与。人想看才打开,写多长都不占会话成本。

CLAUDE.md 写给代理。会话开始时注入上下文,讲这次动手必须知道的事实和边界。每一行都会反复占 token,也会挤后面的代码和对话。它表达的是倾向,不是开关。一次都不能破的动作,用 Hooks,见 CLAUDE.md 管倾向,Hooks 才是铁律

同一句话,两边写法不一样

假设所有业务查询都必须带租户字段,漏了就是越权。

README 可以解释:多租户用 tenant_id 做逻辑隔离,新表要留这个字段,查询时带上,避免串数据。

CLAUDE.md 只留命令:业务表必须有 tenant_id。查询必须带 tenant_id 过滤,禁止跨租户查询。

不需要在这份文件里说服模型「我们当初为什么这么设计」。背景留给 README。

READMECLAUDE.md
受众要上手或参与的人会改代码的代理
语气解释、铺垫祈使句,不解释
该写的是什么、怎么装、怎么贡献必须做什么、绝对别做什么、关键路径和命令
成本不进上下文每次会话都加载

事实留下,流程抽走

一段从「一条事实」长成「一套步骤」时,就不该再待在 CLAUDE.md

留下的是短事实:目录各管什么、构建和测试命令、命名和禁用写法、提交规矩、反直觉的特例。「构建命令是 pnpm build」是事实。「一次发布要走哪七步」是流程,做成 Skill,发布时再加载。怎么把流程和钩子分开,见 MCP、Skills、Hooks 怎么选

不要写进去的还有:愿景和选型故事、给新人的长安装教程、完整 API 参考、大段「为什么」。package.json 里已经写明的框架和语言,也不必再复述一遍,除非有代码里看不出来的坑。

个人偏好也不要提交进仓库。回答用中文、提交信息的个人格式,放 ~/.claude/CLAUDE.md。这个项目独有的,才进项目级 CLAUDE.md

两边都要的事实,只写一处

构建命令、目录结构,人和代理都要知道。不要各抄一遍。

把短清单放在单独文件,例如 docs/commands.md,README 链过去,CLAUDE.md@docs/commands.md 引进来。@ 的相对路径以写这行的文件为准,不是当前工作目录。

不要 @README.md 把整份说明引进来。那会把给人看的铺垫全部注入会话。只引用双方都要、而且本来就短的那一段。

团队如果还在用 Cursor、Codex、Gemini CLI 这类工具,核心规则可以放 AGENTS.md。Claude Code 不直接读这个文件。在 CLAUDE.md 里加一行 @AGENTS.md,再补只给 Claude 的几条。只用 Claude Code 的项目,直接写 CLAUDE.md 就够,不必为了标准多维护一份。

不听话时,先查这三处

代理没照做,多半不是工具坏了。

  1. 文件太长,关键句被后半段淹没。超过大约 200 行还在涨,就把解释挪回 README,把流程抽成 Skill。
  2. 句子太软。「尽量带上 tenant_id」和「所有查询必须带 tenant_id,禁止跨租户查询」不是同一句。
  3. 多层说明互相打架。用户级和项目级会拼接,不是后者覆盖前者。跑 /memory 看这次到底加载了哪些文件。

光靠 README 也不够。代理能去读它,但要从大段介绍里捞构建命令,又慢又容易抓错。CLAUDE.md 的用处就是把代理真正需要的那点硬信息提纯出来。

反过来,只留 CLAUDE.md、不写 README,人进仓库不知道这个项目是干什么的。两个都写,各写各的,短事实用引用打通。

可直接改的约束条目,仍可用站里的 CLAUDE.md 约束提示词。那份是条目清单,这篇只负责别把清单写成第二份说明书。

Claude-cn.org,专注于 Claude Code 中文教程