Claude Code 动态工作流:让 AI 自己写 Harness,这事靠谱吗

核心结论(一句话)

Claude Code 的动态工作流(Dynamic Workflows) 把”搭建 Harness”这件事也交给 Claude 自己——不再需要预先写好调度脚本,Claude 看任务后自己写确定性 JS 脚本来调度独立子 Agent;适合”不知道最优拆分方式”的探索性任务,但对已有经验的任务静态工作流仍更可控。

分类提炼

知识节点

关联图谱

上游(基于 / 来自)

下游(应用于 / 验证于)

同级(横向 / 并列)

正文要点

单 Agent 的三大退化模式

Claude Code 默认模式是单 Agent 一个上下文窗口搞定规划和执行,大多数编程任务这就够用。但有些场景单 Agent 怎么优化都跑不好——三个已知的退化模式:

  1. 偷懒:让它做一轮安全审查,50 个检查项查到 20 个就宣布完成(长上下文行为退化)
  2. 自我偏爱:让它评判自己产出,天然倾向给好评
  3. 目标漂移:上下文压缩是有损的,每压缩一次,原始需求的边缘条件、约束细节丢一点

这三个问题不是模型能力问题,是单上下文窗口同时承担规划和执行带来的架构局限

Dynamic Workflows 工作原理

用独立的子 Agent 各自占一个干净的上下文窗口,每个子 Agent 只干一件事,由确定性的 JavaScript 脚本调度它们的执行顺序和依赖关系。

核心区别

维度 静态工作流 动态工作流
调度脚本 提前写好,考虑各种边界 Claude 看任务后自己写
适用 已知拆分方式的任务 探索性任务
稳定性 可控 灵活但需要 Prompt 引导

六种调度模式

  1. 分类路由:一个分类 Agent 判断任务类型,分发给不同处理 Agent
  2. 扇出合并(最常用):拆成很多小步,每步一个独立 Agent,最后合并
  3. 对抗验证:每个生成 Agent 配独立验证 Agent 专门挑毛病
  4. 生成过滤:先大量生成,再按标准筛选去重
  5. 锦标赛模式:N 个 Agent 不同策略做同一件事,两两淘汰留赢家
  6. 循环到完成:不设固定轮次,跑满足停止条件

这些模式可组合:先扇出,每个分支内部做对抗验证,合并时再跑一轮锦标赛。

实际应用场景

场景 模式 关键价值
大规模迁移和重构 扇出 + 对抗验证 Bun Zig→Rust 重写;每个修改点一个独立 Agent,天然避免交叉污染
深度验证 分类 + 扇出 提取文章里的事实性声明,每个声明派 Agent 核实,验证信息源是否可靠
排序 锦标赛 按 Bug 严重程度排 1000 条工单;比较判断比绝对评分可靠
规则遵守 分类 + 验证 CLAUDE.md 规则一条 Agent 验证一条;反向扫日志提炼新规则
根因分析 扇出 + 对抗 不锁定单一假设,分别从日志/文件/数据生成假设,每个假设面对验证者和反驳者
大规模分流 分类 + 隔离区 工单队列分类、去重、自动修复;读不可信内容的 Agent 不可执行高权限操作

什么时候不需要工作流

动态工作流消耗的 token 显著更多,适合复杂、高价值的任务。

判断标准

用法和技巧

1
2
3
4
5
6
7
8
9
10
11
12
# 两种开启方式
ultracode  # 触发词
# 或在 Prompt 里要求 "用工作流做这件事"

# 配合 /loop 定期执行
/loop "用工作流扫最近 50 个 session..."

# 配合 /goal 硬性完成条件
/goal "不找到根因不许停"

# 限制 token 消耗
"用 10k token 解决"  # 大概一两轮对话

Prompt 模板示例

保存工作流:按 s 可保存脚本到 ~/.claude/workflows,或通过 Skill 分发给团队。

表格:六种调度模式对比

模式 核心思想 适用场景 关键风险
分类路由 任务类型分发 异构任务批处理 分类器本身的准确性
扇出合并 拆小步并行 大规模可拆解任务 合并 Agent 的归纳能力
对抗验证 配独立验证 需要质量保证的生成 验证 Agent 也要强
生成过滤 大量生成+筛选 创意/方案探索 筛选标准的可定义性
锦标赛 两两淘汰 排序/评选 N 较大时 token 成本
循环到完成 跑到满足 开放式目标 难以停止 / token 爆炸

我的理解

适合关联的主题