多 Agent 协奏曲
Mission 关联:前三课你学会了自动化(hooks)、复用(skills)、分工(subagents)。 这一课将教你指挥——用 JavaScript 脚本编排多个 subagent 协同工作,像指挥家一样调配合唱团。
Workflow 是 Claude Code 的多 agent 编排脚本。它是一个 JavaScript 文件,通过 agent()、parallel()、pipeline() 等 API
来控制和协调多个 subagent 的执行顺序和协作方式。
/workflows 运行,观察进度.claude/workflows/<name>.js/workflow-name 调用Workflow 脚本中用到的 API:
| 函数 | 用途 | 类比 |
|---|---|---|
agent(prompt, opts?) |
启动一个 subagent 执行任务 | 派一个员工干活 |
parallel(thunks) |
并行启动多个任务,等全部完成 | 多个员工同时干 |
pipeline(items, stage1, stage2, ...) |
流水线:每个 item 依次经过多个阶段 | 流水线作业 |
phase(title) |
标记当前阶段(显示在进度树中) | 贴进度标签 |
log(message) |
输出进度消息 | 汇报进展 |
// 基本用法 —— 返回文本
const result = await agent("Find all TODO comments in the codebase")
// 带选项 —— 结构化输出
const result = await agent("Find bugs", {
label: "bug-finder", // 在进度树中显示的标签
phase: "Find", // 归属阶段
schema: { // JSON Schema 约束输出结构
type: "object",
properties: {
bugs: { type: "array" }
}
},
model: "sonnet", // 模型覆盖
effort: "high", // 推理努力程度
isolation: "worktree", // 工作树隔离
agentType: "code-reviewer" // 使用特定 agent 类型
})
流水线模式:多个 item 各自独立经过所有阶段。没有全局屏障——item A 可能已经到了 stage 3,而 item B 还在 stage 1。
const results = await pipeline(
items, // 要处理的数组
item => stage1(item), // 第一阶段
prevResult => stage2(prevResult), // 第二阶段(接收上一阶段的输出)
(prevResult, originalItem, index) => { // 第三阶段和原始数据
return stage3(prevResult, originalItem)
}
)
并行模式:有全局屏障——所有任务启动,等全部完成后才继续。
const [result1, result2, result3] = await parallel([
() => agent("Task 1"),
() => agent("Task 2"),
() => agent("Task 3"),
])
// 失败的 agent 返回 null,不会让 parallel 崩溃
// 所以用 .filter(Boolean) 过滤
const valid = results.filter(Boolean)
每个 workflow 必须以 meta 开头,然后才是脚本体:
export const meta = {
name: "audit-codebase",
description: "Audit the codebase for bugs, security issues, and style problems",
phases: [
{ title: "Find", detail: "Search for issues across dimensions" },
{ title: "Verify", detail: "Adversarially verify each finding" },
{ title: "Report", detail: "Generate final report" },
],
}
phase("Find")
const findings = await parallel([
() => agent("Find bugs", {phase: "Find", schema: BUGS_SCHEMA}),
() => agent("Find security issues", {phase: "Find", schema: SEC_SCHEMA}),
() => agent("Find style problems", {phase: "Find", schema: STYLE_SCHEMA}),
])
phase("Verify")
const verified = await pipeline(
findings.flat().filter(Boolean),
finding => agent(`Verify: ${finding.title}`, {phase: "Verify", schema: VERDICT_SCHEMA}),
)
phase("Report")
const report = await agent("Write report", {phase: "Report"})
return { confirmed: verified.filter(Boolean).filter(v => v.isReal) }
const results = await parallel(DIMENSIONS.map(d => () =>
agent(d.prompt, {schema: FINDINGS_SCHEMA})
))
const deduped = dedupe(results.flat().filter(Boolean))
const results = await pipeline(
DIMENSIONS,
d => agent(d.prompt, {phase: "Review", schema: FINDINGS_SCHEMA}),
review => parallel(review.findings.map(f => () =>
agent(`Verify: ${f.title}`, {phase: "Verify", schema: VERDICT_SCHEMA})
))
)
const seen = new Set()
let dry = 0
while (dry < 2) {
const found = await agent("Find more bugs", {schema: BUGS_SCHEMA})
const fresh = found.bugs.filter(b => !seen.has(key(b)))
if (!fresh.length) { dry++; continue }
dry = 0
fresh.forEach(b => seen.add(key(b)))
log(`Found ${fresh.length} new bugs (total: ${seen.size})`)
}
const attempts = await parallel([
() => agent("Solve it with MVP-first approach"),
() => agent("Solve it with security-first approach"),
() => agent("Solve it with performance-first approach"),
])
const best = await agent(`Synthesize: pick best from: ${attempts.filter(Boolean).join("\n---\n")}`)
Workflow 支持 token 预算控制。当用户指定了预算(如 "+500k"),workflow 可以根据预算动态调整规模:
// budget.total = 用户指定的预算(null 表示无限制)
// budget.spent() = 已消耗的 token
// budget.remaining() = 剩余预算
while (budget.total && budget.remaining() > 50_000) {
const result = await agent("Find bugs", {schema: BUGS_SCHEMA})
bugs.push(...result.bugs)
log(`${bugs.length} found, ${Math.round(budget.remaining()/1000)}k remaining`)
}
场景:你希望有一个"一键审查"流程——对当前代码变更做安全性、性能、代码质量三个维度的审查。
步骤:
在 Claude Code 会话中输入:
帮我创建一个 workflow,对当前代码库做三方面审查:
1. 安全性检查
2. 性能检查
3. 代码质量检查
三个审查并行进行,结果汇总成一份报告
Claude 会生成脚本并用 /workflows 运行。观察进度树,看三个 agent 是否并行执行。
运行成功后,保存到 .claude/workflows/audit.js。
以后在任何项目中,输入 /audit 就能一键审查。
加上 phase() 分阶段标记,再加一个"验证"阶段:
phase("Review")
// 并行审查...
phase("Verify")
// 验证关键发现...
phase("Report")
// 生成报告...
| 字段 | 必填 | 说明 | 示例 |
|---|---|---|---|
name |
✅ | Workflow 名称,显示在进度树中 | audit-codebase |
description |
✅ | 一句话描述,出现在权限提示中 | Audit the codebase |
phases |
❌ | 阶段列表,每个有 title 和 detail | [{title: "Find", detail: "..."}] |
whenToUse |
❌ | 在 workflow 列表中显示的用途说明 | When you need ... |
.filter(Boolean) 过滤.claude/workflows/foo.js → /foo| 场景 | 推荐 | 原因 |
|---|---|---|
| 多个独立任务,结果不互相依赖 | parallel | 同时跑,等全部完成 |
| 每个任务分多阶段,阶段间无依赖 | pipeline | 边查边验,不浪费等待时间 |
| 需要"全部到齐才能做下一步" | parallel + 后续处理 | 全局 barrier,等全集 |
| 需要去重/排序/比较 | parallel + barrier | 必须全集到齐才能操作 |
| 先找 bug,找到后立即验证 | pipeline | 每个 bug 找到就验,不用等所有找完 |
要运行 workflow,确保你的 Claude Code 版本支持(v2.1.154+):
/workflows 查看是否支持/config 中设置 workflow 规模(small/medium/large/unrestricted)Workflow 是 Claude Code 进阶的终极武器。学完这课后,你就能用脚本指挥多个 AI 员工协同工作了。
有任何问题随时问!特别是 pipeline 和 parallel 的选择逻辑——这是最容易搞混的地方。