上周,我们在Claude Code中发布了动态工作流。现在,Claude可以即时编写自己的专用工具,针对当前任务量身定制。
虽然默认的Claude Code工具主要面向编码任务,但它同样适用于许多其他类型的工作,因为很多任务本质上类似于编码。然而,对于某些特定任务类别,比如研究、安全分析、代理团队或代码审查,我们需要在Claude Code基础上构建定制工具以达到最佳性能。
动态工作流允许你基于Claude Code动态创建工具,使Claude能够更自然地解决这些问题。你还可以与他人共享和复用这些工作流。
本文将分享我对动态工作流的初步体验和心得,帮助你充分利用这一功能。请注意,最佳实践仍在不断发展中:动态工作流通常消耗更多token,适合复杂且高价值的任务。
示例提示
在深入技术细节之前,先通过几个示例提示激发你对工作流可能性的思考:
- “这个测试大约每50次运行失败1次。创建一个工作流来复现它。形成多个竞品理论,直到有一个理论经得起证据考验。”
- “使用工作流,分析我最近50个会话,挖掘我反复犯的错误,并将常见错误转化为
CLAUDE.md规则。” - “用工作流挖掘过去六个月Slack中的#incidents,找出反复出现但没人提交工单的根本原因。”
- “拿我的商业计划,运行一个工作流,让不同代理从投资者、客户和竞争对手的角度进行批判。”
- “这里有80份简历,使用工作流为后端岗位排名,并复核前十名。用AskUserQuestion工具进行面试评分。”
- “我需要给这个CLI工具起个名字。用工作流头脑风暴多个选项,并通过锦标赛选出前三名。”
- “用工作流将我们的User模型重命名为Account。”
- “用工作流检查我的博客草稿,核实每个技术声明是否与代码库一致,我不想发布错误内容。”
动态工作流如何运作
动态工作流执行一个JavaScript文件,包含一些特殊函数,帮助生成和协调subagents:

动态工作流还支持标准JavaScript函数,如JSON、Math和Array,方便数据处理。
特别值得一提的是,动态工作流可以决定代理使用哪个模型,以及子代理是否在独立的工作树中运行,从而让Claude选择所需的智能水平和隔离度。
如果工作流被中断(例如用户操作或终端退出),恢复会话时可以从中断处继续执行。
为什么选择动态工作流
默认的Claude Code工具在同一个上下文窗口中既要规划又要执行任务。对于许多编码任务,这种方式非常有效,但在长时间运行、大规模并行、高度结构化或对抗性强的任务中可能会失效。
原因在于,Claude在单一上下文窗口中处理复杂任务时间越长,越容易出现以下几种失败模式:
- 代理懒惰:Claude在完成复杂多步骤任务前就停止,宣称任务完成,例如只处理了安全审查中的35项而非全部50项。
- 自我偏好偏差:Claude倾向于偏爱自己的结果,尤其是在需要根据评分标准验证或评判时。
- 目标漂移:随着多轮交互,逐渐偏离最初目标,尤其是在摘要压缩后,边缘需求或“不要做X”的限制可能丢失。
创建工作流可以通过协调独立上下文窗口和专注目标的子代理,有效避免这些问题。
动态工作流与静态工作流
你可能之前用Claude Agent SDK或claude -p创建过静态工作流,协调多个Claude Code实例。
但静态工作流为了兼顾所有边缘情况,通常较为通用。借助Claude Opus 4.8和动态工作流,Claude现在足够智能,可以为你的用例编写定制化工具。

使用动态工作流的常见模式
你可以直接让Claude创建工作流,或者使用触发词ultracode确保Claude Code生成工作流。
理解动态工作流的工作原理,有助于你判断何时使用以及如何通过提示引导Claude。
常见模式包括:

分类并执行
使用分类代理决定任务类型,然后根据任务路由到不同代理或行为。或者在最后用分类器确定输出。
分解并综合
将任务拆分成多个小步骤,为每步运行一个代理,最后综合结果。适合步骤多或每步需要独立上下文避免干扰的场景。综合步骤等待所有分解代理完成,再合并结构化输出。
对抗性验证
为每个生成的代理,运行另一个代理根据评分标准对其输出进行对抗性验证。
生成并筛选
生成多个想法,再根据评分标准或验证筛选,去重后只返回最高质量的想法。
锦标赛
让多个代理竞争完成同一任务,使用评判代理两两比较结果,直到选出优胜者。
循环直到完成
对于工作量未知的任务,循环生成代理直到满足停止条件(无新发现或日志无错误),而非固定次数。
典型应用场景
发挥创造力,思考何时何地让Claude Code生成动态工作流。我发现工作流在非技术工作中有时更有用。
迁移与重构
Bun从Zig重写为Rust时使用了工作流。详情见Jarred的X推文。
关键是将任务拆解为多个步骤,如调用点、失败测试、模块等。为每个修复点生成子代理进行修复,再由另一个代理对其进行对抗性审查并合并。建议告诉代理避免使用资源密集型命令,以便最大化并行而不耗尽机器资源。
深度研究
我们在Claude Code中发布了一个深度研究技能(/deep-research),利用动态工作流实现。它分散进行网页搜索、获取来源、对抗性验证声明,并综合成带引用的报告。
你也可以用类似方法做其他研究,比如从Slack上下文编写状态报告,或深入探索代码库研究功能实现。
深度验证


如果你有报告需要核实每个事实声明,可以生成一个工作流,让一个代理识别所有事实声明,再为每条声明生成子代理详细核查。还可以让验证代理检查子代理的来源质量。
排序

你可能有一长串项目需要按某种定性标准排序,比如按缺陷严重程度排序的支持工单。但一次性在一个提示中排序1000+条目会导致质量下降且超出上下文限制。可以用锦标赛、成对比较流水线(相对判断比绝对评分更可靠)或并行分桶排序后合并。每次比较由独立代理完成,确定性循环维护排序结构。
记忆与规则遵守

如果Claude经常忽略某些规则,即使放入CLAUDE.md也难以遵守,可以创建一个工作流,列出必须由验证代理检查的规则——每条规则一个验证代理。创建怀疑者角色的子代理审查规则,有助于减少误报。
反向操作也有效:挖掘你最近的会话和代码审查评论,找出反复出现的修正,使用并行代理聚类,对每个候选规则进行对抗性验证(该规则是否能防止真实错误?),然后将通过验证的规则提炼回CLAUDE.md。
根因调查
调试时最好提出多个独立假设并测试,但单一上下文窗口容易导致自我偏好偏差。
工作流可以结构化地避免这一点,生成多个代理分别从不同证据(日志、文件、数据)提出假设,再由验证和反驳代理组成评审小组。
这不仅适用于代码,也适合销售(例如“3月销售为何下降?”)、数据工程(“流水线为何失败?”)或任何事后分析。
大规模分诊

每个团队都有无法完全由人工处理的支持队列、缺陷报告或待办事项。
分诊工作流会分类每个条目,去重已有跟踪项,并采取行动,比如尝试修复或升级给人工处理。
一个有用的分诊模式是隔离,禁止读取不可信公共内容的代理执行高权限操作,这些操作由负责执行的代理完成。
配合/loop命令,Claude可以持续执行分诊工作流。
探索与品味
工作流适合探索多种解决方案,尤其是基于品味的设计或命名任务,配合评分标准更佳。
尝试让Claude探索多个方案,给评审代理一个评分标准,任务完成于评审代理认为标准达成时。方案也可通过锦标赛根据评分标准排序或选出。
评估
你可以通过生成独立代理执行轻量级评估,再生成比较代理根据评分标准对结果进行比较和评分。例如,评估并优化你创建的技能。
模型与智能路由
创建针对任务调优的分类代理,决定使用哪个模型。对于涉及大量工具调用的任务,先调研再执行有助于选出最佳模型。
例如,任务“解释认证模块如何工作”的最佳模型取决于认证模块的文件数量和代码库结构。分类代理可以先调研,再根据任务复杂度路由到Sonnet或Opus。
何时不使用动态工作流
工作流功能尚新,虽然在许多场景下效果显著,但并非每个任务都需要,且可能显著增加token消耗。
建议创造性地使用工作流,推动Claude Code完成以往难以实现的任务。对于常规编码任务,问问自己是否真的需要更多计算资源,比如大多数传统编码任务不需要5个评审者的面板。
构建动态工作流的建议
提示设计
详细提示,结合上述技巧,能产生最佳效果。
工作流不仅适合大型任务,也可用于“快速工作流”,例如快速对某个假设进行对抗性审查。
结合/goal和/loop
对于可重复执行的工作流,如分诊、研究或验证,配合/loop定期运行,使用/goal设置硬性完成条件。
Token使用预算
你可以为动态工作流设置明确的token使用上限,比如提示“使用1万token”,以控制消耗。
保存与共享动态工作流
在工作流菜单按“s”保存。你可以将其存入~/.claude/workflows,或通过技能分发。

通过技能共享时,将JavaScript工作流文件放入技能文件夹,并在SKILL.MD中引用。为增加灵活性,可以提示Claude将技能中的工作流视为模板,而非必须逐字执行的脚本。

探索的新起点
工作流是扩展Claude Code的有力新工具。我鼓励你将其视为探索新用法的起点,帮助完成更多任务。关于最佳使用方式还有很多待发现,欢迎分享你的发现。
本文作者为Anthropic技术团队成员Thariq Shihipar和Sid Bidasaria,专注于Claude Code的研发。


