核心思想
动态工作流是一段由 Claude 编写、运行时在后台执行的 JavaScript 脚本,用来大规模编排子智能体。当一个任务需要的智能体多到单次对话无法协调,或者你想把编排过程固化成一段可阅读、可重跑的脚本时,就该用它——典型场景包括全代码库 bug 排查、数百文件的迁移,以及需要多来源交叉核验的研究。
动态工作流目前处于研究预览阶段。它需要 Claude Code v2.1.154 或更高版本,在所有付费套餐上均可使用,可通过 Anthropic API 访问,也支持 Amazon Bedrock、Google Cloud Vertex AI 和 Microsoft Foundry。在 Pro 套餐上,可以从 /config 里的 Dynamic workflows 一行将其打开。
动态工作流是一段 JavaScript 脚本,用于大规模编排子智能体。Claude 会根据你描述的任务编写这段脚本,然后由一个运行时在后台执行它,与此同时你的会话依然可以正常使用。
当一个任务需要的智能体数量超过单次对话所能协调的范围,或者当你希望把编排过程固化成一段可以阅读、可以重跑的脚本时,就该考虑用工作流。典型场景包括:对整个代码库做一次 bug 排查、完成一次涉及 500 个文件的迁移、回答一个需要把多个来源相互交叉核验的研究问题,以及在最终拍板之前,先从几个相互独立的角度起草一份值得反复推敲的方案。
本页将介绍如何:
- 决定何时该用工作流,而不是子智能体或技能
- 用
/deep-research运行一个内置工作流 - 让 Claude 为你的任务编写一个工作流并保存下来
- 理解工作流如何运行,以及如何管理运行
何时使用工作流
子智能体、技能(Skill)和工作流都能执行多步骤任务。区别在于:计划掌握在谁手里。
| 子智能体 | 技能 | 工作流 | |
|---|---|---|---|
| 它是什么 | Claude 派生出来的一个工作者 | Claude 遵循的一组指令 | 运行时执行的一段脚本 |
| 由谁决定下一步运行什么 | Claude,逐回合决定 | Claude,遵循提示词 | 脚本 |
| 中间结果存放在哪里 | Claude 的上下文窗口 | Claude 的上下文窗口 | 脚本变量 |
| 什么是可复用的 | 工作者的定义 | 这组指令 | 编排本身 |
| 规模 | 每回合委派少量任务 | 与子智能体相同 | 每次运行数十到数百个智能体 |
| 中断处理 | 重启该回合 | 重启该回合 | 在同一会话中可恢复 |
工作流把计划搬进了代码。在使用子智能体和技能时,Claude 是编排者:它逐回合决定接下来派生什么,而每一个结果都落入 Claude 的上下文。而工作流脚本自己持有循环、分支和中间结果,因此 Claude 的上下文里只保留最终答案。
把计划写成代码,还让工作流不止于”运行更多智能体”,而是可以应用一种可复用的质量模式:它可以让多个独立的智能体在结果上报之前,对抗式地相互审查彼此的发现;也可以从多个角度各起草一份方案,再相互权衡比较。这样一来,你得到的结果会比单次跑一遍更可信。
运行内置工作流
最快看到工作流实际运行效果的方式,是运行 /deep-research——这是 Claude Code 内置的工作流,用于跨多个来源调研一个问题。你会看到智能体在后台依次跑完一组阶段,而你的会话始终保持空闲可用;最终你拿到的是一份报告,而不是逐回合的对话记录。
要为你自己的任务运行工作流,可以让 Claude 编写一个;一旦某次运行达到了你想要的效果,你就可以把它保存成你自己的命令。
内置工作流
Claude Code 内置了 /deep-research 这个工作流:
| 命令 | 它做什么 |
|---|---|
/deep-research <question> | 围绕一个问题从多个角度发散出网络搜索,抓取并交叉核验它找到的来源,对每条论断进行投票,最终返回一份带引用的报告,并把没能通过交叉核验的论断过滤掉。需要 WebSearch 工具可用 |
你自己保存的工作流也会以同样的方式变成命令,并和内置命令一起出现在 / 自动补全里。
观察运行过程
工作流在后台运行,所以智能体工作时会话依然可以响应。随时运行 /workflows 即可列出正在运行和已完成的工作流,然后选中其中一个打开它的进度视图。
/workflows进度视图会显示每个阶段,以及该阶段的智能体数量、token 总量和已用时间。底部页脚列出了每个操作对应的按键:
| 按键 | 操作 |
|---|---|
↑ / ↓ | 选择一个阶段或智能体 |
Enter 或 → | 进入选中的阶段,再进入某个智能体,以查看它的提示词、最近的工具调用和结果 |
Esc | 返回上一级 |
j / k | 当智能体详情内容溢出时在其中滚动 |
p | 暂停或恢复运行 |
x | 停止选中的智能体;当焦点在整个运行上时,则停止整个工作流 |
r | 重启选中的、正在运行的智能体 |
s | 把这次运行的脚本保存为一个命令 |
让 Claude 编写工作流
你可以通过两种方式让 Claude 为你的任务编写工作流:
- 在提示词里请求一个工作流:在提示词中任意位置加上
workflow这个词,Claude 就会为该任务编写一个工作流。 - 用 ultracode 让 Claude 自行决定:设置
/effort ultracode,Claude 会为会话中每一个实质性任务规划工作流。
你也可以运行一个已经存在的工作流命令:既可以是像 /deep-research 这样的内置工作流,也可以是你已经保存的工作流。
在提示词里请求工作流
如果你想把单个任务作为工作流来运行,又不改变会话的 effort 等级,只需在提示词的任意位置加上 workflow 这个词。
Run a workflow to audit every API endpoint under src/routes/ for missing auth checksClaude Code 会在你的输入中高亮这个词,Claude 随即为该任务编写一段工作流脚本,而不是逐回合地把它做完。
如果这次运行达到了你想要的效果,事后你可以把它保存成一个命令。
如果 Claude Code 高亮了这个词,但你本意并不想触发工作流,按 alt+w 即可让本次提示词忽略它。
用 ultracode 让 Claude 自行决定
ultracode 是 Claude Code 的一项设置,它把 xhigh 这档 reasoning effort 与自动工作流编排结合了起来。开启之后,Claude 会主动为每个实质性任务规划工作流,而不必等你开口。
/effort ultracode开启 ultracode 后,由 Claude 来判断什么任务值得用工作流。一个请求可能会接连变成好几个工作流:一个用来理解代码,一个用来做出改动,还有一个用来验证它。这适用于会话中的每个任务,因此相比更低的 effort 等级,每个请求都会消耗更多 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 | 从不提示。运行会立即开始 |
在 Desktop 应用里,一张审批卡片会显示工作流名称、阶段列表和一条关于 token 用量的提醒,并带有 Once、Always 和 Deny 三个操作。进度视图会出现在”后台任务”侧边栏中。
你的权限模式只控制上面这个启动提示。工作流派生出来的子智能体始终以 acceptEdits 模式运行,并继承你的工具允许清单,与你会话所处的模式无关。文件编辑会被自动批准。
不在你允许清单里的 shell 命令、网络抓取和 MCP 工具,仍然可能在运行途中提示你。要在一次长时间运行中避免这种情况,请在开始前把智能体需要用到的命令加入你的允许清单。
在 claude -p 和 Agent SDK 中,没有人可以接受提示,因此工具调用会遵循你配置好的权限规则,不会出现交互式确认。
保存工作流以便复用
当 Claude 为一个你会反复执行的任务编写了工作流时,你可以把那次运行的脚本保存为一个命令。这样一来,像”在每个分支上都跑一遍的代码审查”这样的流程,每次都会执行同一套编排。
运行 /workflows,选中你想保留的那次运行,按 s。在保存对话框里,Tab 用于在两个保存位置之间切换:
- 项目中的
.claude/workflows/:与克隆该仓库的所有人共享 - 主目录下的
~/.claude/workflows/:在每个项目里都可用,但只有你能看到
按 Enter 保存。之后的会话中,无论从哪个位置,这个工作流都会以 /<name> 的形式运行。
如果一个项目工作流和一个个人工作流同名,则运行项目工作流。
工作流如何运行
工作流运行时会在一个隔离环境中执行脚本,与你的对话相互分离。中间结果留在脚本变量里,而不会落进 Claude 的上下文。
随着运行推进,运行时会跟踪每个智能体的结果——正是这一点,使得一次运行可以在同一会话内恢复。
行为与限制
运行时施加以下约束:
| 约束 | 原因 |
|---|---|
| 运行途中不接受用户输入 | 只有智能体的权限提示才能暂停一次运行。如果需要在各阶段之间签字确认,请把每个阶段作为各自独立的工作流来运行 |
| 工作流本身不能直接访问文件系统或 shell | 由智能体来读取、写入和运行命令。脚本负责协调这些智能体 |
| 最多 16 个并发智能体,在 CPU 核心数有限的机器上更少 | 限定本地资源占用 |
| 每次运行总计最多 1,000 个智能体 | 防止循环失控 |
管理运行
运行一旦开始,你就可以从 /workflows 视图来管理它,或者展开输入框下方任务面板里它的进度行来管理。
暂停后恢复
如果你停止了一次运行,你可以恢复它:已经完成的智能体会返回它们的缓存结果,其余的则实时运行。要从 /workflows 恢复一次已暂停的运行,选中它并按 p;或者让 Claude 用同一段脚本重新启动该工作流。
恢复只在同一个 Claude Code 会话内有效。如果你在工作流运行期间退出了 Claude Code,下一个会话会重新从头开始这个工作流。
成本
一个工作流会派生许多智能体,因此单次运行所消耗的 token,可能明显多于在对话中把同一个任务做完。和其他任何会话一样,这些运行也会计入你套餐的用量和速率限制。你随时可以从 /workflows 停止一个正在运行的工作流,而不会丢失已经完成的工作。
工作流里的每个智能体都使用你会话的模型,除非脚本把某个阶段路由到了另一个模型。要控制模型成本:
- 如果你平时会切换到较小的模型来处理日常工作,那么在一次大规模运行之前,先检查一下
/model - 在描述任务时,让 Claude 对那些不需要最强模型的阶段使用较小的模型
关闭工作流
工作流可以在 CLI、Desktop 应用、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 菜单中移除。
相关资源
相关笔记
- 长时间运行智能体的高效编排框架 —— 编排框架的设计思路对照
- 面向长时间应用开发的编排框架设计 —— 另一种长程编排范式
- 如何打造 Multi-Agent 工程系统 —— 多智能体系统的工程搭建
- 多智能体协调模式:五种方案及其适用场景 —— 协调模式的选型权衡
- 我们如何在各款产品中围堵 Claude —— 工作流子智能体的隔离与信任边界