Skip to content

每个任务的专属运行框架:Claude Code 中的动态工作流

来源:本文翻译自 Anthropic 官方博客 A harness for every task: dynamic workflows in Claude Code,发布于 2026 年 6 月 2 日。作者:Thariq Shihipar、Sid Bidasaria(Anthropic 技术人员,Claude Code 团队)。

上周,我们在 Claude Code 中发布了动态工作流。Claude 现在可以即时编写自己的运行框架,为当前任务量身定制。

虽然默认的 Claude Code 运行框架是为编程构建的,但它对许多其他类型的任务也很有用,因为事实上,很多任务都类似于编程任务。但有一类任务,我们不得不在 Claude Code 之上构建自定义运行框架才能达到最佳性能,例如 Research安全分析Agent 团队Code Review

工作流允许你动态创建建立在 Claude Code 之上的运行框架,让 Claude 能更原生地解决所有这些问题。你还可以与他人分享和复用这些工作流。

在本文中,我将分享我最初使用工作流的经验和心得,帮助你充分利用它。请注意,最佳实践仍在发展中:动态工作流通常使用更多 token,最适合复杂的高价值任务。


示例提示词

在深入技术细节之前,我想先给出几个示例提示词,让你思考工作流的可能性:

“这个测试大约每 50 次运行失败一次。建立一个工作流来复现它。对竞争理论进行分析,直到有一个理论经受住证据的考验。”

“使用工作流,回顾我最近 50 次会话,挖掘我反复进行的修正,将重复出现的变成 CLAUDE.md 规则。”

“使用工作流,翻阅 Slack 中过去六个月的 #incidents 频道,找出没有人提交工单的反复出现的根本原因。”

“拿我的商业计划书运行一个工作流,让不同的 agent 分别从投资者、客户和竞争对手的视角来拆解它。”

“这是一个包含 80 份简历的文件夹,使用工作流对后端岗位进行排名,并复核前十名。用 AskUserQuestion 工具采访我以获取评分标准。”

“我需要给这个 CLI 工具起个名字。使用工作流头脑风暴一堆选项,然后用锦标赛选出前 3 名。”

“使用工作流在所有地方将我们的 User 模型重命名为 Account。”

“用工作流检查我的博客文章草稿,对照代码库验证每一个技术声明,我不想发布任何错误内容。”


动态工作流如何工作

动态工作流执行一个 JavaScript 文件,其中包含一些特殊函数,用于帮助生成和协调 subagents

动态工作流还包含标准 JavaScript 函数(如 JSON、Math 和 Array)来帮助处理数据。

特别值得注意的是,动态工作流可以决定 agent 使用哪个模型,以及 subagent 是否在自己的工作树中运行,这让 Claude 能够选择所需的智能级别和隔离程度。

如果工作流被中断(例如用户操作或退出终端),恢复会话将允许工作流从上次中断的地方继续。


为什么需要动态工作流

当你让默认的 Claude Code 运行框架执行任务时,它需要在同一个上下文窗口中同时规划和执行。对于许多编程任务,这非常有效,但在长时间运行、大规模并行、高度结构化和/或对抗性任务中可能会崩溃。

这是因为 Claude 在单个上下文窗口中处理复杂任务的时间越长,就越容易出现几种特定的失败模式:

  • Agent 偷懒:Claude 在完成一个特别复杂的多部分任务之前就停下来,宣布工作已完成,例如在安全审查中只处理了 50 项中的 35 项。
  • 自我偏好偏差:Claude 倾向于偏爱自己的结果或发现,特别是在被要求根据评分标准进行验证或判断时。
  • 目标漂移:在多轮交互中逐渐偏离原始目标,特别是在压缩之后。每个摘要步骤都是有损的,边界情况需求或"不要做 X"之类的约束等细节可能会丢失。

创建工作流有助于通过编排拥有独立上下文窗口和聚焦、隔离目标的 Claude subagent 来对抗这些问题。


动态工作流 vs 静态工作流

你可能之前使用过 Claude Agent SDK 或 claude -p 创建静态工作流来协调多个 Claude Code 实例。

但由于静态工作流需要处理所有边缘情况,它们通常更加通用。借助 Claude Opus 4.8 和动态工作流,Claude 现在有足够的智能来编写为你的用例量身定制的运行框架。


使用动态工作流的常见模式

你可以通过让 Claude 创建一个工作流来开始使用动态工作流,或者使用触发词"ultracode“来确保 Claude Code 创建工作流。

但建立对动态工作流工作方式的心智模型将帮助你理解何时使用它们,以及如何通过提示词引导 Claude。

Claude 在构建工作流时可能会使用和组合几种常见模式:

分类-执行

使用分类 agent 决定任务类型,然后根据任务路由到不同的 agent 或行为。或者,在最后使用分类器来确定输出。

扇出-综合

将任务拆分为许多更小的步骤,在每个步骤上运行一个 agent,然后综合这些结果。当有大量较小的步骤,或者每个步骤受益于自己干净的上下文窗口以避免干扰或交叉污染时,这特别有用。综合步骤是一个屏障——它等待所有扇出 agent,然后将它们的结构化输出合并为一个结果。

对抗性验证

对每个生成的 agent,运行一个单独的 agent 来对抗性地根据评分标准或条件验证其输出。

生成-过滤

生成大量关于某个主题的想法,然后根据评分标准或验证进行过滤,去重并仅返回经过测试的最高质量想法。

锦标赛

不是分配工作,而是让 agent 竞争。生成 N 个 agent,每个使用不同的方法尝试同一任务。然后使用评判 agent 通过成对比较(比较判断比绝对评分更可靠)来判断结果,直到产生获胜者。

循环直到完成

对于工作量未知的任务,循环生成 agent 直到满足停止条件(没有新发现,或日志中没有更多错误),而不是固定次数的遍历。


用例

创造性地思考何时以及如何让 Claude Code 创建动态工作流。我发现工作流有时对非技术工作甚至更有用。

迁移和重构

Bun 使用工作流从 Zig 重写为 Rust。你可以在 Jarred 的 X 帖子中了解更多关于如何做到这一点的信息。

关键是将任务分解为一系列需要操作的步骤,例如调用点、失败的测试、模块等。为每个修复在工作树中启动一个 subagent 来进行修复,然后让另一个 agent 对抗性地审查,最后合并它们。考虑告诉 agent 不要使用资源密集型命令,以便在不耗尽机器资源的情况下最大化并行度。

深度研究

我们在 Claude Code 内部发布了一个使用动态工作流的深度研究 skill(/deep-research)。具体来说,它扇出网络搜索、获取来源、对抗性验证其声明,并综合生成一份引用报告。

但你可能不仅在网络搜索中做这种研究。例如,让 Claude 从 Slack 上下文中编制状态报告,或通过深入探索代码库来研究某个功能是如何工作的。

深度验证

另一方面,如果你有一份报告,你想检查并追溯它引用的每一个事实声明,你可能想要生成一个工作流,其中一个 agent 识别所有事实声明,然后为每个声明启动一个 subagent 进行详细检查。你还可以让一个验证 agent 检查源 subagent,确保其来源质量高。

排序

你可能有一个项目列表,想根据某种你认为 Claude Code 擅长评估的定性度量进行排序,例如:按 bug 严重程度排序的支持工单。但如果你尝试在一个提示词中排序 1000 多行,质量会下降,而且会超出上下文。相反,运行一个锦标赛、一个成对比较 agent 的流水线(比较判断比绝对评分更可靠),或并行分桶排名然后合并。每次比较都是自己的 agent,因此确定性循环持有括号,只有运行顺序留在上下文中。

记忆和规则遵守

如果你有一组 Claude 经常忽略或难以遵守的规则,即使放在 CLAUDE.md 中,也可以创建一个工作流,列出必须由验证 agent 检查的规则——每条规则一个验证 agent。创建一个怀疑者角色 subagent 来审查规则,确保它们合理,有助于避免太多误报。

反向也有效:挖掘你最近的会话和代码审查评论,找出你反复进行的修正,用并行 agent 进行聚类,对抗性地验证每个候选规则(这条规则是否能防止真实错误?),然后将幸存的规则提炼回 CLAUDE.md

根因调查

调试在你提出几个独立假设并测试它们时效果最好,但如果你只使用一个上下文窗口,Claude 可能会遇到自我偏好偏差。

工作流可以通过从不相交的证据中生成假设来结构性地防止这一点。例如,分别用 agent 处理日志、文件和数据。然后每个假设都可以面对一组验证者和反驳者。

这不仅适用于代码。工作流可以用于销售(为什么三月份的销售额下降了?)、数据工程(为什么这个管道失败了?)或任何复盘工作。

大规模分诊

每个团队都有支持队列、bug 报告或其他积压工作,无法由人工完全处理。

分诊工作流对每个项目进行分类,与已跟踪的内容进行去重,并采取行动。这可能意味着尝试修复或升级给人工用户。

分诊工作流的一个有用模式是隔离。这涉及禁止读取不受信任的公共内容的 agent 执行高权限操作,这些操作由负责处理信息的 agent 来完成。

将分诊工作流与 /loop 配对,让 Claude 持续执行此操作。

探索和品味

工作流在探索不同解决方案方法时很有用,特别是当它基于品味(如设计或命名)并受益于评分标准时。

尝试让 Claude 探索大量解决方案,并给审查 agent 一个关于好解决方案是什么样的评分标准。当审查 agent 觉得满足标准时,任务完成。解决方案也可以通过基于评分标准的锦标赛进行排序或选择。

评估

你可以通过在工作树中启动单独的 agent,然后启动比较 agent 来对特定输出进行比较和评分,从而为特定任务运行轻量级评估。例如,根据特定标准评估然后改进你创建的 skill。

模型和智能路由

创建一个针对你的任务调优的分类 agent,决定使用哪个模型。当你的任务涉及许多工具调用时,这很有帮助,在执行前进行研究可以确定最适合该任务的模型。

例如,任务"解释 auth 模块如何工作"的最佳模型取决于 auth 模块中有多少文件以及代码库的结构。分类 agent 可以进行这项研究,然后根据任务的预期复杂度路由到 Sonnet 或 Opus。


何时不使用动态工作流

工作流是新事物。虽然在许多用例中它会产生巨大的成果,但并非每个任务都需要它,最终可能会使用显著更多的 token。

最好创造性地使用工作流,以你以前没有的方式推动 Claude Code。对于常规编程任务,试着问自己:它真的需要更多算力吗?例如,大多数传统编程任务不需要 5 个审查者的面板。

同样的判断也适用于上一层的架构层面:多 agent vs 单 agent 的决策遵循类似的逻辑——并行化和专业化必须证明其协调成本是值得的。


构建动态工作流的技巧

提示词

详细的提示词,使用我们上面描述的特定技术,能为动态工作流产生最佳结果。

工作流不仅适用于大型任务。你可以提示模型使用"快速工作流”。例如,你可以对一个假设进行快速对抗性审查。

结合 /goal/loop

当使用可重复的工作流(如分诊、研究或验证)时,将它们与 /loop 配对以定期运行,与 /goal 配对以设置硬性完成要求。

Token 用量预算

你可以为动态工作流设置显式的 token 用量预算来限制任务使用多少 token。你可以用预算提示它,如"使用 10k token",这将设置上限。

保存和分享动态工作流

你可以通过在工作流菜单中按"s"来保存工作流。你可以将这些签入 ~/.claude/workflows 或通过 skill 分发。

要通过 skill 分享,将你的 JavaScript 工作流文件放在 skill 和文件夹中,并在 SKILL.md 中引用它们。为了更灵活,你可能想提示 Claude 将 skill 中的工作流视为模板而非需要逐字运行的脚本。


发现的新起点

工作流是扩展 Claude Code 的一种有用新方式。我鼓励你将它们视为探索使用 Claude 完成任务新方式的起点。如何最好地使用它们,还有很多东西值得发现。

关于什么应该放入运行框架的原则,请参阅我们的三篇运行框架设计模式文章。