文档大纲

Claude Code动态工作流实战:让Claude替你调度上百个AI分身

动态工作流(Dynamic Workflows)是 Claude Code 的进阶能力:Claude 把你的任务写成一段 JavaScript 编排脚本,在后台并发调度数十到数百个子代理执行,而你的会话始终保持响应。本文从"它是什么、何时用、怎么用"三条主线出发,手把手带你跑通内置工作流、用 ultracode 让 Claude 写脚本、保存复用、传参、控成本,是进阶用户不可错过的效率利器。

一、先搞懂:动态工作流到底解决什么问题?

平时用 Claude Code,它是"逐轮对话"的:你发一句,它想一步、干一步,结果都塞进它的上下文窗口里。这种模式对付日常任务足够了,但遇到下面这类活儿就会力不从心:

  • 扫描整个代码库的 500 个文件,找出所有缺少鉴权的接口
  • 把 300 个组件从 styled-components 批量迁移到 Tailwind
  • 一个研究问题,需要查十几个来源并相互交叉验证
  • 一份难写的方案,值得先从多个独立角度各起草一版再对比

这些任务的共同点:需要协调的代理数量,远超一次对话能装下的规模。

一句话定义:动态工作流是一段由 Claude 编写的 JavaScript 脚本,它在运行时(runtime)后台执行,大规模编排子代理干活,中间结果留在脚本变量里,只把最终答案交回给你。

关键差别在于:"计划"被搬进了代码。循环、分支、中间结果都由脚本自己持有,Claude 的上下文只保留最终结论——既省 context,又让整个编排可以保存、重跑、版本化。

环境要求:动态工作流需要 Claude Code v2.1.154 或更高版本,在所有付费计划(Pro / Max / Team / Enterprise)可用。Pro 用户需在 /config 的 "Dynamic workflows" 一行手动启用。

二、四选一:工作流 vs 子代理 vs Skills vs Agent Teams

Claude Code 里能跑多步任务的机制有四种,新手最容易搞混。核心区别只有一个问题:谁来决定下一步干什么?

子代理SkillsAgent Teams工作流
它是什么Claude 生成的工作者Claude 遵循的指令监督对等会话的主导代理运行时执行的脚本
谁决定下一步Claude,逐轮Claude,按提示主导代理,逐轮脚本
中间结果在哪Claude 上下文窗口Claude 上下文窗口共享任务列表脚本变量
什么可重复工作者定义指令团队定义编排本身
规模每轮几个委派同子代理少数长期对等体每次数十到数百个代理
中断后重启轮次重启轮次队友继续运行同会话内可恢复

选型口诀:

  • 任务小、逐步来 → 直接对话或子代理
  • 有固定套路要复用 → Skills
  • 几个长期协作的"同事" → Agent Teams
  • 规模大 / 想把编排固化成可重跑的脚本 / 想让代理之间互相对抗性审查 → 工作流

工作流独有的价值不只是"跑更多代理",而是能施加可重复的质量模式:比如让独立代理在汇报前互相"挑刺"(对抗性审查),或从多个角度起草方案再彼此权衡——结果比单次通过更可信。

三、第一次上手:跑通内置的 /deep-research

想最快看懂工作流长什么样?直接跑 Claude Code 自带的内置工作流 /deep-research。它会在多个角度上并发搜索网络、抓取并交叉验证来源,最后综合出一份带引用的报告。

步骤 1:运行

/deep-research Node.js v20 与 v22 的权限模型存在哪些变更?

步骤 2:批准

Claude Code 会问你是否允许运行,选是即可。(具体提示与你的权限模式有关,详见第五节。)

步骤 3:观看进度

运行会在后台启动,你的会话不会被卡住。随时输入:

/workflows

用方向键选中运行,按 Enter 打开进度视图。视图会展示每个阶段(stage)及其代理数量、token 总量、耗时。你也可以钻进任意阶段,查看具体某个代理发现了什么。

输入框下方的任务面板也会出现一行进度摘要,按 ↓ 聚焦、按 Enter 展开。

步骤 4:阅读报告

运行完成后,报告直接进入会话。它会为每条声明标注来源;没通过交叉验证的声明会被过滤掉。

从 v2.1.196 起,如果验证代理因限流或 API 错误而无法核查某条声明,报告会把它标为"未验证",而不是当作"被驳回"。

进度视图快捷键速查

键操作
↑ / ↓选择阶段或代理
Enter / →钻入阶段 → 进入代理,读它的提示/工具调用/结果
Esc返回上一级
j / k代理详情溢出时滚动
f按状态过滤代理列表(v2.1.186+,再按循环)
p暂停 / 恢复运行
x停止选中代理;焦点在运行上时停止整个工作流
r重启选中的运行中代理
s保存运行脚本为命令(重点,见第四节)

四、核心玩法:让 Claude 替你写工作流

内置的 /deep-research 只是开胃菜。真正强大的是:你描述任务,Claude 现场为你写编排脚本。有两种触发方式。

方式 A:单次任务,用 ultracode 关键字

在提示里加上关键字 ultracode,Claude 就会把这一个任务当作工作流来写,而不逐轮处理:

ultracode: 审计 src/routes/ 下所有 API 接口,排查缺失鉴权校验的情况。

用中文自然语言说"用工作流处理""跑一个工作流"同样有效——Claude 会把这类请求视作等价的选择加入。

  • v2.1.160 之前的字面触发词是 workflow,自然语言在两个版本都有效。
  • 不想触发时:macOS 按 Option+W,Windows/Linux 按 Alt+W 忽略高亮;或在关键字后退格。
  • 想彻底关掉自动触发:/config 里关闭 "Ultracode 关键字触发"。

方式 B:整个会话交给 Claude 判断,/effort ultracode

Ultracode 是一个设置,把 xhigh 推理努力与自动工作流编排绑在一起。开启后,Claude 会为每个实质性任务主动规划工作流,不用你每次点名:

/effort ultracode

也可以启动时就带上:claude --effort ultracode(需 v2.1.203+)。

开启后,一个请求可能被拆成一串工作流:一个理解代码 → 一个执行改动 → 一个验证结果。代价是每个请求更费 token、更慢。日常工作回归时用 /effort high 降档即可。Ultracode 只在当前会话生效,新会话重置。

它只在支持 xhigh 努力级别的模型上可用;其他模型的 /effort 菜单里不会出现。

保存工作流,一劳永逸复用 ⭐

这是最实用的一步。当 Claude 为一个重复性任务写好工作流并跑出满意结果后,把脚本存成命令,以后每次直接调用、执行完全相同的编排:

  1. 运行 /workflows,选中想保留的那次运行
  2. 按 s
  3. 在保存对话里,用 Tab 切换保存位置:
  • .claude/workflows/(项目内)→ 克隆仓库的每个人都能用
  • ~/.claude/workflows/(主目录)→ 所有项目可用,仅你可见
  1. 按 Enter 保存

保存后,它会像内置工作流一样出现在 / 自动补全里,未来会话直接 /<name> 调用。

Monorepo 场景(v2.1.178+):保存到项目位置时,会写入你工作目录与仓库根之间最近的 .claude/workflows/ 目录。加载时若多处定义了同名工作流,运行离工作目录最近的那个。项目工作流与个人工作流同名时,项目工作流优先。

给保存的工作流传参:args

保存的工作流可以通过 args 接收输入,脚本里读作全局变量 args。这样无需为每次运行改脚本:

Run /triage-issues on issues 1024, 1025, and 1030

Claude 会把列表作为结构化数据传进去,脚本可直接对 args 调用数组/对象方法,无需先解析。省略 args 时,脚本内该全局变量为 undefined。

五、运行前的把关:批准与权限

工作流会消耗不少资源,所以运行前通常有一道批准关。CLI 里的提示会展示计划的各个阶段和这些选项:

  • 是,运行它:启动
  • 是,不再为 <path> 中的 <name> 询问:启动,并从此在本项目跳过该工作流的提示
  • 查看原始脚本:决定前先读脚本
  • 否:取消

快捷键:Ctrl+G 在编辑器中打开脚本;Tab 可在启动前调整提示词。

是否提示,取决于你的权限模式

权限模式何时提示
默认 / 接受编辑每次运行,除非你已选过"不再询问"
自动仅首次;任一"是"会在用户设置里记录同意。ultracode 开启时完全跳过
绕过权限 / claude -p / Agent SDK从不提示,立即启动

重要安全须知:你的权限模式只管上面的启动提示。工作流生成的子代理始终以 acceptEdits 模式运行,继承你的工具允许列表——文件编辑自动批准。但 Shell 命令、网络获取、不在允许列表里的 MCP 工具仍可能在运行中弹出提示。长任务前,先把代理需要的命令加进允许列表,避免中途卡住。

桌面应用里,批准卡会显示工作流名称、阶段列表和 token 用量警告,提供"一次 / 总是 / 拒绝";进度视图出现在"后台任务"侧栏。

六、看懂脚本:Claude 到底写了什么

保存后的工作流文件由一个 meta 块 + 编排脚本主体组成。你通常不用改它,但认得出它长这样有助于理解:

export const meta = {
  name: 'audit-routes',
  description: 'Audit every route handler for missing auth checks',
}

// 第一步:让一个代理列出所有目标文件,并约定返回结构
const found = await agent('List every .ts file under src/routes/.', {
  schema: {
    type: 'object',
    required: ['files'],
    properties: { files: { type: 'array', items: { type: 'string' } } },
  },
})

// 第二步:pipeline 为每个文件并发生成一个审计代理
const audits = await pipeline(found.files, file =>
  agent(`Audit ${file} for missing authentication checks.`, { label: file }),
)

return audits.filter(Boolean)

要点:

  • 主体是带顶层 await 的纯 JavaScript
  • agent() → 生成一个子代理
  • pipeline() → 为列表里的每一项并发跑一个代理
  • 想手改脚本时,让 Claude 引导你改,或查阅 Agent SDK 参考里的 Workflow 工具条目

七、运行机制与硬限制

工作流在隔离环境中执行,与你的对话分开。中间结果留在脚本变量里,不进 Claude 上下文。每次运行都会把脚本写到 ~/.claude/projects/ 下的会话目录里——运行开始时 Claude 会拿到该路径,你可以直接问它要,打开来读、对比历史版本,甚至改完让它从新版本重跑。

运行时的四条铁律

约束为什么
运行途中不能插入用户输入只有代理权限提示能暂停。需要阶段间签署?把每个阶段拆成独立工作流
脚本本身无直接文件/Shell 访问读写和执行命令都由代理干,脚本只负责协调
最多 16 个并发代理(核少的机器更少)限制本地资源占用
每次运行总数上限 1000 个代理防止失控循环烧钱

八、开箱即用的任务提示模板

工作流最适合"任务大过单代理容量"或"同样步骤要在很多项目上跑"的场景。下面每条都是让 Claude 自己写并跑工作流,你不用碰脚本。收藏直接抄:

① 批量审计同类问题(扇出 + 验证)

启用工作流审计 src/routes/ 下所有路由处理器,排查缺失鉴权校验的问题,并对每一项排查结果开展对抗性验证后再提交报告。

② 反复修到检查通过(检查器循环)

启用工作流执行 npx tsc --noEmit,持续修复检出的错误,直至类型校验通过,或连续两轮处理均无进展。

③ 并行大规模迁移(隔离副本防冲突)

启用工作流,将 src/components/ 下所有组件从 styled-components 迁移至 Tailwind;每个文件在独立副本中进行改造。

④ 审查所有改动文件并汇总一份报告(去重排序)

启用一套工作流程,核查该 PR 内所有变更文件是否存在正确性问题,随后将各文件的评审结果汇总为一份优先级排序总结报告。

⑤ 跨多来源研究一个主题

> use a workflow to research how our three competitors handle rate limiting: read their public docs and recent changelog entries in parallel, then compare the approaches

⑥ 反复找问题直到列表不再增长(收敛式搜索)

> use a workflow to find flaky tests in this repo: run the suite repeatedly, record which tests fail intermittently, and stop once two rounds in a row find nothing new

九、管好你的运行:恢复与控成本

暂停后恢复

停掉运行后可以恢复:已完成的代理返回缓存结果,其余的实时继续。在 /workflows 里选中暂停的运行按 p,或让 Claude 用相同脚本重启。

恢复只在同一 Claude Code 会话内有效。若运行期间退出了 Claude Code,下个会话会从头启动。

成本控制(重点!)

工作流会生成很多代理,单次运行可能比对话处理同一任务贵得多,并照常计入你的套餐用量和速率限制。几个省钱习惯:

  1. 先小范围试跑:提交大任务前,先只跑一个目录、一个窄问题。/workflows 视图实时显示每个代理的 token 用量,随时可停且不丢已完成的工作。
  2. 留意大运行警告:当工作流调度超过 25 个代理或预计 token 超过 150 万时,进度行会显示 Large workflow 警告(v2.1.203+)。它只是建议性提示,不会暂停运行。
  3. 设置大小指南:/config 里的 "Dynamic workflow size" 让 Claude 写的脚本默认保持较小规模(下一个提示生效,v2.1.202+):
值发给 Claude 的指导
unrestricted无指南(默认)
small目标 < 5 个代理
medium目标 < 15 个代理
large目标 < 50 个代理

设了指南后,它的代理计数会替换掉那个 25 的警告阈值;但运行时 1000 上限始终生效。

  1. 控模型成本:工作流里每个代理都用你的会话模型,除非脚本把某阶段路由到别的模型。大运行前用 /model 确认;描述任务时可要求 Claude 为"不需要最强模型"的阶段用小模型。

十、如何关闭工作流

工作流在 CLI、桌面应用、IDE 扩展、claude -p 无头模式与 Agent SDK 中都可用。关闭方式:

给自己关:

  • /config 里把 "Dynamic workflows" 切为关(会话内持续)
  • ~/.claude/settings.json 里设 "disableWorkflows": true
  • 环境变量 CLAUDE_CODE_DISABLE_WORKFLOWS=1(启动时读取)

给整个组织关:在托管设置里设 "disableWorkflows": true,或用 Claude Code 管理员设置页的开关。

关闭后:内置工作流命令不可用、ultracode 关键字不再触发、ultracode 从 /effort 菜单消失。

结语:什么时候真正该上工作流?

回到最初那个判断标准——当一个任务大到一次对话协调不过来,或当同样的编排你想反复复用时,工作流就是那把对的工具。

给进阶用户的三条实战建议:

  1. 先跑 /deep-research 找感觉,再用 ultracode 让 Claude 为你的真实任务写脚本。
  2. 满意的运行一定要 s 保存,配合 args 传参,把"每个分支都要跑的审查"变成一条 /命令。
  3. 成本先小后大:窄范围验证 → 看 token → 设大小指南,别让失控脚本烧掉你的额度。

把"计划"交给代码,把"执行"交给成百的分身,你只负责读那份最终报告——这就是动态工作流带来的杠杆。

延伸阅读

阅读量: 291