本文经原作者授权转载,版权归原作者所有。原作者:知野(@knoYee_)。


Claude Code 最近更新的功能:Dynamic Workflows。听起来很炫酷,但在具体是实操中,该怎么用,什么时候用,相信大家会有疑惑

我们今天讲:你改怎么用、从哪开始、会遇到什么坑。

Article image

工作原理

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

前置条件

Article image

Claude Code 版本 ≥ v2.1.154。

终端里跑一下确认:

claude --version

不够新就先升级:

npm update -g @anthropic-ai/claude-code

怎么触发

在 Claude Code 对话里输入:

/effort ultracode

然后描述你要做什么。

实战一:先跑一个最小任务

Article image
  • 假设你的项目里有一个 src/utils 目录,里面有 5 个 JavaScript 文件。你想把它们全部改成 TypeScript。

在 Claude Code 里输入:

  • /effort ultracode 把 src/utils 目录下的 5 个 .js 文件改成 .ts,加上类型定义。每个文件一个 Agent 并行处理。改完之后互相检查类型定义有没有冲突。
Claude 会先写一段编排脚本,然后执行。你会看到 5 个 Agent 各自开工,跑完之后自动互相 Review。

这一步的目的不是改代码,是感受一下编排脚本怎么写、Agent 之间怎么协作。跑通一次心里就有数了。

实战二:全项目级别的批量改动

Article image

跑通小任务之后,试一个真正能省时间的。

  • 比如你的项目里有 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 互相审。

编排脚本长什么样

Article image

不用你写,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 目录也改一下。

不用重新解释需求。

常见坑

Article image

坑一:任务太大了拆不动

如果你说“把所有代码重构成 clean architecture”,Claude 拆不开。

  1. 目标太模糊,依赖关系太复杂。
  2. 一次只搞一类改动。

坑二:同时改的东西互相依赖

  1. 比如改 A 文件和 B 文件,B 文件 import 了 A 文件。
  2. Agent A 改了 A 的导出,Agent B 不知道。
  3. 对抗性验证能兜一部分底,但不是 100%。
  4. 先跑完,再手动检查 import 路径。

坑三:开了 Dynamic Workflows 干小活

  1. 改一个文件的三行代码,普通 session 30 秒。
  2. 开 Dynamic Workflows,Claude 先花 10 秒写编排脚本,再调度 Agent,再汇总——得不偿失。

判断标准:手动改超过半小时的任务,才值得开。

坑四:版本不对

/effort ultracode 只在 v2.1.154+ 版本有效。

很多人的 Claude Code 开了自动更新所以没问题,如果你手动锁了版本,记得先升。

什么时候用它,什么时候用普通模式

  • 改一个文件几行代码 普通对话
  • 不确定怎么做,想讨论方向 普通对话
  • 批量改名、批量改格式 Dynamic Workflows
  • 跨多个文件的同类重构 Dynamic Workflows
  • 框架迁移、语言迁移 Dynamic Workflows
  • 带验证的复杂改动 Dynamic Workflows + 对抗性验证

最后

大家可以上手实操一下,感受一下Dynamic Workflows的工作流程和工作原理,以方便后续使用