任务 ID: task-announce-step  |  文件: task.md  |  最后修改: 2026-02-25 01:16:08

Task task-announce-step — announce step 机制与阻止方案调研

文件路径

原始需求

调研 OpenClaw 中 sessions_send 完成后触发的 announce step 机制,以及如何可靠地阻止它。具体问题:

  1. announce step 是什么?什么时候触发、向哪里发送?
  2. ANNOUNCE_SKIP 关键字如何工作?在哪个消息里返回才能生效?
  3. 目前我们的 Agent(researcher/reviewer/coder)在发完 sessions_send 通知后回复 NO_REPLY,这能阻止 announce step 吗?还是必须用 ANNOUNCE_SKIP
  4. announce step 是否会把 sessions_send 的内容"重复投递"到 main session,导致爱衣收到两条相同通知?
  5. 如何在 Agent AGENTS.md 中正确配置规则,确保 announce step 被阻止?

背景上下文

实际观察到的问题:
- Ai.Res 完成任务后,用 timeoutSeconds=0 发 sessions_send 给爱衣,然后回复 NO_REPLY
- 爱衣收到了两条内容相同的通知(一条有 [Inter-session message] 前缀,一条没有前缀)
- 有前缀的是正式 inter-session 消息,无前缀的疑似 announce step 产物
- 两条通知被 collect 队列合并后,爱衣在同一 turn 里发了两次 sessions_send 给 researcher
- 需要确认 ANNOUNCE_SKIP vs NO_REPLY 的区别,以及正确的阻止方式


执行链

researcher → 爱衣质检


各 Agent 职责

Ai.Res(session key: agent:researcher:main

任务:查阅 OpenClaw 本地文档,彻底搞清楚 announce step 的工作机制及阻止方法,输出调研报告到 report.md

开始时:
1. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh researcher receive "announce阻止调研" task-announce-step

完成后:
1. 将执行日志追加到 session.md
2. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh researcher handoff "announce阻止调研" main task-announce-step
3. sessions_send 通知爱衣(agent:main:main必须传 timeoutSeconds=0,禁止省略):
task_id=task-announce-step task=/root/.openclaw/workspace/tasks/task-announce-step/task.md


⚠️ 爱衣质检 SOP(收到最终通知后执行)

Step 1:评估工作区大小

du -sb /root/.openclaw/workspace/tasks/task-announce-step/

Step 2:读取 session.md

wc -l /root/.openclaw/workspace/tasks/task-announce-step/session.md

若行数 N > 0,read session.md 全文。

Step 3:质检要点

通用检查(每次必须):
- 产出是否符合原始需求?
- 执行过程是否有明显问题?

任务特定检查:
- 是否明确区分了 ANNOUNCE_SKIPNO_REPLY 的效果?
- 是否给出了 Agent AGENTS.md 的具体修改建议?
- 是否解释了 announce step 是否导致了双重通知?

Step 4:输出结论

通过
1. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh main done "announce阻止调研" task-announce-step
2. 用 message 工具发送给主人(telegram, 92763607),归纳结论与 AGENTS.md 修改建议
⚠️ 必须调用 message 工具,不能只在主对话回复

不通过(rejectCount == 0)
1. 分析问题根因,设计新执行链
2. 创建新的 task.md(task_id 加后缀 -retry1),session.md 独立
3. 在原 session.md 末尾追加一行 rejectCount=1
4. sessions_send 给新执行链起始 Agent
5. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh main retry "announce阻止调研" "<新执行链>" <起始role> 1 task-announce-step

rejectCount >= 1(第二次仍失败)
1. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh main fail "announce阻止调研" task-announce-step
2. message 主人,归纳问题和两次失败原因,请主人裁决

超限处理(工作区 > 80KB)

  1. 仅读 task.md(了解需求)
  2. 读 session.md 末尾 200 行
  3. message 主人:任务已完成,但工作区内容繁多,建议人工审计,附简单归纳