任务 ID: task-audit-002  |  文件: session.md  |  最后修改: 2026-02-22 19:40:01

Task audit-002 会话记录

元信息


[爱衣] 任务说明

这是对多 Agent 架构方案的第二轮审计

第一轮审计发现的问题已修复(v1.4),修复内容:
1. ✅ 增加 currentRound 字段,任何 Agent 均可更新
2. ✅ 明确 active.json 维护责任(爱衣负责)
3. ✅ Agent 可互相讨论直到达成共识,不只有爱衣能驳回
4. ✅ 任务工作区改为持久化路径(workspace/tasks/)
5. ✅ 并发写入保护方案(第一阶段串行,第三阶段引入 flock)
6. ✅ 通知格式标准化

请重点审查:
1. 修复是否完整、是否引入新问题?
2. Agent 互相讨论的机制是否有死循环风险?
3. 还有什么遗漏的边界情况?

方案文档:/root/.openclaw/workspace/memory/docs/multi-agent-plan.md

完成后追加审计报告到本文件,更新 currentRound 和 lastUpdated,然后 sessions_send 通知爱衣(agent:main:main,timeoutSeconds=0):「审计完成 ✅ task_id=audit-002」。之后静默。


[test-agent] 第二轮审计报告

时间:2026-02-22 19:39 GMT+8
currentRound → 2
lastUpdated:2026-02-22 19:39


一、第一轮修复验证

逐条核查 v1.3 → v1.4 修复项:

修复项 验证结果 备注
✅ 增加 currentRound 字段 ✅ 已完整实现 格式清晰,任何 Agent 均可更新
✅ active.json 维护责任明确 ✅ 已明确由爱衣负责 创建/完成/清理均有说明
✅ Agent 互相讨论机制 ✅ 已引入,coder ↔ reviewer 可直接讨论 需关注死循环风险(见下)
✅ 任务工作区改持久化 ✅ 改为 workspace/tasks/ 解决重启丢失问题
✅ 并发写入保护 ✅ 提供了分文件 + flock 两种方案 第一阶段串行安全
✅ 通知格式标准化 ✅ 格式清晰,含 task_id/step/round/nextAgent 完整

总体评价:6 项修复全部落地,无遗漏。


二、新机制:Agent 互相讨论 — 死循环风险分析

这是 v1.4 的核心新增点,也是最需要关注的风险区。

场景分析:

coder 提交代码
  → reviewer 提出异议 (currentRound → 3)
  → coder 修改后再次提交 (currentRound → 4)
  → reviewer 仍不满意,再次异议 (currentRound → 5)
  → coder 认为 reviewer 要求不合理,拒绝修改 (currentRound → 6)
  → reviewer 再次异议...

当前方案的保护: maxRound 上限 + 超轮次通知爱衣介入。

⚠️ 发现的漏洞:

2.1 maxRound 上限在模板中写死为 4,但 section 三说明「最大讨论轮次:4(任意两个 Agent 之间)」——这个数字是否太小?
- coder 提交(1) → reviewer 异议(2) → coder 修改(3) → reviewer 确认(4) → 爱衣确认(5)
- 正常流程就可能消耗 4-5 轮,maxRound=4 可能在正常任务中就触发爱衣介入。
- 建议:maxRound 按任务复杂度设置(简单=4,中等=6,复杂=8),在 session.md 头部显式写明。

2.2 超轮次后的流程存在二义性
方案说:「任何 Agent 发现 currentRound 超过 maxRound 时,sessions_send 通知爱衣」
- 但此时 coder 和 reviewer 是否应该停止继续讨论?还是继续等爱衣响应?
- 如果两个 Agent 同时发现超轮次,可能各自都通知爱衣,造成重复通知。
- 建议:明确规定「发现超轮次的当前发言 Agent 追加通知后停止,等待爱衣介入,不再主动通知下一个 Agent」。

2.3 coder ↔ reviewer 互相通知的对象未在方案中列出
方案说「coder ↔ reviewer 可以直接来回讨论(互相 sessions_send 通知对方)」,但 session keys 未定义。
- 建议:在执行计划阶段一中明确写出各 Agent 的 session key(如 agent:coder:mainagent:reviewer:main),避免创建时遗漏配置。


三、遗漏边界情况

3.1 Agent session 不存在时的处理
如果爱衣向 coder 发送任务,但 coder session 尚未启动(如 openclaw 刚重启),sessions_send 会失败。
- 当前方案无此异常处理。
- 建议:爱衣在发送前可先 sessions_list 检查目标 session 是否存在;若不存在,message 通知主人。

3.2 session.md 被意外清空或损坏
文件追加操作(cat >>)在磁盘满等极端情况下可能失败,但 Agent 已发送了 sessions_send 通知,导致下一个 Agent 读到空/损坏文件。
- 建议:各 Agent 追加文件后做简单校验(如检查文件大小是否增大),确认成功后再发通知。

3.3 heartbeat 检测与任务执行中的竞争
heartbeat 检测「30分钟无更新」时,可能任务正在执行(Agent 读文件、思考、写回答)但尚未更新 lastUpdated。
- 当前方案 30 分钟阈值应能覆盖大多数任务执行时间,风险较低。
- 建议:可在 session.md 增加 lockedBy 字段,Agent 开始执行时写入自己 ID,完成后清空,heartbeat 检测到 lockedBy 非空时延迟判断。(此项为低优先级,当前阈值够用。)

3.4 任务清理策略的「提炼记忆」步骤无明确触发机制
方案提到「清理前过 session.md 提炼记忆」,但 heartbeat 自动清理时,这个提炼步骤如何触发?
- 如果 heartbeat 自动删除,爱衣不一定有机会提炼。
- 建议:heartbeat 只标记 status=pending-cleanup,不自动删除;爱衣在有空时(或下次 heartbeat)看到 pending-cleanup 任务,主动提炼后再删除。


四、改进建议总结

优先级 建议 影响
🔴 高 maxRound 按复杂度动态设置(4/6/8),在 session.md 头部显式写明 防止正常任务误触发上报
🔴 高 明确超轮次后当前 Agent 停止,不再主动通知下一方 防止重复通知和死循环
🟡 中 执行计划阶段一中明确列出各 Agent 的 session key 避免配置遗漏
🟡 中 爱衣发任务前检查目标 session 是否存在 提升健壮性
🟡 中 清理策略改为 pending-cleanup 标记,爱衣手动确认后删除 防止提炼遗漏
🟢 低 文件追加后校验文件大小 极端情况保护
🟢 低 lockedBy 字段(heartbeat 竞争保护) 当前 30min 阈值已够用

五、总体评价

v1.4 相比 v1.3 质量显著提升,第一轮问题全部修复。

核心机制(session.md 协作 + 持久化路径 + 通知格式)已足够清晰,可以开始建立 coder Agent。

阶段一执行前必须处理(🔴 高优先级):
1. 在 session.md 模板中将 maxRound 改为按复杂度动态设置,默认中等=6
2. 在共享 SOUL.md 规则中补充「超轮次后当前 Agent 停止等待爱衣,不通知下一方」

阶段一执行时顺带处理(🟡 中优先级):
3. 在 openclaw.json 注册 coder/reviewer 时,将 session key 明确写入本文档
4. 将清理策略更新为 pending-cleanup 两步确认

结论:方案整体成熟,可以推进。建议修复 2 个高优先级问题后,立即开始阶段一。