Claude Code AGENTS.md 配置指南:四种加载模式、与 CLAUDE.md 的区别、多工具共用
更新于

先说结论: 自 Claude Code v2.1.277(2026 年 9 月 18 日)起,如果仓库里有 AGENTS.md,而且路径上任何位置都没有 CLAUDE.md,Claude Code 会自动从 AGENTS.md 读取指令。不用安装任何东西,不用写 import 行,也不用建符号链接。如果工作目录或任一上级目录中存在 CLAUDE.md 或 CLAUDE.local.md,Claude Code 仍然只读那个文件并忽略 AGENTS.md,除非你在 /config 里修改 Project instructions 设置。
十秒钟就能验证。在一个只有 AGENTS.md 的仓库里开启新会话,在对话顶部附近找这一行:
no CLAUDE.md found; AGENTS.md loaded: /path/to/repo/AGENTS.md如果没看到,说明下面四种情况之一成立,本文都会覆盖:你的版本较旧;某个上级目录里藏着 CLAUDE.md 或 CLAUDE.local.md;这是你升级后的第一个会话;或者你的会话类型根本无法加载 AGENTS.md(Bedrock、Vertex、Foundry,或关闭了遥测)。
下文标注实测的内容,都是 2026 年 9 月 21 日在 macOS 上用 Claude Code 2.1.278、在一个全新的临时仓库里通过 claude -p 跑出来的。其余内容来自官方 memory 文档 (opens in a new tab)和更新日志 (opens in a new tab)。
- Claude Code 现在会读 AGENTS.md:配置方法、四种加载模式,以及如何与 Codex、OpenCode、Cursor 共用一份文件
- GPT Image 2.5 使用指南:Flare 与 Sunburst 怎么选、API 调用与价格
- DeepSeek Harness 安装教程:一条命令装好 DSH 并跑通第一个任务
- Runcell Science:面向科研的开源 Claude Science 替代方案
- Mac 怎么不休眠:合盖继续运行 Codex、Claude Code 和本地 AI Agent
- OpenClaw vs ZeroClaw vs Pi Agent vs Nanobot:2026 年该选哪个 AI Agent 技术栈?
- Claude Code 能分析 Jupyter Notebook 吗?Data Science 场景下它到底做了什么
- Claude Code Routines 是什么?AI Agent 定时任务与自动触发指南
- Claude Code Desktop 绕过权限:如何开启 Bypass permissions
- 如何用 Google 的 A2A 协议构建两个 Python Agent:一步步教程
- 2025 年 Python 增长最快的 10 个数据可视化库
到底改了什么
2.1.277 的更新日志只有一句话:
Added AGENTS.md support: in a project with no CLAUDE.md, Claude Code reads AGENTS.md instead; change it under "Project instructions" in
/config(not yet on Bedrock, Vertex or Foundry)
大意:新增 AGENTS.md 支持;在没有 CLAUDE.md 的项目中,Claude Code 改为读取 AGENTS.md;可在 /config 的 “Project instructions” 下修改(Bedrock、Vertex、Foundry 暂不支持)。
在这个版本之前,已经为 Codex、OpenCode、Cursor 等工具统一采用 AGENTS.md (opens in a new tab) 的团队,还得在旁边再放一个 CLAUDE.md:要么是一份重复内容,要么是一行 @AGENTS.md import,要么是一个符号链接。这次发布在 Hacker News 的讨论帖 (opens in a new tab)(725 分,273 条评论)里,大部分人都在描述自己此前一直维护的是哪一种变通方案。
这次发布并没有让 AGENTS.md 与 CLAUDE.md 平起平坐。它加的是一个带开关的回退机制。本文接下来讲的,就是回退在哪里止步、开关在什么时候起作用。
哪个文件优先:决策表
这是默认行为,即 claude-md-or-agents-md 模式。“存在 CLAUDE.md” 的判断范围包括工作目录及其所有上级目录中的 CLAUDE.md、.claude/CLAUDE.md 和 CLAUDE.local.md。你个人的 ~/.claude/CLAUDE.md、组织下发的托管 CLAUDE.md,以及 .claude/rules/ 下的文件不计入判断,它们会和 AGENTS.md 一起继续加载。
| 仓库及其上级目录中的文件 | Claude Code 读取的文件(默认) | 2.1.278 实测 |
|---|---|---|
仅有 AGENTS.md | AGENTS.md | 是:回复以我放在 AGENTS.md 里的标记开头 |
AGENTS.md + CLAUDE.md | 仅 CLAUDE.md | 是:只出现了 CLAUDE.md 的标记 |
AGENTS.md + CLAUDE.local.md(已 gitignore) | 仅 CLAUDE.local.md | 是:AGENTS.md 被跳过 |
AGENTS.md + 上级目录中的 CLAUDE.md | 仅上级目录的 CLAUDE.md | 来自文档和 DevelopersIO 的测试 (opens in a new tab);本文未复现 |
包含 @AGENTS.md 的 CLAUDE.md | CLAUDE.md,AGENTS.md 通过 import 内联进来 | 来自文档 |
第三行是大多数人最先踩到的坑。CLAUDE.local.md 是文档规定的个人、不提交指令的存放位置。在一个依赖 AGENTS.md 的项目里加上它,Claude 就会悄悄切回忽略 AGENTS.md 的状态。修复只需一个设置,下一节讲。
我是怎么测的
临时仓库里的每个 AGENTS.md 或 CLAUDE.md 只包含一条指令:每次回复都以固定标记开头,例如 [AGENTS_MD_LOADED]。然后:
mkdir agentsmd-test && cd agentsmd-test && git init -q
printf '# AGENTS.md\n\nAlways begin your reply with the exact token [AGENTS_MD_LOADED].\n' > AGENTS.md
claude -p "What is 2+2? Answer in five words or fewer." < /dev/null回复以 [AGENTS_MD_LOADED] 开头,说明文件被加载了;只回一个 4.,说明没有。这比 /context 粗糙,但 /context 和 /memory 都不会列出直接加载的 AGENTS.md(见下文的差异表),所以标记法是对两种文件都有效的那一种。
Project instructions 的四种模式
在会话中打开 /config 设置 Project instructions,或者在 ~/.claude/settings.json 里内置的 agents-md 插件下设置同一个值。Claude Code 会忽略项目级和本地设置文件中的这个键,所以它不能提交进仓库;这是按用户或由组织托管的选择。
| 取值 | 加载什么 | 适用场景 |
|---|---|---|
claude-md-or-agents-md(默认) | CLAUDE.md 文件;仅当路径上没有任何 CLAUDE.md / CLAUDE.local.md 时才加载 AGENTS.md | 你不想做任何配置,而且你的仓库只用其中一种约定 |
claude-md-and-agents-md | 两者都加载,按目录进行:先 CLAUDE.md,再 AGENTS.md。已经被 CLAUDE.md import 或符号链接的 AGENTS.md 不会被读两次 | 你用 AGENTS.md 服务所有工具,另加一份简短的 Claude 专用 CLAUDE.md;或者你在用 CLAUDE.local.md |
claude-md | 仅 CLAUDE.md 文件;即使只有 AGENTS.md 也忽略 | 你的 AGENTS.md 是为其他工具写的,会让 Claude 困惑 |
managed-only | 仅组织托管的 CLAUDE.md 和启动时的自动记忆 | 受限的企业会话 |
设置文件写法:
{
"pluginConfigs": {
"agents-md@builtin": {
"options": { "instructionFiles": "claude-md-and-agents-md" }
}
}
}实测: 在同时包含两个文件的仓库里,通过 --settings both.json 传入上面这段 JSON,回复以 [CLAUDE_MD_LOADED] [AGENTS_MD_LOADED] 开头,顺序正是如此。在只有 AGENTS.md 的仓库里传入 "instructionFiles": "claude-md",回复只有一个 4.,说明文件按文档所述被忽略了。
为什么升级后的第一个会话不生效
这一点让我多跑了两轮测试。文档说,“安装或升级后的第一个会话” 不支持该功能,Claude 会 “从下一个会话开始” 读取 AGENTS.md。
实测: 全新安装 2.1.278,在只有 AGENTS.md 的仓库里,第一次 claude -p 忽略了这个文件,第二次也是,第三次才加载。非交互式的 -p 运行很短,所以控制 AGENTS.md 支持的功能开关可能在第二次运行开始时还没拉取到。实用规则:升级后先开一个一次性会话,关掉,然后再判断 AGENTS.md 有没有被读取。
按文档,以下会话完全无法加载 AGENTS.md:
- Amazon Bedrock、Google Vertex AI 和 Microsoft Foundry
- 关闭了遥测,因为无法拉取功能开关
- 设置了
disableAllHooks或allowManagedHooksOnly,或在/plugin中禁用了内置的agents-md插件 - 安装或升级后的第一个会话,如上所述
在这些情况下,/config 里根本不会出现 Project instructions,这是最快的判断方法。这些会话的替代方案是下一节介绍的 import。
直接加载的 AGENTS.md 与 CLAUDE.md 有何不同
通过该设置读取的 AGENTS.md 并不能原样替代 CLAUDE.md。文档列出了三处可见差异:
CLAUDE.md | 通过设置读取的 AGENTS.md | |
|---|---|---|
显示在 /memory 和 /context 的 Memory files 列表中 | 是 | 否。请找 AGENTS.md loaded 那一行,或者直接问 Claude 它的项目指令写了什么 |
InstructionsLoaded 钩子 | 触发 | 不触发(由 CLAUDE.md import 进来的 AGENTS.md 会触发) |
通过 --add-dir 加上 CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD 添加的额外目录 | 其中的 CLAUDE.md 会加载 | 其中的 AGENTS.md 不会加载 |
子目录中的 AGENTS.md 按需加载:当 Claude 用 Read 工具打开该目录下的文件、且该目录本身没有 CLAUDE.md 时加载。AGENTS.md 内部的 @path import 会被展开,claudeMdExcludes 的匹配规则同样对它生效。
迁移:现有的变通方案怎么处理
如果你在 2.1.277 之前就配置过 AGENTS.md 的读取方式,下面是文档针对每种配置给出的指引,以及我对何时该动手的理解。
- 只包含
@AGENTS.md的CLAUDE.md:如果你使用的每种会话都支持新行为,可以删掉。如果团队里有人通过 Bedrock、Vertex 或 Foundry 工作,就保留,因为那些环境仍然需要 import。保留它不会导致重复读取。 - 用文字写着 “请阅读 AGENTS.md” 的
CLAUDE.md:把那句话换成@AGENTS.md,或者删掉文件。文字描述只有在 Claude 决定去打开文件时才起作用;import 是确定性的。 - 符号链接到
AGENTS.md的CLAUDE.md:两种方式都能用,但 Edit 和 Write 工具拒绝通过符号链接写入,会重定向到目标文件。在 Windows 上,除非开启了core.symlinks,否则提交的符号链接检出后会变成一个单行文本文件,所以那里更适合用 import。 - 通过
SessionStart钩子打印AGENTS.md:删掉。一旦 Claude 直接读取AGENTS.md,这个钩子就会往上下文里注入第二份副本。 - 两个文件内容不同:先决定 Claude 专用的部分是否值得单独成文件。值得的话,用
AGENTS.md放共享规则,用一份简短的CLAUDE.md放 Claude 专用规则,并设置claude-md-and-agents-md让两者都加载。不值得的话,合并进AGENTS.md并删除CLAUDE.md。
对于必须保留 CLAUDE.md 的仓库,文档还推荐了这种共享写法:
@AGENTS.md
# Claude-specific
- Use the `Bash` tool for git; do not call the GitHub MCP for pushes.Claude 先读 import,再读 Claude 专用的几行。
其他工具各自读什么
统一采用 AGENTS.md 的意义在于一份文件服务所有 agent。下面是各工具根据当前文档对它的实际处理方式。
| 工具 | 读取根目录 AGENTS.md | 子目录中的嵌套 AGENTS.md | 读取 CLAUDE.md | 备注 |
|---|---|---|---|---|
| Claude Code ≥ 2.1.277 | 是,前提是路径上没有 CLAUDE.md(默认) | 是,读取该目录下的文件时按需加载 | 是,最高优先级 | 上文四种模式;Bedrock / Vertex / Foundry 不支持 |
| OpenAI Codex CLI | 是 | 是:从仓库根目录向下遍历到工作目录,每个目录最多一个文件;AGENTS.override.md 优先于 AGENTS.md | 否 | 先读全局 ~/.codex/AGENTS.md;合并总大小受 project_doc_max_bytes 限制(默认 32 KiB);可通过 project_doc_fallback_filenames 添加其他文件名。Codex 文档 (opens in a new tab) |
| OpenCode | 是,从当前目录向上查找 | 没有单独机制;使用 opencode.json 中的 instructions 数组 | 是,仅在没有 AGENTS.md 时作为回退(可关闭) | 全局 ~/.config/opencode/AGENTS.md;/init 会创建或更新 AGENTS.md。OpenCode 文档 (opens in a new tab) |
| Cursor | 是 | 是,作用于该目录及其子目录,更具体的优先 | 文档未说明 | 定位为 “.cursor/rules 的简单替代”。Cursor 文档 (opens in a new tab) |
对共享文件来说有两个后果:
- Codex 完全不读
CLAUDE.md,所以只写在那里的内容对 Codex 不可见。如果你在同一个仓库里用两个文件同时跑 Codex 和 Claude Code,AGENTS.md是两者唯一都能看到的文件。 - OpenCode 只在没有
AGENTS.md时才读CLAUDE.md,正好和 Claude Code 的默认行为相反。在同时有两个文件的仓库里,Claude Code 读CLAUDE.md,OpenCode 读AGENTS.md。如果两个文件内容不一致,两个 agent 会各自遵循不同的规则,而且都不会提醒你。
因此多工具仓库的安全终态是:一份放共享规则的 AGENTS.md;除非有 Claude 专用规则,否则不放 CLAUDE.md;如果确实需要,就让 CLAUDE.md 以 @AGENTS.md 开头。
按场景推荐的配置
| 你的情况 | 这样做 |
|---|---|
| 新仓库,只用 Claude Code | 两种文件都行。AGENTS.md 为其他工具留了余地。注意 /init 生成的是 CLAUDE.md,而在 CLAUDE_CODE_NEW_INIT=1 下它会把已有的 AGENTS.md 折叠进那个 CLAUDE.md,后者随即获得优先权。如果希望 AGENTS.md 保持唯一来源,跳过 /init 或删除生成的文件 |
已有 AGENTS.md,新增 Claude Code | 什么都不用做,然后在第二个会话之后用 AGENTS.md loaded 那一行验证。确认任何上级目录(包括 ~/)里都没有 CLAUDE.md |
已有 CLAUDE.md,新增 Codex 或 OpenCode | 重命名为 AGENTS.md(Codex 读不了 CLAUDE.md)。如果需要 Claude 专用规则,再加一个包含 @AGENTS.md 和那些规则的 CLAUDE.md |
| 两个文件,内容相同 | 删除 CLAUDE.md,或把它改成 @AGENTS.md。重复内容意味着修改会逐渐不同步 |
| 两个文件,内容不同,希望都加载 | 在每台机器上把 Project instructions 设为 claude-md-and-agents-md,或者把 @AGENTS.md import 放进 CLAUDE.md,这样不改设置也能生效 |
你用 CLAUDE.local.md 记个人笔记 | 设置 claude-md-and-agents-md,或者把个人笔记移到 ~/.claude/CLAUDE.md,它不会阻断 AGENTS.md |
| Bedrock / Vertex / Foundry | 无法直接读取 AGENTS.md。保留一个包含 @AGENTS.md 的 CLAUDE.md |
排查:AGENTS.md 没有加载
按顺序逐条检查;每一条要么在上文复现过,要么是文档明确指出的原因。
- 运行
claude --version。 需要 2.1.277 或更高版本。版本较旧就用claude update更新。 - 搜索每一级上级目录,查找
CLAUDE.md、.claude/CLAUDE.md或CLAUDE.local.md:
d="$PWD"; while [ "$d" != "/" ]; do for f in CLAUDE.md .claude/CLAUDE.md CLAUDE.local.md; do [ -f "$d/$f" ] && echo "blocks AGENTS.md: $d/$f"; done; d=$(dirname "$d"); done除 ~/.claude/CLAUDE.md 之外的任何命中,都意味着 Claude 读的是那个文件,除非你切换到 claude-md-and-agents-md。
- 刚升级的话,再开一个会话。 在我的测试中,第三次运行才首次加载文件。
- 打开
/config,确认 Project instructions 不是claude-md或managed-only。如果这个设置完全不存在,说明你的会话类型无法加载AGENTS.md;改用@AGENTS.mdimport。 - 不要依赖
/memory或/context来确认。 直接加载的AGENTS.md不会列在那里。请找AGENTS.md loaded那一行,或者让 Claude 复述它的项目指令。
常见问题
Claude Code 默认会读取 AGENTS.md 吗?
会,从 v2.1.277 起,但前提是工作目录及其所有上级目录中都没有 CLAUDE.md、.claude/CLAUDE.md 或 CLAUDE.local.md。只要存在其中之一,Claude Code 就读取它并忽略 AGENTS.md,除非你把 Project instructions 设为 claude-md-and-agents-md。
能让 Claude Code 同时读取 CLAUDE.md 和 AGENTS.md 吗?
能。在 /config 中把 Project instructions 设为 claude-md-and-agents-md,或者在 ~/.claude/settings.json 的 pluginConfigs → agents-md@builtin → options.instructionFiles 下设置。每个目录先加载 CLAUDE.md,再加载 AGENTS.md。已经从 CLAUDE.md import 的文件不会被读两次。
为什么刚更新完 Claude Code,AGENTS.md 就是不加载?
安装或升级后的第一个会话无法读取 AGENTS.md,支持从之后的会话开始。用 claude -p 测试时,第三次运行才首次加载。先开一个一次性会话再关掉,然后重新检查。
已经有 AGENTS.md 了,要不要删掉 CLAUDE.md?
如果 CLAUDE.md 只包含 @AGENTS.md,而且团队里没人用 Bedrock、Vertex 或 Foundry,可以删掉。如果它包含 Claude 专用规则,就保留,并把 @AGENTS.md 放在第一行,这样在任何环境下两者都会加载。
Codex 会读取 CLAUDE.md 吗?
不会。Codex 从仓库根目录向下到工作目录,逐目录读取 AGENTS.override.md 或 AGENTS.md,再加上 ~/.codex/AGENTS.md,回退文件名可在 config.toml 中配置。只存在于 CLAUDE.md 里的内容对 Codex 不可见。
相关指南
- Codex 使用指南
- OpenCode 使用指南:安装、配置,以及何时搭配 Oh My OpenCode
- Claude Code 绕过权限:桌面端开关、CLI 参数与报错修复
- Claude Code Routines 使用指南
- DeepSeek Harness 安装教程