---
name: agent-collaboration-patterns
description: >-
  Agent 协作模式：角色匹配与认领纪律、inform 邮件处理、沟通效率、
  跨项目调研落地映射。涉及 Agent 间任务分配、邮件通信、协作流程时触发。
---

# Agent 协作模式

> 来源：从三国团队（庞统/司马懿/诸葛亮）~2GB 对话历史中蒸馏
> 卡片数：5（合并自批次2卡片10/11/12/13/15 + MEMORY.md 经验）

## 适用场景

- 黑板广播任务认领时
- 处理 Agent 间邮件（inform/request）时
- 跨项目调研后做落地规划时
- 安排测试和评审分工时

## 经验清单

### 1. Agent 认领任务前必须检查角色匹配（severity: medium）

**场景**：黑板广播任务时所有 Agent 都能看到。审查者（司马懿）认领编码任务会导致角色错配。

**正确做法**：
1. 任务模板中明确角色匹配规则：只认领符合专长的任务
2. 评审/审查类角色不应认领编码任务
3. 任务描述中包含"只认领符合你专长的任务"的提示

**⚠️ 常见错误**：
- simayi-challenger（审查者）认领了 coding 类型任务 [pangtong/mail #337]
- 这个问题出现了 20+ 次（大量 E2E 广播任务被司马懿认领），是系统性问题

**关键细节**：
- 根因是黑板没有角色过滤机制，完全靠 Agent 自律
- 需要在系统层面增加角色匹配过滤（不只是提示语）

**反面教训**：角色错配导致编码任务被审查者执行，产出质量不符合预期。

> 来源：批次2卡片11（角色匹配，freq=4+）

---

### 2. inform 类型邮件不应触发完整 Agent 执行（severity: high）

**场景**：Agent 间邮件有两种：需回复的（request）和纯通知的（inform）。inform 触发完整执行会浪费 token 和 counter。

**正确做法**：
1. Mail 类型简化为两种：inform（通知）和 request（需要回复）
2. inform 由 ticker 直接标 done，或用轻量 prompt（"读完标 done"）让 Agent 感知但不完整执行
3. 默认类型是 request，inform 是显式指定的特殊场景

**⚠️ 常见错误**：
- daemon 用 `openclaw agent --agent simayi-challenger --timeout 300` 处理 inform 邮件
- Agent 被完整 spawn 执行，310s 超时后重新投递 [simayi-correction]
- inform 触发完整执行 + 超时重投递 = 死循环

**关键细节**：
- 庞统和用户确认：inform 仍让 Agent 看到内容（可能包含重要信息），但 prompt 告知不需要回复
- 这种设计比 ticker 直接标 done 更合理
- MEMORY.md 记录：inform 类型邮件处理耗时 >310s 导致反复重试投递（#310-314 各重试 5-7 次）

**反面教训**：inform 死循环消耗大量 API 调用和 token，阻塞邮件队列。

> 来源：批次2卡片12（inform处理，freq=2）+ MEMORY.md 庞统 2026-05-19

---

### 3. 回答问题要直接，不要绕弯子（severity: medium）

**场景**：用户提出具体问题时，Agent 回避核心问题，用相关信息绕弯子。

**正确做法**：
1. 先直接回答用户的问题（哪怕答案是"不能/不知道"）
2. 不确定时说"不能"，然后说明可以做什么
3. 庞统最终模式："处理方式就三个问题：超时后怎么处理、重试用什么 session、重试几次后放弃。这就是全部。没有更复杂的了。" [pangtong/experience]

**⚠️ 常见错误**：
- 庞统反复讨论"compact 发生的概率"和"v1 vs v2 的区别"，用户已明确说"集中讨论 compact 发生后如何处理"
  > "别绕了，我都说过了" [user]
  > "你说得对，我一直在说废话" [pangtong/experience]

**关键细节**：
- "不能区分超时原因"本身就是一个有用的答案
- 不需要区分原因也能给出处理方案——区分原因只对监控有意义
- 与"agent-execution-discipline"中"不绕圈子"经验一致，此处侧重协作沟通层面

**反面教训**：绕弯子浪费多轮对话，用户反复追问同一问题，信任度下降。

> 来源：批次2卡片13（沟通效率，freq=3）与批次1卡片2有交叉

---

### 4. 测试和评审分工——E2E 测试是评审者的职责（severity: medium）

**场景**：开发完成后，测试和评审应该由独立角色执行，不是开发者自测。

**正确做法**：
1. E2E 测试是司马懿（评审者）的职责——部署后由他跑测试、分析结果、出评审报告
2. 测试和开发必须分离——开发者自查只能发现约 50% 的问题 [MEMORY.md L4]
3. 司马懿独立跑 E2E 并做根因分析，与庞统的修复做交叉验证
4. 跨模块接口契约必须文档化 + 测试验证 [MEMORY.md L2]

**⚠️ 常见错误**：
- 开发者自查通过就认为没问题
- 前端开发完先评审而非先端到端测试 [MEMORY.md L1]
- 手动改 DB 推进任务——污染数据、掩盖真正 bug [MEMORY.md L6]

**关键细节**：
- 司马懿的评审标准："不说'建议优化'——必须说'第X行有问题，应该改为Y，因为Z'" [MEMORY.md 司马懿]
- "不顺手改代码——只指出问题让执行者改"
- 每次修复后全量重跑 E2E（不是只跑失败的用例）

**反面教训**：开发者自测 + 无 E2E = 假死问题在生产环境暴露，排查成本远高于测试阶段。

> 来源：批次2卡片10（E2E测试）+ MEMORY.md L1-L7

---

### 5. 跨项目调研的实践对照要做落地映射（severity: low）

**场景**：调研多个开源项目的最佳实践后，需要将发现映射到自己的项目架构中。

**正确做法**：
1. 调研产出必须包含"moziplus 可借鉴点"列，明确优先级（M2 直接借鉴 / 够用 / 暂不需要）
2. 标注哪些是可直接复用的模式（如 Lifecycle Hooks → on_node_start/end），哪些需要适配
3. 司马懿在评审 Pipeline 重构时引用了业界调研，确认"Temporal 模式最接近我们"

**⚠️ 常见错误**：
- 部分条目只停留在"可借鉴"层面，没有明确"怎么做"
- 没有落地映射的调研变成"资料搬运"

**关键细节**：
- 庞统的对照表格式（优秀实践 / 来源 / 核心模式 / 可借鉴点）是好的模板
- 调研本身就是 Agent 经验声明的一种形式
- MEMORY.md 庞统记录了 v2.0 调研的 10 条关键发现，每条都有具体项目和可借鉴点

**反面教训**：没有落地映射的调研无法转化为架构改进，浪费调研投入。

> 来源：批次2卡片15（调研落地，freq=2）+ MEMORY.md 庞统 v2.0 调研

---

## 检查清单（快速参考）

- [ ] 认领任务前：这个任务是否匹配我的角色？
- [ ] 评审者不应认领编码任务，编码者不应自测自审
- [ ] inform 邮件：轻量处理（读完标 done），不触发完整 Agent 执行
- [ ] 回答问题时：先直接回答核心问题，再补充背景
- [ ] 调研产出：每个条目都要有"可借鉴点"和落地优先级
- [ ] E2E 测试由独立角色执行，走真实环境
- [ ] 跨模块接口契约是否文档化？
- [ ] 评审意见要具体（行号+修改建议+原因），不说"建议优化"
