子代理

Codex CLI 的子代理(subagent)用法,涵盖触发与切换、并发与汇总、自定义 agent 文件与 agents 配置,以及 codex agents 代理总览。

作者 David更新于 第 19 篇(共 22 篇)

子代理(subagent)是 Codex 为子任务派生出来的独立 agent:它在自己的线程里完成模型调用和工具调用,主代理等它们结束后把结果汇总成一次回复。中间输出留在子线程里,主线程只保留需求、决策和结论。

当前版本默认启用子代理,CLI、桌面端和 IDE 扩展都能看到子代理的活动。每个子代理都要单独调用模型和工具,所以同样的任务,用子代理比单代理消耗更多 token。

什么时候用

适合需要谨慎
代码库探索、只读扫描、问题分诊多个 agent 同时改代码(容易冲突,协调成本高)
从多个角度评审同一个分支步骤之间强依赖、拆不开的任务
跑测试、分析日志、总结长文档对 token 成本敏感的场景

确实要多个 agent 并行写代码时,给每个 agent 明确划分负责的文件或模块。

在 CLI 里使用

触发

默认情况下,本地 Codex 不会自作主张地派生子代理,只在两种情况下委派:

  • 你直接提出,例如“派两个子代理”“把这些工作并行委派出去”“每一点派一个 agent”;
  • 适用的 AGENTS.md 或技能指令要求委派。

例外是使用 V2 多代理实现(见下文)且推理强度为 ultra 时:Codex 会收到“可以主动委派”的提示,在并行能节省时间或提高质量时自行派生子代理;你在对话里的明确要求仍然优先。

好的委派提示要说清三件事:怎么拆分、是否等所有子代理完成再继续、每个子代理返回什么。

用并行子代理评审这个分支:一个查安全风险,一个查测试缺口,一个看可维护性。
三个都完成后,按类别汇总问题,并附上文件引用。

编排与汇总

派生、转发后续指令、等待结果、关闭线程都由 Codex 负责。同时运行多个子代理时,Codex 会等所有请求的结果到齐,再给出一份汇总回复。运行过程中,你可以直接让 Codex 引导(steer)某个子代理、停掉它,或者关闭已完成的线程。

查看与切换

命令作用
/subagents在本会话的子代理线程之间切换,查看某个线程的进展
/agents打开代理总览,浏览、筛选共享后台服务上的所有 agent 会话(见下文)

官方文档把切换线程的命令写作 /agent;v0.160.1 CLI 里注册的是 /subagents(本会话的子代理)和 /agents(代理总览),没有单独的 /agent。

审批与沙箱

  • 交互模式下,非当前线程的审批请求也会弹出,覆盖层会标出来源线程;按 o 可以先打开那个线程,再批准、拒绝或回答。
  • 非交互运行(例如 codex exec),或者当前无法弹出新审批时,需要新审批的操作会直接失败,错误交回给父工作流。
  • v0.156.0 起,子代理也可以发起 MCP elicitation(如浏览器登录、表单输入),按当前的审批策略与自动审查规则交给你处理;请求安装插件则只允许主线程发起。
  • 子代理的沙箱、审批策略、审批审查方式与工作目录都跟随父轮次当前的设置,包括父轮次在运行时改过的部分(例如用 /permissions 调整的权限、--yolo)。自定义 agent 文件改不了这些设置,写了 sandbox_mode、approval_policy 也不生效(见下文“文件位置与字段”)。

并发与嵌套

项配置键默认值
同时打开的子代理线程(不含主线程)agents.max_concurrent_threads_per_session由多代理实现决定,见下
嵌套深度agents.max_depth1,即子代理不能再派生下一层;只对 V1 实现生效

Codex 有两套多代理实现,用哪一套由模型元数据决定:v0.160.1 的目录新增默认模型 gpt-6.1-sol;模型的具体 V1/V2 标记与服务端目录可能变化,可以在 CLI 的 /model 与 codex debug models 中核对。features.multi_agent_v2 = true 可以固定使用 V2。不设上限时,源码默认值是 V2 最多 3 个子代理(连同主线程共 4 个线程),V1 最多 6 个。V2 的上限也可以写在 [features.multi_agent_v2] 表里的 max_concurrent_threads_per_session(写成表时用 enabled = true 固定使用 V2),这个数连同主线程一起算,并且优先于 agents.max_concurrent_threads_per_session。

v0.158.0 起,[features.multi_agent_v2] 新增 disable_direct_message(默认 false):设为 true 后,V2 不再提供 agent 之间直接发消息的工具(send_message、followup_task),派生子代理、子代理结果的自动回传和其他管理工具不受影响。它要求当前会话里有可用的 agent 留言板(仍在开发中的 features.agent_message_board),否则这一轮会直接报错,所以目前只在试用留言板时才用得上。

模型与推理强度

不做任何配置时,子代理沿用父代理的模型和推理强度。需要区分时,按以下规则解析:

  1. 自定义 agent 文件里写了 model 或 model_reasoning_effort,以文件为准;
  2. 否则依次取:派生请求里显式指定的值 → [agents] 里的默认值 → 父代理的值;
  3. 只选了模型、没给推理强度时,使用该模型的默认强度;自定义 agent 文件只写 model 时,沿用前面解析出的强度,新模型不支持这个强度的话,就在文件里一并写上 model_reasoning_effort。

探索类任务可以用更快、更便宜的模型,评审、安全审查可以用更高的推理强度,详见模型与推理。

自定义 agent

内置 agent

名称用途
default通用的兜底 agent
worker执行型:实现功能的一部分、修测试或 bug、拆分大型重构
explorer读为主的代码库探索,回答具体、范围明确的问题

这三个内置角色只有说明文字,不改模型、权限或其他设置。只有在你定义了至少一个自定义 agent 时,派生子代理的工具才会带上 agent_type 参数,模型这时才能按名字选用角色(内置角色也会一并列出);没有自定义 agent 时,子代理一律按 default 派生。自定义 agent 与内置 agent 同名(例如也叫 explorer)时,以自定义的为准。

文件位置与字段

每个 TOML 文件定义一个 agent,个人的放在 ~/.codex/agents/,项目级的放在 .codex/agents/(可以提交到仓库)。Codex 递归查找这些目录下的 *.toml 文件。agent 文件的写法与 config.toml 相同,但派生时只有下表列出的设置会生效:它只能定制子代理的指令、模型与输出风格,或者收窄它的能力,不能扩大父会话的权限。

字段必填说明
name是派生或引用时使用的名字;以此字段为准,文件名与它一致最省事
description是告诉 Codex 什么时候该用这个 agent
developer_instructions是定义行为的核心指令
nickname_candidates否派生出的 agent 可用的昵称;只能含 ASCII 字母、数字、空格、- 和 _,不能重复
model、model_reasoning_effort、model_reasoning_summary、model_verbosity、personality、service_tier否子代理使用的模型、推理与输出设置;省略时按下文“模型与推理强度”的规则继承
[features]否只能关闭 shell_tool、apps、plugins、memories、request_permissions_tool 这几项能力;写成 true 或写其他开关都不生效
[skills]否只能停用技能:skills.config 中 enabled = false 的条目、skills.bundled.enabled = false、skills.include_instructions = false

除此之外的键(如 sandbox_mode、approval_policy、mcp_servers、model_provider、notify)写了也不生效:子代理的沙箱、审批与工作目录跟随父轮次,MCP 服务器、模型提供方等沿用父会话的配置。需要专用的 MCP 服务器,就把它配置在主配置里,再在 agent 的指令里说明该用哪个。

示例

.codex/agents/reviewer.toml:

name = "reviewer"
description = "PR 评审:关注正确性、安全和缺失的测试。"
model_reasoning_effort = "high"
developer_instructions = """
像代码负责人一样评审。
优先看正确性、安全、行为回归和缺失的测试。
先列具体问题,尽量附复现步骤;不要只提风格意见。
"""

.codex/agents/docs-researcher.toml(只做调研,关掉 shell 工具):

name = "docs_researcher"
description = "文档专家:通过文档 MCP 服务器核实 API 与框架行为。"
developer_instructions = """
用 openaiDeveloperDocs 这个 MCP 服务器确认 API、选项和特定版本的行为。
回答简洁,附上链接或准确出处。不要修改代码。
"""

[features]
shell_tool = false   # agent 文件只能关掉能力,不能打开

这里用到的 openaiDeveloperDocs 要事先配置在 ~/.codex/config.toml 的 [mcp_servers] 里,子代理沿用父会话的 MCP 服务器。

之后在提示里点名即可,例如“让 reviewer 找出真实风险,让 docs_researcher 核实补丁依赖的框架 API”。

也可以在 config.toml 里声明角色,把配置放进单独的文件(相对路径相对于声明它的那个配置文件解析):

[agents.researcher]
description = "偏重调研的角色。"
config_file = "./agents/researcher.toml"
nickname_candidates = ["Herodotus", "Ibn Battuta"]

[agents] 下的标量设置名(如 enabled)是保留字,不能用作角色名。

全局设置:[agents]

键默认值说明
agents.enabledtrue设为 false 关闭多代理工具;显式开启的 features.multi_agent_v2 优先于它
agents.max_concurrent_threads_per_session由实现决定同时打开的子代理线程上限,不含主线程,最小为 1;旧名 agents.max_threads 仍然可用,同一层配置里两者都写时以新名为准
agents.max_depth1嵌套深度,只对 V1 实现生效
agents.default_subagent_model未设置子代理的默认模型,派生时显式指定的模型优先
agents.default_subagent_reasoning_effort未设置子代理的默认推理强度,派生时显式指定的值优先
agents.interrupt_messagetrueagent 的轮次被中断时,是否在它的上下文里记一条模型可见的消息
[agents]
max_concurrent_threads_per_session = 8
default_subagent_reasoning_effort = "medium"

codex agents:代理总览

codex agents 打开代理总览,浏览共享的本地 app-server 守护进程上所有 agent 会话及其子代理;v0.154.0 起还能在这里查看实时任务详情、恢复会话。TUI 里的 /agents 打开的是同一个视图;连接本机守护进程的会话里,输入框为空时按 ← 也能打开(前提是编辑器的左移键仍是 ←,底部会有提示)。v0.156.0 起它在界面上改称 agent command center,布局与按键都有较大调整。

参数说明
--remote ADDR连接远程 app server,支持 ws://host:port、wss://host:port、unix://、unix://PATH
--remote-auth-token-env ENV_VAR保存 WebSocket bearer token 的环境变量名;只能配合 wss:// 或回环地址的 ws://
-C, --cd DIR在远程服务器上新建任务时使用的目录
--no-alt-screen不使用终端的备用屏幕
codex agents   # 不带 --remote 时会先确保本机的后台服务已经启动

总览顶部按状态分成 All、Needs you、Working、Ready、Inactive 几个标签,标签上带任务数;任务可以按项目、状态或模型分组。选中任务后,详情里显示所用模型、输入与输出 token 数,Business 与 Enterprise 套餐还会显示估算的 credits 与美元费用。启动时除了已加载的会话,还会列出最近的 10 个会话。

v0.156.0 起的默认按键如下。除导航键外,它们对应 tui.keymap.agents 下的 new_task、new_worktree、resume、search、rename、stop、archive、hide、delete、toggle_grouping,可以重新绑定;按 ? 随时查看当前生效的按键:

按键作用
↑、↓、PgUp、PgDn在任务列表中移动、翻页
Enter打开选中的任务
Tab、Shift+Tab在状态标签之间切换
n新开一个会话(按项目分组时,放在选中任务所在的检出里);v0.158.0 起,会话建好之前输入框一直可见、可以先输入,不再被清掉或换成 Loading task 画面
w从项目的默认分支新建 worktree 并在其中开一个空白会话(优先用远端的 HEAD,找不到时用 main 或 master,不会先 fetch)
o、f打开会话恢复选择器;搜索任务
r、x重命名选中的任务;停止正在运行的任务
g在按项目、按状态、按模型三种分组之间切换
h隐藏选中的任务但不停止它,直到你再次恢复它或重启 TUI
a归档选中的任务及其子代理,需确认
Backspace永久删除选中的任务及其子代理的记录,需确认
?显示全部按键
Esc关闭帮助,或取消搜索、重命名;再按一次离开总览

v0.155.0 的默认键是 Ctrl+N、Ctrl+E、Ctrl+W 这类组合键以及 Delete,v0.156.0 起统一改成上表的单个按键;在 tui.keymap.agents 里自定义过的,以你的配置为准。

  • 由另一个 app server 管理的任务(例如正在桌面应用里打开的对话)会以只读历史打开:按 r 重试接管,v0.157.0 起按 f 可以分叉出一个可编辑的副本继续,按 Esc 回到总览(v0.158.0 起也可以按 ←,草稿保留)。
  • 连接守护进程或远程 app server 时,在会话里执行 /archive(v0.155.0 起)或 /delete(v0.156.0 起)之后都会回到这个总览。v0.157.0 起,正在进行语音对话的任务带有 voice 标记。
  • 当前会话如果运行在内嵌的 app server 上(例如用了 --no-daemon),/agents 会提示 Shared agents unavailable,并提供 Start background server 选项(即 codex app-server daemon start);启动后在另一个终端运行 codex agents,当前会话不受影响。
  • codex agents 必须连上共享服务,所以不接受 --no-daemon;它也不接受初始提示词或图片。连接远程服务器时,不能再带 --oss 之类的本地模型提供方参数或 --add-dir;工作负载身份(workload identity)生效时不可用。

守护进程的管理见 SDK 与 App Server。

注意事项

  1. 成本:子代理越多,token 消耗越多;嵌套子代理的用量也计入根目标(/goal)的 token 预算(v0.151.0 起)。
  2. 项目级 agent 需要信任:未受信任的项目会跳过项目级的 .codex/ 配置层,其中的 .codex/agents/ 也不会加载。
  3. 非交互运行没有审批弹窗:codex exec 里需要新审批的子代理操作会失败,事先用沙箱和审批设置放行必要的操作(见沙箱、审批与安全)。

本页目录