主流 Agent 入门教程 / Codex
9. 用AGENTS与配置文件教会Codex理解项目
原文备份 · 第 10 / 27 篇 · 查看极客时间原知识库 ↗
本篇目录 · 13 节
来源:Codex
预计阅读时间:45 分钟
本篇目标:把 TaskFlow 的结构、测试方式和安全约束固化下来,并通过一次新会话验证它们是否真的生效。
前面几篇里,我们反复告诉 Codex:
- TaskFlow 只使用 Python 标准库;
- 测试必须使用临时目录;
- 不能读写真实
data/tasks.json; - 修改后要先跑局部测试,再跑完整测试;
- CLI 行为变化时要同步 README。
如果这些要求每次都由你重写,时间久了总会漏掉一两条。AGENTS.md 的作用,就是把“这个仓库中应该长期遵守的工作方式”放进项目,让 Codex 在开始任务前自动读取。
配置文件解决的是另一类问题:Codex 用什么沙箱模式、什么审批策略、哪些功能开启。两者一个管“在项目里怎样做事”,一个管“Codex 以什么运行方式开始工作”。
一、README、AGENTS.md 和 config.toml 分别管什么
| 文件 | 主要读者 | 适合放的内容 | 不适合放的内容 |
|---|---|---|---|
README.md |
项目使用者 | 安装、功能、命令示例、数据格式 | Agent 的内部工作约定 |
AGENTS.md |
Codex 等开发 Agent | 项目结构、验证命令、持续约束、完成标准 | API Key、短期临时任务、大段用户手册 |
config.toml |
Codex 运行时 | 模型、推理强度、沙箱、审批、功能开关等 | 项目业务规则和敏感凭据 |
一个实用的判断方法是:
- 用户需要知道的,写进 README;
- Codex 每次开工都应遵守的,写进
AGENTS.md; - Codex 应该以什么权限和功能运行,写进
config.toml; - 只对当前一次任务有效的,直接写在本次提示词里。
官方建议也是保持 AGENTS.md 简短、准确,从重要规则开始,再根据反复出现的问题逐步增加。参考:Codex best practices。
二、用 /init 建立初稿,但不直接照单全收
在 TaskFlow 根目录启动 Codex,然后输入:
/init
/init 会根据当前目录快速生成一份初始 AGENTS.md。它是一个起点,不是项目规则的最终答案。
生成后先不要急着提交,让 Codex 说明它是从哪些文件推断出项目命令和结构的。它能看见当前仓库里有什么,却不一定知道我们前面特别在意的数据安全和验收顺序。
可以继续输入:
请审查刚生成的 AGENTS.md,暂时不修改。
请核对:
1. 项目结构是否与当前仓库一致;
2. 测试命令是否已经实际运行验证;
3. 是否写明测试使用临时目录;
4. 是否保护真实 data/tasks.json;
5. 是否保留 Python 标准库约束;
6. 是否写清了修改后的验收方式;
7. 是否有空泛、重复或无法执行的句子。
对每个问题给出证据和修订建议。
三、为 TaskFlow 写一份足够用、但不臃肿的 AGENTS.md
可以把下面的版本作为核对基准,再按你的实际文件名调整:
# TaskFlow 项目协作指南
## 项目概况
TaskFlow 是一个使用 Python 3.11+ 标准库开发的命令行任务管理器,不依赖第三方库。
保持实现简单,并确保现有 JSON 数据仍然兼容。
## 重要文件和目录
- `taskflow.py`:CLI 入口和核心功能
- `tests/`:unittest 测试
- `samples/`:不含敏感信息的示例输入
- `README.md`:面向用户的命令和使用说明
## 验证方式
- macOS、Linux、WSL2:`python3 -m unittest discover -s tests -v`
- Windows:`py -m unittest discover -s tests -v`
- 修改后先运行相关测试,再运行完整测试。
- 修改 CLI 行为后,使用临时数据运行受影响的命令,并记录退出码。
- 不要只根据 Codex 的完成报告判断结果,必须检查实际输出和 Diff。
## 项目约束
- 除非任务明确改变这一约定,否则只使用 Python 标准库。
- 自动测试必须使用临时目录。
- 测试和调试不得读取或覆盖真实的 `data/tasks.json`。
- 日常开发任务不得访问网络或安装依赖。
- 除非已经制定并测试迁移方案,否则必须兼容旧任务数据。
- 不得提交密钥、个人绝对路径、运行数据或缓存文件。
- 不要进行与当前任务无关的重构。
## 完成标准
- 请求的功能已经实现,重要错误场景有测试覆盖。
- 相关测试和完整测试全部通过。
- 用户可见的 CLI 行为发生变化时,已经同步更新 `README.md`。
- 最终报告列出修改的文件、运行的命令、实际结果和仍然存在的限制。
这份文件里没有“写出优雅代码”“遵循最佳实践”这类句子,因为它们无法直接验收。“测试使用临时目录”和“CLI 变化同步 README”则是可以观察的行为。
把它交给 Codex 时,不要让它不加判断地整段覆盖:
请用下面的内容作为核对基准,修订仓库根目录的 AGENTS.md。
先根据当前项目确认文件名、命令和目录是否真实存在。保留初稿中已经准确的项目信息,删除重复或空泛内容。不要把示例中与当前仓库不符的路径照抄进去。
<粘贴上面的基准内容>
修订后说明删除、保留和新增了什么,以及依据是什么。
四、理解 AGENTS.md 的发现顺序
Codex 可以同时加载多层项目指令。官方文档描述的核心顺序是:
- 先读取 Codex 主目录中的全局指导,默认位于
~/.codex; - 再从项目根目录向当前工作目录逐层查找;
- 同一目录中优先检查
AGENTS.override.md,然后是AGENTS.md; - 越靠近当前工作目录的指导越具体,会出现在合并后的更后面。
官方详细说明:Custom instructions with AGENTS.md。
对 TaskFlow 来说,刚开始只需要根目录的一份 AGENTS.md:
taskflow/
├── AGENTS.md
├── taskflow.py
├── README.md
├── samples/
└── tests/
不要因为支持分层,就立即在每个目录放一份。只有当子目录确实存在不同的构建或审查规则时,再增加更具体的指导。否则重复规则很容易日后不一致。
AGENTS.override.md 更适合明确的临时覆盖或特殊目录约束,不要把它当成“更高级的默认文件”到处使用。
五、不要假设它生效了,开新会话验证
AGENTS.md 的意义是影响新的工作过程。因此,修改完成后退出当前 Codex,在 TaskFlow 根目录重新启动。
先让它总结当前指令:
请只读取当前会话已加载的项目指导,不要修改文件。
请列出:
1. 你发现的指令文件及所在层级;
2. TaskFlow 的完整测试命令;
3. 对真实数据的保护规则;
4. 修改 CLI 后的文档要求;
5. 当前任务的完成标准。
还可以从终端做一次只读验证:
codex --ask-for-approval never "Summarize the current project instructions and their sources. Do not modify files."
官方文档也使用这类方式检查指令是否被加载。注意,--ask-for-approval never 只是说不弹出审批,不是赋予 Full Access;命令仍然受当前沙箱和配置约束。
如果它没有说出 TaskFlow 的临时目录和数据保护规则,检查:
- 文件名是否真的是
AGENTS.md; - 文件是否位于仓库根目录到当前目录的路径上;
- 是否存在更近的
AGENTS.override.md; - 启动 Codex 时是否位于你以为的项目目录;
- 修改后是否新开了会话。
六、用一个小任务测试行为,不只是复述规则
能复述 AGENTS.md 不等于工作时一定会遵守。继续给它一个边界清楚的小任务:
为 import-csv 增加一个“CSV 只有表头、没有数据行”的测试。
请自行根据项目指导决定使用什么测试目录、需要运行哪些验证,以及是否需要更新 README。不要读写真实任务数据。
观察它是否会:
- 使用临时目录;
- 不安装新依赖;
- 先运行相关测试,再运行完整测试;
- 在结尾报告实际运行的命令和结果;
- 根据用户可见行为是否改变,判断 README 是否需要修改,而不是机械地每次都改。
如果它遗漏了某一条,先判断是指令写得不清楚,还是本次执行偏离。只有当一个要求对后续任务都有价值时,才应该补进 AGENTS.md。
七、什么时候应该修订 AGENTS.md
适合加入的内容:
- Codex 已经重复犯过的错误;
- 评审中反复出现的同一条要求;
- 真实可运行的构建、测试和 lint 命令;
- 仓库特有的数据、兼容性或安全约束;
- 可以明确检查的完成标准。
不适合加入的内容:
- 只用一次的具体功能需求;
- 一大段代码实现细节;
- 与当前仓库无关的个人偏好;
- “保证高质量”“仔细思考”之类无法验收的口号;
- 密钥、令牌、账号密码和敏感内部地址;
- 已经过时的目录或命令。
规则越多不代表效果越好。如果一份 AGENTS.md 已经让新成员都很难找到测试命令,Codex 同样会被无关信息干扰。
八、加入最小项目配置
Codex 的个人默认配置通常放在:
~/.codex/config.toml
仓库特定配置可放在:
.codex/config.toml
官方参考:Sample configuration。
对 TaskFlow 的日常开发,一份小配置就足够:
sandbox_mode = "workspace-write"
approval_policy = "on-request"
它表示:Codex 可以在工作区内完成日常开发,需要超出边界时再请求审批。
配置文件不需要追求“把所有可用字段都写上”。字段越多,未来过时或互相冲突的可能性越高。在增加当前版本的其他配置项之前,先查阅官方配置参考或使用 codex --help。
还要注意两个边界:
- 不要把 API Key 或其他秘密写进会提交到 Git 的
.codex/config.toml; - 不要因为项目里放了一份高权限配置,就对一个陌生仓库不加检查地使用。
九、用“文件发现”和“实际行为”做双重验收
最终验收不应该只问“你看到 AGENTS.md 了吗”,而应该包含两层。
第一层:它加载了哪些规则
让新会话列出指令来源和关键规则。如果来源不对,先解决目录和文件发现问题。
第二层:它真的按规则工作了吗
用一个小任务检查临时目录、测试顺序、README 判断和最终报告。如果行为与文字不一致,规则就还不算真正落地。
完成后输入:
/diff
确认没有密钥、个人绝对路径和与仓库不符的命令,再按实际变更提交:
git add AGENTS.md .codex/config.toml
git commit -m "add Codex project guidance"
如果验证小任务还改了测试或 README,先在 Diff 中确认这些改动,再把实际需要的文件加入提交。
十、一份可复用的项目指导检查清单
新建或审查 AGENTS.md 时,可以问:
- 文件中的目录和命令是否真实存在?
- 测试命令是否已经实际运行过?
- 哪些是项目长期约束,哪些只是当前任务?
- 规则是否可以被观察和验收?
- 是否正在重复 README、CI 或其他文档的大段内容?
- 是否有过时命令、本机路径或敏感信息?
- 更具体的子目录规则是否真有必要?
- 是否可以通过一个小任务验证它确实生效?
本篇小结
AGENTS.md 不是越长越好。它应该记录真实、持续、可执行的项目规则;config.toml 则负责 Codex 的运行默认值。新会话能复述规则,只是第一步;它能在真实任务中正确使用临时目录、运行测试并保护数据,才说明项目指导真正发挥了作用。
下一篇,我们会把 TaskFlow 升级到 2.0,并学会怎样用计划、目标、恢复和上下文整理管理一项更长的工作。