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
+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 可读取它,但不要把它写成冗长日志。
## 执行输出
- 仅当存在明确的活跃任务风险、到期升级或必须提醒事项时,才直接发自然消息。
- 不输出陪伴型问候、待命提示或泛化状态播报。