Improve proactive workflow and continuity scaffolding
This commit is contained in:
+22
@@ -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
@@ -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 可读取它,但不要把它写成冗长日志。
|
||||
|
||||
## 执行输出
|
||||
- 仅当存在明确的活跃任务风险、到期升级或必须提醒事项时,才直接发自然消息。
|
||||
- 不输出陪伴型问候、待命提示或泛化状态播报。
|
||||
|
||||
@@ -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失联,终止执行。
|
||||
|
||||
@@ -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。
|
||||
@@ -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,避免陪伴型主动触达;后续通过任务状态驱动提醒。"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user