为每个任务配一套 harness:Claude Code 的 dynamic workflows
Thariq Shihipar (@trq212)
2026-06-03
R
原文
---
title: "为每个任务配一套 harness:Claude Code 的 dynamic workflows"
author: Thariq Shihipar (@trq212)
source_url: https://x.com/trq212/status/2061907337154367865
blog_url: https://claude.com/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code
published_at: 2026-06-02T20:26:32Z
fetched_at: 2026-06-03
cover_image: https://pbs.twimg.com/media/HJ0q6o6aYAEM_ej.jpg
language: zh
translator: Hermes
review_status: reviewed
---

# 为每个任务配一套 harness:Claude Code 的 dynamic workflows
上周我们在 Claude Code 里发布了 [dynamic workflows](https://code.claude.com/docs/en/workflows)(动态工作流)。Claude 现在能即时写出自己的 [harness](https://code.claude.com/docs/en/glossary#agentic-harness),为手头的任务量身定制。
Claude Code 默认的 harness 是为写代码做的,但它对很多其他类型的任务也管用——因为事实证明,很多任务和写代码很像。不过有些类型的任务,我们必须在 Claude Code 之上专门搭定制 harness 才能发挥到极致,比如 [Research](https://support.claude.com/en/articles/11088861-using-research-on-claude)(研究)、[security analysis](https://support.claude.com/en/articles/11932705-automated-security-reviews-in-claude-code)(安全分析)、[agent teams](https://code.claude.com/docs/en/agent-teams)(agent 团队),或者 [Code Review](https://code.claude.com/docs/en/code-review)(代码审查)。
workflows 让你动态地造出 harness,让 Claude 在 Claude Code 内部原生地解决上面这些问题,以及更多。你还能把这些 workflows 分享给别人、重复使用。
这篇文章里,我会讲讲我用 workflows 的初步体验和心得,好让你能把它用透。
话说回来,最佳实践还在摸索中!dynamic workflows 经常会用掉更多 token,所以什么时候用、怎么用,得想清楚。
**注**:这篇文章也[发在 Claude 博客上](https://claude.com/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code)。
### 示例 prompt
在钻进技术细节之前,我想先给几个示例 prompt,让你对 workflows 能做什么有点概念:
- 「这个测试大概每 50 次跑会挂 1 次。建个 workflow 来复现它,提出几种理论,在 worktree 里对抗式地验证它们 /goal 不验证出一个成立的理论就别停。」
- 「用一个 workflow 翻一遍我最近 50 次会话,挖出我反复在做的纠正,把反复出现的那些变成 CLAUDE.md 规则。」
- 「用一个 workflow 翻一遍 Slack 里过去半年的 #incidents,找出反复出现、却没人提过工单的根因。」
- 「拿我的商业计划,跑一个 workflow,让不同的 agent 分别从投资人、客户、竞争对手的视角把它批得体无完肤。」
- 「这是一个装了 80 份简历的文件夹,用一个 workflow 按后端岗位给它们排个序,再复核排前十的。用 AskUserQuestion 工具问我,定一套评分标准。」
- 「我得给这个 CLI 工具起个名。用一个 workflow 头脑风暴一堆候选,再跑一场锦标赛选出前 3 个。」
- 「用一个 workflow 把我们的 User model 在所有地方重命名成 Account。」
- 「翻一遍我的博客草稿,用一个 workflow 拿代码库逐条核对每个技术说法,我不想发出去任何错的东西。」
### dynamic workflows 怎么跑
dynamic workflows 会执行一个 javascript 文件,里面有几个特殊函数,帮你生成和协调 [subagents](https://code.claude.com/docs/en/sub-agents)(子代理):

dynamic workflows 还内置了标准的 JavaScript 函数,比如 JSON、Math、Array,帮你处理数据。
有一点特别有用:dynamic workflows 能决定一个 agent 用哪个模型,以及 subagents 是不是跑在各自的 worktree(git 工作树)里——这让 Claude 能挑选所需的智能档位和隔离程度。
如果一个 workflow 被打断了——比如用户操作或者关掉终端——恢复会话时 workflow 能从断的地方接着跑。
### 为什么要用 dynamic workflows
你让默认的 Claude Code harness 干一件活时,它得在同一个 context window(上下文窗口)里既做规划又做执行。对很多写代码的任务,这很有效,但碰上长时间运行、大规模并行、或者高度结构化的对抗式任务,有时就撑不住了。
这是因为 Claude 在单个 context window 里处理复杂任务的时间越长,就越容易掉进几种特定的失效模式:
- **执行惰性(agentic laziness)**:指 Claude 在一个特别复杂、分很多部分的任务还没做完时就停手,做了一部分就宣布大功告成——比如安全审查里 50 项只处理了 20 项。
- **自媚偏差(self-preferential bias)**:指 Claude 倾向于偏爱自己的结果或发现,尤其是在被要求拿评分标准去核验或评判它们的时候。
- **目标漂移(goal drift)**:指经过很多轮之后,对原始目标的忠实度逐渐流失,尤其是在压缩(compaction)之后。每一次摘要都是有损的,像边缘情况要求、或者「不要做 X」这类约束,都可能丢掉。
建一个 workflow 能对付这些问题——它把多个各自独立的 Claude 编排起来,每个都有自己的 context window 和专注、隔离的目标。
### 动态 vs 静态 workflows
你以前可能用 Claude Agent SDK 或者 claude -p 造过静态 workflow,把多个 Claude Code 实例协调到一起。
但因为静态 workflow 得应付所有边缘情况,它们通常更通用、更笼统。有了 [Claude Opus 4.8](https://www.anthropic.com/news/claude-opus-4-8) 和 dynamic workflows,Claude 现在已经聪明到能写一套为你的具体场景量身定制的 harness。

## 用 dynamic workflows 时几个有用的模式
你想用 dynamic workflows,只要让 Claude 做一个就行,或者用触发词「ultracode」确保 Claude Code 一定会建 workflow。
但搞清楚 dynamic workflows 是怎么运作的,能帮你理解什么时候该用它们,以及怎么通过 prompt 把 Claude 往对的方向推。
Claude 在搭 workflow 时,可能会用到、并组合起来的几种常见模式:

**分类后行动(Classify-and-act)**
用一个分类器 agent 判断任务的类型,再根据任务路由到不同的 agent 或行为。或者,在最后用一个分类器来决定输出。
**并发后汇总(Fan-out-and-synthesize)**
把一个任务拆成很多个小步骤,每一步跑一个 agent,然后把这些结果汇总起来。这在小步骤数量很多的时候特别有用,或者当每一步都受益于自己干净的 context window、彼此不干扰也不交叉污染的时候。汇总这一步是个屏障——它等所有并发出去的 agent 都完成,再把它们结构化的输出合并成一个结果。
**对抗性验证(Adversarial verification)**
对每一个生成出来的 agent,再单独生成一个 agent,拿评分标准或判定条件去对抗式地核验它的输出。
**生成后筛选(Generate-and-filter)**
围绕一个主题生成若干点子,再用评分标准或核验去筛,去掉重复的,只返回质量最高、经过验证的点子。
**锦标赛(Tournament)**
不是分工,而是让多个 agent 在同一件事上比拼。生成 N 个 agent,每个用不同的路子去试同一个任务。然后用一个评判 agent,靠 prompt 或模型两两比较结果,直到决出一个胜者。
**循环到完成(Loop until done)**
对那些工作量未知的任务,循环地生成 agent,直到满足某个停止条件(没有新发现,或者日志里不再有报错),而不是跑固定的轮数。
## 用例
什么时候、用什么方式让 Claude Code 做 dynamic workflows,不妨发挥点想象力。我发现 workflows 有时候对非技术类的活儿反而更有用。

### 迁移和重构
[Bun](https://bun.com/) 就是用 workflows 从 Zig 重写到 Rust 的。这事是怎么做的,你可以看 [Jarred 的 X thread](https://x.com/jarredsumner/status/2060050578026189172)。
关键是把任务拆成一连串需要逐个处理的步骤,比如调用点、失败的测试、模块等等。给每一处修改派一个 subagent,在 worktree 里做修复,再让另一个 agent 对抗式审查,然后合并它们。可以考虑告诉 agent 别用吃资源的命令,这样你能最大限度并行,又不至于把机器的资源耗光。
### 深度研究
我们在 Claude Code 里发布了一个深度研究 skill(/deep-research),它就用了 dynamic workflows。具体来说,它并发出多个网页搜索、抓取来源、对抗式地核验它们的说法,再汇总成一份带引用的报告。
但这类研究你能做的不止网页搜索。比如,让 Claude 从 Slack 里的上下文整理出一份状态报告,或者通过深入翻一个代码库来研究某个功能是怎么运作的。
### 深度核查

另一方面,如果你有一份报告,想核对并溯源它引用的每一个事实性说法,那你可能想生成一个 workflow:让一个 agent 找出所有事实性说法,再派一个 subagent 逐条细查。你还可以让一个核验 agent 去检查那个溯源 subagent,确保它找的来源质量过硬。
### 排序

你可能有一份清单,想按某个定性指标来排序——你相信 Claude Code 擅长评判这个指标,比如:按 bug 严重程度排的支持工单。但如果你想在一个 prompt 里排 1000 多行,质量会下降,而且塞不进 context。换个做法:跑一场锦标赛,一条两两比较 agent 组成的流水线(比较式评判比绝对打分更可靠),或者并行做分桶排序再合并。每一次比较都是它自己的一个 agent,所以那个确定性的循环负责管住整个赛程表,context 里只留运行顺序。
### 记忆和规则遵守

如果有某一组规则,你发现 Claude 老是漏掉或者搞不定——哪怕把它们写进了 CLAUDE.md——那就建一个 workflow,列一张必须由核验 agent 逐条检查的规则清单,一条规则配一个核验员。再造一个怀疑论者人设的 subagent 来审查这些规则、确保它们站得住脚,能帮你避免太多误报。
反过来也行:从你最近的会话和代码审查评论里,挖出你反复在做的纠正,用并行的 agent 把它们聚类,对抗式地核验每一个候选(这条规则真能挡住一个真实的错误吗?),再把活下来的那些提炼回一份 [CLAUDE.md](http://claude.md/)。
### 根因排查
调试这件事,最好的做法是想出几个互相独立的假设再去验证它们;但如果你只用一个 context window,Claude 会撞上自媚偏差。
一个 workflow 能从结构上防住这点——它启动多个 agent,从互不重叠的证据里各自生成假设。比如,日志、文件、数据各派一个独立的 agent。每个假设接着面对一组核验员和反驳者。
这不只用于代码。Workflows 能用在销售(三月销售额为什么掉了?)、数据工程(这条 pipeline 为什么失败了?),或者任何复盘场景。
### 大规模分诊

每个团队都有一个支持队列、bug 报告、或者别的什么积压,靠人是处理不完的。
一个分诊 workflow 会给每一项分类,跟已经在跟踪的东西去重,然后采取行动。这可能意味着尝试修复,或者上报给人类用户。
分诊 workflow 有一个有用的模式叫隔离。做法是:禁止那些读取不可信公开内容的 agent 执行高权限操作,这些操作改由负责对信息采取行动的 agent 来做。
把分诊 workflow 和 /loop 配在一起,让 Claude 持续不断地做这件事。
### 探索和品味
在探索一个方案的不同路子时,Workflows 会很有用,尤其是当这件事靠品味——比如设计或起名——而且有一套评分标准会有帮助的时候。
可以让 Claude 探索一堆方案,再给一个审查 agent 一套「好方案长什么样」的评分标准。当审查 agent 觉得达标了,任务就算完成。方案也可以基于评分标准、通过一场锦标赛来排序或挑选。
### 评测
针对特定任务,你可以跑轻量级的 eval(评测):在 worktree 里派出几个独立的 agent,再派出比较 agent,拿评分标准去比较并给具体输出打分。比如,按某个判定条件评测、然后打磨你建的一个 skill。
### 模型和智能路由
造一个针对你的任务调过的分类器 agent,让它决定用哪个模型。当你的任务会涉及很多次工具调用、而在执行前先做点研究能找出最适合这活的模型时,这会很有帮助。
举个例子,「解释 auth 模块是怎么运作的」这个任务最适合用哪个模型,取决于 auth 模块里有多少文件、以及代码库的形态。一个分类器 agent 能做这个调研,再根据预期的任务复杂度路由到 Sonnet 或者 Opus。
### 什么时候不该用 dynamic workflows
Workflows 是个新东西。虽然在很多场景下它能带来超额的效果,但并不是每个任务都需要它,而且它最后可能会用掉多得多的 token。
最好是创造性地用 workflows,把 Claude Code 推到你以前没推到过的地方。对常规的写代码任务,不妨问问自己:它真的需要更多算力吗?比如,大多数传统的写代码任务并不需要一组 5 个审查员。
## 搭 dynamic workflows 的几条 tips
**Prompt 写法**
给 dynamic workflows 写详细的 prompt——用上面讲的那些具体技巧——效果最好。
Workflows 不只是给大任务用的。你可以让模型用一个「快速 workflow」。比如,你可以对一个假设做一次快速的对抗式审查。
**配合 /goal 和 /loop**
用那些可以重复跑的 workflow 时——比如分诊、研究、核验——把它们和 /loop 配在一起定期运行,再用 /goal 设一个硬性的完成要求。
**Token 用量预算**
你可以给 dynamic workflows 设明确的 token 用量预算,限制一个任务用掉多少 token。可以在 prompt 里给个预算,比如「用 10k token」,这就会设上限。
**保存和分享 dynamic workflows**
在 workflow 菜单里按「s」就能保存 workflow。你可以把它们提交到 ~/.claude/workflows,或者通过一个 skill 来分发。

想通过 skill 分享,就把你的 JavaScript workflow 文件放进 skill 和文件夹里,再在 [SKILL.MD](http://skill.md/) 里引用它们。为了更灵活,你可能想让 Claude 把 skill 里的 workflows 当成模板,而不是一个必须逐字运行的脚本。

### 一个全新的世界
Workflows 是扩展 Claude Code 的一个有用的新方式。我希望你把这当成一个起点——怎么把它们用到最好,还有很多可以发掘的。有什么发现,告诉我们。
*Thariq Shihipar 和 Sid Bidasaria(@sidbid)是 Anthropic 的技术人员,在 Claude Code 团队工作。*