# Collaboration Patterns Specification > 10 种团队协作模式,每种具备:收敛性、完整流程、反馈控制 --- ## Pattern Standard Structure 每种协作模式遵循统一规范: ``` ┌─────────────────────────────────────────┐ │ Entry Condition (何时启用) │ ├─────────────────────────────────────────┤ │ Roles Required (需要哪些角色) │ ├─────────────────────────────────────────┤ │ Workflow (完整执行流程) │ ├─────────────────────────────────────────┤ │ Convergence (收敛条件) │ │ ├─ Success Gate (成功判定) │ │ ├─ Max Iterations (最大迭代) │ │ └─ Timeout (超时处理) │ ├─────────────────────────────────────────┤ │ Feedback Loop (反馈控制) │ │ ├─ Signal (反馈信号) │ │ ├─ Handler (处理逻辑) │ │ └─ Correction (纠正动作) │ ├─────────────────────────────────────────┤ │ Fallback (降级策略) │ └─────────────────────────────────────────┘ ``` --- ## CP-1: Linear Pipeline (线性流水线) ### Description 最基础的协作模式。任务沿固定顺序在角色间传递,每个阶段有明确的入口和出口条件。上一阶段的输出是下一阶段的输入。 ### Entry Condition - 任务具有清晰的阶段划分(规划 → 实现 → 验证) - 各阶段之间有天然的依赖关系 - 适用于大多数标准特性开发 ### Roles Required `coordinator` → `planner` → `executor` → `tester` ### Workflow ``` ┌──────────┐ ┌──────────┐ ┌───────────┐ ┌──────────┐ 需求 ──→ │ PLAN │──→ │ IMPL │──→ │ TEST │──→ │ REPORT │ │ planner │ │ executor │ │ + REVIEW │ │ coord. │ └────┬─────┘ └────┬─────┘ └─────┬─────┘ └──────────┘ │ │ │ ▼ ▼ ▼ plan.json code changes test results review findings ``` ```javascript // Coordinator creates task chain TaskCreate({ subject: "PLAN-001", owner: "planner" }) TaskCreate({ subject: "IMPL-001", owner: "executor", addBlockedBy: [planId] }) TaskCreate({ subject: "TEST-001", owner: "tester", addBlockedBy: [implId] }) TaskCreate({ subject: "REVIEW-001", owner: "tester", addBlockedBy: [implId] }) ``` ### Convergence | Element | Value | |---------|-------| | **Success Gate** | 所有阶段任务状态 = `completed` | | **Max Iterations** | 每阶段 1 次(若失败触发 Review-Fix Cycle) | | **Timeout** | 无显式超时,每阶段内部有各自收敛机制 | ### Feedback Loop ``` ┌─ Stage Transition Feedback ─────────────────────────┐ │ │ │ Plan rejected? → planner revises → resubmit │ │ Impl has errors? → executor self-validates → fix │ │ Tests fail? → tester fix cycle → retry │ │ Review blocks? → create IMPL-fix → executor fixes │ │ │ └──────────────────────────────────────────────────────┘ ``` **Signal**: 下一阶段的 reject/fail message **Handler**: Coordinator 路由消息回上一阶段 **Correction**: 上一阶段 agent 修订并重新提交 ### Fallback - Plan 拒绝 3+ 次 → Coordinator 自行规划 - Test 达不到 95% 超过 5 次迭代 → 上报用户 - Review 发现 critical → 创建 IMPL-fix 任务 ### Implementation Reference 当前 `coordinate.md` 即采用此模式。 --- ## CP-2: Review-Fix Cycle (审查修复循环) ### Description 两个角色之间的迭代改进循环。一个角色产出工作成果,另一个角色审查,发现问题后退回修复,直到达到质量门控。这是软件开发中 code review 的自然映射。 ### Entry Condition - 工作产出需要质量验证(代码实现、计划、文档) - 存在明确的质量标准(pass rate、severity threshold、acceptance criteria) - 需要多轮迭代才能达到质量要求 ### Roles Required `producer` (executor/planner) ↔ `reviewer` (tester/reviewer) ### Workflow ``` ┌─────────┐ ┌──────────┐ │Producer │ │Reviewer │ │ │──(1)产出───→│ │ │ │ │ │ │ │←─(2)反馈────│ │ │ │ │ │ │ │──(3)修订───→│ │ │ │ │ │ │ ... │ ...循环 │ ... │ │ │ │ │ └─────────┘ └──────────┘ │ │ ▼ ▼ final artifact APPROVE verdict ``` ```javascript // Coordinator orchestrates review-fix cycle function reviewFixCycle(producerRole, reviewerRole, maxIterations) { let iteration = 0 let verdict = 'PENDING' while (iteration < maxIterations && verdict !== 'APPROVE') { iteration++ // Step 1: Producer delivers (or revises) if (iteration === 1) { // Wait for initial delivery // msg type: impl_complete / plan_ready } else { // Wait for revision // msg type: impl_complete (revision) } // Step 2: Reviewer examines // Creates REVIEW task, waits for review_result // Step 3: Check verdict verdict = reviewResult.data.verdict // APPROVE | CONDITIONAL | BLOCK if (verdict === 'BLOCK') { // Step 4: Create fix task for producer TaskCreate({ subject: `IMPL-fix-${iteration}`, description: `Fix issues: ${reviewResult.data.findings}`, owner: producerRole }) // Send feedback to producer team_msg({ type: "fix_required", data: { iteration, findings: reviewResult.data.findings } }) } } return { verdict, iterations: iteration } } ``` ### Convergence | Element | Value | |---------|-------| | **Success Gate** | Reviewer verdict = `APPROVE` 或 `CONDITIONAL`(无 critical findings) | | **Max Iterations** | 5 轮(可配置)。Producer 修复 → Reviewer 再审 = 1 轮 | | **Timeout** | 单轮超时 = 阶段超时(由各角色内部控制) | ### Feedback Loop ``` Signal: review_result { verdict: "BLOCK", findings: [...] } ↓ Handler: Coordinator 解析 findings,按 severity 分类 ↓ Correction: 创建 IMPL-fix 任务,附带 findings 明细 Producer 收到任务 → 读取 findings → 修复 → 重新提交 ↓ Loop: Reviewer 再次审查修订后的产出 ``` **反馈信号结构**: ```javascript { verdict: "APPROVE" | "CONDITIONAL" | "BLOCK", findings: { critical: [{ file, line, description, suggestion }], high: [...], medium: [...], low: [...] }, iteration: 2, delta: "+3 fixed, -1 new issue" // 对比上一轮的变化 } ``` ### Fallback | Condition | Action | |-----------|--------| | 达到 max iterations 仍 BLOCK | 上报用户,附带全部 findings 历史 | | Reviewer 发现 Producer 无法修复的设计问题 | 升级到 CP-5 Escalation,或回退到 CP-1 重新规划 | | 连续 2 轮 findings 不减少(无改善) | 中断循环,上报用户请求介入 | --- ## CP-3: Parallel Fan-out/Fan-in (并行扇出扇入) ### Description Coordinator 将同一任务或同一类任务广播给多个 agent 并行执行,收集所有结果后聚合。适用于需要多角度分析、分片处理、或冗余验证的场景。 ### Entry Condition - 任务可分解为独立的并行子任务 - 需要多角度/多维度分析(如安全 + 性能 + 架构审查) - 大型任务需要分片并行处理 ### Roles Required `coordinator` → `worker-1, worker-2, ... worker-N` → `coordinator` (aggregation) ### Workflow ``` ┌─ worker-1 ─┐ │ 角度 A │───┐ broadcast ├─ worker-2 ─┤ │ aggregate coord ──────────────┤ 角度 B │───┼──── coord ├─ worker-3 ─┤ │ │ 角度 C │───┘ └────────────┘ ``` ```javascript // Phase 1: Fan-out - broadcast tasks const workerTasks = angles.map((angle, i) => { const taskId = TaskCreate({ subject: `ANALYZE-${i+1}: ${angle} analysis`, description: `Analyze from ${angle} perspective: ${requirement}`, owner: `worker-${i+1}`, activeForm: `Analyzing ${angle}` }) return taskId }) // Phase 2: Wait for all workers (or quorum + timeout) function waitForCompletion(taskIds, quorumRatio = 1.0, timeoutMs = 300000) { const startTime = Date.now() const quorumCount = Math.ceil(taskIds.length * quorumRatio) let completedCount = 0 while (completedCount < quorumCount) { if (Date.now() - startTime > timeoutMs) break const tasks = TaskList() completedCount = taskIds.filter(id => tasks.find(t => t.id === id && t.status === 'completed') ).length // Wait... } return { completed: completedCount, total: taskIds.length, timedOut: completedCount < quorumCount } } // Phase 3: Fan-in - aggregate results function aggregateResults(taskIds) { const results = taskIds.map(id => { const task = TaskGet({ taskId: id }) return { angle: task.subject, result: task.metadata?.result } }) // Conflict detection const conflicts = detectConflicts(results) return { results, conflicts, consensus: conflicts.length === 0, summary: synthesize(results) } } ``` ### Convergence | Element | Value | |---------|-------| | **Success Gate** | 所有 worker 完成(或达到 quorum 比例,默认 100%) | | **Max Iterations** | 1 轮扇出(若聚合后有冲突,可触发 CP-4 Consensus) | | **Timeout** | 可配置,默认 5 分钟。超时后用已完成的结果聚合 | ### Feedback Loop ``` Signal: 每个 worker 的 {角度}_result message ↓ Handler: Coordinator 收集所有结果 ↓ Aggregate: 合并结果 + 冲突检测 ├─ 无冲突 → 直接合成最终结果 └─ 有冲突 → 升级到 CP-4 Consensus Gate ``` **聚合策略**: - **Union(并集)**: 合并所有发现(适用于安全审查 - 不遗漏任何 finding) - **Intersection(交集)**: 只保留多个 worker 共同发现的问题(适用于降噪) - **Weighted(加权)**: 按 worker 的专业权重合并(适用于多专家评审) ### Fallback | Condition | Action | |-----------|--------| | Worker 超时未完成 | 用已完成的 worker 结果聚合,标注缺失角度 | | Worker 返回错误 | 跳过该 worker,用 N-1 结果聚合 | | 聚合结果有冲突 | 触发 CP-4 Consensus Gate 解决分歧 | --- ## CP-4: Consensus Gate (共识门控) ### Description 在做出重要决策前,要求多个 agent 投票表达意见,只有达到 quorum 才能通过。模拟软件开发中的 Design Review、Architecture Decision Record (ADR) 的决策流程。 ### Entry Condition - 架构决策(选择技术方案 A vs B vs C) - 安全决策(是否可接受某个风险) - 影响面大的重构(需要多方确认) - CP-3 扇出结果有冲突需要裁决 ### Roles Required `proposer` → `voter-1, voter-2, ... voter-N` → `coordinator` (tally) ### Workflow ``` ┌─ voter-1 ─────────────┐ │ APPROVE + rationale │ proposal ├─ voter-2 ─────────────┤ tally proposer ─────────→ │ REJECT + rationale │ ────→ coordinator ├─ voter-3 ─────────────┤ │ │ APPROVE + conditions │ ▼ └───────────────────────┘ decision ``` ```javascript // Phase 1: Proposal const proposal = { id: `PROPOSAL-${Date.now()}`, title: "Adopt Strategy Pattern for payment gateway", options: [ { id: "A", description: "Strategy Pattern with factory", pros: [...], cons: [...] }, { id: "B", description: "Plugin architecture", pros: [...], cons: [...] } ], context: "Payment module needs multi-gateway support", deadline: Date.now() + 300000 // 5 min } // Phase 2: Broadcast proposal to voters voters.forEach(voter => { SendMessage({ recipient: voter, content: `## Proposal: ${proposal.title}\n${JSON.stringify(proposal)}`, summary: "Vote requested" }) }) // Phase 3: Collect votes function collectVotes(proposalId, voterCount, quorum, deadline) { const votes = [] while (votes.length < voterCount && Date.now() < deadline) { // Listen for vote messages const msgs = team_msg({ operation: "list", type: "vote" }) const newVotes = msgs.filter(m => m.data.proposalId === proposalId && !votes.find(v => v.from === m.from) ) votes.push(...newVotes) // Check quorum if (votes.length >= quorum) break } return votes } // Phase 4: Tally and decide function tallyVotes(votes, quorumRatio = 0.67) { const approvals = votes.filter(v => v.data.vote === 'APPROVE') const rejections = votes.filter(v => v.data.vote === 'REJECT') const conditions = votes.flatMap(v => v.data.conditions || []) const approvalRatio = approvals.length / votes.length const passed = approvalRatio >= quorumRatio return { passed, approvalRatio, approvals: approvals.length, rejections: rejections.length, conditions: [...new Set(conditions)], rationales: votes.map(v => ({ from: v.from, vote: v.data.vote, rationale: v.data.rationale })) } } ``` ### Convergence | Element | Value | |---------|-------| | **Success Gate** | 赞成率 ≥ quorum(默认 2/3)且无 BLOCK 级别反对 | | **Max Iterations** | 2 轮。第 1 轮未达 quorum → 修订提案 → 第 2 轮重投 | | **Timeout** | 5 分钟。超时后以已收到的票数计算(≥ quorum 则通过) | ### Feedback Loop ``` Signal: vote { vote: "REJECT", rationale: "...", conditions: [...] } ↓ Handler: Coordinator 聚合所有反对意见和附加条件 ↓ Correction: ├─ 未达 quorum → Proposer 修订提案,融合反对意见 → 重投 ├─ 达到 quorum 但有 conditions → 记录 conditions 作为实施约束 └─ 明确通过 → 执行决策 ``` **投票格式**: ```javascript team_msg({ type: "vote", data: { proposalId: "PROPOSAL-xxx", vote: "APPROVE" | "REJECT" | "ABSTAIN", rationale: "选择方案A因为...", // 必须提供理由 conditions: ["需要增加向后兼容层"], // 可选附加条件 confidence: 0.85 // 置信度 0-1 } }) ``` ### Fallback | Condition | Action | |-----------|--------| | 2 轮都未达 quorum | 上报用户裁决 | | 投票截止但票数不足(< N/2) | 延长截止时间 1 轮 | | 全员 ABSTAIN | 由 Coordinator 做默认决策并记录 | --- ## CP-5: Escalation Chain (逐级升级) ### Description 当 agent 遇到无法自行解决的问题时,逐级升级到更高层级的处理能力。模拟软件开发中的 on-call escalation / tiered support。 ### Entry Condition - Agent 自修复失败(尝试 N 次后仍无法解决) - 问题超出当前角色能力范围 - 需要更高权限或更广视角的决策 ### Roles Required `agent` → `specialist` → `coordinator` → `user` ### Workflow ``` Level 0 Level 1 Level 2 Level 3 ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ Agent │────→│Specialist│────→│Coordinator│───→│ User │ │ 自修复 │ │ 专家诊断 │ │ 全局视角 │ │ 人工裁决 │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ ▼ ▼ ▼ ▼ retry 2x CLI analysis cross-team fix manual fix ``` ```javascript // Escalation state machine const ESCALATION_LEVELS = [ { level: 0, name: "Self-repair", handler: "agent", maxAttempts: 2, actions: ["Retry with different approach", "Read more context", "Simplify approach"] }, { level: 1, name: "Specialist diagnosis", handler: "specialist", maxAttempts: 1, actions: ["CLI analysis (gemini/qwen)", "Cross-file dependency trace", "Pattern matching"] }, { level: 2, name: "Coordinator intervention", handler: "coordinator", maxAttempts: 1, actions: ["Reassign to different agent", "Modify task scope", "Create support task"] }, { level: 3, name: "User escalation", handler: "user", maxAttempts: 1, actions: ["Present diagnosis chain", "Request manual guidance", "Offer options"] } ] function escalate(issue, currentLevel) { const nextLevel = ESCALATION_LEVELS[currentLevel + 1] if (!nextLevel) { // Already at highest level, wait for user return { action: "wait", level: currentLevel } } team_msg({ type: "escalate", data: { issue: issue.description, from_level: currentLevel, to_level: nextLevel.level, attempts_at_current: issue.attempts, diagnosis_chain: issue.diagnosisHistory // 所有层级的诊断记录 } }) return { action: "escalate", nextHandler: nextLevel.handler, level: nextLevel.level } } ``` ### Convergence | Element | Value | |---------|-------| | **Success Gate** | 问题在某个层级被解决(agent 报告 issue resolved) | | **Max Iterations** | 每个层级有独立的 maxAttempts(L0: 2, L1: 1, L2: 1, L3: 1) | | **Timeout** | L0-L2 无显式超时;L3 用户层需等待用户响应 | ### Feedback Loop ``` Signal: escalate { issue, from_level, diagnosis_chain } ↓ Handler: 上级接收问题 + 下级的全部诊断历史 ↓ Diagnosis: 上级基于更广视角/更强能力做出诊断 ↓ Response: ├─ 解决方案 → 传回原 agent 执行 ├─ 重新定义问题 → 修改任务描述,agent 重试 └─ 无法解决 → 继续升级到下一层 ``` **诊断链结构** (每层追加): ```javascript { diagnosisHistory: [ { level: 0, agent: "executor", attempts: 2, diagnosis: "TypeScript类型不匹配", tried: ["修改类型定义", "添加类型断言"] }, { level: 1, agent: "specialist", attempts: 1, diagnosis: "循环依赖导致类型无法推断", recommendation: "重构模块边界" }, // ... 每层追加自己的诊断 ] } ``` ### Fallback | Condition | Action | |-----------|--------| | L3 用户无响应 | Agent 尝试最保守的方案继续,标记为 WORKAROUND | | 诊断链显示根本问题(如架构缺陷) | 回退到 CP-1 重新规划 | | 升级到 L1 后解决 | 将解决方案记录为 pattern,下次 L0 可直接处理 | --- ## CP-6: Incremental Delivery (增量交付) ### Description 将大型任务分解为小的增量,每个增量独立交付并验证后再进行下一个。模拟 CI/CD 中的小批量交付和渐进式部署。 ### Entry Condition - 大型特性(影响 > 10 个文件) - 高风险变更(需要逐步验证) - 用户要求渐进可见的进度 ### Roles Required `coordinator` → `executor` (increment) → `validator` (per-increment) → `coordinator` (gate) ### Workflow ``` ┌─────────────────────────────────────────────────┐ │ Increment 1 Increment 2 Increment N │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Implement│ │ Implement│ │ Implement│ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ ▼ ▼ ▼ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Validate │ │ Validate │ │ Validate │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ ▼ ▼ ▼ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Gate ✓ │ │ Gate ✓ │ │ Gate ✓ │ │ │ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────────────────────────────────────┘ │ ▼ Full validation ``` ```javascript // Coordinator splits plan into increments function createIncrements(plan) { // Group tasks by dependency layers const layers = topologicalSort(plan.tasks) return layers.map((layer, i) => ({ id: `INCREMENT-${i+1}`, tasks: layer, gate: { syntax_clean: true, no_regression: true, // 已有测试不破坏 increment_tests_pass: true // 增量相关测试通过 } })) } // Execute increment cycle for (const increment of increments) { // Step 1: Executor implements increment TaskCreate({ subject: `IMPL-inc-${increment.id}`, description: `Implement increment: ${increment.tasks.map(t => t.title).join(', ')}`, owner: "executor" }) // Step 2: Wait for implementation // msg: increment_ready // Step 3: Validator checks increment gate const gateResult = validateIncrement(increment) // Step 4: Gate decision if (gateResult.passed) { team_msg({ type: "increment_ready", data: { increment: increment.id, status: "PASS" } }) // Continue to next increment } else { // Feedback: which gate criteria failed team_msg({ type: "fix_required", data: { increment: increment.id, failed_gates: gateResult.failures, suggestion: gateResult.fix_suggestion }}) // Executor fixes → re-validate (max 3 retries per increment) } } // Final: full validation after all increments TaskCreate({ subject: "TEST-final", description: "Full test suite after all increments" }) ``` ### Convergence | Element | Value | |---------|-------| | **Success Gate** | 所有增量通过各自的 gate + 最终全量验证通过 | | **Max Iterations** | 每个增量最多 3 次重试,总增量数由 plan 决定 | | **Timeout** | 单个增量超时 = 增量任务数 × 单任务超时 | ### Feedback Loop ``` Signal: increment gate failure { failed_gates, affected_files } ↓ Handler: Coordinator 定位失败的 gate 条件 ↓ Correction: ├─ syntax_clean 失败 → Executor 修复语法 ├─ no_regression 失败 → Executor 修复回归 + 回滚该增量 └─ increment_tests 失败 → 触发 CP-2 Review-Fix Cycle ``` **增量进度追踪**: ```javascript { total_increments: 4, completed: 2, current: 3, progress_percent: 50, gate_history: [ { id: "INCREMENT-1", attempts: 1, status: "PASS" }, { id: "INCREMENT-2", attempts: 2, status: "PASS" }, { id: "INCREMENT-3", attempts: 1, status: "IN_PROGRESS" } ] } ``` ### Fallback | Condition | Action | |-----------|--------| | 增量重试 3 次仍失败 | 回滚该增量代码,标记为 blocked,继续下一增量 | | 超过半数增量被 blocked | 停止交付,上报用户评估是否重新规划 | | 最终全量验证失败 | 识别失败增量组合,逐个回退定位 | --- ## CP-7: Swarming (群策攻关) ### Description 当流水线被一个问题阻塞时,暂停正常工作流,所有可用 agent 集中力量解决该问题。模拟敏捷开发中的 swarming / mob debugging。 ### Entry Condition - 关键任务被阻塞超过阈值时间 - Agent 自修复和 L1 升级都失败 - 问题影响多个下游任务 ### Roles Required `coordinator` (发起) → `all available agents` (协同) → `coordinator` (裁决) ### Workflow ``` ┌───────────────────────────────────┐ │ SWARM MODE ACTIVE │ │ │ │ ┌────────┐ ┌────────┐ │ │ │Agent A │ │Agent B │ │ │ │诊断视角1│ │诊断视角2│ │ │ └───┬────┘ └───┬────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────────────────┐ │ │ │ Coordinator 汇总 │ │ │ │ 选择最佳诊断 │ │ │ └─────────┬───────────┘ │ │ ▼ │ │ ┌─────────────────────┐ │ │ │ 指定 Agent 执行修复 │ │ │ └─────────────────────┘ │ │ │ └───────────────────────────────────┘ │ ▼ Resume normal pipeline ``` ```javascript // Coordinator initiates swarm function initiateSwarm(blockingIssue) { // Step 1: Pause all non-critical tasks const activeTasks = TaskList().filter(t => t.status === 'in_progress') activeTasks.forEach(t => { TaskUpdate({ taskId: t.id, metadata: { paused_for_swarm: true } }) }) // Step 2: Broadcast swarm request team_msg({ type: "swarm_join", data: { issue: blockingIssue.description, affected_tasks: blockingIssue.blockedTasks, diagnosis_so_far: blockingIssue.diagnosisHistory, assignment: "All agents: diagnose from your expertise angle" } }) // Step 3: Each agent analyzes from their perspective // planner: 架构视角诊断 // executor: 实现细节诊断 // tester: 测试/环境视角诊断 // Step 4: Collect diagnoses (fan-in) // Uses CP-3 fan-in aggregation // Step 5: Coordinator selects best diagnosis + assigns fix const bestDiagnosis = selectBestDiagnosis(diagnoses) const fixer = selectBestFixer(bestDiagnosis, availableAgents) TaskCreate({ subject: `SWARM-FIX: ${blockingIssue.summary}`, description: `Fix based on swarm diagnosis:\n${bestDiagnosis.detail}`, owner: fixer }) // Step 6: Verify fix, resume pipeline // ... wait for fix completion ... // Step 7: Resume paused tasks activeTasks.forEach(t => { TaskUpdate({ taskId: t.id, metadata: { paused_for_swarm: null } }) }) } ``` ### Convergence | Element | Value | |---------|-------| | **Success Gate** | 阻塞问题解决(相关测试通过 / 错误消失) | | **Max Iterations** | 2 轮诊断。第 1 轮全员诊断 → 修复 → 若失败 → 第 2 轮聚焦诊断 | | **Timeout** | 10 分钟。超时后以最佳可用诊断尝试修复 | ### Feedback Loop ``` Signal: 每个 agent 的 swarm_diagnosis { perspective, root_cause, confidence, fix_suggestion } ↓ Handler: Coordinator 按 confidence 排序,合并互补的诊断 ↓ Selection: 选择 confidence 最高且 fix_suggestion 最具体的方案 ↓ Execution: 指定最合适的 agent 执行修复 ↓ Verify: 修复后重新运行触发阻塞的场景 ├─ 通过 → 恢复流水线 └─ 失败 → 第 2 轮,排除已尝试方案 ``` ### Fallback | Condition | Action | |-----------|--------| | 2 轮 swarm 未解决 | 升级到用户(CP-5 L3) | | 修复引入新问题 | 回滚修复,尝试次优方案 | | Agent 在 swarm 期间无响应 | 跳过该 agent,用其余 agent 的诊断 | --- ## CP-8: Consulting/Advisory (咨询顾问) ### Description 工作中的 agent 暂停当前任务,向拥有特定领域知识的 specialist 请求建议,获得建议后继续工作。不同于升级(CP-5),consulting 不转移问题所有权。 ### Entry Condition - Agent 遇到不熟悉的领域(如安全、性能优化、特定框架用法) - 需要验证方案的正确性但不需要他人实现 - 需要领域最佳实践参考 ### Roles Required `requester` (任何工作中的 agent) → `consultant` (specialist agent) → `requester` (继续工作) ### Workflow ``` requester consultant ┌──────────┐ ┌──────────┐ │ Working │ │ Idle │ │ │──(1)请求────→│ │ │ Paused │ │ 分析中 │ │ │←─(2)建议────│ │ │ Resume │ │ Idle │ │ (应用建议)│ │ │ └──────────┘ └──────────┘ ``` ```javascript // Requester sends consultation request function requestConsultation(topic, context, urgency = 'normal') { team_msg({ type: "consult_request", from: currentRole, to: "coordinator", // coordinator routes to appropriate specialist data: { topic: topic, // "security", "performance", "database" question: context.question, // 具体问题 context: context.codeSnippet, // 相关代码片段 options: context.options, // 可选方案(如果有) urgency: urgency // "blocking" | "normal" | "low" } }) // Pause current work, wait for response } // Coordinator routes to specialist function routeConsultation(request) { const specialist = selectSpecialist(request.data.topic) // If no specialist agent exists, use CLI tool as specialist if (!specialist) { // Fallback: invoke CLI analysis Bash(`ccw cli -p "PURPOSE: Expert consultation on ${request.data.topic} TASK: ${request.data.question} CONTEXT: ${request.data.context} EXPECTED: Actionable recommendation with confidence level " --tool gemini --mode analysis`, { run_in_background: true }) } } // Consultant provides advice function provideAdvice(request) { team_msg({ type: "consult_response", from: "consultant", to: request.from, data: { recommendation: "使用 bcrypt 而非 SHA-256 进行密码哈希", rationale: "bcrypt 内置 salt 和自适应计算成本...", confidence: 0.95, references: ["OWASP Password Storage Cheat Sheet"], caveats: ["需要增加 ~100ms 延迟"], alternative: "如果延迟敏感,可考虑 Argon2id" } }) } // Requester applies advice function applyAdvice(advice) { if (advice.data.confidence >= 0.8) { // Apply recommendation directly return { action: "apply", recommendation: advice.data.recommendation } } else { // Low confidence: request second opinion or escalate return { action: "second_opinion" } } } ``` ### Convergence | Element | Value | |---------|-------| | **Success Gate** | 咨询回复 confidence ≥ 0.8 且 requester 成功应用建议 | | **Max Iterations** | 1 次主咨询 + 1 次追问(如果首次回复不够清晰) | | **Timeout** | blocking: 2 分钟, normal: 5 分钟, low: 无超时 | ### Feedback Loop ``` Signal: consult_response { recommendation, confidence, caveats } ↓ Handler: Requester 评估建议的适用性 ├─ confidence ≥ 0.8 → 直接应用 ├─ confidence < 0.8 → 追问一轮或请求 second opinion └─ 与当前方案冲突 → 上报 coordinator 裁决 ↓ Correction: Requester 基于建议调整实现方案,继续原任务 ``` ### Fallback | Condition | Action | |-----------|--------| | 无可用 specialist | 使用 CLI tool (gemini/qwen) 替代 | | 咨询超时 | Requester 用自己的最佳判断继续,标注 unverified | | 建议与当前设计冲突 | 上报 coordinator,触发 CP-4 Consensus | --- ## CP-9: Dual-Track (双轨并行) ### Description 两条工作轨道并行推进,在预定义的同步点(checkpoint)对齐。典型应用:设计与实现并行、前端与后端并行、功能开发与测试开发并行。 ### Entry Condition - 任务可分解为两条相对独立的工作流 - 两条轨道有明确的同步点(interface contract、API spec、schema) - 并行执行能提升整体效率 ### Roles Required `coordinator` → `track-A` agent + `track-B` agent → `coordinator` (sync) ### Workflow ``` Track A (Design/API) Track B (Implementation) ┌────────────┐ ┌────────────┐ │ Phase A-1 │ │ Phase B-1 │ │ API 设计 │ │ 脚手架搭建 │ └─────┬──────┘ └─────┬──────┘ │ │ ▼ ┌──────────┐ ▼ ╔═══════════════╗│ SYNC-1 │╔═══════════════╗ ║ checkpoint 1 ║│ 对齐接口 │║ checkpoint 1 ║ ╚═══════════════╝└──────────┘╚═══════════════╝ │ │ ▼ ▼ ┌────────────┐ ┌────────────┐ │ Phase A-2 │ │ Phase B-2 │ │ 详细设计 │ │ 核心实现 │ └─────┬──────┘ └─────┬──────┘ │ │ ▼ ┌──────────┐ ▼ ╔═══════════════╗│ SYNC-2 │╔═══════════════╗ ║ checkpoint 2 ║│ 集成验证 │║ checkpoint 2 ║ ╚═══════════════╝└──────────┘╚═══════════════╝ ``` ```javascript // Coordinator defines sync points const syncPoints = [ { id: "SYNC-1", name: "Interface Contract", trackA_deliverable: "API schema / interface definitions", trackB_deliverable: "Scaffold with interface stubs", alignment_check: "Both tracks agree on interface signatures" }, { id: "SYNC-2", name: "Integration Verification", trackA_deliverable: "Complete design + test specs", trackB_deliverable: "Core implementation", alignment_check: "Implementation passes design test specs" } ] // Phase execution with sync barriers for (const sync of syncPoints) { // Launch both tracks in parallel const trackATask = TaskCreate({ subject: `TRACK-A-${sync.id}: ${sync.trackA_deliverable}`, owner: "track-a-agent" }) const trackBTask = TaskCreate({ subject: `TRACK-B-${sync.id}: ${sync.trackB_deliverable}`, owner: "track-b-agent" }) // Wait for both tracks to reach sync point waitForBoth(trackATask, trackBTask) // Sync point: alignment check const aligned = checkAlignment(sync.alignment_check, trackAResult, trackBResult) if (!aligned) { // Misalignment detected → correction team_msg({ type: "sync_checkpoint", data: { sync_id: sync.id, status: "MISALIGNED", trackA_state: trackAResult.summary, trackB_state: trackBResult.summary, conflicts: aligned.conflicts }}) // Coordinator mediates: which track adjusts? resolveAlignment(aligned.conflicts, trackATask, trackBTask) } else { team_msg({ type: "sync_checkpoint", data: { sync_id: sync.id, status: "ALIGNED" } }) } } ``` ### Convergence | Element | Value | |---------|-------| | **Success Gate** | 所有 sync point 对齐 + 最终集成验证通过 | | **Max Iterations** | 每个 sync point 最多 2 次对齐尝试 | | **Timeout** | 先到达 sync point 的 track 等待另一个 track,超时 5 分钟 | ### Feedback Loop ``` Signal: sync_checkpoint { status: "MISALIGNED", conflicts } ↓ Handler: Coordinator 分析冲突来源 ├─ Track A 的设计不合理 → 要求 Track A 调整设计 ├─ Track B 偏离了接口约定 → 要求 Track B 重新对齐 └─ 双方都有偏差 → 协商折中方案 ↓ Correction: 被要求调整的 track agent 收到 fix 描述 → 调整产出 → 重新到达 sync point ``` ### Fallback | Condition | Action | |-----------|--------| | 一条 track 完全阻塞 | 另一条 track 暂停等待,触发 CP-7 Swarming 解决阻塞 | | Sync 对齐 2 次失败 | 降级为 CP-1 Linear Pipeline(顺序执行) | | 两条 track 差距过大(一快一慢) | 快 track 预做下一阶段,慢 track 加速 | --- ## CP-10: Post-Mortem (复盘回顾) ### Description 任务完成后,对整个执行过程进行结构化回顾,提取经验教训和改进建议。这些知识可以反馈到项目的 CLAUDE.md 或 core memory 中,提升未来任务的执行质量。 ### Entry Condition - 团队完成一个完整任务周期后(所有 task completed) - 任务执行过程中出现显著问题(多次失败、多次升级) - 用户主动请求回顾 ### Roles Required `coordinator` (发起 + 汇总) → `all agents` (提供各自视角) → `coordinator` (文档化) ### Workflow ``` ┌──────────────────────────────────────────┐ │ POST-MORTEM PHASE │ │ │ │ 1. Coordinator 收集执行数据 │ │ ├─ 任务链完成情况 │ │ ├─ 消息总线历史 │ │ └─ 迭代/升级/失败记录 │ │ │ │ 2. 每个 Agent 提交回顾 │ │ ├─ Planner: 规划准确度 │ │ ├─ Executor: 实现障碍 │ │ └─ Tester: 质量发现 │ │ │ │ 3. Coordinator 汇总 │ │ ├─ 成功因素 │ │ ├─ 改进点 │ │ └─ 行动建议 │ │ │ │ 4. 输出到 memory / CLAUDE.md │ └──────────────────────────────────────────┘ ``` ```javascript // Coordinator initiates post-mortem function conductPostMortem(teamName) { // Step 1: Collect execution data const messages = team_msg({ operation: "list", team: teamName }) const tasks = TaskList() const completedTasks = tasks.filter(t => t.status === 'completed') const failedTasks = tasks.filter(t => t.status === 'in_progress' && t.metadata?.stuck) const executionData = { total_tasks: tasks.length, completed: completedTasks.length, total_messages: messages.length, escalations: messages.filter(m => m.type === 'escalate').length, fix_cycles: messages.filter(m => m.type === 'fix_required').length, errors: messages.filter(m => m.type === 'error').length } // Step 2: Request agent retrospectives (Fan-out) // Each agent answers: What went well? What was difficult? What should change? agents.forEach(agent => { SendMessage({ recipient: agent.name, content: `## Post-Mortem Request 请回顾本次任务,回答: 1. **顺利**: 哪些方面执行顺利? 2. **困难**: 遇到了什么障碍? 3. **建议**: 下次如何改进? 4. **模式**: 发现了什么可复用的模式?`, summary: "Post-mortem request" }) }) // Step 3: Aggregate findings // Collect retro_finding messages from all agents const findings = collectFindings(agents) // Step 4: Generate structured post-mortem report const report = { team: teamName, timestamp: new Date().toISOString(), execution_summary: executionData, what_went_well: findings.flatMap(f => f.went_well), what_was_difficult: findings.flatMap(f => f.difficult), improvement_actions: findings.flatMap(f => f.suggestions), reusable_patterns: findings.flatMap(f => f.patterns), recommendations: generateRecommendations(executionData, findings) } // Step 5: Persist learnings // Option A: Write to session artifacts Write(`${sessionFolder}/post-mortem.json`, JSON.stringify(report, null, 2)) // Option B: Import to core memory (if significant) if (report.reusable_patterns.length > 0) { mcp__ccw-tools__core_memory({ operation: "import", text: `Team ${teamName} post-mortem: ${report.reusable_patterns.join('; ')}` }) } return report } ``` ### Convergence | Element | Value | |---------|-------| | **Success Gate** | 所有 agent 提交回顾 + 报告生成完毕 | | **Max Iterations** | 1 轮(回顾是单次活动) | | **Timeout** | Agent 回顾提交超时 3 分钟,超时则仅用已收到的回顾 | ### Feedback Loop ``` Signal: retro_finding { went_well, difficult, suggestions, patterns } ↓ Handler: Coordinator 分类、去重、优先级排序 ↓ Output: ├─ 高价值 patterns → 写入 core memory / CLAUDE.md ├─ 改进建议 → 记录到项目 guidelines └─ 问题根因 → 作为下次任务的预防措施 ``` **学习闭环**: Post-mortem 的输出反馈到未来任务的 Phase 2 Context Loading,实现持续改进。 ### Fallback | Condition | Action | |-----------|--------| | Agent 无法提供回顾(已关闭) | 从消息总线历史中提取该 agent 的执行数据 | | 无显著 findings | 生成最小报告,不写入 core memory | | 执行数据缺失 | 基于现有数据生成部分报告 | --- ## Pattern Composition (模式组合) ### 常见组合 协作模式可以组合使用,形成更复杂的工作流: ``` 1. Standard Development (标准开发) CP-1 (Pipeline) + CP-2 (Review-Fix) + CP-10 (Post-Mortem) 2. High-Risk Feature (高风险特性) CP-4 (Consensus on design) → CP-6 (Incremental Delivery) → CP-2 (Review-Fix each increment) 3. Complex Investigation (复杂问题调查) CP-3 (Fan-out analysis) → CP-4 (Consensus on diagnosis) → CP-7 (Swarm if needed) 4. Parallel Development (并行开发) CP-9 (Dual-Track) + CP-2 (Review-Fix per track) + CP-10 (Post-Mortem) 5. Expert-Guided Development (专家指导开发) CP-8 (Consulting for design) → CP-1 (Pipeline implementation) → CP-2 (Review-Fix) ``` ### 组合规则 1. **不可重入**: 同一时间只能有一个 CP-7 (Swarming) 实例 2. **可嵌套**: CP-6 的每个增量可以内部使用 CP-2 3. **可升级**: CP-2 内发现无法修复的问题可升级到 CP-5 或 CP-7 4. **可降级**: CP-9 对齐失败可降级到 CP-1 5. **CP-10 始终在最后**: Post-mortem 只在团队任务完成后执行 ### State Machine (模式状态机) ``` ┌──────────────────────────────────────────┐ │ COORDINATOR FSM │ │ │ 新需求 ────→ [PLAN] ──→ [EXECUTE] ──→ [VALIDATE] ──→ [DONE] │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ CP-4? CP-6? CP-2? CP-10 │ Consensus Incremental Review-Fix Post- │ Gate Delivery Cycle Mortem │ │ │ │ │ ▼ ▼ ▼ │ [blocked?] [blocked?] [blocked?] │ │ │ │ │ ▼ ▼ ▼ │ CP-5/CP-7 CP-5/CP-7 CP-5/CP-7 │ Escalate Escalate Escalate │ /Swarm /Swarm /Swarm │ └──────────────────────────────────────────┘ ``` --- ## Coordinator Integration Guide ### Coordinator 如何选择协作模式 ```javascript // In coordinate.md Phase 1 (需求澄清) or Phase 4 (协调主循环) function selectCollaborationPattern(context) { const { taskType, complexity, riskLevel, teamSize, hasExpert } = context // Rule-based selection const patterns = ['CP-1'] // CP-1 is always the base if (riskLevel === 'high') patterns.push('CP-4') // Consensus for risky decisions if (complexity === 'High' && taskType === 'feature') patterns.push('CP-6') // Incremental for large features if (taskType === 'review' || taskType === 'test') patterns.push('CP-2') // Review-Fix for quality if (hasExpert && complexity !== 'Low') patterns.push('CP-8') // Consulting for expertise patterns.push('CP-10') // Post-mortem always included return patterns } ``` ### Coordinator 消息路由表(含协作模式) | 消息类型 | 触发模式 | Coordinator 动作 | |---------|---------|-----------------| | `plan_ready` | CP-1 | 审批 plan → 通知 executor | | `impl_complete` | CP-1/CP-6 | 解锁 TEST/REVIEW 或下一增量 | | `review_result` (BLOCK) | CP-2 | 创建 fix 任务 → 启动 Review-Fix Cycle | | `vote` | CP-4 | 收集投票 → 达到 quorum 则执行决策 | | `escalate` | CP-5 | 路由到上一级处理者 | | `increment_ready` | CP-6 | 验证增量 gate → 允许或拒绝 | | `swarm_join` | CP-7 | 暂停其他任务 → 聚合诊断 | | `consult_request` | CP-8 | 路由到 specialist 或 CLI tool | | `sync_checkpoint` | CP-9 | 检查两条 track 对齐状态 | | `retro_finding` | CP-10 | 收集回顾 → 生成报告 |