name: spawn-parallel description: 高效生成并行子代理的模式。当需要同时执行多个独立任务时使用。 allowed-tools: Task
生成并行技能
用于生成和协调并行子代理的模式。
何时加载此技能
- 您有多个独立任务
- 任务之间不依赖彼此的输出
- 您希望最大化并发性
生成模式
1. 识别独立任务
任务独立的条件:
- 任务之间没有数据依赖
- 没有文件冲突(不同文件或只读)
- 可以按任意顺序完成
2. 准备上下文
每个子代理需要最小化、聚焦的上下文:
{"task":{"id":"唯一标识符","description":"具体任务描述"},"context_files":["仅相关文件"],"boundaries":{"owns":["此代理可修改的文件"],"reads":["参考文件"]},"output_path":"memory/tasks/{id}/output.json"}
3. 一次性全部生成
在单个响应中使用多个Task调用:
Task(subagent_type: "implementer", model: "sonnet", prompt: "任务1...")
Task(subagent_type: "implementer", model: "sonnet", prompt: "任务2...")
Task(subagent_type: "implementer", model: "sonnet", prompt: "任务3...")
子代理类型参考(自定义dotagent代理):
| 类型 | 模型 | 用途 |
|---|---|---|
explorer |
haiku | 快速代码库侦察 |
implementer |
sonnet | 专注代码编写 |
verifier |
haiku | 独立验证 |
tester |
haiku | 测试执行 |
注意: 这些是自定义dotagent代理(小写)。内置Claude Code
代理如Explore和Plan(大写)有不同的行为。
4. 收集和验证
所有任务完成后:
- 检查每个输出文件是否存在
- 根据模式验证
- 处理失败(重试或升级)
协调规则
防止冲突
- 为每个代理定义清晰的文件所有权
- 使用契约处理共享接口
- 对共享资源使用只读访问
处理失败
单个失败不会导致批次失败。应用来自 @.claude/skills/error-recovery/SKILL.md的恢复策略:
FOR 批次中的每个失败任务:
IF 输出格式错误/超时:
→ 简单重试(相同提示,最多3次)
ELIF 代理说“不清楚”/“不理解”:
→ 上下文增强(添加文件,澄清)
ELIF 部分完成:
→ 范围缩减(拆分为子任务)
ELIF 边界/契约违规:
→ 升级(生成契约解析器)
ELIF 3次以上尝试失败:
→ 中止,记录失败,继续其他任务
上下文增强重试示例:
Task(
subagent_type: "implementer",
model: "sonnet",
prompt: |
## 重试 - 先前尝试失败
错误:“不清楚如何连接数据库”
## 额外上下文
查看数据库配置:@src/config/database.ts
连接模式:@src/services/db-connection.ts
## 原始任务
{原始任务描述}
输出:memory/tasks/{id}/output.json
)
示例:并行探索器
# 并行生成3个自定义探索器代理
Task(
subagent_type: "explorer", # 自定义dotagent代理
model: "haiku",
prompt: "探索身份验证代码。返回包含发现的紧凑JSON。"
)
Task(
subagent_type: "explorer",
model: "haiku",
prompt: "探索API路由。返回包含发现的紧凑JSON。"
)
Task(
subagent_type: "explorer",
model: "haiku",
prompt: "探索数据库模型。返回包含发现的紧凑JSON。"
)
所有任务并发运行,全部完成后收集结果。
示例:混合代理类型
# 具有不同边界的并行实现
Task(
subagent_type: "implementer",
model: "sonnet",
prompt: |
任务:添加用户验证
边界:owns=[src/validators/user.ts], reads=[src/types/]
输出:memory/tasks/task-001/output.json
)
Task(
subagent_type: "implementer",
model: "sonnet",
prompt: |
任务:添加电子邮件服务
边界:owns=[src/services/email.ts], reads=[src/config/]
输出:memory/tasks/task-002/output.json
)