Claude Code 动态工作流(Dynamic Workflows)怎么用
2026 年 5 月 28 日随 Claude Opus 4.8 发布的研究预览功能:你在 prompt 里带上 workflow 一词,Claude 就为任务现写一段 JavaScript 编排脚本,由独立 runtime 在后台执行,并行调度大量 subagent——把"计划、循环、分支、中间结果"搬进代码,主会话只接收最终答案。
01概览与速读
只有三分钟,看这一节就够。
一句话:Dynamic Workflow 是 Claude 为你的任务现写、后台执行的 JavaScript 编排脚本,它在脚本里并行调度几十到上千个 subagent,彼此可以交叉验证,最后只把结论回灌到你的主会话。它专为单个上下文窗口装不下、或需要并行 + 验证的大任务而生:代码库级审计、大规模迁移、需交叉核对的研究。
在你的 prompt 里写上 workflow 这个词即可,例如:「用一个 workflow 审计这个仓库的 SQL 注入风险」。Claude 会自动拆解任务、写出编排脚本、后台跑起来。用 /workflows 看进度或中止;用 /usage 看花了多少额度。想让 Claude 对每个实质任务都默认起 workflow,开 /effort ultracode。
三种"工作流"别混淆
| 概念 | 是什么 | 本报告焦点 |
|---|---|---|
| Dynamic Workflow | Claude 现写 JS 脚本 + runtime 后台编排多 subagent(本功能) | ✅ 是 |
| Common workflows | 官方文档里"探索代码 / 修 bug / 重构"等 prompt 配方,与编排脚本无关 | 否 |
| Agent Teams | 实验性、默认关闭的内置多实例编排,一个会话当"队长"用共享任务表协调 | 仅对比 |
来源:code.claude.com/docs/en/workflows · common-workflows
关键事实速查(均已交叉验证)
| 维度 | 事实 | 状态 |
|---|---|---|
| 发布 | 2026-05-28,随 Claude Opus 4.8,研究预览(research preview) | 已验证 |
| 版本要求 | Claude Code v2.1.154 或更高 | 已验证 |
| 同时并发 | 同一时刻最多 16 个 subagent 在跑,多出的排队(CPU 核少则更少,实际 min(16, 核数−2)) | 已验证 |
| 累计总量 | 整个运行先后累计最多 1000 个 subagent(防失控回路) | 已验证 |
| 触发 | prompt 含 workflow 一词;或 /effort ultracode | 已验证 |
| 可用范围 | 付费方案 + Anthropic API + Amazon Bedrock + Google Vertex AI + Microsoft Foundry | 已验证 |
02它到底是什么
核心思想:把"计划"从对话搬进代码。
普通模式下,Claude 在自己的上下文里一步步推理执行——计划、循环、分支、中间结果全都占用 token,任务越长上下文越脏、越容易退化。Dynamic Workflow 把这套控制流(循环 / 条件 / 扇出)和中间数据搬进一段 JS 脚本,由独立 runtime 执行;主会话的上下文只保留最终答案。这就是它能突破单上下文窗口、扩展到上千 subagent 的根本原因。
与其他执行方式的区别
| Subagents 子代理 | Skills 技能 | Workflows 工作流 | |
|---|---|---|---|
| 本质 | Claude 派出的一个 worker | Claude 遵循的指令 | runtime 执行的脚本 |
| 谁决定下一步 | Claude,逐回合 | Claude,按 prompt | 脚本 |
| 中间结果在哪 | Claude 上下文窗口 | Claude 上下文窗口 | 脚本变量 |
| 可复用的是 | worker 定义 | 指令 | 编排本身 |
| 规模 | 每回合几个委派 | 同 subagent | 每次运行几十到上百 agent |
| 中断 | 重启该回合 | 重启该回合 | 同会话内可续跑 |
来源:官方文档 "When to use a workflow" 表
一句话:subagent / skill 里 Claude 是编排者,逐回合决定派谁、每个结果都落进它的上下文;workflow 把循环、分支、中间结果都搬进脚本,Claude 的上下文只剩最终答案。这也让 workflow 能施加可复用的质量套路(对抗互审、多角度起草择优),而不只是"多派几个 agent"。Agent Teams 是另一条实验性、默认关闭的多实例编排路线,仅作对比。
真正确定性的是脚本(JS 控制流),而非模型臆测。脚本决定派哪些 subagent、怎么扇出、怎么合并;每个 subagent 是一次真实的 Claude 调用。所以 workflow = 确定性编排 + 模型化执行的组合,而不是让一个模型一次性"想很多"。
03执行模型
从你敲下 prompt 到结果回灌,中间发生了什么。
拆解任务 · 写出 JS 编排脚本"] M --> RT["Workflow Runtime
后台独立执行(异步)"] RT --> P{"并发调度
同时 ≤ 16"} P --> A1["subagent · 阶段A"] P --> A2["subagent · 阶段A"] P --> A3["subagent · 阶段A
(总数 ≤ 1000)"] A1 --> V["汇总 / 交叉验证"] A2 --> V A3 --> V V -->|"仅最终答案回灌"| M M --> U2["回到你的上下文 · 通知完成"]
- 隔离执行:runtime 在与对话隔离的环境里跑脚本,中间结果留在脚本变量里,不进 Claude 上下文。
- 异步后台:启动后立即返回一个任务 id,workflow 在后台跑,主会话仍可交互;完成时通知你。
- 并发受控:同时最多 16 个 subagent,多出的排队等空位;整个生命周期总量上限 1000。
- 上下文干净:中间推理默认不回到主会话(除非脚本用
log()输出),因此长任务不会撑爆上下文。 - 可交叉验证:脚本可以让独立 subagent 互相审查彼此结论后再上报,或从多个角度起草方案再择优。
04如何触发与上手
三种触发方式;最快是先跑内置的 /deep-research。
直接跑内置 workflow:/deep-research <你的问题>。它从多个角度并行网搜、抓取并交叉核对来源、对每条主张投票,最后给一份带引用、已滤掉未通过核对主张的报告。(需 WebSearch 工具可用。)
三种触发方式
- prompt 里带
workflow一词 —— 不改会话 effort,只把单个任务跑成 workflow。Claude Code 会高亮这个词并写脚本而非逐回合处理。(误触发?按alt+w本次忽略高亮)
例:Run a workflow to audit every API endpoint under src/routes/ for missing auth checks /effort ultracode—— xhigh 推理 + 自动编排:Claude 对会话里每个实质任务都自行决定是否起 workflow(一个请求可能连起好几个:先理解代码、再改、再验证)。仅当前会话有效,新会话重置;用/effort high退回。只在支持 xhigh 的模型上可用。- 跑已有的 workflow 命令 —— 内置的
/deep-research,或你保存过的/<名字>。
运行前的审批
CLI 里每次运行会弹出计划好的阶段和这些选项:
- Yes, run it —— 开跑
- Yes, and don't ask again for <name> in <path> —— 开跑,且本项目此 workflow 以后不再问
- View raw script —— 先看脚本再决定(
Ctrl+G在编辑器打开;Tab可在开跑前调整 prompt) - No —— 取消
是否弹审批取决于权限模式:默认 / acceptEdits 每次都问(除非选了"不再问");Auto 仅首次、ultracode 开启时跳过;Bypass / claude -p / Agent SDK 从不问,直接开跑。桌面 App 是一张含名称、阶段列表、用量警示的审批卡(Once / Always / Deny)。
无论你会话是什么权限模式,workflow spawn 的 subagent 一律以 acceptEdits 模式运行并继承你的工具 allowlist,文件编辑自动批准。不在 allowlist 里的 shell / web fetch / MCP 调用仍可能在运行中弹确认——长运行前把需要的命令加进 allowlist 可避免打断。
保存复用
某次运行达到你要的效果后,/workflows 选中它、按 s 保存为命令。保存位置 Tab 切换:.claude/workflows/(项目级,随仓库共享)或 ~/.claude/workflows/(个人级,所有项目可见、仅自己可见)。之后即可作为 /<名字> 复用;同名时项目级优先。
来源:官方文档(Run a bundled workflow / Have Claude write a workflow / Approve the plan / Save for reuse)
05监控 · 成本 · 控制
能起上千 agent 的功能,成本与可控性是第一位。
用 /workflows 看与控
运行在后台,随时 /workflows 列出运行中与已完成的 workflow,方向键选中、Enter 进入进度视图——每个阶段显示 agent 数、token 总量、耗时;还能钻进某个 agent 看它的 prompt、最近工具调用与结果。输入框下方的任务面板也有一行进度摘要。
| 按键 | 动作 |
|---|---|
↑ / ↓ | 选择阶段或 agent |
Enter / → | 钻入阶段 / agent,读其 prompt、工具调用、结果 |
Esc | 返回上一层 |
p | 暂停 / 恢复整个运行 |
x | 停止选中 agent;焦点在运行上时停止整个 workflow |
r | 重启选中的运行中 agent |
s | 保存该运行的脚本为命令 |
一次 workflow 会 spawn 大量 agent,单次运行可能比在对话里做同一任务消耗明显更多 token;运行像普通会话一样计入你方案的用量与速率限制。好消息:随时从 /workflows 停止,不会丢失已完成的工作。
控成本:盯住模型
- workflow 里每个 agent 默认用你会话的模型,除非脚本把某阶段路由到别的模型。
- 大运行前先
/model确认(尤其你平时会切到小模型做日常活时)。 - 描述任务时,可让 Claude 把不需要最强模型的阶段换成小模型。
关掉 workflow
不想用时三选一:/config 里关掉 Dynamic workflows;或 ~/.claude/settings.json 设 "disableWorkflows": true;或环境变量 CLAUDE_CODE_DISABLE_WORKFLOWS=1。组织级可用 managed settings。关闭后:bundled 命令不可用、workflow 词不再触发、ultracode 从 /effort 菜单移除。
06限制与可用性
硬性数字与运行时约束,逐条可追溯。
可用性
研究预览(research preview),需 Claude Code v2.1.154+。可用于:所有付费方案(Pro / Max / Team / Enterprise) + Anthropic API + Amazon Bedrock + Google Cloud Vertex AI + Microsoft Foundry。Pro 上需在 /config 的 "Dynamic workflows" 行手动开启。可用界面:CLI、桌面 App、IDE 扩展、claude -p 无头模式、Agent SDK。
运行时约束(官方 "Behavior and limits" 表)
| 约束 | 原因 |
|---|---|
| 不接受运行中用户输入 (只有 agent 权限弹窗能暂停) | 需要阶段间签字确认?把每个阶段拆成独立 workflow |
| 脚本本身无文件系统 / shell 权限 | 读写与执行命令由 agent 做,脚本只负责编排 |
| 同时最多 16 个 agent(CPU 核少则更少) | 限制本机资源占用 |
| 单次运行总计 1000 个 agent | 防止失控回路 |
来源:官方文档 Behavior and limits / Note(并发"实际取 min(16, 核数−2)"为运行时规范补充)
同时并发 16 限的是"任一时刻在跑几个";累计 1000 限的是"整个运行先后总共起过几个"。一次运行可以处理上千个子任务,但它们在 16 的并发闸门下排队轮流跑——像 16 个收银台服务一天 1000 位顾客,多的排队。
续跑(resume)
停止后可续跑:已完成的 agent 返回缓存结果,其余实时跑。从 /workflows 选中按 p 恢复,或让 Claude 用同一脚本重新启动。续跑仅限同一 Claude Code 会话——运行中退出 Claude Code,下次会话会从头跑。
展开:6 条关键事实的独立验证记录
本报告用动态工作流的"验证阶段"对以下载重事实做了多源交叉核对,结论均为 confirmed:
- v2.1.154+ — 官方文档 Note、MarkTechPost
- 并发 16 — 官方 Behavior 表、MarkTechPost、TechCrunch
- 总量 1000 — 官方 Behavior 表、MarkTechPost、TechCrunch(均称"防失控回路")
- research preview + 平台可用 — 官方文档 Note、Anthropic 发布说明
- 触发(workflow 词 / ultracode) — 官方文档、第三方上手指南
- Bun 案例数字 — Anthropic 官方博客、The New Stack
07脚本 API 参考
给想看懂 / 自己写脚本的人。
官方文档只在用户层面记录本功能(怎么触发 / 监控 / 保存 / 限制),不公开脚本 DSL 的源码级 API(你可以在审批时用 "View raw script" 看到 Claude 实际写的脚本)。下列精确签名与语义来自 Claude Code 运行时规范,用于理解脚本结构;研究预览阶段细节可能变化。
脚本骨架:meta 块 + 编排原语
export const meta = {
name: 'find-flaky-tests',
description: 'Find flaky tests and propose fixes', // 必填,会显示在权限弹窗
phases: [ // 每个 phase() 一项
{ title: 'Scan', detail: 'grep test logs for retries' },
{ title: 'Fix', detail: 'one agent per flaky test' },
],
}
// meta 必须是纯字面量:不能有变量/函数调用/展开/模板插值
phase('Scan')
const flaky = await agent('grep CI logs for retry markers', { schema: FLAKY_SCHEMA })
phase('Fix')
const fixes = await parallel(flaky.tests.map(t => () =>
agent(`Propose a fix for flaky test ${t.name}`, { schema: FIX_SCHEMA })
))
return { fixes }
核心原语
| 原语 | 签名 / 返回 | 作用 |
|---|---|---|
agent() | agent(prompt, opts?) → 文本;传 schema 则返回校验过的对象;被跳过返回 null | 派一个 subagent。opts:label / phase / schema / model / isolation:'worktree' / agentType |
parallel() | parallel(thunks) → 结果数组(屏障) | 并发跑完全部再返回;失败的 thunk 变 null,用 .filter(Boolean) |
pipeline() | pipeline(items, ...stages) → 数组(无屏障) | 每个 item 独立流过所有阶段;阶段回调收 (prevResult, originalItem, index) |
phase() | phase(title) | 开启新阶段,之后的 agent() 归到该进度分组 |
log() | log(message) | 向用户输出进度行(显示在进度树上方) |
budget | { total, spent(), remaining() } | 本轮 token 目标(硬上限)。可据此动态循环或静态扩缩规模 |
args | 调用时传入的值,原样可读 | 参数化命名 workflow(研究问题 / 目标路径 / 配置) |
workflow() | workflow(nameOrRef, args?) | 内联跑另一个 workflow 作为子步骤(仅一层嵌套) |
展开:structured output(schema) 与 budget 的用法
结构化输出:给 agent() 传一个 JSON Schema,subagent 会被强制调用结构化输出工具,agent() 直接返回校验过的对象——无需自己解析,模型不匹配会自动重试。
按预算扩缩(需先判 budget.total,否则 remaining() 为 Infinity 会一直跑到 1000 上限):
const bugs = []
while (budget.total && budget.remaining() > 50_000) {
const r = await agent('Find bugs in this codebase.', { schema: BUGS })
bugs.push(...r.bugs)
log(`${bugs.length} found, ${Math.round(budget.remaining()/1000)}k left`)
}
worktree 隔离:isolation:'worktree' 给会并行改文件的 agent 各自独立 git worktree,避免冲突(较贵,仅在需要时用)。
类型注解 / interface / 泛型会解析失败。且 Date.now() / Math.random() / 无参 new Date() 会抛错(否则会破坏续跑的可复现性)——需要时间戳就从 args 传入,需要随机就按 index 变化 prompt。
来源:Claude Code 运行时规范(第一手);概念框架见 官方文档
08pipeline vs parallel:最该想清楚的取舍
默认用 pipeline;只有真正需要"所有结果一起"时才用 parallel 屏障。
pipeline() 让每个 item 独立流过各阶段——item A 可以在阶段 3,而 item B 还在阶段 1。墙钟时间 = 最慢的单条链,而不是"每阶段最慢之和"。parallel() 是屏障:必须等齐上一阶段全部结果才进下一步,慢的拖累快的。
| 什么时候用屏障(parallel) ✅ | 什么时候不该用屏障 ❌ |
|---|---|
| 下一阶段需要全集:跨所有结果去重 / 合并后再做下游 | "我只是要 flatten/map/filter"——放进 pipeline 的一个阶段里做 |
| 需要早退:总数为 0 就整体跳过(如 0 bug → 跳过验证) | "阶段概念上独立"——独立 ≠ 需要同步,pipeline 正是建模这个 |
| 下一阶段 prompt 要引用"其它发现"做对比 | "代码更干净"——屏障延迟是真实成本 |
如果你写出"parallel → 一段无跨 item 依赖的 transform → 又一个 parallel",那中间的 transform 不需要屏障,改写成 pipeline 的一个阶段即可。拿不准就用 pipeline。
来源:Claude Code 运行时规范;模式定位见 官方文档
09编排模式(可搜索 / 可筛选)
这些是工具箱,按任务自由组合。输入关键词或点分类筛选。
| 模式 | 类别 | 做什么 | 何时使用 |
|---|---|---|---|
| pipeline(默认) | 编排 | 每个 item 独立流过各阶段,无屏障 | 绝大多数多阶段工作的默认选择 |
| parallel(屏障) | 编排 | 并发跑完全部再返回 | 下一步真的需要全集:去重 / 合并 / 早退 / 跨 item 比较 |
| worktree 隔离 | 编排 | 每个 agent 各自独立 git worktree | 多个 agent 并行改文件、否则会冲突时 |
| adversarial verify 对抗验证 | 验证 | 对每条发现派 N 个"怀疑者",各自试图推翻;多数推翻则丢弃 | 防止"看似合理实则错"的结论混入 |
| perspective-diverse verify 多视角验证 | 验证 | 每个验证者用不同视角(正确性 / 安全 / 性能 / 可复现) | 一条发现可能以多种方式出错时,比 N 个相同怀疑者更强 |
| judge panel 评审团 | 验证 | 从不同角度生成 N 个独立方案,并行评分,从胜者综合并嫁接亚军亮点 | 解空间很宽的设计 / 方案题,胜过"一次成稿反复改" |
| loop-until-dry 跑到无新发现 | 发现 | 持续派 finder,直到连续 K 轮没有新结果才停 | 未知规模的发现(bug / issue / 边界),简单计数会漏尾部 |
| multi-modal sweep 多模式扫描 | 发现 | 多个 agent 各用一种搜法(按容器 / 内容 / 实体 / 时间) | 单一搜索角度覆盖不全时 |
| completeness critic 完整性批判 | 发现 | 最后派一个 agent 问"还差什么——没跑的模态 / 没验的断言 / 没读的源" | 收尾查漏,其发现作为下一轮工作 |
| budget scaling 按预算扩缩 | 扩展 | 按 token 预算动态决定 fleet 规模或循环深度 | 用户给了用量目标("+500k")时;并把被砍掉的部分 log 出来 |
最常用的组合:评审 → 验证(pipeline)
const results = await pipeline(
DIMENSIONS,
d => agent(d.prompt, { label: `review:${d.key}`, phase: 'Review', schema: FINDINGS }),
review => parallel(review.findings.map(f => () =>
agent(`Adversarially verify: ${f.title}`, { phase: 'Verify', schema: VERDICT })
.then(v => ({ ...f, verdict: v }))))
)
const confirmed = results.flat().filter(Boolean).filter(f => f.verdict?.isReal)
// 维度'bugs'的发现在验证时,维度'perf'还在评审 —— 不浪费墙钟
来源:Claude Code 运行时规范;对抗验证 / 多角度起草见 官方博客
10何时用 / 何时别用
这不是默认工具——刻意使用。
代码库级审计(bug 猎取、安全审计、profiler 引导的性能优化);大规模迁移;需要交叉核对的研究;任何"单上下文装不下"或"需并行 + 验证"的大任务。
评论者普遍认为多 agent workflow 对约 95% 的日常开发任务并不划算,目前是一种昂贵且实验性的方式,用来啃更大的项目。小改、单文件、问答类——内联更好。
规模要匹配请求:"找找有没有 bug" → 几个 finder + 单票验证;"彻底审计 / 要全面" → 更大的 finder 池 + 3–5 票对抗验证 + 综合阶段。拿不准时:研究 / 审计 / 复核类倾向更彻底,快速检查类倾向更简洁。
来源:Shipyard · MarkTechPost · 官方文档
11真实案例
旗舰证据点 + 早期用法。
Bun 作者 Jarred Sumner 用动态工作流把 Bun 从 Zig 移植到 Rust:生成约 75 万行 Rust,既有测试套件约 99.8% 通过,从首次提交到合并约 11 天。这是官方用来证明"workflow 规模能力"的头号案例。已验证
其它被点名的用途
- 代码库级 bug 猎取 —— 全仓并行找 bug。
- profiler 引导的性能优化审计 —— 按性能画像批量定位优化点。
- 安全审计 —— 多维并行发现 + 交叉验证。
- 大规模迁移 / 交叉核对研究 —— 官方框定的典型场景。
案例数字为厂商自述(Anthropic 博客),The New Stack 等在发布报道中转述。作为能力上限的参考,而非保证。
来源:官方博客 · The New Stack
12完整实战示例
最有说服力的例子——本报告就是用下面这个 workflow 生成的。
我用一个动态工作流来调研动态工作流本身:研究阶段并行派 7 个域 agent 抓官方文档/博客/发布说明并各返回结构化发现;验证阶段对 6 条载重事实做多源交叉核对。1 分 38 秒返回,6 条事实全部 confirmed。下面是该脚本的忠实精简版:
export const meta = {
name: 'research-dynamic-workflows',
description: 'Deep research on Claude Code Dynamic Workflows',
phases: [
{ title: 'Research', detail: '7 parallel domain agents fetch official docs/blog' },
{ title: 'Verify', detail: 'cross-source check of load-bearing facts' },
],
}
// 每个 agent 用 schema 强制返回 {topic, summary, facts[{claim,detail,sources}], ...}
phase('Research')
const research = await parallel(TOPICS.map(t => () =>
agent(t.prompt, { label: `research:${t.key}`, phase: 'Research', schema: RESEARCH_SCHEMA })
))
phase('Verify')
const verifications = await parallel(CLAIMS.map(c => () =>
agent(`独立核对这条事实(≥2 个可信来源): "${c.text}"。confirmed/contradicted/unclear`,
{ label: `verify:${c.key}`, phase: 'Verify', schema: VERIFY_SCHEMA })
))
return { research: research.filter(Boolean), verifications: verifications.filter(Boolean) }
因为"综合"这一步(写报告)需要全部研究结果一起——这是屏障少数正当场景之一(全集合成)。若研究与验证能逐条流水化,则应改用 pipeline:某条发现验证时,其它还在研究,不浪费墙钟。
13注意事项与小结
使用时记住
- 研究预览:限制与行为可能变化;需
v2.1.154+,Pro 还要在/config开启。 - 成本敏感:一次能起上千 agent,计入用量与速率限制;大运行前看
/model,跑偏就/workflows停(不丢已完成工作)。 - 编排不碰 I/O:脚本本身无文件系统 / shell 权限、不接受运行中输入(只有 agent 权限弹窗能暂停);需阶段间人工签字就拆成多个 workflow。
- 默认 pipeline:屏障(parallel)只在真要全集时用,否则白白浪费墙钟。
- 验证再上报:对抗 / 多视角验证能显著降低"看似对实则错";去重要对"所有见过的"去重,否则循环不收敛。
- 可复现约束:脚本是纯 JS;
Date.now()/Math.random()不可用(为支持续跑);续跑仅限同一会话。 - 不是默认工具:约 95% 任务不需要它——刻意用在大审计 / 大迁移 / 交叉验证研究上。
Dynamic Workflows 的全部价值可归结为一句话:把"计划"从对话搬进代码。脚本持有循环、分支与中间结果,runtime 在后台并行调度上千 subagent 并让它们互相验证,主会话只收一个干净的最终答案。这让 Claude Code 能啃下"单上下文装不下"的任务——代价是真金白银的用量和"刻意使用"的纪律。它不取代日常的内联协作,而是在你需要规模 + 确定性编排 + 交叉验证时,多给你一档。
14来源
所有断言可追溯到下列来源;API 精确签名另注为"运行时规范(第一手)"。
官方
- docscode.claude.com/docs/en/workflows — Orchestrate subagents at scale with dynamic workflows(权威文档)
- blogclaude.com/blog/introducing-dynamic-workflows-in-claude-code — 官方发布博客(含 Bun 案例、对抗验证)
- newsanthropic.com/news/claude-opus-4-8 — Opus 4.8 发布说明
- docscode.claude.com/docs/en/common-workflows — Common workflows(prompt 配方,区别于本功能)
媒体 / 第三方(用于交叉验证)
- mediaTechCrunch — Opus 4.8 + dynamic workflow 工具(并发/总量上限)
- mediaMarkTechPost — 版本要求 v2.1.154、16/1000 上限、可用范围
- mediaThe New Stack — 发布综述(转述 Bun 案例数字)
- guideAgentpedia — 第三方分步上手指南(触发示例)
- guideShipyard — 多 agent 编排取舍("95% 任务不需要")