跳到正文

用 AGENTS.md 给 Codex 写规则

Codex 如何按全局、项目、目录三层发现指令文件,override 文件的作用,32 KiB 上限意味着什么,代码评审规则怎么写,以及指令没生效时怎么排查。

当前有效最后核验

适用平台

  • Codex CLI
  • ChatGPT 桌面应用(Codex)
  • Codex IDE 扩展

官方文档怎么说

  • Codex 在开始工作之前读取 AGENTS.md 文件。

    Custom instructions with AGENTS.md
  • Codex 在启动时构建指令链(每次运行一次;在 TUI 中通常意味着每个启动的会话一次)。

    Custom instructions with AGENTS.md
  • 全局范围下,Codex 在 Codex home 目录(默认 ~/.codex,除非设置了 CODEX_HOME)中读取 AGENTS.override.md(如果存在),否则读取 AGENTS.md;该层只使用第一个非空文件。

    Custom instructions with AGENTS.md
  • 项目范围下,Codex 从项目根目录(通常是 Git 根)向下走到当前工作目录,在路径上每个目录中依次检查 AGENTS.override.md、AGENTS.md,然后是 project_doc_fallback_filenames 中的备用名;每个目录最多包含一个文件。

    Custom instructions with AGENTS.md
  • Codex 从根目录向下拼接这些文件并以空行连接;越靠近当前目录的文件因为出现在合并提示的后面而覆盖更早的指导。

    Custom instructions with AGENTS.md
  • Codex 跳过空文件,并在合并大小达到 project_doc_max_bytes 定义的上限(默认 32 KiB)后停止添加文件。

    Custom instructions with AGENTS.md
  • 找不到项目根目录时,Codex 只检查当前目录。

    Custom instructions with AGENTS.md
  • 可以在 ~/.codex/config.toml 中用 project_doc_fallback_filenames 添加备用文件名,用 project_doc_max_bytes 调整上限;不在该列表中的文件名在指令发现时会被忽略。

    Custom instructions with AGENTS.md
  • 对 GitHub 上的 Codex 代码评审,应在离被规则约束的代码最近的 AGENTS.md 中添加一个 "## Code Review Rules" 小节。

    Custom instructions with AGENTS.md
  • 官方建议规则保持简洁、解释要标记的行为以及任何安全路径或例外,并把格式和 lint 检查留给 CI。

    Custom instructions with AGENTS.md
  • 设置 CODEX_HOME 环境变量可以使用不同的配置档,例如项目专属的自动化用户。

    Custom instructions with AGENTS.md
  • Codex 在每次运行时(以及每个 TUI 会话开始时)重建指令链,因此没有需要手动清理的缓存。

    Custom instructions with AGENTS.md

为什么值得花时间在这上面

官方对 AGENTS.md 的一句话说明是:Codex 在做任何工作之前读取 AGENTS.md 文件。通过把全局指导与项目专属覆盖分层,你可以让每次任务都从一致的预期开始,无论打开的是哪个仓库。

换句话说,这不是"文档",是每次运行都会被注入的前置约束。你在这里写的东西,比你在每次对话开头重复粘贴的东西可靠得多。

发现顺序:三步,记住这三步就够了

Codex 在启动时构建一条指令链(每次运行一次;在 TUI 中通常意味着每个启动的会话一次)。

第一步,全局范围。 在你的 Codex home 目录(默认 ~/.codex,除非你设置了 CODEX_HOME)中,Codex 读取 AGENTS.override.md(如果存在),否则读取 AGENTS.md这一层只使用第一个非空文件。

第二步,项目范围。 从项目根目录(通常是 Git 根)开始,Codex 向下走到你的当前工作目录。找不到项目根目录时,它只检查当前目录。 路径上的每个目录里,它依次检查 AGENTS.override.mdAGENTS.md,然后是 project_doc_fallback_filenames 里的备用名。每个目录最多包含一个文件。

第三步,合并顺序。 Codex 从根目录向下拼接这些文件,以空行连接。越靠近你当前目录的文件越靠后出现在合并提示里,因此覆盖更早的指导。

还有一条容量约束:Codex 跳过空文件,并在合并大小达到 project_doc_max_bytes(默认 32 KiB)后停止添加文件。碰到上限时,调高它,或者把指令拆分到嵌套目录里。

全局指导

在 Codex home 目录里建立持久的默认值,让每个仓库都继承你的工作约定。

mkdir -p ~/.codex

然后写 ~/.codex/AGENTS.md

# ~/.codex/AGENTS.md

## Working agreements

- Always run `npm test` after modifying JavaScript files.
- Prefer `pnpm` when installing dependencies.
- Ask for confirmation before adding new production dependencies.

验证它被加载了:

codex --ask-for-approval never "Summarize the current instructions."

预期结果是 Codex 在提出工作方案之前,先引用 ~/.codex/AGENTS.md 里的条目。

需要临时的全局覆盖而又不想删掉基础文件时,用 ~/.codex/AGENTS.override.md;移除这个 override 即可恢复共享的指导。

分层项目指令

仓库级文件让 Codex 了解项目规范,同时仍然继承你的全局默认值。

仓库根目录:

# AGENTS.md

## Repository expectations

- Run `npm run lint` before opening a pull request.
- Document public utilities in `docs/` when you change behavior.

需要不同规则的嵌套目录,比如 services/payments/AGENTS.override.md

# services/payments/AGENTS.override.md

## Payments service rules

- Use `make test-payments` instead of `npm test`.
- Never rotate API keys without notifying the security channel.

从该目录启动来验证:

codex --cd services/payments --ask-for-approval never "List the instruction sources you loaded."

预期结果是 Codex 先报告全局文件,然后是仓库根的 AGENTS.md,最后是 payments 的 override。

官方给了一条位置上的建议:Codex 到达你的当前目录就停止搜索,所以把覆盖放在尽可能靠近专门工作的位置。

代码评审规则

对 GitHub 上的 Codex 代码评审,在离被规则约束的代码最近的 AGENTS.md 中添加一个 ## Code Review Rules 小节。仓库级检查放根目录,服务专属检查放嵌套文件。

官方给的例子展示了一条好规则该有的形状:

## Code Review Rules

### Experiment cohorts

- Do not filter treatment comparisons on post-exposure behavior, including conversion or retention.
  Safe path: build cohorts from assignment or exposure; report conversion as an outcome.

注意它有两部分:要标记的行为,加上一条安全路径。写法建议是三条——保持简洁、解释要标记的行为以及任何安全路径或例外,并且把格式和 lint 检查留给 CI

最后这条值得听:让评审去做人才能做的判断,让 CI 去做机器擅长的检查。

自定义备用文件名

仓库已经在用别的文件名(比如 TEAM_GUIDE.md)时,把它加进备用列表,Codex 就会把它当作指令文件对待。

# ~/.codex/config.toml
project_doc_fallback_filenames = ["TEAM_GUIDE.md", ".agents.md"]
project_doc_max_bytes = 65536

重启 Codex 或运行一条新命令,更新后的配置才会加载。

之后 Codex 在每个目录里按这个顺序检查:AGENTS.override.mdAGENTS.mdTEAM_GUIDE.md.agents.md不在这个列表中的文件名在指令发现时会被忽略。

顺带一提,上面那行 project_doc_max_bytes = 65536 把上限从 32 KiB 提到了 64 KiB,允许在截断前合并更多指导。

用 CODEX_HOME 切换配置档

想用不同的配置档——比如一个项目专属的自动化用户——设置 CODEX_HOME 环境变量:

CODEX_HOME=$(pwd)/.codex codex exec "List active instruction sources"

预期输出会列出相对于这个自定义 .codex 目录的文件。

排查

什么都没加载。 确认你在预期的仓库里,并且 codex status 报告的工作区根目录符合预期。确保指令文件有内容——Codex 忽略空文件

出现了错误的指导。 在目录树更上层或你的 Codex home 里找一个 AGENTS.override.md。重命名或移除这个 override,就会回落到常规文件。

Codex 忽略了备用文件名。 确认你在 project_doc_fallback_filenames 里写对了名字,然后重启 Codex 让更新后的配置生效。

指令被截断了。 调高 project_doc_max_bytes,或者把大文件拆分到嵌套目录里,以保住关键指导。

配置档混淆。 启动 Codex 之前先 echo $CODEX_HOME。非默认值意味着 Codex 指向的 home 目录和你编辑的那个不是同一个。

指令看起来是旧的。 在目标目录重启 Codex。官方明确说明:Codex 在每次运行时(以及每个 TUI 会话开始时)重建指令链,因此没有需要手动清理的缓存。

实际操作

  1. 建立全局默认值:确保 ~/.codex 存在,在其中创建 AGENTS.md 写下可复用的偏好。
  2. 在仓库根目录添加 AGENTS.md,写清这个项目的基本约定。
  3. 需要不同规则的子目录里添加 AGENTS.override.md,把覆盖放在尽可能靠近专门工作的位置。
  4. 需要代码评审规则时,在离被约束代码最近的 AGENTS.md 里添加 "## Code Review Rules" 小节。
  5. 仓库已经在用别的文件名时,把它加进 ~/.codex/config.toml 的 project_doc_fallback_filenames。
  6. 验证:在仓库根目录运行 codex --ask-for-approval never "Summarize the current instructions.",确认它按优先级顺序回显了全局和项目文件的指导。

Windows 步骤

  1. 指令发现规则与平台无关;Windows 上 Codex home 目录默认解析到 %USERPROFILE%\\.codex。
  2. 如果你同时使用 Windows 版 ChatGPT 桌面应用和 WSL 里的 Codex CLI,两者默认不共享 Codex home,因而也不共享全局 AGENTS.md——处理方式见《在 Windows 上使用 ChatGPT 桌面应用与 Codex》。

手机步骤

不适用AGENTS.md 是仓库和本地文件系统上的配置文件,官方这一页不涉及手机端行为。通过 Remote 从手机指挥主机上的工作时,生效的是主机上的指令链。

使用案例

  • 让每个仓库都继承你的个人工作约定,比如改完 JavaScript 一律跑测试。
  • 给支付服务这类需要不同流程的子目录单独设规则。
  • 用 Code Review Rules 把团队反复强调的评审要点固化下来。
  • 用 AGENTS.override.md 临时覆盖全局指导,之后删掉即可恢复。

常见错误

  • 把所有指导堆进一个巨大的根 AGENTS.md。合并大小达到 project_doc_max_bytes(默认 32 KiB)后 Codex 会停止添加文件。
  • 用了仓库自己的文件名(比如 TEAM_GUIDE.md)却没加进 project_doc_fallback_filenames,然后奇怪它没被读取。
  • 在同一个目录里同时留着 AGENTS.override.md 和 AGENTS.md,然后困惑为什么后者没生效——每个目录最多包含一个文件,override 优先。
  • 把格式和 lint 规则写进 Code Review Rules。官方建议把这类检查留给 CI。
  • 改完配置不重启 Codex 就期待新的备用文件名生效。

常见问题

Codex 到底按什么顺序读这些文件?
三步。第一,全局范围:在 Codex home 目录(默认 ~/.codex,除非设置了 CODEX_HOME)读取 AGENTS.override.md(如果存在),否则读取 AGENTS.md,该层只使用第一个非空文件。第二,项目范围:从项目根目录(通常是 Git 根)向下走到当前工作目录,在路径上每个目录中依次检查 AGENTS.override.md、AGENTS.md,然后是备用名,每个目录最多包含一个文件。第三,合并顺序:从根向下拼接,以空行连接,越靠近当前目录的文件越靠后,因此覆盖更早的指导。
override 文件是干什么用的?
它让你在不删除基础文件的情况下临时覆盖指导。官方给的用法是:需要临时的全局覆盖时用 ~/.codex/AGENTS.override.md,移除该 override 即可恢复共享的指导。在项目里同理——某个目录下存在 AGENTS.override.md 时,同目录的 AGENTS.md 会被忽略。
指令太长会怎样?
Codex 会跳过空文件,并在合并大小达到 project_doc_max_bytes(默认 32 KiB)后停止添加文件。碰到这个上限时,官方给的两条办法是:调高上限,或者把指令拆分到嵌套目录里。
代码评审规则该怎么写?
在离被规则约束的代码最近的 AGENTS.md 中添加一个 "## Code Review Rules" 小节——仓库级检查放根目录,服务专属检查放嵌套文件。官方对写法有三条建议:保持简洁、解释要标记的行为以及任何安全路径或例外、把格式和 lint 检查留给 CI。
怎么确认它到底加载了什么?
官方给了几种验证方式。在仓库根目录运行 codex --ask-for-approval never "Summarize the current instructions.",Codex 应按优先级顺序回显全局和项目文件的指导。用 codex --cd subdir --ask-for-approval never "Show which instruction files are active." 确认嵌套的 override 替换了更宽泛的规则。想审计加载了哪些指令文件,可以用 codex -c log_dir=./.codex-log 开启纯文本 TUI 日志后检查 ./.codex-log/codex-tui.log,或者在启用会话日志时检查最近的 session-*.jsonl 文件。

官方来源

这些是本教程对照核验的官方页面。需要厂商的原始措辞时请直接查阅。

来源状态