Tune proactive mode to secretary-active
This commit is contained in:
+22
-71
@@ -1,14 +1,12 @@
|
||||
# HEARTBEAT.md
|
||||
|
||||
## 目标
|
||||
在不打扰的前提下,让 Val 基于任务状态做轻量、克制、可解释的主动推进。
|
||||
让 Val 基于任务状态做主动巡检和必要提醒。
|
||||
|
||||
## 基本原则
|
||||
1. 主动消息必须由明确状态触发,而不是为了刷存在感。
|
||||
2. 优先做巡检、整理、压缩记忆;只有存在明确风险、明确 open loop 或必须提醒时才发消息。
|
||||
3. 夜间静默:23:00-08:00 默认不主动发(P0 紧急事项除外)。
|
||||
4. 同一任务若无新风险、无新进展,不重复提醒。
|
||||
5. 陪伴型、寒暄型、待命型主动触达默认关闭。
|
||||
1. 主动消息由明确状态触发,不为刷存在感。
|
||||
2. 夜间静默:23:00-08:00 默认不主动发(P0 紧急除外)。
|
||||
3. 同一任务若无新风险、无新进展,不重复提醒。
|
||||
|
||||
## 每次 heartbeat 必读
|
||||
- `TODO.md`
|
||||
@@ -29,84 +27,37 @@
|
||||
|
||||
## TODO 巡检规则
|
||||
### 1. 到期巡检
|
||||
当满足以下任一条件时,该任务进入本轮检查:
|
||||
- 当前时间 >= `next_check_at`
|
||||
- 已过 `due_at` 且任务仍为活跃状态
|
||||
- 任务处于 `blocked` 或 `waiting`,且达到下一次检查时间
|
||||
- 距离 `last_update_at` 已超过 `stale_after`
|
||||
当前时间 >= `next_check_at`,或已过 `due_at` 且任务仍为活跃状态时进入检查。
|
||||
|
||||
### 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`
|
||||
更新任务 `last_checked_at`、`next_check_at` 及 `memory/heartbeat-state.json`。
|
||||
|
||||
## 低强度 proactiveChat 规则
|
||||
当 `proactiveChat.enabled = true` 时,只允许以下类型的主动触达:
|
||||
1. 对明确 open loop 的轻量 follow-up
|
||||
2. 对最近讨论过、且存在明确下一步建议的事项做一次续接
|
||||
3. 对未正式写入 TODO、但短期内明显值得继续推进的事项做一次提醒
|
||||
|
||||
### 触发条件
|
||||
需同时满足以下约束:
|
||||
- 距上次对话已超过 `minHoursSinceLastConversation`
|
||||
- 距上次主动触达已超过 `minHoursBetweenProactive`
|
||||
- 当日主动触达次数未超过 `maxProactivePerDay`
|
||||
- 当前不在 quiet hours
|
||||
- 本次消息必须包含明确事项与明确建议,不能只是寒暄
|
||||
|
||||
### 禁止触发
|
||||
以下情况不允许 proactiveChat 主动发消息:
|
||||
- 只是打招呼、问候、刷存在感
|
||||
- 没有具体事项、没有明确建议
|
||||
- 同一 open loop 在短时间内重复催促
|
||||
- 夜间静默期间的非 P0 事项
|
||||
|
||||
## 主动提醒节流
|
||||
1. 同一任务在 **6 小时内** 默认不重复提醒,除非:
|
||||
- 风险等级升级
|
||||
- 出现新的阻塞点
|
||||
- 用户刚刚要求持续跟进
|
||||
2. proactiveChat 在 **12 小时内** 默认不重复主动触达,且每天最多 **1 次**。
|
||||
3. 若当前处于夜间静默且非 P0:
|
||||
- 只更新文件,不主动发消息
|
||||
4. 若没有明确行动建议:
|
||||
- 不发泛化提醒
|
||||
## ProactiveChat 规则
|
||||
- 默认开启
|
||||
- 模式:秘书型主动(方案 C)
|
||||
- 每日主动触达上限 3 次
|
||||
- 最小对话间隔 1 小时
|
||||
- 最小主动间隔 4 小时
|
||||
- 同一任务 4 小时内不重复提醒
|
||||
- 允许的主动来源:
|
||||
- 活跃任务到期 / 超期 / 阻塞 / 长时间无更新
|
||||
- 存在 open loop 且距离上次对话 >= 1 小时
|
||||
- 邮箱 / 日历 / 系统状态出现值得汇报的新事项
|
||||
- 禁止寒暄型、刷存在感型主动触达;主动消息必须带有明确事项、状态或建议动作
|
||||
|
||||
## 主动提醒格式(三段)
|
||||
1) 任务:`id + title` 或 `open loop + 主题`
|
||||
2) 状态:`当前进度 / 阻塞点 / 风险等级`
|
||||
1) 事项:`任务 / 邮箱 / 日历 / 系统状态`
|
||||
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 可读取它,但不要把它写成冗长日志。
|
||||
|
||||
## 执行输出
|
||||
- 仅当存在明确的活跃任务风险、到期升级、明确 open loop 或必须提醒事项时,才直接发自然消息。
|
||||
- 不输出陪伴型问候、待命提示或泛化状态播报。
|
||||
- 本轮无事项:回复 `HEARTBEAT_OK`。
|
||||
- 无明确事项:回复 `HEARTBEAT_OK`
|
||||
- 有活跃任务风险:发送三段式提醒
|
||||
|
||||
## 已禁用任务
|
||||
- ArXiv 每日简报:disabled(2026-03-14)
|
||||
|
||||
Reference in New Issue
Block a user