CLAUDE.md 和 AGENTS.md 放在同一个仓库:Claude Code 只读 CLAUDE.md,2,744 个两者都有的公开仓库里 1,072 个没把 AGENTS.md 传过去
从 2.1.277 起 Claude Code 能读 AGENTS.md,但只在没有 CLAUDE.md 的时候。2,744 个两个文件都有的公开仓库里,1,072 个在 AGENTS.md 里写了不同的说明,Claude Code 不会加载。在 2.1.314 上实测。
概述
如果你的仓库里同时有 CLAUDE.md 和 AGENTS.md,在 CLAUDE.md 里单独写一行 @AGENTS.md,或者让其中一个文件链接到另一个。
原因很简单。从 2.1.277(9 月 18 日)起,Claude Code 能读 AGENTS.md,也就是 Codex 等 agent 用的说明文件。但默认只在仓库里没有 CLAUDE.md 时才读它。两个都有时,Claude Code 加载 CLAUDE.md,AGENTS.md 不读,除非 CLAUDE.md 导入了它。
这会让多少说明漏掉?我们读了 5,864 个活跃公开仓库的说明文件。2,744 个两个文件都有。其中 1,072 个的 AGENTS.md 写的内容不一样,CLAUDE.md 既没导入它,也没链接到它。在这些仓库里打开 Claude Code,会话一开始就没有这份说明。
怎么测的
- 加载规则实测。 在四个空项目的
AGENTS.md里放一个暗号,关掉读文件的工具,问 Claude Code 2.1.314(claude -p,Haiku)暗号是什么:- 有
CLAUDE.md和AGENTS.md,不导入:Claude 不知道暗号。 CLAUDE.md里单独一行@AGENTS.md:Claude 说出了暗号。CLAUDE.md里写成反引号包着的`@AGENTS.md`:不知道暗号。文档写明代码片段里的导入会被跳过。- 只有
AGENTS.md:Claude 说出了暗号。
- 有
- 仓库样本。 和我们的项目设置调查同一批:5,864 个公开仓库,5 星以上,10 月 7 日以后有推送,排除 fork,截至 2026 年 11 月 6 日。每个都有
.claude/settings.json,也就是已经配置过 Claude Code 的仓库。我们按抽样时的提交下载了根目录的CLAUDE.md、.claude/CLAUDE.md、CLAUDE.local.md、AGENTS.md和.claude/rules/文件,共 15,063 个。 - 会话开始时加载什么。 照文档的规则算:根目录的
CLAUDE.md系列文件,没有时换成AGENTS.md;每个指向仓库内文件的@path导入,最多四层;没有paths字段的 rules。代码块和代码片段里的导入不算,块级 HTML 注释去掉,和文档说的一样。整个文件内容只是另一个文件路径的,算作链接。
测试结果
仓库里有哪些说明文件
| 仓库数(共 5,864) | |
|---|---|
根目录有 CLAUDE.md、.claude/CLAUDE.md 或 CLAUDE.local.md | 4,709(80.3%) |
根目录有 AGENTS.md | 3,333(56.8%) |
| 两个都有 | 2,744(46.8%) |
只有 AGENTS.md,2.1.277 起 Claude Code 会读 | 589(10.0%) |
| 都没有 | 566(9.7%) |
两个都有的 2,744 个仓库,Claude Code 拿到 AGENTS.md 的内容了吗
| 仓库数 | |
|---|---|
拿到:CLAUDE.md 导入了 AGENTS.md | 972 |
拿到:CLAUDE.md 是指向 AGENTS.md 的链接 | 448 |
拿到:AGENTS.md 是指向 CLAUDE.md 的链接 | 208 |
| 两个文件内容一样,没漏 | 44 |
| 没拿到:内容不同,没导入也没链接 | 1,072(39.1%) |
这 1,072 个里,465 个在 CLAUDE.md 正文里提到了 AGENTS.md,Claude 照着那句话去打开时还能读到。另外 607 个提都没提。没被读到的 AGENTS.md 长度中位数 4,970 字符。有 12 个仓库把导入写在了反引号里,结果导入不生效。
每次会话一开始要加载多少
先猜一下:在你打第一个字之前,这些仓库通常往 Claude 面前放多少文字?在启动时会加载内容的 5,322 个仓库里,中位数是 9,766 字符,算上导入和 rules。10.4% 超过 40,000 字符,2.7% 超过 100,000。
根目录 CLAUDE.md 长度中位数 | 91 行 |
根目录 CLAUDE.md 超过 200 行,也就是文档建议的上限 | 24.5% |
根目录 CLAUDE.md 超过 500 行 | 6.4% |
| 启动时加载的文件里至少有一个超过 200 行的仓库 | 33.7% |
有启动时就加载的 .claude/rules/ 文件(没写 paths)的仓库 | 787 |
| 有只在碰到对应文件时才加载的 rules 的仓库 | 79 |
子目录里有 CLAUDE.md 的仓库 | 1,035(17.7%) |
有指向仓库外的 @ 导入、需要你批准的仓库 | 17 |
推荐
我们现在这样管理说明文件:
- 只留一份正本,然后导入。 如果
AGENTS.md是共用的那份,就在CLAUDE.md开头单独写一行@AGENTS.md,下面只放给 Claude 的补充。这一行不要包进反引号。 - 没人在 Windows 上 clone,才用链接。
ln -s AGENTS.md CLAUDE.md能用,但文档提醒:Windows 上的 Git 没开core.symlinks时,会把软链检出成一行文字。那份 clone 里的CLAUDE.md就只剩一行AGENTS.md。 - 或者改设置。 在
/config里把 Project instructions 设成claude-md-and-agents-md,两个文件都读,先读CLAUDE.md。 - 看看实际加载了什么。 运行
/context all,看 Memory files 下面的列表。 - 长段落挪进只按路径加载的 rules。 文档建议每个文件不超过 200 行。带
paths字段的 rule 只在 Claude 处理匹配的文件时才加载,而这批仓库里只有 79 个用了。
你常用的那个 agent 在你的仓库里读的是哪个说明文件?另一个文件里有没有写不一样的东西?
该忽略什么
把很长的 CLAUDE.md 拆成几个 @ 导入来省上下文。文档写明,导入的文件会和导入它的文件一起加载,拆分方便整理,加载的文字一样多。
HTML 注释。CLAUDE.md 里的块级注释在交给 Claude 之前就被去掉了,写给维护者的备注放在里面不占上下文。
局限
- 都是配置过 Claude Code 的仓库。 样本里每个仓库都有
.claude/settings.json,比 GitHub 上的平均仓库用 Claude Code 用得更重。 - 按默认设置算。 我们数的是 Project instructions 保持默认时加载什么。把它设成
claude-md-and-agents-md的人两个文件都会读到。 - 静态读取。 导入按文档的规则解析,四种情况在 Claude Code 2.1.314 上实测过;没有在每个仓库里真的打开 Claude Code。
- 算的是字符,不是 token。 长度是去掉注释后的字符数。token 数取决于语言和模型。
- 是样本。 5 星以上的活跃仓库,截至 2026 年 11 月 6 日,按代码搜索的相关度选出来,不是随机样本。
自己复现
计数在 claude-md-agents-md-2026-11.json 里,不含仓库名和文件内容。想查自己的仓库:在 AGENTS.md 里放一个暗号,打开 Claude Code,问它暗号是什么。
clone 一个仓库还会带来什么,见5,864 个公开仓库在 .claude/settings.json 里打开了什么。