统一 workflow 子代理模型:CLAUDE_CODE_WORKFLOW_SUBAGENT_MODEL
Workflow 让 Claude Code 能用脚本把一批代理编排起来:agent() 起单个任务,parallel() 并发跑,pipeline() 串成流水线。一个 workflow 里动辄十几、几十个 agent,它们各自跑在什么模型上,直接决定了结果的一致性和账单。
CLI 2.1.296 新增环境变量 CLAUDE_CODE_WORKFLOW_SUBAGENT_MODEL:设置后,每一个 workflow agent 都跑在同一个模型上;而 workflow 之外的其他子代理,仍然使用各自配置的模型,不受影响。
它解决什么问题
没有这个变量时,workflow 里 agent 用什么模型,取决于脚本里写的选项、引用的子代理定义、以及会话默认模型等多层来源。常见的几个痛点:
- 同一条链路模型不一致:前半段用大模型分析,后半段某个 agent 落到了另一个模型,输出风格和质量对不齐;
- 想临时整体换模型很麻烦:比如想用更便宜的模型跑一遍试水,要改脚本里多处,或改子代理定义;
- 改子代理定义会误伤:为了 workflow 去改某个子代理的
model,结果平时单独调用它的场景也变了。
CLAUDE_CODE_WORKFLOW_SUBAGENT_MODEL 的思路是:只给 workflow 这一层开一个总开关,其余保持原样。
怎么设置
它是环境变量,值填模型名即可(别名或完整模型 ID,与平时指定模型的写法一致)。临时在一次会话里用:
CLAUDE_CODE_WORKFLOW_SUBAGENT_MODEL=claude-sonnet-5-5 claude想在项目里固定下来,可以写进 settings 的 env 字段:
{
"env": {
"CLAUDE_CODE_WORKFLOW_SUBAGENT_MODEL": "claude-sonnet-5-5"
}
}团队共享就放项目 .claude/settings.json,只想自己用就放本地设置。不设置时,行为和以前一样。
升级后用 claude --version 确认 ≥ 2.1.296。
影响范围:谁变、谁不变
| 场景 | 设置变量后 |
|---|---|
workflow 脚本里起的 agent(agent() / parallel() / pipeline() 等) | 统一跑在变量指定的模型上 |
| 主会话里直接调用的子代理(Agent / Task 工具) | 不变,仍用子代理定义或默认模型 |
| 主会话本身 | 不变,仍由 /model、--model 等决定 |
所以它很适合这样的组合:主会话用最强的模型做规划和把关,workflow 里大批量的执行 agent 统一用性价比更高的模型——而你平时手动调用的 code-reviewer 之类子代理,仍保留自己那套配置。
和 Agent effort、autoCompactWindow 的边界
近几个版本围绕子代理加了不少开关,容易混在一起:
- 模型(本文):决定 agent 用哪个模型;
CLAUDE_CODE_WORKFLOW_SUBAGENT_MODEL只管 workflow 这一层; - Agent effort:决定 agent 思考投入多少,和用哪个模型是两个维度;
- autoCompactWindow:决定子代理多早触发自动压缩,管的是上下文窗口。
三者可以叠加:例如 workflow 统一用一个中等模型,同时对其中的检索类 agent 降低 effort、提前压缩。
使用建议
- 先小规模试:统一换模型前,挑一个 workflow 跑一遍,对比输出质量和耗时;
- 注意费用:workflow 的 agent 数量多,模型单价差一点,乘起来就很明显,跑完用
/cost看一眼; - 别用它绕过限制:如果组织通过托管设置限制了可用模型,填一个不可用的模型并不会生效,以管理员策略为准;
- 排查时记得它的存在:workflow 结果「突然变了」,先查环境里是不是设了这个变量。
小结
- 2.1.296 新增
CLAUDE_CODE_WORKFLOW_SUBAGENT_MODEL,让所有 workflow agent 统一跑在一个模型上。 - 只影响 workflow 层,主会话和其他子代理保持原有模型。
- 适合「主会话强模型把关 + workflow 批量执行统一模型」的分工,也方便整体切模型试水。