Codex 子代理技巧:让多个代理并行查代码、审改动,主对话不被刷屏
Codex 可以一次派出多个子代理并行干活,再把结果汇总到主对话。本文按官方文档讲清子代理适合什么任务、怎么用一句话触发、在命令行里怎么查看和审批,以及如何用 TOML 文件定义自己的专用代理并给它们选模型。
让 Codex 同时查代码、跑测试、看日志,所有中间输出都堆在一个对话里,聊久了重点就被淹没了。Codex 的子代理(subagent)就是为这个问题准备的:主代理把独立的工作分给几个子代理并行去做,子代理只把总结交回来。本文按 OpenAI 官方文档,讲清子代理怎么触发、怎么管理、怎么自定义。
为什么要用子代理
官方文档提到两个说法:上下文污染(有用的信息被大量中间输出埋没)和上下文退化(对话里无关细节越来越多,表现变差)。子代理的做法是:
- 主代理专心处理需求、决定和最终结果;
- 探索代码、跑测试、分析日志这类「吵」的工作交给子代理并行做;
- 子代理只交回总结,不把原始输出塞进主对话。
能独立并行的工作还能省时间。官方建议先从以读为主的任务用起,比如探索代码、跑测试、分诊问题、做总结;多个代理同时改代码容易冲突,要谨慎。
还要知道一点:每个子代理都会单独调用模型和工具,所以子代理比单个代理跑同样的任务更耗 token。
怎么触发
现在的 Codex 版本默认开启子代理,桌面版 ChatGPT、Codex 命令行和编辑器插件里都能看到子代理的活动。Codex 在两种情况下会派出子代理:你直接要求,或者项目的 AGENTS.md、技能说明里写了要这样做。
直接要求的说法很简单,例如「派两个代理」「把这部分并行分出去」「每一点派一个代理」。一个好的子代理提示词要讲清三件事:怎么分工、要不要等全部完成、最后交回什么样的总结。官方示例的思路是:
用并行子代理审查这个分支:一个看安全风险,一个看测试缺口,一个看可维护性。等三个都完成后,按类别汇总发现的问题,并标出文件位置。
多个代理同时在跑时,Codex 会等所有要求的结果都回来,再给出一个汇总回答。
运行中怎么查看和管理
- 命令行:输入
/subagents在各个代理的对话之间切换,查看正在进行的工作。 - 桌面版:从主对话里显示的活动打开某个子代理的对话,看它做了什么、交回了什么总结。
- 编辑器插件:有后台代理面板时,正在跑的子代理显示在输入框上方,展开能看状态、一键停止全部、打开单个子代理的对话。
在任何一端,都可以直接告诉 Codex 去调整某个正在跑的子代理、停止它,或者关掉已经完成的子代理对话。
权限跟着主对话走
子代理继承主对话当前的沙箱和审批设置,包括用 /permissions 或 --yolo 改过的设置。所以要在让 Codex 分派任务之前,先把主对话的权限模式选好。自定义代理文件可以要求代理「不要改文件」,但不会因此单独变成只读沙箱。
在命令行的交互模式里,后台子代理需要审批时,审批窗口会直接弹出来,并标明是哪个代理发起的;按 o 可以先打开那个代理的对话看清楚,再决定批准、拒绝或回答。在非交互流程里,需要新审批的操作会直接失败,错误交回给主流程。
给子代理选模型
不额外设置时,子代理沿用主代理的模型和推理强度。想省时间或提高质量,有三种方式:在提示词里直接指定模型或推理强度;在 config.toml 的 [agents] 里设默认值;或者在自定义代理文件里写 model 和 model_reasoning_effort。
官方的选择建议:
gpt-6.1-sol:适合要规划、用工具、反复验证的复杂任务,账号能用时优先选它。gpt-6-luna:更快、成本更低,适合目标明确、重复性高的轻量任务,比如快速扫一遍代码。
推理强度越高,响应越慢、token 用得越多,但复杂任务质量更好。审查、安全类代理适合 high,追求速度的简单任务用 low。
定义自己的专用代理
Codex 自带三个代理:通用的 default、负责实现和修复的 worker、专门读代码探索的 explorer。想要自己的代理,就新建 TOML 文件:个人用的放在 ~/.codex/agents/,项目专用的放在项目里的 .codex/agents/。每个文件定义一个代理,必须写 name、description、developer_instructions 三项:
name = "pr_explorer"
description = "只读的代码探索代理,在提出修改前先收集证据。"
model = "gpt-6-luna"
model_reasoning_effort = "high"
developer_instructions = """
只做探索,不要编辑文件。
沿着真实的执行路径追踪,注明文件和符号。
优先用快速搜索和有针对性的读文件,不要大范围扫描。
"""
Codex 按 name 字段识别代理,文件名和代理名保持一致最省事。自定义代理的名字和内置代理重名时(比如也叫 explorer),以你的为准。想收窄代理的能力,可以把 features.shell_tool 等功能项设为 false,或用 skills.config 关掉个别技能。沙箱、审批、模型提供方和 MCP 服务器写在代理文件里不生效,要在主会话里配置。
全局设置写在 config.toml 的 [agents] 下,例如限制同时打开的子代理数量:
[agents]
max_concurrent_threads_per_session = 8
不想用子代理,把 agents.enabled 设为 false 即可(默认是 true)。
上手建议
先在自己的项目里试一次只读任务:让 Codex「每一点派一个代理,分别检查安全问题、代码质量、测试稳定性,等全部完成后逐点总结」,用 /subagents 看看每个代理在做什么。觉得好用,再把常用的审查角色写成 .codex/agents/ 里的代理文件。
子代理比单个代理更耗用量,经常并行跑任务的,可以在 BuyBuy代充(buybuytopup.cn) 开通 ChatGPT Pro,用量更充足。