本文经原作者授权转载,版权归原作者所有。原作者:知野(@knoYee_)。
Claude Code 最近更新的功能:Dynamic Workflows。听起来很炫酷,但在具体是实操中,该怎么用,什么时候用,相信大家会有疑惑
我们今天讲:你改怎么用、从哪开始、会遇到什么坑。

工作原理
- 普通模式下,Claude Code 接收你的指令,串行执行。
- 一个任务完成,进入下一个。
- 所有中间结果留在上下文窗口里,
- 结果就是上下文窗口被撑爆,模型开始降智。
Dynamic Workflows 在指令和执行之间加了一层编排引擎。
- 你描述目标后,Claude 先不干活,而是写一段 JS 编排脚本。
- 这段脚本声明了:任务列表、每块任务的边界、并行数量、验证规则。
- 编排脚本在一个隔离的 JS 运行时里执行。
- 脚本启动后,同时唤醒多个 Agent,每个 Agent 独立领一块任务,跑完之后结果汇总到编排脚本,验证 Agent 交叉检查。
- 中间结果存储在 JS 运行时里,不进模型上下文窗口。
- 所以上下文不会被撑满,Agent 数量不受上下文容量限制。
- 当前单次上限 1000 个 Agent,并行上限 16 个。
验证走对抗模式。
- 两个验证 Agent 同时审同一段产出,互相挑战结论。
- 两个都通过,这块任务才算完成。
- 一个通过一个不通过,进入第二轮修正。
前置条件

Claude Code 版本 ≥ v2.1.154。
终端里跑一下确认:
claude --version
不够新就先升级:
npm update -g @anthropic-ai/claude-code
怎么触发
在 Claude Code 对话里输入:
/effort ultracode
然后描述你要做什么。
实战一:先跑一个最小任务

- 假设你的项目里有一个 src/utils 目录,里面有 5 个 JavaScript 文件。你想把它们全部改成 TypeScript。
在 Claude Code 里输入:
- /effort ultracode 把 src/utils 目录下的 5 个 .js 文件改成 .ts,加上类型定义。每个文件一个 Agent 并行处理。改完之后互相检查类型定义有没有冲突。
Claude 会先写一段编排脚本,然后执行。你会看到 5 个 Agent 各自开工,跑完之后自动互相 Review。
这一步的目的不是改代码,是感受一下编排脚本怎么写、Agent 之间怎么协作。跑通一次心里就有数了。
实战二:全项目级别的批量改动

跑通小任务之后,试一个真正能省时间的。
- 比如你的项目里有 20 个 API 路由文件,每个文件的错误处理方式不统一。有的用 try-catch,有的用 .catch(),有的根本没处理。
- /effort ultracode 把 src/routes 目录下所有文件的错误处理统一改成 asyncHandler 包装。每个文件一个 Agent 并行处理。改完之后: 1. 验证每个路由的错误处理逻辑是否正确 2. 检查不同文件的 asyncHandler 用法是否一致 3. 如果有冲突,自动修
这种任务手动改要半天。Dynamic Workflows 下 20 个 Agent 并行,几分钟完事。
实战三:带对抗性验证的重构
这是 Dynamic Workflows 最独特的能力。
- 普通 Agent 改代码,改完就交差了。Dynamic Workflows 可以加“对抗性验证”——两个 Agent 互相挑刺。
比如你要把一个支付模块从回调风格改成 async/await:
- /effort ultracode 把 src/payment 目录下所有文件从回调风格改成 async/await。每改完一个文件,两个验证 Agent 分别检查: - 验证 Agent A:检查代码逻辑是否正确、错误处理是否完整 - 验证 Agent B:专门找 A 遗漏的问题 两个都确认没问题,才算通过。 改完之后跑一遍现有测试,测试不通过的自动修。
这就是为什么 Bun 的 75 万行迁移能做到 99.8% 测试通过率——不是一个人改的,是一群 Agent 互相审。
编排脚本长什么样

不用你写,Claude 写。
但看一下结构有助于理解它在干什么:
// Claude 自动生成的编排脚本(简化版) const workflow = { tasks: [ { file: "src/utils/format.js", action: "convert-to-ts" }, { file: "src/utils/request.js", action: "convert-to-ts" }, { file: "src/utils/storage.js", action: "convert-to-ts" }, { file: "src/utils/validate.js", action: "convert-to-ts" }, { file: "src/utils/date.js", action: "convert-to-ts" }, ], parallel: 5, // 同时跑 5 个 verify: { mode: "adversarial", // 对抗性验证 rounds: 2, // 两轮验证 }, };
你不用理解这段代码,你只需要知道:Claude 在生成一套可复用的执行计划。
这份脚本可以存到 .claude/workflows/,下次类似任务直接用。
跑完之后干什么
编排脚本存起来:
cp .claude/workflows/last-workflow.js .claude/workflows/js-to-ts-migration.js
下次类似迁移,告诉 Claude:
用 js-to-ts-migration 这个编排脚本,把 src/components 目录也改一下。
不用重新解释需求。
常见坑

坑一:任务太大了拆不动
如果你说“把所有代码重构成 clean architecture”,Claude 拆不开。
- 目标太模糊,依赖关系太复杂。
- 一次只搞一类改动。
坑二:同时改的东西互相依赖
- 比如改 A 文件和 B 文件,B 文件 import 了 A 文件。
- Agent A 改了 A 的导出,Agent B 不知道。
- 对抗性验证能兜一部分底,但不是 100%。
- 先跑完,再手动检查 import 路径。
坑三:开了 Dynamic Workflows 干小活
- 改一个文件的三行代码,普通 session 30 秒。
- 开 Dynamic Workflows,Claude 先花 10 秒写编排脚本,再调度 Agent,再汇总——得不偿失。
判断标准:手动改超过半小时的任务,才值得开。
坑四:版本不对
/effort ultracode 只在 v2.1.154+ 版本有效。
很多人的 Claude Code 开了自动更新所以没问题,如果你手动锁了版本,记得先升。
什么时候用它,什么时候用普通模式
- 改一个文件几行代码 普通对话
- 不确定怎么做,想讨论方向 普通对话
- 批量改名、批量改格式 Dynamic Workflows
- 跨多个文件的同类重构 Dynamic Workflows
- 框架迁移、语言迁移 Dynamic Workflows
- 带验证的复杂改动 Dynamic Workflows + 对抗性验证
最后
大家可以上手实操一下,感受一下Dynamic Workflows的工作流程和工作原理,以方便后续使用