动态工作流:大规模编排子代理

动态工作流是一个 JavaScript 脚本,用于大规模编排子代理。Claude 会为你描述的任务编写脚本,运行时在后台执行它,而你的会话保持响应。

当任务需要比单次对话能协调的更多代理,或者你希望将编排逻辑固化为可阅读和重复运行的脚本时,就使用工作流。典型场景包括:全代码库的 Bug 扫描、500 个文件的迁移、需要交叉验证来源的研究问题,以及在确定方案之前从多个独立角度起草的复杂计划。

本页面涵盖以下内容:

何时使用工作流

子代理技能代理团队和工作流都可以运行多步骤任务。区别在于谁持有计划:

子代理技能代理团队工作流
是什么Claude 派生的工作者Claude 遵循的指令一个主导代理监督同级会话运行时执行的脚本
谁决定下一步运行什么Claude,逐轮决策Claude,遵循提示词主导代理,逐轮决策脚本
中间结果存放位置Claude 的上下文窗口Claude 的上下文窗口共享任务列表脚本变量
什么是可重复的工作者定义指令团队定义编排本身
规模每轮几个委托任务同子代理少量长期运行的同级代理每次运行数十到数百个代理
中断重新开始本轮重新开始本轮队友继续运行在同一次会话中可恢复

工作流将计划转移到代码中。使用子代理、技能和代理团队时,Claude 是编排者:它逐轮决定下一步派生或分配什么,每个结果都落在上下文窗口中。工作流脚本自身持有循环、分支和中间结果,因此 Claude 的上下文只包含最终答案。

将计划转移到代码中还能让工作流应用可重复的质量模式,而不仅仅是运行更多代理:它可以让独立代理对彼此的发现进行对抗性审查再上报,或者从多个角度起草方案并互相权衡,这样你得到的结果比单次通过更可信。

运行内置工作流

最快体验工作流的方式是运行 /deep-research,这是 Claude Code 内置的工作流,用于跨多个来源研究问题。你会看到代理在后台按阶段工作,而会话保持空闲,最后你会收到一份报告,而不是逐轮的转录。

  1. 输入 /deep-research <你的问题>
  2. Claude 写出工作流脚本
  3. 运行时在后台执行
  4. 结果以报告形式返回

要为自己的任务运行工作流,可以让 Claude 编写一个,当运行结果符合预期后,可以将其保存为自己的命令。

内置工作流

Claude Code 内置了 /deep-research 工作流:

命令功能
/deep-research <问题>从多个角度对问题进行网络搜索展开,获取并交叉检查找到的来源,对每个声明投票,返回一篇带引用的报告,过滤掉未通过交叉检查的声明。需要 WebSearch 工具可用

你保存的工作流同样会成为命令,出现在 / 自动补全中,与内置工作流并列。

观察运行过程

工作流在后台运行,因此代理工作时会话保持响应。随时运行 /workflows 列出正在运行和已完成的工作流,然后选择一个打开其进度视图。

/workflows

进度视图显示每个阶段及其代理数量、Token 总数和耗时。底部列出每个操作对应的按键:

按键操作
/ 选择一个阶段或代理
Enter深入查看选中的阶段,然后进入代理查看其提示词、最近的工具调用和结果
Esc返回上一层
j / k当代理详情内容溢出时滚动
p暂停或恢复运行
x停止选中的代理,或当焦点在运行上时停止整个工作流
r重新启动选中的运行中代理
s保存运行的脚本为命令

让 Claude 编写工作流

有两种方式让 Claude 为你的任务编写工作流:

你还可以运行已存在的工作流命令:内置工作流(如 /deep-research),或你已保存的命令。

在提示词中要求工作流

要作为工作流运行单个任务而不改变会话的 effort 级别,在提示词中的任意位置包含 workflow 一词。

Run a workflow to audit every API endpoint under src/routes/ for missing auth checks

Claude Code 会高亮输入中的该词,Claude 会为该任务编写工作流脚本,而不是逐轮处理。如果你本意不是启动工作流,按 Option+W(macOS)或 Alt+W(Windows/Linux)取消当前提示词的高亮,或者在光标位于高亮词后时按退格键。要完全阻止该词触发,在 /config 中关闭 Workflow 关键字触发器。

如果运行结果符合预期,你可以将其保存为命令

如果你已经用其他方式构建了编排器,比如一个子代理提示词文件夹或一个展开工作的技能,你可以把 Claude 指向它,并要求一个实现相同功能的工作流。

让 Claude 通过 Ultracode 自行决定

Ultracode 是 Claude Code 的一个设置,结合了 xhigh 推理 effort 和自动工作流编排。开启后,Claude 会为每个实质性任务规划工作流,而不是等你要求。

/effort ultracode

开启 Ultracode 后,Claude 自行决定何时任务需要工作流。一个请求可能变成连续多个工作流:一个理解代码、一个进行修改、一个验证修改。这适用于会话中的每个任务,因此每个请求消耗的 Token 更多、耗时更长。

Ultracode 在当前会话中持续,开启新会话时重置。回到日常工作时用 /effort high 降级。它仅在支持 xhigh effort 的模型上可用;其他模型的 /effort 菜单不提供此选项。

运行前批准计划

在 CLI 中,每次运行的提示词会显示计划的阶段和以下选项:

  • Yes, run it:启动运行
  • Yes, and don’t ask again for <name> in <path>:启动,并且之后在此项目中对这个工作流不再询问
  • View raw script:在决定之前阅读脚本
  • No:取消

Ctrl+G 在编辑器中打开脚本。Tab 允许在运行开始前调整提示词。

是否看到此提示取决于你的权限模式

权限模式何时提示
Default、accept edits每次运行,除非你已对该工作流在此项目中选择了 Yes, and don’t ask again
Auto仅首次启动。任何 Yes 会在用户设置中记录同意,后续启动直接开始。开启 Ultracode 时完全跳过
Bypass permissions、claude -p、Agent SDK从不。运行立即开始

在桌面应用中,会显示一个批准卡片,包含工作流名称、阶段列表和 Token 消耗提醒,操作选项为 OnceAlwaysDeny。进度视图出现在后台任务侧栏中。

你的权限模式仅控制以上的启动提示。工作流派生的子代理始终以 acceptEdits 模式运行,并继承你的工具白名单,无论你的会话模式如何。文件编辑自动批准。

Shell 命令、网络抓取和不在白名单中的 MCP 工具在运行中仍可能提示你。为避免长时间运行时出现这种情况,在开始前将代理需要的命令添加到白名单。

claude -p 和 Agent SDK 中没有可提示的人,因此工具调用遵循你配置的权限规则,不会出现交互确认。

保存工作流以便复用

当 Claude 为你将重复执行的任务编写了工作流,你可以将该运行的脚本保存为命令。一个像每次分支都运行的审查流程,之后就会每次都执行相同的编排。

运行 /workflows,选择你要保留的运行,按 s。在保存对话框中,Tab 在两个保存位置之间切换:

  • .claude/workflows/(项目内):与克隆仓库的每个人共享
  • ~/.claude/workflows/(用户主目录):在所有项目中可用,仅自己可见

Enter 保存。工作流在之后的会话中通过 /<name> 运行,无论来自哪个位置。

如果项目工作流和个人工作流同名,项目中的那个优先运行。

给已保存的工作流传入参数

已保存的工作流可以通过 args 参数接收输入。脚本将其读取为名为 args 的全局变量。用它在调用时提供研究问题、目标路径列表或配置对象,而不是每次运行时编辑脚本。

以下提示词用一个 Issue 编号列表运行已保存的工作流:

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

Claude 将列表作为结构化数据传入,脚本可以直接对 args 调用数组和对象方法,无需先解析。如果省略 args,脚本内该全局变量为 undefined

了解工作流如何运行

工作流运行时在隔离环境中执行脚本,与你的对话分离。中间结果留在脚本变量中,而不是进入 Claude 的上下文。

每次运行将其脚本写入 ~/.claude/projects/ 下你会话目录中的一个文件。Claude 在运行开始时接收该路径,因此你可以向它询问。你可以打开该文件阅读 Claude 编写的编排逻辑、与之前运行的脚本做 diff,或编辑它并让 Claude 从编辑后的版本重新启动。

运行时跟踪每个代理的结果随着运行进展,这使得运行在同一会话内可恢复

行为与限制

运行时施加以下约束:

约束原因
运行中无用户输入只有代理权限提示可以暂停运行。如需阶段间签字确认,将每个阶段作为独立的工作流运行
工作流本身无直接文件系统或 Shell 访问代理进行读取、写入和运行命令。脚本协调代理
最多 16 个并发代理,CPU 核心有限的机器上更少限制本地资源使用
每次运行最多 1,000 个代理防止失控循环

管理运行

启动运行后,通过 /workflows 视图管理它,或在输入框下方的任务面板中展开其进度行。

暂停后恢复

停止运行后可以恢复:已完成的代理返回其缓存结果,其余代理实时运行。从 /workflows 选择暂停的运行并按 p 来恢复,或让 Claude 用相同的脚本重新启动工作流。

恢复仅在同一 Claude Code 会话内有效。如果在工作流运行期间退出 Claude Code,下次会话将从头启动工作流。

成本

一个工作流会派生许多代理,因此单次运行消耗的 Token 可能比在对话中完成相同任务更多。运行会计入你计划的用量和速率限制,与任何其他会话一样。

在对大型任务投入之前,先在小范围上试运行工作流:一个目录而非整个仓库,或一个窄问题而非宽泛问题。/workflows 视图显示每个代理的 Token 用量随运行进展,你可以随时在那里停止运行而不丢失已完成的工作。运行时的代理上限限制了单次运行可以派生的代理数量,从而限制了失控脚本的成本。

工作流中的每个代理使用你会话的模型,除非脚本将某个阶段路由到不同的模型。控制模型成本的方法:

  • 在大型运行前检查 /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 管理员设置页面上的切换按钮。

当工作流被禁用时,内置工作流命令不可用,workflow 关键词不再触发运行,ultracode/effort 菜单中移除。

相关文档