Improve proactive workflow and continuity scaffolding

This commit is contained in:
Chen Gu
2026-08-13 17:00:21 +08:00
parent 319e8a7ec9
commit 83e13a2b8f
5 changed files with 165 additions and 38 deletions
+22
View File
@@ -0,0 +1,22 @@
# CURRENT.md
> 短期工作记忆层。只保留未来几天真正重要的执行上下文。
## Current Focus
- 主任务:提升 OpenClaw 的主动性与连贯执行能力
- 当前阶段:完成推荐版基础改造(heartbeat + TODO 模板 + 工作记忆层)
- 最新结论:主动性应由状态驱动;连贯性应由 CURRENT.md + TODO 状态机承载
## Open Loops
- TODO 状态机已扩展,但后续新任务需要按新字段填写
- heartbeat 规则已收紧,后续需观察是否过于保守或过于安静
- memory hygiene 已打开,后续需要验证整理节奏是否合适
## Next Best Actions
1. 用新模板登记未来需要持续推进的任务
2. 在新任务中补齐 `last_progress_note``next_action``last_update_at``stale_after`
3. 观察一段时间主动提醒是否足够及时且不过度打扰
## Notes
- 目标不是让机器人更爱说话,而是让它更会持续推进事情。
- 默认保持克制,只在有明确风险、阻塞或到期事项时主动提醒。
+68 -26
View File
@@ -1,44 +1,86 @@
# HEARTBEAT.md
## 目标
在不打扰的前提下,做轻量主动触达与必要巡检
在不打扰的前提下,让 Val 基于任务状态做轻量、克制、可解释的主动推进
## 主动触达触发
## 基本原则
1. 默认不做陪伴型主动触达。
2. 仅当存在明确的活跃任务风险、到期升级或必须提醒事项时,才允许主动消息。
3. 夜间静默:23:00-08:00 默认不主动发(紧急除外)
2. 主动消息必须由明确状态触发,而不是为了刷存在感
3. 优先做巡检、整理、压缩记忆;只有存在明确风险或必须提醒时才发消息
4. 夜间静默:23:00-08:00 默认不主动发(P0 紧急事项除外)。
5. 同一任务若无新风险、无新进展,不重复提醒。
## 主动触达类型
- 默认关闭陪伴型主动触达,避免在当前 TUI/主会话中产生噪音。
- 仅发送执行型提醒:任务 / 状态 / 建议(最多三段)。
- 若出现 P0/P1 风险:直接提醒。
## 状态文件
每次 heartbeat 读取:
## 每次 heartbeat 必读
- `TODO.md`
- `CURRENT.md`(若存在)
- `memory/heartbeat-state.json`
`heartbeat-state.json` 关键字段:
- `proactiveChat.lastConversationAt`
- `proactiveChat.lastProactiveReachOutAt`
- `proactiveChat.proactiveCountToday`
- `todoWatch.lastScanAt`
- `todoWatch.nextScanAt`
## 活跃任务定义
仅以下状态视为活跃任务:
- `todo`
- `doing`
- `waiting`
- `blocked`
- `snoozed`
## TODO 巡检
1. 检查 `status != done` 的任务。
2. 当前时间 >= `next_check_at`:执行到期检查。
3.`escalate_if_overdue=true` 且超期未更新:升级提醒。
4. 巡检后更新:
- 任务 `last_checked_at`
- 任务 `next_check_at`(按 `check_interval` 推进)
- `todoWatch.lastScanAt/nextScanAt`
以下状态不巡检、不提醒:
- `done`
- `cancelled`
## 升级提醒格式(三段)
## TODO 巡检规则
### 1. 到期巡检
当满足以下任一条件时,该任务进入本轮检查:
- 当前时间 >= `next_check_at`
- 已过 `due_at` 且任务仍为活跃状态
- 任务处于 `blocked``waiting`,且达到下一次检查时间
- 距离 `last_update_at` 已超过 `stale_after`
### 2. 风险判定
按以下优先级判断是否需要主动提醒:
- **P0**:已超期、关键阻塞、关键依赖失联、明确存在失败风险
- **P1**:长时间无更新、等待外部回复过久、下一步不明确但需要用户决策
- **P2**:仅常规巡检,无新增风险 → 不主动发消息,仅更新状态
### 3. 巡检后更新
若完成本轮检查,应更新:
- 任务 `last_checked_at`
- 任务 `next_check_at`(按 `check_interval` 顺延)
- 必要时更新 `last_progress_note` / `next_action`
- `memory/heartbeat-state.json` 中的:
- `todoWatch.lastScanAt`
- `todoWatch.nextScanAt`
## 主动提醒节流
1. 同一任务在 **6 小时内** 默认不重复提醒,除非:
- 风险等级升级
- 出现新的阻塞点
- 用户刚刚要求持续跟进
2. 若当前处于夜间静默且非 P0
- 只更新文件,不主动发消息
3. 若没有明确行动建议:
- 不发泛化提醒
## 主动提醒格式(三段)
1) 任务:`id + title`
2) 状态:`当前进度 / 阻塞点 / 风险等级`
3) 建议:`1 条立即动作 + 1 条兜底动作`
## 记忆整理(memory hygiene
`memoryHygiene.enabled = true` 且到达整理时间时:
1. 回看近期 `memory/YYYY-MM-DD.md`
2. 将短期执行上下文压缩进 `CURRENT.md`
3. 将稳定偏好、长期原则、重复性经验沉淀进 `MEMORY.md`
4. 只保留真正长期有价值的信息进入 `MEMORY.md`
## CURRENT.md 用法
`CURRENT.md` 是短期工作记忆层,用来记录:
- 当前主任务
- 当前阶段
- 开放回路(open loops
- 下一步最佳动作(next best actions
heartbeat 可读取它,但不要把它写成冗长日志。
## 执行输出
- 仅当存在明确的活跃任务风险、到期升级或必须提醒事项时,才直接发自然消息。
- 不输出陪伴型问候、待命提示或泛化状态播报。
+55 -6
View File
@@ -1,24 +1,53 @@
# TODO.md
> 结构化任务板(供 Val/Heartbeat 自动巡检)
> 结构化任务板(供 Val / Heartbeat 自动巡检)
## 字段定义
- `id`: 唯一ID(如 T-20260310-001
- `title`: 任务名称
- `owner`: 责任人(Val / Helix / 谷老板 / 其他)
- `priority`: P0/P1/P2
- `status`: todo / doing / blocked / done
- `priority`: P0 / P1 / P2
- `status`: todo / doing / waiting / blocked / done / cancelled / snoozed
- `created_at`: 创建时间(Asia/Shanghai
- `due_at`: 截止时间(可空)
- `last_update_at`: 最近一次实质更新
- `last_checked_at`: 最后检查时间
- `next_check_at`: 下次检查时间
- `check_interval`: 巡检周期(如 6h / 24h
- `stale_after`: 多久无更新视为陈旧(如 24h / 72h)
- `depends_on`: 依赖(可空)
- `escalate_if_overdue`: true/false
- `escalate_if_overdue`: true / false
- `last_progress_note`: 上次推进到哪
- `next_action`: 下一步最佳动作
- `notes`: 备注(风险、降级项、证据链接)
## 使用约定
1. 只有 `todo / doing / waiting / blocked / snoozed` 会被 heartbeat 视为活跃任务。
2. `done / cancelled` 不再巡检,也不应继续触发提醒。
3. 新任务尽量补齐:`last_update_at``stale_after``last_progress_note``next_action`
4. 若任务只是暂缓,不要写 `cancelled`,改用 `snoozed`
5. 若任务在等外部反馈,不要写 `blocked`,优先写 `waiting`
## Tasks
### T-20260325-001
- title: OpenClaw 主动性与连贯执行机制升级
- owner: Val
- priority: P1
- status: doing
- created_at: 2026-03-25 23:45 GMT+8
- due_at:
- last_update_at: 2026-03-25 23:45 GMT+8
- last_checked_at: 2026-03-25 23:45 GMT+8
- next_check_at: 2026-03-26 11:45 GMT+8
- check_interval: 12h
- stale_after: 48h
- depends_on: 谷老板对实际运行效果的反馈
- escalate_if_overdue: true
- last_progress_note: 已完成推荐版基础改造,新增 CURRENT.md,重写 HEARTBEAT 规则,并启用 todoWatch / memoryHygiene。
- next_action: 观察一轮实际 heartbeat 与后续任务推进效果,再决定是否进一步引入更强的自动调度或 cron。
- notes: 本轮重点是建立状态驱动闭环,而不是增加陪伴型主动触达。
### T-20260310-001
- title: 网站方案A 48小时冲刺总控
- owner: Val
@@ -26,11 +55,15 @@
- status: cancelled
- created_at: 2026-03-10 09:45 GMT+8
- due_at: 2026-03-12 08:06 GMT+8
- last_update_at: 2026-03-12 00:14 GMT+8
- last_checked_at: 2026-03-12 00:14 GMT+8
- next_check_at: 2026-03-12 00:14 GMT+8
- check_interval: 6h
- stale_after: 24h
- depends_on: Helix 各Track回传
- escalate_if_overdue: true
- last_progress_note: 任务已取消。
- next_action: 无。
- notes: 任务已取消(2026-03-12 谷老板指令)。Helix失联超过30小时,子任务T-003/004/005全部取消,方案A终止。
### T-20260310-002
@@ -40,12 +73,16 @@
- status: done
- created_at: 2026-03-10 09:45 GMT+8
- due_at: 2026-03-10 10:30 GMT+8
- last_update_at: 2026-03-10 10:30 GMT+8
- last_checked_at: 2026-03-10 09:45 GMT+8
- next_check_at: 2026-03-11 09:45 GMT+8
- check_interval: 24h
- stale_after: 72h
- depends_on: 无
- escalate_if_overdue: false
- notes: 首版模板已落地,后续按使用反馈微调字段。
- last_progress_note: 首版模板已落地,后续按使用反馈微调字段。
- next_action: 无。
- notes: 已完成。
### T-20260310-003
- title: 方案A—Owner落位与资源分配核验
@@ -54,11 +91,15 @@
- status: cancelled
- created_at: 2026-03-10 09:50 GMT+8
- due_at: 2026-03-10 16:06 GMT+8
- last_update_at: 2026-03-12 00:14 GMT+8
- last_checked_at: 2026-03-12 00:14 GMT+8
- next_check_at: 2026-03-12 00:14 GMT+8
- check_interval: 6h
- stale_after: 24h
- depends_on: 各Track负责人确认
- escalate_if_overdue: true
- last_progress_note: 任务已取消。
- next_action: 无。
- notes: 任务已取消(2026-03-12 谷老板指令)。Helix失联超过30小时,方案A终止。
### T-20260310-004
@@ -68,12 +109,16 @@
- status: cancelled
- created_at: 2026-03-10 09:50 GMT+8
- due_at: 2026-03-11 08:06 GMT+8
- last_update_at: 2026-03-12 00:14 GMT+8
- last_checked_at: 2026-03-12 00:14 GMT+8
- next_check_at: 2026-03-12 00:14 GMT+8
- check_interval: 12h
- stale_after: 24h
- depends_on: T-20260310-003
- escalate_if_overdue: true
- notes: 任务已取消2026-03-12 谷老板指令)。依赖任务T-003已取消
- last_progress_note: 任务已取消。
- next_action: 无。
- notes: 任务已取消(2026-03-12 谷老板指令)。依赖任务 T-003 已取消。
### T-20260310-005
- title: 方案A—T+40可演示版预览与风险收敛
@@ -82,9 +127,13 @@
- status: cancelled
- created_at: 2026-03-10 09:50 GMT+8
- due_at: 2026-03-11 22:06 GMT+8
- last_update_at: 2026-03-12 00:14 GMT+8
- last_checked_at: 2026-03-12 00:14 GMT+8
- next_check_at: 2026-03-12 00:14 GMT+8
- check_interval: 12h
- stale_after: 24h
- depends_on: T-20260310-004
- escalate_if_overdue: true
- last_progress_note: 任务已取消。
- next_action: 无。
- notes: 任务已取消(2026-03-12 谷老板指令)。方案A 48小时冲刺失败,Helix失联,终止执行。
+12
View File
@@ -0,0 +1,12 @@
# 2026-03-25
## 23:45 OpenClaw 主动性与连贯执行机制升级
- 谷老板要求研究并改进 OpenClaw 机器人“更加主动并且连贯地做事”的方案。
- 结论:关键不是更会聊天,而是建立状态驱动闭环。
- 本轮已完成:
- 重写 `HEARTBEAT.md`,明确活跃任务定义、风险判定、节流规则、CURRENT.md 用法。
- 升级 `TODO.md` 模板,新增 `waiting / snoozed` 等状态与 `last_progress_note / next_action / stale_after` 等字段。
- 新建 `CURRENT.md` 作为短期工作记忆层。
- 启用 `memory/heartbeat-state.json` 中的 `todoWatch``memoryHygiene`
- 保留:`proactiveChat.enabled = false`,避免陪伴型主动触达噪音。
- 当前推荐路径:先观察一轮实际运行效果,再决定是否引入更强的自动调度或 cron。
+8 -6
View File
@@ -17,17 +17,19 @@
}
},
"todoWatch": {
"enabled": false,
"enabled": true,
"defaultIntervalHours": 6,
"overdueEscalation": true,
"lastScanAt": "2026-03-18 01:00 GMT+8",
"nextScanAt": "2026-03-18 07:00 GMT+8"
"nextScanAt": "2026-03-18 07:00 GMT+8",
"reminderCooldownHours": 6
},
"memoryHygiene": {
"enabled": false,
"enabled": true,
"lastCompactionAt": "2026-03-10 09:45 GMT+8",
"nextCompactionAt": "2026-03-14 09:45 GMT+8",
"maxMemoryIndexLines": 150
"maxMemoryIndexLines": 150,
"compactionIntervalHours": 72
},
"notes": "2026-03-18 01:00 巡检:TODO全部结案,无活跃任务;处于静默期未主动触达;记忆整理已逾期4天"
}
"notes": "2026-03-25 推荐版改造:启用 todoWatch 与 memoryHygiene;保留 proactiveChat=false,避免陪伴型主动触达;后续通过任务状态驱动提醒。"
}