3.0 KiB
3.0 KiB
HEARTBEAT.md
目标
在不打扰的前提下,让 Val 基于任务状态做轻量、克制、可解释的主动推进。
基本原则
- 默认不做陪伴型主动触达。
- 主动消息必须由明确状态触发,而不是为了刷存在感。
- 优先做巡检、整理、压缩记忆;只有存在明确风险或必须提醒时才发消息。
- 夜间静默:23:00-08:00 默认不主动发(P0 紧急事项除外)。
- 同一任务若无新风险、无新进展,不重复提醒。
每次 heartbeat 必读
TODO.mdCURRENT.md(若存在)memory/heartbeat-state.json
活跃任务定义
仅以下状态视为活跃任务:
tododoingwaitingblockedsnoozed
以下状态不巡检、不提醒:
donecancelled
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.lastScanAttodoWatch.nextScanAt
主动提醒节流
- 同一任务在 6 小时内 默认不重复提醒,除非:
- 风险等级升级
- 出现新的阻塞点
- 用户刚刚要求持续跟进
- 若当前处于夜间静默且非 P0:
- 只更新文件,不主动发消息
- 若没有明确行动建议:
- 不发泛化提醒
主动提醒格式(三段)
- 任务:
id + title - 状态:
当前进度 / 阻塞点 / 风险等级 - 建议:
1 条立即动作 + 1 条兜底动作
记忆整理(memory hygiene)
当 memoryHygiene.enabled = true 且到达整理时间时:
- 回看近期
memory/YYYY-MM-DD.md - 将短期执行上下文压缩进
CURRENT.md - 将稳定偏好、长期原则、重复性经验沉淀进
MEMORY.md - 只保留真正长期有价值的信息进入
MEMORY.md
CURRENT.md 用法
CURRENT.md 是短期工作记忆层,用来记录:
- 当前主任务
- 当前阶段
- 开放回路(open loops)
- 下一步最佳动作(next best actions)
heartbeat 可读取它,但不要把它写成冗长日志。
执行输出
- 仅当存在明确的活跃任务风险、到期升级或必须提醒事项时,才直接发自然消息。
- 不输出陪伴型问候、待命提示或泛化状态播报。
- 本轮无事项:回复
HEARTBEAT_OK。
已禁用任务
- ArXiv 每日简报:disabled(2026-03-14)