name: 基于任务的多智能体系统 description: 使用共享任务文件设置基于任务的多智能体系统。适用于并行代理执行、设计工作树隔离模式或实现任务文件协调。 allowed-tools: 读取、搜索、全局匹配
基于任务的多智能体技能
指导使用共享任务文件和工作树隔离创建基于任务的多智能体系统。
使用场景
- 设置并行代理执行
- 管理多个并发工作流
- 扩展到单代理模式之外
- 构建任务队列系统
核心概念
代理共享一个任务文件,作为协调机制:
## 待办事项
- [ ] 任务 A
- [ ] 任务 B
## 进行中
- [🟡 abc123] 任务 C - 正在处理
## 已完成
- [✅ def456] 任务 D - 已完成
任务文件格式
tasks.md:
# 任务
## Git 工作树 {工作树名称}
## 待办事项
[] 待处理任务描述 # 可用
[⏰] 阻塞任务(等待上述任务) # 阻塞
[] 带有 #opus 标签的任务 # 模型覆盖
[] 带有 #adw_plan_implement 标签的任务 # 工作流覆盖
## 进行中
[🟡, adw_12345] 正在处理的任务 # 代理已认领
## 已完成
[✅ abc123, adw_12345] 已完成任务 # 保存提交哈希
[❌, adw_12345] 失败任务 // 错误原因 # 捕获错误
状态标记
| 标记 | 含义 | 状态 |
|---|---|---|
[] |
待处理 | 可供拾取 |
[⏰] |
阻塞 | 等待前置任务 |
[🟡, {id}] |
进行中 | 正在处理 |
[✅ {hash}, {id}] |
完成 | 成功结束 |
[❌, {id}] |
失败 | 发生错误 |
标签系统
标签修改代理行为:
| 标签 | 效果 |
|---|---|
#opus |
使用 Opus 模型 |
#sonnet |
使用 Sonnet 模型 |
#adw_plan_implement |
复杂工作流 |
#adw_build |
简单构建工作流 |
实现架构
┌─────────────────────────────────────────┐
│ 定时触发器 │
│ (每 N 秒轮询 tasks.md) │
└─────────────────┬───────────────────────┘
│
┌─────────┼─────────┐
│ │ │
v v v
┌────────┐ ┌────────┐ ┌────────┐
│ 任务 A │ │ 任务 B │ │ 任务 C │
│工作树 │ │工作树 │ │工作树 │
│ 1 │ │ 2 │ │ 3 │
└────────┘ └────────┘ └────────┘
设置工作流
步骤 1: 创建任务文件
# tasks.md
## 待办事项
[] 第一个要完成的任务
[] 第二个要完成的任务
[⏰] 直到第一个完成才解除阻塞
## 进行中
## 已完成
步骤 2: 创建数据模型
from pydantic import BaseModel
from typing import Literal, Optional, List
class Task(BaseModel):
description: str
status: Literal["[]", "[⏰]", "[🟡]", "[✅]", "[❌]"]
adw_id: Optional[str] = None
commit_hash: Optional[str] = None
tags: List[str] = []
worktree_name: Optional[str] = None
步骤 3: 创建触发器脚本
# adw_trigger_cron_tasks.py
def main():
while True:
tasks = parse_tasks_file("tasks.md")
pending = [t for t in tasks if t.status == "[]"]
for task in pending:
if not is_blocked(task):
# 标记为进行中
claim_task(task)
# 生成子进程
spawn_task_workflow(task)
time.sleep(5) # 轮询间隔
步骤 4: 创建任务工作流
# adw_build_update_task.py (简单)
def main(task_id: str):
# 标记为进行中
update_task_status(task_id, "[🟡]")
# 执行 /build
response = execute_template("/build", task_description)
# 标记完成
if response.success:
update_task_status(task_id, "[✅]", commit_hash)
else:
update_task_status(task_id, "[❌]", error_reason)
步骤 5: 添加工作树隔离
每个任务都有自己的工作树:
git worktree add trees/{task_id} -b task-{task_id} origin/main
协调规则
- 处理前认领: 立即更新状态为
[🟡] - 尊重阻塞: 在依赖完成前不处理
[⏰]任务 - 完成时更新: 即使失败也要更新状态
- 包含上下文: 保存提交哈希、错误原因、ADW ID
关键内存参考
- @git-worktree-patterns.md - 工作树隔离
- @composable-primitives.md - 工作流组合
- @zte-progression.md - 扩展到 ZTE
输出格式
## 多智能体系统设置
**任务文件:** tasks.md
**触发间隔:** 5 秒
**最大并发:** 5 代理
### 组件
1. 任务文件格式与状态标记
2. 数据模型(任务、状态、标签)
3. 定时触发器脚本
4. 任务工作流脚本
5. 工作树隔离
### 工作流路由
- 默认: adw_build_update_task.py
- #adw_plan_implement: adw_plan_implement_update_task.py
- #opus: 使用 Opus 模型
### 状态流
[] -> [🟡, id] -> [✅ hash, id]
-> [❌, id] // 错误
反模式
- 轮询过于频繁(< 1 秒)
- 处理前未认领(竞态条件)
- 忽略阻塞任务
- 未捕获失败原因
- 在同一目录运行(无隔离)
版本历史
- v1.0.0 (2025-12-26): 初始发布
最后更新
日期: 2025-12-26 模型: claude-opus-4-5-20251101