sync: HP_BOWEI 2026-10-20

This commit is contained in:
Myfro9
2026-10-20 17:39:07 +08:00
parent 798e92717a
commit 7ace9b332b
3 changed files with 147 additions and 0 deletions
+17
View File
@@ -108,6 +108,23 @@ worker 返回后,确认报告文件确实存在;不存在就把 worker 的
用户可能在启动时或中途说"不要停下来问我"、"所有问题主 agent 自己定"。这时调度员把这句话记入 `Rnn-user.md`,并告诉大脑:**ASK_USER 状态不再可用**,worker 报告里"需要用户决定"的点和大脑原本想问的事项全部由大脑裁定。为了用户事后能复核,要求大脑在每轮"分析"里把替用户做的裁定单列为"大脑裁定(原拟问用户)",并在 DONE 的总结里汇总这些裁定及依据。调度员自己也不再用 AskUserQuestion,但仍照常向用户打印名册和进展。
## 30 分钟巡检:不让子 agent 空等
Worker 在等待长任务(仿真、编译、Monitor)时很容易"睡死":等待事件到期或触发后它没有被唤醒,就一直停在那里,没人知道。实际运行里出现过 worker 停了 5 个多小时、仿真早就跑完却没人收尾的情况。所以调度员必须定时巡检,而且巡检结果要带时间打印给用户看。
**为什么是调度员而不是大脑做**:大脑的工具是只读的,看不到 agent 进程、也发不了消息;巡检是"手"的活。但"要不要改派、改派成什么"仍然是大脑的判断——调度员只做唤醒和事实汇报。
### 怎么做
1. **启动大脑之后立刻建一个每 30 分钟的巡检**(CronCreate,`recurring: true`,分钟选 `*/30` 之外的错峰值,如 `7,37 * * * *`;提示词写明"claude-brain 巡检"和运行目录)。cron 只在会话空闲时触发,这正好是 worker 可能空等的时段。到 DONE 时用 CronDelete 删掉。注意 cron 任务 7 天后自动过期。
2. **每次巡检**在工程根目录跑 `scripts/check_agents.sh <运行目录>`:它扫描本会话所有子 agent 的转录文件,列出每个 agent 的 ID、角色描述、最近一次活动时间、空闲分钟数、最后一个动作是否是"等待"(如 Monitor/后台任务),并按阈值标出 `空闲超限`。
3. **把结果带时间戳打印给用户**:一行 `巡检 HH:MM`,然后是 `agents.md` 全表,再加一张"运行中 agent 的空闲时长"小表。大脑在等报告属于正常空闲,不算超限;worker 空闲才算。
4. **发现 worker 空闲 ≥ 30 分钟且报告文件还不存在,立即介入**,按梯度:
- 第一步(唤醒):调度员先用只读手段核实它在等的事情现在怎样了(报告文件、它等待的进程/日志/输出文件是否已到终态),然后 SendMessage 给该 worker:说明"你自 HH:MM 起没有动作"、把核实到的事实告诉它、要求按原任务单继续并写报告。只陈述事实,不替它做任务。在 `log.md` 记一行 `dispatcher | 巡检唤醒 Tk`。
- 第二步(上报):下一次巡检它仍然没有任何新动作,或者它返回了但没有报告,就把它在 `agents.md` 标成 `失败/受阻`,把"worker 无响应,以下为其已有产物/最终回复"写进它的报告文件,然后 SendMessage 给大脑:报告路径 + "该 worker 两次巡检无响应"的事实,让大脑决定改派还是放弃。
- 调度员**不要**自己把活接过来做完,也不要擅自派新 worker——那是大脑的决定。
5. Worker 自己也要少睡:派 worker 的提示词里已经要求用 Monitor 等待而不是 sleep 循环,但 Monitor 最长 30 分钟就到期,worker 必须自己重挂;巡检就是兜这个底的。
### 防止空转
- 默认上限 **15 轮**。到了上限先暂停,把现状和大脑的最新判断告诉用户,问是否继续。