跳转至

Agent Teams: 多 Agent 协作

概述

Agent Teams (Swarms) 允许多个 agent 在一个项目上协作:

  • Team Lead (队列主管) 协调工作
  • Teammates (工作者) 并行执行任务
  • Shared Tasks 对所有成员可见
  • Synchronized Permissions 由 team lead 管理
  • Message Mailbox 用于 agent 间通信

架构

┌──────────────────────────────────────────────────┐
│         Team Lead Agent (Control Session)       │
│                                                  │
│  • 协调工作                                       │
│  • 创建任务                                       │
│  • 管理权限                                       │
│  • 监控进度                                       │
│  • 批准 teammate 决策                             │
└────┬─────────────────┬──────────────┬──────────┘
     │                 │              │
     ↓                 ↓              ↓
 ┌────────────┐  ┌────────────┐  ┌────────────┐
 │ Teammate 1 │  │ Teammate 2 │  │ Teammate 3 │
 │ "Frontend" │  │ "Backend"  │  │ "Database" │
 │            │  │            │  │            │
 │ Session A  │  │ Session B  │  │ Session C  │
 └────────────┘  └────────────┘  └────────────┘
     ↓                 ↓              ↓
 并行执行 (tmux/iTerm2/in-process)

     ↓ Shared Task List ↓ Shared Permissions ↓

Team 生命周期

创建 Team

// TeamCreate tool
{
  name: "my-team",
  description: "Cross-functional feature team"
}

// 系统:
// 1. 生成唯一的 team 名称
// 2. 创建 ~/.claude/teams/my-team/
// 3. 创建 team.json 元数据
// 4. 初始化共享任务列表
// 5. 返回 team 配置

Team 文件结构

~/.claude/teams/my-team/
├── team.json                # Team 元数据
├── tasks/                   # 共享任务目录
│   ├── .lock
│   ├── .highwatermark
│   └── {taskId}.json
├── permissions/             # 共享权限
│   └── allowed-paths.json
└── mailbox/                 # Agent 间消息
    ├── teammate-1.mailbox
    ├── teammate-2.mailbox
    └── teammate-3.mailbox

Team 元数据文件

{
  "name": "my-team",
  "description": "Cross-functional feature team",
  "createdAt": 1712000000000,
  "leadAgentId": "agent-xyz",
  "leadSessionId": "session-123",

  "members": [
    {
      "agentId": "frontend-agent@my-team",
      "name": "frontend",
      "agentType": "general-purpose",
      "model": "claude-3-5-sonnet-20241022",
      "color": "blue",
      "joinedAt": 1712000000000,
      "sessionId": "session-456",
      "tmuxPaneId": "window:pane",
      "cwd": "/path/to/project",
      "backendType": "tmux",
      "isActive": true,
      "mode": "bypassPermissions"
    },
    {
      "agentId": "backend-agent@my-team",
      "name": "backend",
      "agentType": "general-purpose",
      "joinedAt": 1712000000001,
      "sessionId": "session-789",
      "tmuxPaneId": "window:pane",
      "backendType": "tmux",
      "isActive": true,
      "mode": "bypassPermissions"
    }
  ],

  "teamAllowedPaths": [
    {
      "path": "src/**",
      "toolName": "Edit",
      "addedBy": "agent-xyz",
      "addedAt": 1712000000000
    }
  ]
}

添加 Teammates

Teammate 初始化

// TeamCreateTool 添加 teammates:
{
  teamName: "my-team",
  members: [
    {
      name: "frontend",
      agentType: "general-purpose",
      prompt: "You are frontend specialist..."
    },
    {
      name: "backend",
      agentType: "general-purpose",
      prompt: "You are backend specialist..."
    }
  ]
}

// 系统:
// 1. 使用成员更新 team.json
// 2. 创建后端 sessions (tmux/iTerm2)
// 3. 初始化每个 teammate 的上下文
// 4. 创建 mailbox 文件
// 5. 设置权限模式

Backend 类型

Teams 支持不同的执行后端:

Backend 平台 优点 缺点
tmux Linux/macOS 持久化、可见 需要 tmux
iTerm2 macOS 原生集成 仅 macOS
in-process 全部 无子进程开销 隔离性有限

Shared Task List

所有 team 成员访问相同的任务列表:

// Team Lead 创建任务:
TaskCreate({
  subject: "Implement user profile page",
  description: "Frontend component + backend API + database"
})
// 存储: ~/.claude/teams/my-team/tasks/1.json

// Frontend teammate 看到:
TaskList()  包含上述任务

// Frontend 认领任务:
TaskUpdate({
  taskId: "1",
  status: "in_progress",
  owner: "frontend-agent@my-team"
})

// Backend 可以看到:
TaskList()  显示 "1"  frontend 拥有, 状态为 in_progress

Team 中的任务依赖

任务可以表达 team 级别的依赖关系:

Frontend Task: "Create profile UI"
  blocks: ["Backend Task 1"]

Backend Task 1: "Implement profile API"
  blockedBy: ["Frontend Task"]
  blocks: ["Backend Task 2"]

Database Task: "Create profile table"
  blocks: ["Backend Task 1"]

执行:
  Frontend 立即开始
  Database 立即开始 (并行)
  Backend 等待 Database (强制依赖)
  Database 完成后, Backend 可以开始
  Frontend 不等待 (独立的 UI 工作)

权限同步

Team Lead 权限管理

Team lead 定义共享权限:

// Team lead 授予路径
{
  teamAllowedPaths: [
    {
      path: "src/**",
      toolName: "Edit",
      addedBy: "agent-xyz",
      reason: "Core feature implementation"
    },
    {
      path: "tests/**",
      toolName: "Write",
      addedBy: "agent-xyz"
    }
  ]
}

// 所有 teammates 获得这些权限

权限继承

Teammates 从 team lead 继承并请求权限:

Teammate: "Can I edit /src/main.ts?"

流程:
  1. 检查本地规则: 拒绝 (不在允许列表中)
  2. 检查 team 规则: 允许 (匹配 src/**)
  3. 继续操作

或:

  1. 检查 team 规则: 拒绝
  2. 询问 team lead (通过 mailbox)
  3. Team lead 响应: 允许/拒绝
  4. 继续或拒绝

权限模式

每个 teammate 都有一个控制权限行为的模式:

模式 行为
default 每个决策都询问 lead
bypass 自动允许所有操作
deferToClassifier ML 分类器决定
delegatedByTeamLead Lead 发送权限批次

Agent 间通信

Mailbox 系统

Teammates 通过 JSON mailbox 文件通信:

~/.claude/teams/my-team/mailbox/
├── frontend.mailbox
├── backend.mailbox
└── database.mailbox

消息格式

{
  "id": "msg-12345",
  "from": "lead-agent",
  "to": "frontend-agent",
  "type": "permission_request",
  "content": {
    "tool": "Edit",
    "path": "/src/new-feature.ts",
    "action": "allow" | "deny"
  },
  "timestamp": 1712000000000
}

消息类型

类型 发送者 目的
task_notification Lead/Teammate 任务状态改变
permission_request Teammate 向 lead 请求权限
permission_response Lead 授予/拒绝权限
status_update Teammate 报告进度
error_report Teammate 报告失败
question Teammate 向 lead 请求指导

监控与控制

Team Lead Dashboard

Team lead 可以监控所有 teammates:

// 获取所有 team 成员的状态
const status = {
  "frontend": {
    sessionId: "session-456",
    status: "active",
    lastMessage: "Implementing header component",
    currentTask: "1",
    tokensUsed: 45000
  },
  "backend": {
    sessionId: "session-789",
    status: "idle",
    currentTask: "none",
    tokensUsed: 2000
  }
}

任务重新分配

Team lead 可以重新分配任务:

// 从一个 teammate 重新分配给另一个
TaskUpdate({
  taskId: "1",
  owner: "backend-agent@my-team"
})

// 通过 mailbox 消息通知
// Teammate 确认或拒绝

移除 Teammate

// 从 team 中移除 teammate
TeamDeleteMember({
  teamName: "my-team",
  agentId: "frontend-agent@my-team"
})

// 系统:
// 1. 更新 team.json
// 2. 终止后端 session
// 3. 归档任务/消息
// 4. 清理资源

实际工作流程

Sprint 示例: 多功能开发

Team Lead:
  1. 创建包含 3 个 teammates 的 team (frontend, backend, db)
  2. 创建 3 个任务 (每个专家一个):
     - Task 1: Frontend UI
     - Task 2: Backend API
     - Task 3: Database schema

Frontend Teammate:
  TaskList() → 看到 3 个任务
  TaskUpdate(Task 1, in_progress)
  → 开发 React 组件
  → 提交代码
  → TaskUpdate(Task 1, completed)

Backend Teammate:
  TaskList() → 看到 Task 2 未被阻塞 (可以开始)
  TaskUpdate(Task 2, in_progress)
  → 等待数据库 (Task 3 阻塞器)
  → 询问 lead: "Database table ready?"
  → Lead: "Almost done, 10 mins"
  → 处理 API 脚手架

Database Teammate:
  TaskList() → 看到 Task 3
  TaskUpdate(Task 3, in_progress)
  → 创建数据库 schema
  → 运行 migrations
  → TaskUpdate(Task 3, completed)

Backend Teammate (恢复):
  → 数据库现在完成
  → 与数据库集成
  → 实现完整 API
  → 与 frontend 测试
  → TaskUpdate(Task 2, completed)

Team Lead:
  TaskList() → 所有 3 个任务完成
  → 验证集成
  → 准备发布

最佳实践

1. 清晰的角色定义

✅ 好:

Frontend Team:
  - React 组件实现
  - CSS 样式
  - 客户端验证

Backend Team:
  - REST API 端点
  - 数据库查询
  - 认证逻辑

Database Team:
  - Schema 设计
  - Migration 管理
  - 性能优化

❌ 坏:

Team 1: "做所有事情"
Team 2: "做所有事情"
→ 职责不明确, 冲突

2. 依赖声明

✅ 好:

Task 1: "Design database schema"
Task 2: "Implement API" (blockedBy: 1)
Task 3: "Build UI" (独立)

→ 清晰的依赖关系防止瓶颈

❌ 坏:

Task 1, 2, 3: 无依赖
→ Teammates 猜测顺序
→ 可能返工

3. 权限边界

✅ 好:

Frontend 可以编辑: src/components/**, tests/ui/**
Backend 可以编辑: src/api/**, src/db/**, tests/backend/**
Database 可以编辑: migrations/**, src/db/schema/**

❌ 坏:

所有 teammates: bypassPermissions 模式
→ 意外编辑错误代码
→ 冲突

4. 定期检查

✅ 好:

Team lead: 定期检查 TaskList
→ 更新阻塞器: "Task 1 complete, Task 2 unblocked"
→ 根据需要重定向 teammates
→ 解决权限争议

❌ 坏:

Team lead: 设置后放手
→ Teammates 卡住等待
→ 未解决的冲突
→ 浪费时间

关键文件

File 目的
src/tools/TeamCreateTool/ 创建/管理团队
src/tools/TeamDeleteTool/ 删除团队
src/utils/swarm/teamHelpers.ts 团队工具
src/utils/swarm/permissionSync.ts 权限同步
src/utils/swarm/leaderPermissionBridge.ts Lead 权限桥接
src/utils/swarm/reconnection.ts 会话恢复
src/utils/swarm/inProcessRunner.ts 进程内执行
src/utils/swarm/teammateInit.ts Teammate 初始化
src/utils/swarm/teammateMailbox.ts 消息队列系统

另请参阅