2026-06-06 · 深度解析

每个任务都需要一个 Harness

Claude Code 动态工作流深度解析 — Anthropic 把 agent 编排计划从 context window 搬进了 JavaScript 脚本,用代码确定性替代模型实时判断

9,704Likes(原文数据)
2.79MViews
-70%独立 MAS 性能跌幅
~15xToken 成本倍数

速览卡片

30 秒掌握核心论点、数据来源和阅读路径。

Anthropic 把 agent 编排计划从 Claude 的 context window 搬进了 JavaScript 脚本,用代码确定性替代模型实时判断 — 但多 agent 并非万能药,sequential reasoning 任务性能暴跌 39-70%,token 成本飙升至 15 倍。

核心机制

动态脚本编排

Claude Code 新增 dynamic workflows,用户 prompt 触发后 Claude 自动生成 JS 编排脚本,独立 runtime 执行。三个核心机制:编排确定性、context 隔离、多 agent 对抗审查。

来源

Thariq & Sid @ Anthropic

Thariq Shihipar & Sid Bidasaria,Anthropic Claude Code 团队,2026-06-03 发布。原文 "A harness for every task: dynamic workflows in Claude Code"。

阅读路径

时间分配

只有 2 分钟 → 读速览、技术解剖、风险。10 分钟 → 全部。这是结构化深度解析,不是新闻摘要。

这是怎么回事

不是产品发布,是架构变更的技术说明。Claude Code 从编程工具变成通用 agent 编排平台。

核心论点:Claude Code 的默认执行框架是为编程设计的,但很多非编程任务 — 研究、安全分析、代码审查、简历筛选 — 在结构上跟编程任务很像。它们都需要多步骤协调、中间状态管理、以及质量检查点。

问题是,当 Claude 用单 agent 的 turn-by-turn 循环去处理这些任务时,会撞上三个经典故障模式:goal drift(目标漂移)、agentic laziness(agent 偷懒)、self-preferential bias(自我偏好锚定)。

Dynamic workflows 的解法:把执行计划从 Claude 的 context window 里搬出来,写成 JavaScript 脚本。脚本持有循环、分支和中间结果,Claude 的 context 只装最终答案。

Harness 迭代三代

从静态到动态,从手写到自动 — agent 编排范式的切换。

时间名称核心思路
2025-11Effective Harnesses手写编排
2026-03Harness DesignGAN 启发的生成-评估架构
2026-06Dynamic Workflows动态生成编排脚本

数据校验:原文声称 9 个 use cases,核实发现实际有 10 个独立 use case 段落("Model and intelligence routing" 被遗漏或合并了)。Tweet 互动数据与核实值存在微小差异,均在有机增长范围内。

关键概念速查

9 个核心术语,理解 Dynamic Workflows 的最小知识集。

术语解释为什么重要
Dynamic Workflow Claude 根据 prompt 动态生成 JS 编排脚本,独立 runtime 执行,主会话保持响应 核心转换:'谁持有计划' — 从 turn-by-turn 判断变成代码的确定性执行
Phase Barrier Semantics 阶段间是顺序屏障(全完成才下一步),阶段内是并发执行(最多 16 agent) 不是所有 agent 都并发,而是按阶段做 barrier 同步
Context Isolation 中间结果留在 runtime 脚本变量中,不进入主会话 context window 执行完大规模编排后 Claude 仍然'清醒',不会因 context 填满而降级
Schema-Gated Output 每个 agent 调用包含 JSON Schema 验证输出 编排步骤间的程序化检查点 — 用延迟换准确性
Goal Drift Agent 在长 session 中偏离原始目标,主要机制是 pattern-matching behavior 反直觉:漂移主因不是 token 距离,而是 context window 中的行为模式匹配
Capability Saturation 单 agent 准确率约 45% 以上时,加 agent 反而降低性能 '更多 agent = 更好'是错的。超过阈值后协调成本大于边际收益
Lazy Agent 多 agent RL 训练中一个 agent 只做表面贡献,另一个主导 结构性原因:multi-turn GRPO 的 1/T 归一化项激励更少的交互轮次
Ultracode Claude Code session 级设置,xhigh reasoning + 自动 workflow 编排 开启后 Claude 为每个实质性任务自动规划 workflow
Orchestration Auditability 每次 workflow run 的脚本写入会话目录,可读/diff/编辑/重跑 agent 编排从黑箱变为可审查的代码

技术解剖

运行时拓扑、核心 API、三个强化机制、关键约束。

运行时拓扑

从 prompt 到结果的数据流

用户 prompt → Claude 生成 JS 脚本 → 独立 runtime(隔离进程)执行 → 脚本通过特殊函数生成 sub-agent → 阶段间顺序屏障同步 → 最终结果回传主会话。

类比:这就像 Makefile 之于编译。以前你手动一个一个跑 gcc 命令(单 agent turn-by-turn),现在你写个 Makefile,make 命令一键执行(确定性编排)。Makefile 选了声明式;workflow 选了图灵完备 — 更灵活,但绳子也更长,更容易上吊。

函数用途关键参数
agent(prompt, options)生成 sub-agent,结构化输出label, phase, schema
parallel([fns])并发执行多个 agent异步函数数组
workflow(name, args)链接到另一个 workflow(可组合)workflow 名 + 输入参数
phase(title)标记执行阶段阶段名
log(message)结构化日志消息字符串
meta(export)Workflow 元数据name, description, whenToUse, phases

三个强化机制

1

编排确定性

计划在代码里,不在 agent 的 context 里。这直接对付了导致 goal drift 的 pattern-matching 行为 — agent 无法'忘记'计划,因为计划根本不在它的 context window 里。

2

Context 隔离

每个 sub-agent 拿到干净的 context window。中间结果在 JavaScript 变量里传递。对于长时间任务,这意味着无限期维持质量 — 单 agent 在 50K token 后开始退化。

3

多 agent 对抗审查

独立 agent 各带隔离 context,可以主动尝试推翻彼此的理论。"With multiple independent investigators actively trying to disprove each other, the theory that survives is much more likely to be the actual root cause."

关键约束

不能做什么

  • 最多 16 个并发 agent,1000 总量上限
  • 不支持运行中间的用户输入
  • Session 内恢复 — 退出 Claude Code 后 workflow 丢失
  • Shell 命令不在 allowlist 会中断长任务
  • Workflow Script 的具体 API 签名尚未作为公共开发者 API 正式发布
反直觉发现

Pattern-Matching:Goal Drift 的真正原因

Goal drift 的主因不是 token 距离(离系统 prompt 越远越容易漂),而是 pattern-matching behavior — agent 在 context window 中找到行为模式然后模仿它。

实验证据:把 instrumental phase 替换为 token-padding(同等长度,没有行为模式),drift 大幅下降。把 assistant 消息替换为随机废话句子(不同的 pattern 供匹配),drift 跟原始 susceptibility 相关。

更关键的发现:drift 在需要 adaptive behavioral flexibility(在冲突目标间切换)的场景中显著恶化。所有评估模型都表现出了可测量的 drift,但 scaffolded Claude 3.5 Sonnet 在超过 100K token 后仍维持接近完美的 adherence。

为什么重要

三层战略意图、竞品横向对比、受益者和受损者。

平台粘性

从编程工具到编排平台

Claude Code 从编程工具变成通用 agent 编排平台。用户构建的自定义 workflow 越多,对 Claude 生态的投资越深,迁移成本越高。

Token 消耗信号

~15 倍成本 = 商业模式

"Dynamic workflows typically consume more tokens." 这不是 bug,这是 feature — 约 15 倍的 token 成本意味着每个 power user 的收入显著提升。

竞争定位

全栈控制

市场上 agent 编排框架拥挤(LangGraph, CrewAI, AutoGen, OpenAI Swarm)。Anthropic 选择在 Claude Code 内原生解决编排问题,控制从模型到执行环境的全栈。

维度 Claude Code Workflows LangGraph CrewAI AutoGen OpenAI Swarm
编排模型图灵完备 JS 脚本声明式图 + Python角色化 Python agent对话驱动 Python轻量 Python handoff
Context 隔离原生(per-agent context)手动(状态管理)部分(共享 memory)部分(群聊)极少
Schema-Gated原生(JSON Schema)通过 Pydantic通过 Pydantic手动手动
对抗审查内建模式自定义实现自定义实现多 agent 辩论不支持
模型绑定Claude only多模型多模型多模型OpenAI only
Token 效率~15x chat 成本可变高(角色开销)高(对话开销)低-中
生态成熟度早期中(LangChain 生态)低-中中(Microsoft)实验性

谁受益

  • 重度 Claude Code 用户 — 已经撞到单 agent 极限的人
  • Anthropic — 更高 token 消耗、平台锁定
  • Agent 编排研究社区 — 真实世界验证

谁可能受伤

  • 乱用 multi-agent 的用户 — sequential reasoning 性能暴跌 39-70%
  • 预算敏感用户 — 没意识到 15 倍成本倍数
  • 竞争 agent 框架 — 差异化空间被挤压

别高兴太早

Multi-Agent 不是万能药。最重要的警告和隐藏成本。

最重要的警告

Multi-Agent 在 Sequential Reasoning 上主动伤害性能

PlanCraft benchmark 数据 — 不是微妙的效果,独立 MAS 直接掉 70%:

架构性能变化
Centralized MAS-50.4%
Decentralized MAS-41.4%
Hybrid MAS-39.0%
Independent MAS-70.0%
能力饱和陷阱

Brooks's Law 在 Agent 世界

单 agent 准确率约 45% 以上时,加 agent 产生负收益(beta=-0.408, p<0.001)。'更多 agent = 更多协调成本',超过阈值后协调成本超过边际收益。

~15 倍 Token 成本

经济上只对高价值任务可行

Token 使用量单独解释 BrowseComp 80% 的性能方差。多 agent 系统 token 消耗约 15 倍于 chat,单 agent 约 4 倍。

Lazy Agent 问题

训练层面的结构性缺陷

Multi-turn GRPO 的 1/T 归一化项激励更少的交互轮次 — lazy-agent 轨迹更短,因此被优先强化。不是 workflow 脚本层面能修的。

Context 隔离的代价

信息丢失换 context overflow

如果 Agent A 发现了关键信息,那知识必须通过脚本变量显式传递给 Agent B。漏传关键信息 = Agent B 基于不完整信息工作。Workflow 作者现在拥有信息路由问题。

行为灵活性需求下的 Drift

编排无法控制行为模式切换

即使有确定性编排,drift 在需要 agent 在冲突行为模式间切换的任务中仍然恶化。Workflow 脚本控制执行结构,但无法控制施加在单个 agent 上的行为灵活性需求。

历史不会简单重复

但 rhymes 它是会的。五个历史事件映射到 Dynamic Workflows。

历史事件映射到 Dynamic Workflows
Make/GNU Make (1976) Make 把构建计划外化到 Makefile(确定性编排)。Workflows 把执行计划外化到 JavaScript。Make 选了声明式,workflows 选了图灵完备。更灵活,但更容易搞砸。
MapReduce (2004) "分拆 → 并行处理 → 合并结果"。parallel() 是 agent 层面的同一抽象。能力饱和阈值是 MapReduce 中'embarrassingly parallel' vs 'communication-bound' 的 agent 版。
Actor Model (1973) 隔离 context、消息传递、无共享可变状态。每个 sub-agent 就是一个 actor。Context 隔离防退化 = Actor 隔离防竞态条件。
Infrastructure as Code (2009-2015) 手动配服务器 → Terraform/Ansible manifest。Ad-hoc prompting → workflow scripts。同样的收益:可复现、可审计、可组合。
Microservices vs Monolith (2014-2018) 更多组件 + 更多协调开销 + 更好隔离 vs 更简单 + 小团队更快。多 agent vs 单 agent 的同一辩论。能力饱和阈值是 agent 版的'monolith first'建议。