Dynamic Workflows 是 Claude Code 的运行时能力:Claude 根据当前任务现场写一段 JavaScript 脚本,用这段脚本调度几十到上百个子 Agent 并行干活,最后把结果汇总回来。2026-05-28 发布并已 GA。可以理解成 Claude Code 内置了一个”任务编排引擎”——以前这类编排要开发者自己写脚本串联多次 API 调用,现在 Claude 当场生成执行框架。
本页只讲在 Claude Code 里怎么用。脚本原函数、执行语义、运行时约束见 principles。
环境与前提
- 需要 Claude Code
v2.1.154+,支持 CLI、Desktop、IDE 扩展、claude -p和 Agent SDK - 所有付费套餐可用,也支持 Anthropic API、Amazon Bedrock、Google Cloud Agent Platform、Microsoft Foundry
- Pro 用户需要在
/config的 Dynamic workflows 行手动打开;Max 和 Team 默认开启;Enterprise 由管理员启用 ultracode只对 human-origin 的交互输入生效,-p、schedule、webhook relays 这类输入不会自动触发
什么时候用
默认 Claude Code Harness 适合常规编码——在一个上下文里同时完成规划和执行。任务大到单个上下文协调不过来时,才值得上 workflow:全仓库 bug 排查、500 文件迁移、需要来源交叉验证的研究问题、值得从多个独立角度起草的硬方案。
官方用一张表说明四种编排方式的区别——谁掌握计划:
| 维度 | 子 Agent | Skills | Agent Teams | Workflows |
|---|---|---|---|---|
| 它是什么 | Claude 生成的工作者 | Claude 遵循的指令 | 主导 Agent 监督对等会话 | runtime 执行的脚本 |
| 谁决定下一步 | Claude,逐轮 | Claude,遵循提示 | 主导 Agent,逐轮 | 脚本 |
| 中间结果存哪 | Claude 上下文 | Claude 上下文 | 共享任务列表 | 脚本变量 |
| 可重复的是什么 | 工作者定义 | 指令 | 团队定义 | 编排本身 |
| 规模 | 每轮几个委派 | 与子 Agent 相同 | 少数长期对等体 | 每次运行数十到数百个 |
| 中断处理 | 重启轮次 | 重启轮次 | 队友继续运行 | 同一会话内可恢复 |
不适合:写一个函数、改一个 bug、解释一段代码——日常小任务上 token 消耗反而得不偿失。
触发方式
三种,门槛从低到高:
- 提示词里点名:包含
ultracode关键词,或直接说”use a workflow”/“run a workflow”,Claude 就为这个任务写脚本。关键词只在你自己输入的 prompt 里生效(交互式 CLI、IDE 面板、Remote Control、标记为 human 的 Agent SDK 输入);-p、定时任务、webhook 转发的 prompt 不会触发。误触发可按Option+W(macOS)/Alt+W取消高亮,或光标在关键词后按退格;也可在/config关掉 Ultracode keyword trigger。 - 开启 ultracode 模式:
/effort ultracode(或启动时claude --effort ultracode,需 v2.1.203+),Claude 对每个实质任务自主决定是否用 workflow,全会话生效。一个请求可能连续变成多个 workflow(先理解代码、再改、再验证)。token 和耗时显著增加,做完记得/effort high切回。 - 直接跑已有 workflow:内置的
/deep-research,或你自己保存的 workflow 命令,无需任何提示词技巧。
审批与权限
CLI 里每次运行前会展示计划阶段和几个选项:Yes, run it、Yes, and don't ask again for <name> in <path>、View raw script、No。Ctrl+G 用编辑器打开脚本,Tab 可以在运行前调整 prompt。
是否弹提示取决于权限模式:
| 权限模式 | 提示时机 |
|---|---|
| Auto | 仅首次;任一 Yes 会记录到用户设置,之后不再提示;ultracode 开启时完全跳过 |
| Manual、accept edits | 每次都提示,除非对某个 workflow 选过 don’t ask again |
| Bypass permissions | 不提示,直接运行 |
claude -p、Agent SDK | 不提示,走普通权限评估 |
在 claude -p 和 Agent SDK 中要放行 workflow,可用 Workflow / Workflow(<name>) allow 规则、Auto 模式分类器、Bypass、PreToolUse hook,或宿主的 permission prompt 工具/callback。
子 Agent 使用你的权限规则。长任务开始前建议把需要的工具加进 allow 列表,避免中途反复弹提示。ultracode 只决定如何组织工作,子 Agent 的工具调用仍走和其他工具一样的权限检查和沙箱。
内置捆绑工作流:/deep-research
Claude Code 自带 /deep-research <question>:在多个角度扇出网络搜索,抓取并交叉检查来源,对每条声明投票,返回带引用的报告,未通过交叉检查的声明会被过滤(v2.1.196 起,验证 Agent 因限流/API 错误无法核实的声明标记为”未验证”而非直接判定驳回)。需要 WebSearch 工具可用,且只在你主动调用时运行。与低代码平台官方研究模板的差异见 vs-lowcode。
观察与管理:/workflows 面板
运行在后台启动,会话保持响应。用 /workflows 列出运行中和已完成的工作流,选中后查看每个阶段的 Agent 数、token 总量和耗时,也可以下钻到具体 Agent 看它的提示词、工具调用和结果。输入框下方任务面板也有一行进度摘要,按 ↓ 聚焦后 Enter 展开。
| 键 | 操作 |
|---|---|
| ↑/↓ | 选择阶段或 Agent |
| Enter / → | 下钻查看详情 |
| Esc / ← | 返回上一级(v2.1.203–205 的 ← 无效,用 Esc) |
| j/k | 详情内滚动 |
| f | 按状态过滤 Agent 列表 |
| p | 暂停/恢复运行 |
| x | 停止选中 Agent,或停止整个运行 |
| r | 重启选中的运行中 Agent |
| s | 将该次运行的脚本保存为命令 |
暂停后可恢复:已完成的 Agent 直接返回缓存结果,其余的继续实时跑;退出 Claude Code 会话后,已保存结果留在会话目录,用 claude --resume 恢复会话后可以重放,全新会话则从头开始。
保存为命令、传参复用
某次工作流跑出了想要的结果,在 /workflows 里选中它按 s 保存为命令,之后用 /<name> 直接调用。两个保存位置:
.claude/workflows/(项目内):随仓库共享给所有协作者~/.claude/workflows/(用户目录):每个项目都能用,仅自己可见(若设置了CLAUDE_CONFIG_DIR则落在该路径下的workflows/)
同名时项目工作流优先于个人工作流。monorepo 里,项目位置会写入工作目录到仓库根之间最近的已存在 .claude/workflows/;同名时运行离工作目录最近的那个。
保存的脚本可以通过 args 参数接收调用时传入的结构化输入(数组/对象),脚本内部作为全局变量 args 读取,例如 Run /triage-issues on issues 1024, 1025, and 1030,脚本可直接对 args 调用数组方法而无需自己解析。没传时 args 是 undefined。
分发与编辑脚本
- 插件分发:把脚本放进插件根目录的
workflows/(或按 manifest 的workflows字段指定),按插件名命名空间调用,如/acme-tools:release-audit - 编辑已保存脚本:直接改
.js文件,或让 Claude 改。改之前先运行/workflow-authoring内置 skill 加载脚本编写参考(需 v2.1.248+);改完/reload-skills重新读取,再/<name>运行 - 编辑单次运行的脚本:运行脚本写在
~/.claude/projects/下的会话目录,可以让 Claude 用修改版重新启动
脚本结构与原函数(agent()/pipeline()/parallel()/phase()/log()/args)见 principles。
常用提示词形状
你不需要自己写脚本,描述任务即可:
use a workflow to audit every route handler under src/routes/ for missing authentication checks, and adversarially verify each finding before reporting ituse a workflow to run npx tsc --noEmit and keep fixing the reported errors until the type check passes or two rounds in a row make no progressuse a workflow to migrate every component under src/components/ from JavaScript to TypeScript, working on each file in its own isolated copyuse a workflow to review every file changed in this PR for correctness issues, then merge the per-file findings into one ranked summaryuse 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成本与规模控制
单次运行可能比逐轮处理同一任务消耗更多 token,且计入套餐用量和速率限制。建议先在小范围(一个目录而非整仓库)试跑摸清开销。当调度超过 25 个 Agent 或预计 token 总量超过 150 万时,任务面板会显示 Large workflow 警告(仅提示不拦截;自己设了 size guideline 时阈值替换为对应的 Agent 数;ultracode 会话不显示)。
/config 里的 Dynamic workflow size 给 Claude 写脚本时一个目标 Agent 数:
| 值 | 目标 Agent 数 |
|---|---|
unrestricted | 不设限,按任务定 |
small | 少于 5 |
medium(默认) | 少于 15 |
large | 少于 50 |
这是建议而非硬上限,调用时的提示词仍可覆盖。也可以 workflowSizeGuideline 设置项指定,优先级高于 /config。
每个 Agent 默认用会话模型,除非脚本显式给某阶段指定模型。组织级 availableModels 白名单挡住请求的模型时,会按子 Agent 替换规则换模型,/workflows 里会显示请求与实际模型的警告。
关闭方式
/config关闭 Dynamic workflows(跨会话持久)~/.claude/settings.json设"disableWorkflows": true- 环境变量
CLAUDE_CODE_DISABLE_WORKFLOWS=1(启动时读取) - 组织级:托管设置或管理员页面统一关闭
关闭后捆绑命令和 /workflow-authoring skill 不可用,ultracode 关键字不再触发,且从 /effort 菜单移除。
适用场景与实际踩坑(来自社区实测)
适合:全仓库 bug 排查、跨数百文件的框架迁移、需要多角度对抗验证的高风险决策、间歇性失败的竞态复现、上千条记录的大规模分拣/根因分析、大批量简历筛选、事实核查。
不适合:写一个函数、改一个 bug、解释一段代码——token 消耗得不偿失。
实测成本提示:社区反馈 token 消耗显著高于普通会话;一个大型测试用例迁移项目半小时跑完,但预估 token 消耗不低。建议先在限定范围试用摸清用量,再扩大范围。
相关
- principles — Workflow 引擎原理、脚本原函数、执行语义与运行时约束
- recovery — 中断恢复、429/402 排障、
resumeFromRunId续跑 - vs-lowcode — 与 Dify/扣子等低代码工作流平台的对照与选型
- landscape — 与 OpenAI Symphony、Cursor Agents Window 的横向对比
- claude-code-permissions — Claude Code 权限配置,工作流子 Agent 的权限模式与此关联
- claude-code-subagents — Subagents/Agent view/Agent teams/Dynamic Workflows 四方定位对照
- building-effective-agents — Orchestrator-Workers 与 Evaluator-Optimizer 理论原型
参考
- 真实示例(deep research):Claude Workflow 示例