Codex CLI 子代理工程化工作流指南
当项目越来越复杂,只让一个 AI 从头分析到尾,容易出现上下文混乱、遗漏调用链、重复搜索和修改范围失控等问题。Codex CLI 的子代理(Subagent)能力,可以把前端分析、后端分析、代码审查等独立任务并行交给不同角色,再由主线程统一判断、修改和验证。
真正有效的多代理协作,不是简单地“多开几个 Agent”,而是同时明确三件事:
- 每个 Agent 负责什么
- 它能使用哪些能力
- 它必须交付什么证据
本文先带你完成一次最小可用配置,再介绍 Vue + Go 项目常用的角色设计、权限边界、端到端案例和日常工作流。
本文依据 2026-07-13 的官方文档,并使用
codex-cli 0.144.1核验命令和配置。Codex 更新较快,版本敏感内容应以当前环境和文末官方文档为准。
5 分钟快速开始
先用一个面向只读分析的最小 Agent 验证配置链路,再扩展成前端、后端和审查三个角色。
第一步:检查 Codex 环境
在项目根目录执行:
1 | codex --version |
这些命令分别用于确认:
- Codex CLI 版本
multi_agent功能的当前状态- 当前账号和登录方式可见的模型
- 配置、认证和本地运行环境
当前 Codex 版本通常已经默认启用多 Agent。如果命令或功能不存在,应先确认 CLI 版本,而不是直接照抄后面的配置。
第二步:准备项目目录
1 | 项目根目录/ |
这里有一个容易踩坑的规则:
同一目录最多加载一个指导文件,并按
AGENTS.override.md、AGENTS.md的顺序查找。不要在项目根目录同时放这两个文件,否则根目录的AGENTS.md会被忽略。
根目录的 AGENTS.md 适合保存仓库结构、构建命令、测试命令和交付标准。某个子目录需要更严格的规则时,再在那个子目录放 AGENTS.override.md。
第三步:创建最小配置
文件 .codex/config.toml:
1 | [agents] |
文件 .codex/agents/code-mapper.toml:
1 | name = "code_mapper" |
独立 Agent 文件必须包含 name、description 和 developer_instructions。没有显式指定模型时,它会继承父会话的模型配置。
.codex/agents/*.toml 会被自动发现,不需要再通过 [agents.<name>] 和 config_file 重复注册。Agent 类型以 name 字段为准,文件名只是便于维护的约定。
第四步:信任项目并以只读权限新开会话
项目级 .codex/ 配置只会在项目被信任时加载。信任前应先检查仓库中的配置、Hook 和外部服务,确认项目来源可靠。
首次从仓库启动 Codex 时,如果出现 trust 提示,应在检查配置后选择信任。新增或修改 Agent TOML 后,不要依赖当前会话热加载,应退出旧会话并重新启动。
本节要验证本地文件系统与命令执行的只读边界,因此从项目根目录使用:
1 | codex --sandbox read-only --ask-for-approval never |
当前 CLI 创建子代理时,会在加载角色配置后重新应用父会话的实时权限。也就是说,TOML 中的 sandbox_mode 和 approval_policy 不能单独保证子代理只读;委派时父会话对本地文件系统和命令执行的实时权限,才是这部分的最终边界。
第五步:执行第一次委派
在新会话中输入:
1 | 请使用 code_mapper 子代理,只读分析当前项目的构建入口。 |
子代理开始运行后,可以使用 /agent 查看和切换正在运行的 Agent 线程。
/agent 不是可用 Agent 类型列表。还没有派出子代理时看不到 code_mapper,并不代表配置失败。
子代理是什么
子代理可以理解为主线程临时派出的独立工作单元。一个典型协作结构如下:
1 | 主线程(Orchestrator) |
三类职责需要明确分开:
- 主线程:识别意图、拆分任务、合并证据、制定方案、修改代码和验证结果
- 分析子代理:在限定范围内查找代码和证据,默认不修改文件
- 审查子代理:检查真实风险,按严重程度输出发现,不负责凑数量
子代理的报告只是决策输入。最终仍要由主线程判断结论是否可信、证据是否冲突,以及哪些假设还需要验证。
什么时候使用子代理
子代理的价值是降低不确定性,不是增加流程仪式。
| 任务类型 | 是否推荐 | 处理方式 |
|---|---|---|
| 文案修改、样式微调 | 不推荐 | 主线程直接修改并自查 |
| 已定位的单文件 Bug | 一般不需要 | 主线程修复,可选审查 Agent 检查 diff |
| 普通 Bug,根因不明确 | 推荐 | 前端和后端 Agent 并行排查 |
| 新功能或跨模块需求 | 推荐 | mapper 分析现状,reviewer 检查方案风险 |
| 权限、支付、医疗数据、事务 | 强烈推荐 | 增加安全或数据库专用 Agent |
| 上线前检查 | 推荐 | reviewer 检查回归和缺失测试 |
可以用一个简单标准判断:
已经知道改哪个文件、为什么改、怎么验证,就直接修改;仍需寻找调用链、确认影响范围或比较方案,再使用子代理。
角色设计
内置 Agent
Codex 当前提供三种内置 Agent:
| Agent | 定位 | 适用场景 |
|---|---|---|
default | 通用后备角色 | 未指定专业角色的通用任务 |
worker | 偏执行 | 实现功能、修复 Bug |
explorer | 偏只读探索 | 查找代码、分析结构和调用链 |
内置 Agent 的实际能力仍受父会话权限和运行时配置影响。可用类型也可能随版本变化,不能把 /agent 当作配置类型列表。
项目自定义角色
对于常见前后端项目,可以先从“一主三从”开始:
| Agent | 负责范围 | 不负责 |
|---|---|---|
frontend_mapper | 路由、页面、组件、状态、API 调用和 UI 回归点 | 修改页面或实现功能 |
backend_mapper | Router、Handler、Service、Repository、Model、事务和鉴权 | 连接数据库或执行迁移 |
reviewer | 正确性、回归、权限、并发、事务和缺失测试 | 泛泛点评风格或代替主线程改代码 |
不要把 reviewer 简称为“测试”。本文中的 reviewer 只做审查,真正负责运行验证步骤的角色应另命名为 qa_verifier。
配置并行数量
文件 .codex/config.toml 可以这样配置:
1 | [agents] |
| 配置项 | 准确含义 |
|---|---|
max_threads | 同时打开的代理线程上限;不是简单的“子代理个数” |
max_depth | 嵌套创建深度;根线程深度为 0,设为 1 时只允许创建一层子代理 |
job_max_runtime_seconds | spawn_agents_on_csv 批量任务中每个 CSV 工作项的默认超时 |
max_threads 默认是 6,max_depth 默认是 1;CSV 工作项未显式设置时,默认超时为 1800 秒。普通子代理的运行时间不能只靠 job_max_runtime_seconds 控制。
模型选择
当前 GPT-5.6 模型可以按任务性质选择:
| 模型 | 定位 | 适合任务 |
|---|---|---|
gpt-5.6-luna | 高吞吐、适合明确且重复的任务 | 结构化提取、分类、固定格式扫描 |
gpt-5.6-terra | 日常均衡 | 需要一定判断和工具调用的代码探索 |
gpt-5.6-sol | 复杂开放任务 | 深度审查、安全分析、复杂方案决策 |
本文示例使用:
frontend_mapper、backend_mapper:gpt-5.6-luna+mediumreviewer:gpt-5.6-sol+high
如果 mapper 面对陌生大型仓库、任务边界不清或 Luna 输出不稳定,可以先切换到 Terra。模型可用性取决于套餐、工作区策略、登录方式和当前模型目录,应通过 /model 或 codex debug models 确认,不要依赖文章中的静态列表。
三个可复制的 Agent 配置
下面仍在角色文件中声明 sandbox_mode 和 approval_policy,用于表达这个角色期望的权限。当前 CLI 会用父会话的实时权限覆盖它们,因此委派前仍要确认父会话处于只读模式。
前端分析 Agent
文件 .codex/agents/frontend-mapper.toml:
1 | name = "frontend_mapper" |
后端分析 Agent
文件 .codex/agents/backend-mapper.toml:
1 | name = "backend_mapper" |
代码审查 Agent
文件 .codex/agents/reviewer.toml:
1 | name = "reviewer" |
如果项目不是 Vue + Go,应替换名称、技术术语和必查调用链,而不是机械复制这三份配置。
权限边界
只读不是在提示词里写一句“不要修改”就绝对安全。需要理解下面几层控制:
| 控制层 | 作用 |
|---|---|
| 父会话的 sandbox 和 approval | 当前 CLI 创建子代理时会重新应用,是实际生效的权限边界 |
Agent TOML 中的 sandbox_mode、approval_policy | 表达角色期望权限,但不能单独保证子代理只读 |
sandbox_mode = "read-only" | 在生效时禁止命令写入文件系统,并限制命令网络访问 |
approval_policy = "never" | 从不发起批准请求;被沙箱或组织策略拒绝的动作直接失败 |
web_search = "disabled" | 关闭原生 Web Search 工具 |
| MCP 和应用工具 | 拥有独立权限面,需要单独审查、禁用或收窄 |
developer_instructions | 约束 Agent 行为,但不是硬工具白名单 |
| 项目 trust | 未信任项目会忽略项目级 .codex/ 配置 |
因此,高风险项目应在委派前把父会话切换到 Read Only,检查继承的 MCP 和工具,并避免使用 --dangerously-bypass-approvals-and-sandbox 等放宽沙箱的参数。角色文件中的权限配置只能表达意图,不能替代父会话的实际权限。
输出合同与主线程汇总
多个 Agent 能否协作,关键不在名称,而在统一输出格式。建议分析 Agent 固定返回五项:
1 | 1. 结论:一句话说明当前功能如何工作 |
审查 Agent 再增加严重程度、问题影响、置信度和是否阻塞发布。
主线程汇总时应遵循五条规则:
- 合并不同 Agent 指向同一字段或接口的证据
- 保留冲突结论及双方依据,不相信表达最自信的一方
- 明确区分代码事实、运行结果和未验证假设
- 列出最小修改文件,并说明哪些文件明确不改
- 给出自动测试、构建和人工回归清单
端到端案例:会员列表返回 500
下面的路径和行号都是虚构内容,只用于演示合格的子代理报告。
派发任务
1 | 线上问题:会员列表接口 /api/member/list 返回 500。 |
frontend_mapper 报告
1 | 结论: |
backend_mapper 报告
1 | 结论: |
主线程汇总
1 | 一致结论: |
这个示例的重点不是猜中答案,而是让每一步都可以被复核。
可直接使用的提示词
分析现有功能
1 | 第一阶段先不要修改代码。 |
根据分析执行修改
1 | 根据刚才确认的分析报告执行修改。 |
提交前代码审查
1 | 请启动 reviewer 审查本次改动。 |
写在 AGENTS.md 里的“前端”“后端”等短名只是自然语言约定,不是 CLI 正式注册的别名。高风险任务应直接使用准确的 Agent name。
日常开发的七步工作流
- 描述目标和约束:说明要实现什么、不能修改什么、如何验收
- 判断任务风险:位置和验证路径明确就直接做,影响面未知再委派
- 并行收集证据:让不同 Agent 分析独立调用链,并统一输出格式
- 主线程汇总方案:合并一致结论,标记冲突、事实和假设
- 执行最小修改:只修改需求直接相关文件,不顺手重构
- 审查和验证:reviewer 检查风险,主线程运行测试、构建和人工回归
- 沉淀项目规则:把反复出现的约定写入合适的
AGENTS.md或 Agent 指令
常见反模式
| 反模式 | 问题 | 正确做法 |
|---|---|---|
| 只说“开几个 Agent 看看” | 多个 Agent 重复搜索 | 指定角色、范围和输出合同 |
| 看完顺便修改 | 分析与执行混在一起 | 先只读收集证据,再由主线程修改 |
| 只输出总结 | 无法复核 | 必须带路径、行号、影响和假设 |
| 所有项目用相同角色 | 技术栈调用链不同 | 按真实架构调整名称和术语 |
| Agent 越多越好 | 增加令牌、延迟和汇总成本 | 先从 2 到 3 个独立角色开始 |
可选 Agent
只有任务反复出现或风险足够高时,才增加专用角色:
| Agent | 何时使用 | 输出重点 |
|---|---|---|
advisor_reviewer | 方案争议大,需要第二意见 | 反方观点、隐藏假设、替代方案 |
qa_verifier | 修复后或上线前需要验证 | 最小命令、人工步骤、回归路径 |
security_reviewer | 登录、权限、支付、医疗数据 | 越权、注入、敏感字段和可利用性 |
api_contract_mapper | 前后端字段或兼容性改造 | 请求、响应、错误码和兼容影响 |
db_mapper | 迁移、事务、索引和一致性 | 表结构、事务边界、锁和索引风险 |
跨项目迁移
迁移时不要只替换目录名,还要调整:
name和description- 技术栈术语和调用链
- 允许的命令、外部工具和权限
- 必查入口、数据结构和风险点
- 输出合同和验证方式
常见映射可以从下面开始:
| 项目类型 | 推荐角色 |
|---|---|
| Vue + Go | frontend_mapper、backend_mapper、reviewer |
| React + Node.js | react_mapper、node_mapper、reviewer |
| Spring Boot | spring_mapper、db_mapper、security_reviewer |
| 移动端 App | ios_mapper 或 android_mapper、api_contract_mapper |
| SDK 或纯接口服务 | api_contract_mapper、qa_verifier、reviewer |
子代理应该适配项目,而不是让项目迁就模板。
配置验证与排错
| 现象 | 检查方法 |
|---|---|
| 自定义 Agent 没生效 | 确认项目已信任、文件位于 .codex/agents/,然后新开会话 |
| Codex 不认识 Agent 名称 | 检查三个必填字段,调用时使用 TOML 中的 name |
| 修改配置后行为没变化 | 退出旧会话并重新启动,不依赖热加载 |
/agent 中没有自定义 Agent | 先明确要求启动;该命令只显示运行线程 |
| 启动时报告 TOML 错误 | 检查引号、多行字符串和重复字段,再运行 codex doctor --all |
| 配置模型不可用 | 使用 codex debug models 查看当前模型目录并替换 |
| 没有多 Agent 能力 | 使用 codex features list 检查 multi_agent 和 CLI 版本 |
| 只读 Agent 仍获得外部能力 | 检查父会话运行时权限、Web Search、MCP 和应用工具 |
| CSV worker 超时 | 调整 job_max_runtime_seconds;它不控制普通子代理 |
官方参考
总结
稳定的 Codex 子代理工作流依靠四件事:
- 清晰的角色边界
- 与风险匹配的工具权限
- 可以复核的证据合同
- 主线程负责的修改和验证闭环
先用最小配置跑通一次,再根据真实项目增加角色。不要为了显得“多 Agent”而拆分任务,也不要把子代理输出直接当成事实。只有证据、权限和验证都形成闭环,多代理协作才真正具有工程价值。