Claude Code 和 Codex 共用一份 AGENTS.md:第三方 API 下 2.1.281 前读不到,附 skillshare 同步技能实测

一份 AGENTS.md 同时给 Claude Code 和 Codex 用。我们用本站 Key 实测:Claude Code 2.1.280 读不到 AGENTS.md,2.1.281 起能读到;老版本在 CLAUDE.md 里写一行 @AGENTS.md 也能读到。技能用 skillshare 一次同步到两边。

5 分钟阅读
Claude Code 和 Codex 共用一份 AGENTS.md:第三方 API 下 2.1.281 前读不到,附 skillshare 同步技能实测

先说结论:Codex 一直读 AGENTS.md,Claude Code 从 2.1.277 起也会读——前提是项目里没有 CLAUDE.md。但如果你的 Claude Code 是通过自定义 ANTHROPIC_BASE_URL 接第三方接口(比如本站),2.1.281 之前的版本读不到 AGENTS.md。

我们用本站 Key 实测:Claude Code 2.1.280 三次都没读到 AGENTS.md 里的规则,2.1.281 和 2.1.311 每次都读到;Codex 0.164.0 读同一份文件也没问题。不想升级的话,在 CLAUDE.md 里写一行 @AGENTS.md,2.1.280 也能读到。技能目录可以用 skillshare 一次同步到两边。

创建 API Key,用一个 Key 同时接 Claude Code 和 Codex →

为什么要共用一份 AGENTS.md

同一个仓库里,有人用 Claude Code,有人用 Codex,或者你自己两个都用。项目规则(怎么跑测试、哪些目录不能动、交付时要说明什么)如果分别写在 CLAUDE.md 和 AGENTS.md 里,过几周两份就会对不上。

更省事的做法是:规则只写在 AGENTS.md 一份里,让两个工具都读它。Codex 原生读 AGENTS.md;Claude Code 需要注意版本和接入方式,下面细说。

CLAUDE.md 本身怎么写,见《Claude Code 的 CLAUDE.md 怎么写》;Codex 读 AGENTS.md 的覆盖顺序,见《Codex 自动化怎么搭》里的 AGENTS.md 一节。

官方更新日志怎么说

据 Claude Code 官方更新日志,和 AGENTS.md 有关的是这两条:

版本更新日志原文大意
2.1.277Added AGENTS.md support: in a project with no CLAUDE.md, Claude Code reads AGENTS.md instead开始支持 AGENTS.md:项目里没有 CLAUDE.md 时改读 AGENTS.md
2.1.281Changed AGENTS.md support to also work on Amazon Bedrock, Google Vertex AI, Microsoft Foundry, LLM gateways, and sessions with telemetry disabledAGENTS.md 支持扩展到 Bedrock、Vertex、Foundry、LLM gateways 和关闭遥测的会话

也就是说,2.1.277 到 2.1.280 这几个版本虽然“支持 AGENTS.md”,但只在官方直连时生效。用自定义 Base URL 接第三方接口属不属于“LLM gateways”,更新日志没写死,所以我们直接测了。

准备:两边都接上本站接口

Claude Code 写在全局 ~/.claude/settings.json:

json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
    "ANTHROPIC_AUTH_TOKEN": "你的 API Key"
  },
  "model": "claude-sonnet-5-5"
}

注意 Claude Code 的地址是 https://api.aicodewith.ai,不要加 /v1。完整步骤见《Claude Code 如何接入第三方 API》。

Codex 写在全局 ~/.codex/config.toml:

toml
model_provider = "aicodewith"
model = "gpt-6.1-sol"
model_reasoning_effort = "medium"

[model_providers.aicodewith]
name = "aicodewith"
base_url = "https://api.aicodewith.ai/chatgpt/v1"
wire_api = "responses"
experimental_bearer_token = "你的 API Key"

每个字段的含义见《Codex config.toml 配置指南》。两边用同一个 Key 就行。

实测:一条规则看出读没读到

在一个空的 git 仓库里只放一个 AGENTS.md,写一条一眼就能看出有没有生效的规则:

markdown
# 项目规则

- 每次回答的第一行必须原样写:AGENTS_RULE_7341
- 之后用中文回答,不超过两句话。

然后让每个版本回答同一个问题:

bash
claude -p "1+1 等于几?"
codex exec -s read-only "1+1 等于几?"

回答第一行出现 AGENTS_RULE_7341,就说明读到了。测试时间 2026 年 10 月 27 日,结果如下:

客户端版本项目里的文件读到 AGENTS.md 了吗单次耗时
Claude Code 2.1.280只有 AGENTS.md3 次都没读到,只回答“1+1 等于 2”约 2–3 秒
Claude Code 2.1.281只有 AGENTS.md2 次都读到约 2.5–4 秒
Claude Code 2.1.311只有 AGENTS.md3 次都读到约 1.5–2.3 秒
Claude Code 2.1.280AGENTS.md + 只写了 @AGENTS.md 的 CLAUDE.md2 次都读到约 2.3 秒
Claude Code 2.1.311AGENTS.md + 普通 CLAUDE.md(没写 @AGENTS.md)2 次都没读到约 1.8–2.6 秒
Codex 0.164.0只有 AGENTS.md2 次都读到约 4 秒

能看出三件事:

  1. 通过本站接口用 Claude Code 时,分界线就是 2.1.281。2.1.280 不报错,只是安静地不读,最容易被忽略。
  2. 老版本在 CLAUDE.md 里写一行 @AGENTS.md 就能读到,这是不依赖版本的兼容写法。
  3. 新版本也一样:项目里只要有 CLAUDE.md,Claude Code 就不再自动读 AGENTS.md,除非 CLAUDE.md 里导入了它。

另外,2.1.280 启动时会提示不认识 claude-sonnet-5-5 这个模型名(这个版本的模型清单比较旧),不影响回答,升级后就没有这条提示了。

怎么配:按你的情况选一种

情况一:Claude Code 是 2.1.281 或更新,项目里没有 CLAUDE.md。 只放 AGENTS.md 就行。先确认版本:

bash
claude --version
claude update

情况二:版本更老,或者项目里已经有 CLAUDE.md。 把共用规则挪进 AGENTS.md,CLAUDE.md 第一行写导入,Claude 专属的内容写在下面:

markdown
@AGENTS.md

# 只给 Claude Code 的补充
- 子 Agent 只用只读工具。

@AGENTS.md 要写在正文里,不要放进代码块,否则不会展开。

情况三:想改默认行为。 据官方更新日志,2.1.277 起可以在 /config 的 “Project instructions” 里修改项目说明文件的读取方式。

不管哪种,配完都建议照上面的方法放一条无害的标记规则测一次,确认后再删掉标记。

技能:用 skillshare 一次同步到两边

规则共用了,技能(Skill)最好也只维护一份。skillshare 是一个开源命令行工具,把一个源目录里的技能同步到 Claude Code、Codex 等多个工具的技能目录。我们测的是 v0.27.0,按项目级用法:

bash
# 安装(macOS / Linux,默认装到 ~/.local/bin)
curl -fsSL https://raw.githubusercontent.com/runkids/skillshare/main/install.sh | sh

# 在项目根目录初始化,只同步到 Claude Code 和 Codex
skillshare init -p --targets claude,codex

# 技能放在 .skillshare/skills/<技能名>/SKILL.md,然后同步
skillshare sync -p

我们放了一个写提交信息的技能 commit-msg,要求第一行以 [team] 开头、最后一行写 Skill-Used: commit-msg。同步约 1.7 秒,输出:

text
✓ claude    1 linked
✓ codex     1 linked

✓ Synced 1 skill to 2 targets

同步后,.claude/skills/commit-msg 和 .agents/skills/commit-msg 都是指向 .skillshare/skills/commit-msg 的链接,改源文件两边同时生效。

然后让两边各写一条提交信息:

客户端怎么问结果耗时
Claude Code 2.1.311直接说“帮我写一条 git 提交信息”自动用上技能,第一行 [team],末尾有 Skill-Used: commit-msg约 8 秒
Codex 0.164.0同样的话,问了 2 次能在技能列表里看到 commit-msg,但两次都没自动用,写成了普通的 docs: 格式约 7–10 秒
Codex 0.164.0提示词开头加 $commit-msg 点名用上技能,格式正确约 10 秒

所以在 Codex 里,重要的技能建议直接点名调用,或者把技能的 description 写得更具体,让它更容易被自动选中。技能怎么写、怎么触发,见《Agent Skills 怎么用》和《Codex Skills 怎么用》。

据 skillshare 文档,默认的 merge 模式按技能逐个建链接,工具目录里原来就有的技能会保留;如果你的系统不方便用链接,可以用 skillshare target <名字> --mode copy 改成复制。

创建 API Key,在 Claude Code 和 Codex 里跑同一套规则 →

安全:别在下载目录里打开 Agent

AGENTS.md 是 Agent 会照做的文件,所以它也会被人利用。据 Forever Security 的报告,他们在一位客户电脑的 ~/Downloads 目录里发现了一个伪装成工程笔记的恶意 AGENTS.md:网页可以不经点击把文件下载到这个目录,用户在这里启动 Codex 后,Codex 按文件里的指示改了自己的 ~/.codex/config.toml,并尝试安装恶意 npm 包。报告还说,他们用类似的 CLAUDE.md 在 Claude Code 上复现了把接口请求改发到别处、拿走登录令牌的做法。

对用第三方 Key 的人,最需要注意的是:Base URL 一旦被改走,你的 Key 就会被发到别人的服务器上。几条简单习惯:

  • 只在项目目录里启动 Claude Code 和 Codex,不要在下载目录、桌面这类杂物目录里启动;
  • 拉代码后先看一眼 AGENTS.md、CLAUDE.md 有没有陌生改动(git diff 就行);
  • 留意 ~/.codex/config.toml 里突然多出的 mcp_servers,以及 ~/.claude/settings.json 或项目 .claude/settings.json 里被改动的 ANTHROPIC_BASE_URL;
  • 发现可疑文件,立刻到控制台删掉旧 Key、新建一个。

常见问题

AGENTS.md 和 CLAUDE.md 能同时放吗?

能,但要在 CLAUDE.md 里写 @AGENTS.md。实测 2.1.311 在两个文件都存在、CLAUDE.md 没导入时,不会读 AGENTS.md。

怎么知道自己的 Claude Code 是不是 2.1.281 之后的?

运行 claude --version。低于 2.1.281 又不方便升级,就用 @AGENTS.md 的写法。

Claude Code 跑到一半想换 Codex 接着做呢?

见《Claude Code 跑一半怎么交给 Codex》,用 handoff.md 交接上下文,同一个 Key 两端切换。

创建 API Key,开始用 →