“Claude Code 会自己并行,Codex 不说就不并行”——这个常见印象在一定条件下是对的。Codex 的应用、CLI 和 IDE 扩展会在你提出要求时,或在 AGENTS.md 或技能(skill)要求把工作拆给子智能体时,启动并行的工作者(子智能体)。而 Claude Code 还会根据请求内容和各子智能体的描述,自行判断是否委派。
什么会触发并行子智能体
Codex
被要求时才并行
应用、CLI 和 IDE 扩展会在你直接要求时,或在 AGENTS.md 或技能有相应指示时启动子智能体。该功能本身默认开启。
不想每次都说 → 把委派规则写进 AGENTS.md
Claude Code
也会自己并行
它会参考你的请求、各子智能体的描述和当前上下文,自行委派。调查用的子智能体(Explore)也会自动使用。
想确保委派 → 用 @ 指定子智能体
结论 这个印象在一定条件下是对的。在 ChatGPT Work(网页版)中选择最高智能等级 Ultra 时,Codex 也能自行判断委派(官方 Subagents 页面)。
本文依据 OpenAI 与 Anthropic 的官方文档(2026 年 10 月 26 日确认),按触发条件、指示写法、配置、命令、成本的顺序,比较如何让两款工具并行工作。各节中两款工具始终按同样的顺序和颜色出现:Codex → Claude Code。文末还总结了本站用 Claude Code 并行运行子智能体时得到的经验。
1. 什么会触发并行,什么都不说又会怎样
子智能体是从主对话中接手部分工作的独立工作者。每个子智能体在自己的上下文里进行调查或测试,只把结果摘要返回给主对话。并行运行可以缩短等待时间,也能避免主对话被中间日志塞满。这一思路两款工具是相同的。
不同的是由谁来启动。下面分四种情况来看。
来源:OpenAI“Subagents”;Anthropic“Create custom subagents”。2026 年 10 月 26 日确认。
根据 Codex 官方文档,本地版 Codex(应用、CLI、IDE 扩展)会“在被直接要求,或相关的 AGENTS.md 或技能指示要求委派时”进行委派。功能并没有关闭:在当前版本中,子智能体系统默认启用。是否启动取决于你的指示。在 ChatGPT Work(网页版)中,大多数智能等级需要明确要求,只有选择 Ultra 时(Ultra 仅限符合条件的账号和受支持的模型),在并行能显著提升速度或质量的情况下才会自行委派。
Claude Code 的官方说法是:它“根据请求中的任务、子智能体定义里的 description 以及当前上下文自动委派”。对于希望更积极使用的子智能体,官方建议在描述中写入“use proactively”之类的措辞。直接继承整个对话的子智能体(fork),默认也由 Claude 自行决定是否启动。
补充一个细节:Codex 的更新日志中有一项改动,允许把 Codex 嵌入自家产品的一方(app-server 客户端)在“禁用、仅明确要求时、主动”之间选择委派方式(Codex CLI 0.142.0,2026 年 6 月 22 日)。对于应用、CLI 和 IDE 的用户,行为如上表所示。
2. 两者的工作方式对比
下面比较子智能体定义的写法、可同时运行的数量、工作目录的隔离方式等。只有一方官方文档提到的项目,另一方标为“未记载”。
default(通用)、worker(实现与修复)、explorer(以读取为主的调查).codex/agents/(项目)、~/.codex/agents/(个人)每个智能体一个 TOML 文件.claude/agents/(项目)、~/.claude/agents/(个人)每个子智能体一个 Markdown 文件(YAML frontmatter)name、description、developer_instructionsname、description正文即子智能体的指示[agents] 的默认值或智能体文件中更改model → 环境变量 CLAUDE_CODE_SUBAGENT_MODEL → 主模型agents.max_concurrent_threads_per_session 设置上限未设置时由 Codex 决定(默认值未公开)CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS 更改一个会话中启动的总数没有上限CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH=1 可禁用嵌套features.shell_tool)等部分功能可在智能体文件中关闭,但这并不会让它变成只读沙箱。“不要编辑”只是指示中的请求permissionMode 更改)。tools 可缩小可用工具范围去掉 Write 和 Edit,子智能体就没有编辑工具(如果保留 Bash,通过 shell 命令写入在工具层面不会被阻止)/worktree)按子智能体设置:未记载isolation: worktree,按会话用 claude --worktreeconfig.toml 的 [agents] 下写 enabled = falseAgent 加入权限设置 permissions.deny来源:OpenAI“Subagents”“Configuration Reference”“Worktrees”;Anthropic“Create custom subagents”“Run parallel sessions with worktrees”。2026 年 10 月 26 日确认。
最大的区别有两点。第一是能否让子智能体无法写入。Codex 原样使用父级权限,所以对子智能体说“不要编辑”只是一种请求。Claude Code 则能把编辑工具(Write、Edit)从子智能体中完全去掉。若想连 shell 的写入也阻止,就把 Bash 一并去掉。第二是每个子智能体各有一份工作副本:Claude Code 可以为每个子智能体创建 git worktree(同一仓库的独立工作副本),而 Codex 的 worktree 以聊天为单位。
除子智能体外,Claude Code 还有其他并行方式(在一个画面中运行多个独立会话的 agent view,以及工作者之间相互通信的 agent teams)。区别可参阅《Claude Code 的 Subagents 与 Agent Teams 有何不同》和《Claude Code 的 agent view》。
3. 指示的写法与可直接使用的提示词
Codex 官方文档建议,好的提示词要写明如何拆分工作、是否等所有智能体完成后再继续,以及返回什么。根据本站并行运行子智能体的经验,再加两项能减少事故。
- 如何拆分工作按关注点(安全、测试、可维护性)、按位置(目录、模块)等。拆分时要避免两个子智能体看同一处
- 允许触碰的范围“只读”,或“只能编辑这个目录”。绝不要让两个子智能体改同一个文件
- 是否等全部完成等所有结果到齐再合并,还是允许中途继续
- 返回什么格式和长度(“附文件名,10 行以内”等)。回复太长会很快占满主上下文
- 不能做什么提交、推送、子智能体再启动子智能体等。不告诉它们哪些事禁止,子智能体就会出于好意去做
只读的调查与审查(从这里开始)
对照 main 审查这个分支。并行启动三个子智能体:
一个看安全问题,一个看缺失的测试,一个看可维护性。
它们都不要编辑任何文件。
等三个都完成后,按关注点汇总,并附上文件名和行号。
基于官方示例,加入了“不要编辑”。在 Codex 中,关键是明确说出“启动子智能体”和“并行”。
用不同的子智能体并行调查认证、数据库和 API 模块。
每个子智能体只读取,不修改任何文件。
让每个子智能体用 10 行以内返回“入口文件、主要处理流程、隐患”,
等所有结果到齐后再汇总成一份。
基于官方示例“Research the authentication, database, and API modules in parallel using separate subagents”,加入了范围和返回格式。Claude Code 不说也可能委派,但数量、范围和返回格式不说就不会确定。
拆分会修改文件的工作
两家官方文档对写入较多的并行工作都持谨慎态度。给每个子智能体分配各自可编辑的范围,在 Claude Code 中还要把工作副本也分开。
查明设置页面保存失败的原因并修复。
让 browser_debugger 在浏览器中复现问题并记录步骤,
让 code_mapper 找出相关代码的位置(这两个不得编辑任何内容)。
原因明确后,让 ui_fixer 做最小限度的修复。不要碰无关的文件。
基于官方示例(使用自定义智能体 browser_debugger、code_mapper 和 ui_fixer),加入了编辑范围。这三个智能体需要先定义;定义示例见官方 Subagents 页面的“Frontend integration debugging”。定义文件的写法见第 4 节。
/batch 把 src/ 中的 JavaScript 迁移到 TypeScript
/batch 会提出把改动拆成 5 到 30 个独立单元的计划,经你批准后,为每个单元在各自的 worktree 中运行一个子智能体(Claude Code 内置技能;需要 git 仓库,或能创建 worktree 的 WorktreeCreate 钩子)。
不用每次都说
如果在 Codex 中每次都要求并行太麻烦,就把委派规则写进项目的 AGENTS.md。官方文档说,存在相关的 AGENTS.md 或技能指示时它会委派。但没有说明什么措辞一定能触发,所以写好规则后,请用你平时的请求确认一次子智能体是否会启动。
## 使用子智能体
- 调查跨越三个及以上目录时,每个目录启动一个子智能体并行调查
- 不要让子智能体编辑文件。所有编辑都在主线程中进行
- 等所有结果到齐后,只报告要点
在 Claude Code 中,若想让某个子智能体被更多地使用,就在它的 description 里写明何时使用,并加上“use proactively”(定义示例见下一节)。反之,如果委派过多,把 Agent 加入 permissions.deny 就能阻止它启动子智能体。
4. 配置与子智能体定义文件
Codex config.toml 与 .codex/agents/
全局设置写在 config.toml 的 [agents] 下(个人:~/.codex/config.toml,项目:.codex/config.toml)。
# .codex/config.toml
[agents]
max_concurrent_threads_per_session = 4 # 同时打开的子智能体线程上限(不含主线程)
default_subagent_model = "gpt-6-luna" # 子智能体的默认模型
default_subagent_reasoning_effort = "high" # 子智能体的默认推理强度
| 设置项 | 含义 |
|---|---|
agents.enabled | 是否使用启动子智能体的工具。默认 true。false 即关闭 |
agents.max_concurrent_threads_per_session | 同时打开的子智能体线程上限。未设置时由 Codex 决定。旧名称 agents.max_threads 仍可用 |
agents.default_subagent_model | 子智能体的默认模型。请求中指定的模型优先 |
agents.default_subagent_reasoning_effort | 子智能体的默认推理强度。请求中指定的值优先 |
features.multi_agent | 启动、发消息、等待和关闭智能体的工具(spawn_agent、wait_agent 等)。已稳定且默认开启 |
来源:OpenAI“Configuration Reference”。2026 年 10 月 26 日确认。搜索结果中常见的“multi agent v2”就是这套系统的当前版本;据更新日志,它在 Codex CLI 0.145.0(2026 年 7 月 21 日)中转为稳定版(Changelog)。在当前版本中,不必自己写 multi_agent = true 也已启用。
自定义智能体放在 .codex/agents/,每个智能体一个 TOML 文件。智能体的名字取自 name,而不是文件名。
# .codex/agents/reviewer.toml
name = "reviewer"
description = "专注于正确性、安全性和缺失测试的审查者"
model = "gpt-6.1-sol"
model_reasoning_effort = "medium"
developer_instructions = """
不要编辑文件。
优先关注正确性、安全性、行为回退和缺失的测试。
只有当风格问题掩盖了真正的缺陷时,才提出风格方面的意见。
"""
改编自官方示例。模型名称取自官方示例;可用模型因账号和工作区而异。官方建议:需要大量判断的智能体用 gpt-6.1-sol,范围明确的轻量智能体用 gpt-6-luna。sandbox_mode、approval_policy、mcp_servers 等设置即使写在智能体文件里,也会被父级的设置覆盖。
Claude Code .claude/agents/ 与 settings.json
子智能体以 Markdown 形式放在 .claude/agents/。也可以直接对 Claude 说“创建一个做 X 的子智能体”,让它来写文件。
---
name: test-runner
description: 运行测试套件,只报告失败的测试及其错误。Use proactively,在代码修改后主动使用。
tools: Read, Grep, Glob, Bash
model: haiku
---
运行测试,只返回失败测试的名称和错误要点。
不要修改代码。不要返回通过的测试列表。
由于 tools 中没有 Write 和 Edit,按照官方文档,这个子智能体既不能编辑也不能写入文件。不过为了运行测试保留了 Bash,这就留下了通过 shell 命令写入的余地。正文中的“不要修改代码”就是为此而加的提醒。model 可指定 sonnet、opus、haiku、fable、模型 ID 或 inherit(与主对话相同)。如何为每个子智能体选择模型,请参阅《Claude Code 子智能体换用其他模型运行的方法》。
并发上限和嵌套深度通过环境变量设置,可写在 settings.json 的 env 下。
{
"env": {
"CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS": "5",
"CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH": "1"
}
}
| 设置项 | 含义 |
|---|---|
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS | 同时运行的子智能体上限。默认 20。达到上限后无法再启动 |
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH | 子智能体可以嵌套启动子智能体的深度。默认 3 层。1 表示不嵌套 |
CLAUDE_CODE_SUBAGENT_MODEL | 未指定模型的子智能体所用的默认模型 |
CLAUDE_CODE_FORK_SUBAGENT | 0 会阻止 Claude 自行启动继承对话的子智能体(fork) |
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS | 1 启用 agent teams(实验性,默认关闭) |
来源:Anthropic“Create custom subagents”“Orchestrate teams of Claude Code sessions”。2026 年 10 月 26 日确认。
5. 命令速查
以下是查看运行中的子智能体、隔离工作副本、分叉对话等用到的命令。有些命令同名却功能不同,请注意。
/subagents(CLI)在应用中,从主对话打开智能体的线程。在 IDE 中,使用输入框上方的面板/tasks已完成的子智能体会在列表中保留一小段时间。在输入框下方的面板中用 ↑↓ 和 Enter 操作.codex/agents/ 中编写 TOML 文件.claude/agents//agents 现在只显示这方面的指引@ 选中子智能体想让整个会话都以该子智能体身份运行,用 claude --agent 名称/side 是用来问旁支问题的临时对话/subtask 任务继承当前对话的子智能体在后台工作,结果返回到这个对话/fork、codex fork/fork(复制为另一个后台会话)/worktree、codex exec --worktree "提示词"在应用中,于输入框下方选择 Worktreeclaude --worktree 名称(-w)/agents、codex agents(指挥中心)claude agents(agent view;研究预览版)codex cloud exec --env ENV_ID --attempts 3 "提示词"在云端运行 1 到 4 次尝试(默认 1 次)来源:OpenAI“Command line options, Slash commands”“Subagents”;Anthropic“Commands”“Run agents in parallel”“Create custom subagents”(用 fork 尝试多种方法)。2026 年 10 月 26 日确认。
容易混淆的是 /agents,因为名字相同。在 Codex 中,/agents 是服务器上的聊天列表(指挥中心)。在 Claude Code 中,/agents 会告诉你子智能体定义放在哪里,会话列表则是 claude agents(从 shell 启动)。
6. 适合并行与不适合并行的任务
两家官方文档的说法几乎一致:先从只读工作开始,写入较多的工作要谨慎。
适合
- 探索代码库(可按位置拆分)
- 按关注点拆分的审查(安全、测试、可维护性)
- 运行测试与分析日志(让子智能体读长输出,只返回要点)
- 文档摘要、缺陷分拣(彼此无需等待)
- 各子智能体编辑不同的文件(划分范围,在 Claude Code 中连 worktree 也分开)
不适合
- 多个智能体编辑同一个文件(覆盖与冲突)
- 依赖先后顺序的工作(下一步取决于上一步的结果)
- 需要反复沟通打磨的工作(Claude Code 文档建议在主对话中进行)
- 很快就能完成的小修改(子智能体要重新收集上下文,反而可能更慢)
来源:OpenAI“Subagents”(Why subagent workflows help);Anthropic“Create custom subagents”(Choose between subagents and main conversation)与“agent teams”(Avoid file conflicts)。2026 年 10 月 26 日确认。
7. 对成本(用量上限)的影响
并行更快,但消耗的用量更多,因为每个子智能体都会各自调用模型、各自使用工具。
每个方块代表一次模型调用的用量。子智能体读取的文件和日志不会进入主对话,所以主上下文保持轻量,但总用量会增加(此图用于说明机制,并非按比例绘制)。
model: haiku。限制子智能体数量,并让它们的回复保持简短来源:OpenAI“Subagents”“Changelog”;Anthropic“Manage costs effectively”“Create custom subagents”。2026 年 10 月 26 日确认。
另一个容易忽视的点是,子智能体的回复也会进入主上下文。Claude Code 文档提醒,运行许多返回详细结果的子智能体会大量消耗主上下文。设定“10 行以内”之类的返回格式,对控制成本也有帮助。Claude Code 一般的省 token 方法,请参阅《Claude Code 省 Token 技巧》。
8. 实际运行的经验(本站的实例)
本站(AI Arte)把文章的翻译和检查并行交给 Claude Code 的子智能体来完成。本文的调查和草稿,也是由主会话派出的一个子智能体写的。以下是实际发生过的情况以及避免方法。这些全部是 Claude Code 的记录,没有在 Codex 中复现过。不过,同一文件的冲突、对职责范围外事项的不准确报告,在机制相似的 Codex 中也值得留意。
- 2026 年 7 月按自己的上限设定同时运行的数量
- 发生了什么
- 同时运行六个及以上时,子智能体因速率限制而失败
- 避免方法
- 上限定为同时 5 个,较大的任务每 5 个一批轮流运行。设定一个符合自己上限、低于 Claude Code 默认上限(20)的值
- 2026 年 9 月 22 日不要让子智能体再启动子智能体
- 发生了什么
- 一个负责 10 种语言任务的子智能体,自己又启动了 5 个翻译子智能体。加上父级的 5 个,同时运行达到 10 个,触及用量上限,全部中途停止
- 避免方法
- 在指示的“不能做什么”中写上“不要启动子智能体,由父级分配工作”。Claude Code 默认允许子智能体启动子智能体(最多 3 层),也可以用
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH=1禁止嵌套
- 2026 年 8 月 22 日绝不要让两个子智能体改同一个文件
- 发生了什么
- 父级在课程章节末尾添加的一句话,被另一个子智能体以“指示中没有”为由删掉,然后又被加回去,反复多次
- 避免方法
- 给每个子智能体指定可以触碰的文件。父级之后要批量添加的内容,要么也写进子智能体的指示,要么等所有子智能体完成后再加
- 2026 年 9 月 22 日临时文件的存放位置也要分开
- 发生了什么
- 一个子智能体直接放在临时文件夹里的临时脚本,被另一个子智能体的同名文件覆盖了。从同一对话启动的子智能体看到的是同一个临时文件夹
- 避免方法
- 在指示中为每个子智能体分配各自的子文件夹
- 2026 年 9 月 5 日子智能体运行期间不要一次性提交全部改动
- 发生了什么
- 5 个子智能体运行期间,用
git add -A(全部改动)提交了一项无关的修改,把子智能体已完成的 100 个文件卷进了无关的提交 - 避免方法
- 提交时指定文件。也要告诉子智能体,禁止打包全部改动或撤销改动的操作
- 2026 年 8 月 22 日子智能体报告的职责范围外的内容要重新核实
- 发生了什么
- 两个子智能体分别报告“24 项未通过检查”和“28 项”,实际只有 16 项。它们猜测了自己没碰过的文件的状态
- 避免方法
- 由父级亲自运行检查来确定数量和对象。子智能体在自身职责范围内的发现准确度很高,可以信任
摘自本站的运行记录(2026 年 7 月至 9 月)。仅收录记录中留存的数字。
综合这些经验,分发的指示大致如下。子智能体不知道对话的其余部分,所以要写成仅凭这份指示就能完成工作。
【任务】调查第 273 篇文章并撰写 ja 草稿
【不能做什么】
- git 操作(add、commit、checkout、restore、stash、push)
- 不要启动子智能体(由父级分配工作)
- 不要编辑其他文章
- 临时文件放在 scratch-folder/a273/
【调查方法】依据官方文档原文(记录 URL 和确认日期)
【返回内容】创建的文件、标题、无法核实的内容
这是撰写本文的子智能体所收到指示的框架(摘要),并加上了上面两条经验(不要启动子智能体、临时文件的存放位置)。同样的格式在 Codex 和 Claude Code 中都可用于给子智能体下达指示。
总结
- “Codex 不说就不并行”在一定条件下是对的。Codex 的应用、CLI 和 IDE 会在你直接要求,或 AGENTS.md 或技能指示委派时启动子智能体。ChatGPT Work 的 Ultra 也会自行判断委派
- Claude Code 会根据请求和各子智能体的描述自行委派。想确保某个子智能体运行,就用
@点名;想让它更常被使用,就在描述中加上“use proactively” - 指示中要写明:如何拆分工作、允许触碰的范围、是否等全部完成、返回格式、不能做什么
- 配置:Codex 用
config.toml的[agents]和.codex/agents/*.toml;Claude Code 用.claude/agents/*.md和环境变量 - 查看子智能体的命令:Codex 是
/subagents,Claude Code 是/tasks。/agents同名但功能不同 - 并行会消耗更多用量。先从只读工作开始,不要让多个智能体编辑同一个文件
两款工具的整体差异(价格、上限、运行环境),请参阅《Claude Code vs Codex 怎么选?》;让子智能体更接近只读的设置,请参阅《Codex 与 Claude Code 只读使用方法》。
常见问题
Q. Codex 的子智能体可以同时运行多少个?
A. 用 config.toml 中的 agents.max_concurrent_threads_per_session 设置上限(不含主线程)。不写则由 Codex 决定,且该默认值未公开。官方配置示例中使用的是 6 或 8。Claude Code 默认同时 20 个,可用 CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS 更改。无论哪款工具,运行得越多,用量上限消耗得越快。
Q. 能否只让子智能体使用更便宜的模型?
A. 可以。在 Codex 中,用 [agents] 下的 default_subagent_model,或智能体文件中的 model 和 model_reasoning_effort 设置。未指定时继承父级的模型。在 Claude Code 中,在子智能体定义里设置 model(haiku 等),或使用环境变量 CLAUDE_CODE_SUBAGENT_MODEL。
Q. 需要在配置中写“multi_agent = true”吗?
A. 当前的 Codex 不需要。在配置参考中,features.multi_agent 已稳定且默认开启,agents.enabled 的默认值也是 true。据更新日志,multi-agent V2 最初是需要主动启用(opt-in)的系统,在 Codex CLI 0.145.0(2026 年 7 月 21 日)中转为稳定版。旧教程中“启用它”的步骤,如今得到的状态与什么都不写相同。要关闭,就在 [agents] 下写 enabled = false。
Q. 如何阻止 Claude Code 自行启动子智能体?
A. 要完全阻止子智能体,在权限设置的 permissions.deny 中加入 Agent。只想阻止继承对话的子智能体(fork),可用 Agent(fork) 或环境变量 CLAUDE_CODE_FORK_SUBAGENT=0。如果启用了 agent teams,点名的子智能体可能会作为团队成员启动,所以不使用时请保持 agent teams 关闭。