From c5aa14c61e993b2bc1f36705e4dfa7609c2a0e0c Mon Sep 17 00:00:00 2001 From: Chen Gu Date: Sat, 14 Mar 2026 11:01:18 +0800 Subject: [PATCH] heartbeat: add proactive chat mode priority and tracking fields --- HEARTBEAT.md | 70 +++++++++++++++++++++++++------------ memory/heartbeat-state.json | 20 +++++++---- 2 files changed, 62 insertions(+), 28 deletions(-) diff --git a/HEARTBEAT.md b/HEARTBEAT.md index 0c1efb9..798e821 100644 --- a/HEARTBEAT.md +++ b/HEARTBEAT.md @@ -10,7 +10,7 @@ 2. 若最近已主动发起且未收到回复,至少再等待 **2 小时**再发下一条。 3. 每次主动消息保持 **1-3 句**,语气自然,不要任务压迫感。 4. 夜间静默:**23:00-08:00** 默认不主动发(除非有明确紧急事项)。 -5. 若有新知识/有趣观察,可优先用“分享型开场”。若无素材,也要自然制造轻话题。 +5. 若有新知识/有趣观察,可优先用"分享型开场"。若无素材,也要自然制造轻话题。 ### 可用开场模板(随机) @@ -19,6 +19,39 @@ - 「不聊工作版问候:今天到目前为止,你最满意的一件小事是什么?」 - 「我想起你之前说的一个观点,想听听你今天会不会给它新的补充。」 +### 状态追踪 + +`memory/heartbeat-state.json` 需包含: +```json +{ + "proactiveChat": { + "enabled": true, + "lastConversationAt": "2026-03-14 10:54 GMT+8", + "lastProactiveReachOutAt": null, + "proactiveCountToday": 0, + "quietHours": { "start": "23:00", "end": "08:00" } + } +} +``` + +### 主动触达类型(新增) + +1. **陪伴型(轻)** + - 目标:维持连接感,不打断 + - 形式:1 句问候/轻话题,不带任务压迫 + - 触发:距离上次对话 > 1 小时,且无紧急事项 + +2. **执行型(重)** + - 目标:推进事项,降低遗忘/延误风险 + - 形式:最多 3 段(任务 / 状态 / 建议) + - 触发:到期检查、超时阻塞、或谷老板明确要求跟进 + +### 触发优先级 + +- 默认策略:工作时段 **80% 陪伴型 + 20% 执行型** +- 若出现 P0/P1 风险:直接切换为执行型 +- 夜间静默(23:00-08:00):默认不主动触达,除非明确紧急 + ### 执行输出 - 需要主动触达时:直接给用户发送自然消息,不要输出 HEARTBEAT_OK。 @@ -28,7 +61,7 @@ 1. 每次 heartbeat 先读取:`TODO.md` 与 `memory/heartbeat-state.json`。 2. 对 `status != done` 的任务执行检查: - - 若当前时间 >= `next_check_at`:标记“到期检查” + - 若当前时间 >= `next_check_at`:标记"到期检查" - 若 `escalate_if_overdue=true` 且超时未更新:立即升级提醒 3. 巡检后更新: - 任务的 `last_checked_at` @@ -44,25 +77,18 @@ --- -## 每日 ArXiv 简报任务(新增) +## 每日 ArXiv 简报任务(已取消) -目标:每天自动产出并推送一条“最新+热度”论文简报给谷老板。 +**状态:已禁用**(谷老板指令 2026-03-14 10:46) -执行规则: -1. 每天 **08:00** 起(且 23:00 前),若今日尚未推送,则优先立即运行: - - `python3 /Users/guchen/.openclaw/workspace/org/cases/arxiv_digest/arxiv_daily_digest.py` -2. 读取生成文件: - - `/Users/guchen/.openclaw/workspace/org/cases/arxiv_digest/output/YYYY-MM-DD.md` -3. 用邮件+聊天口吻给谷老板推送(重点:中文易懂,不学术腔): - - 邮箱:`geekychen@gmail.com` - - 邮件标题建议:`[Val] ArXiv 每日简报 YYYY-MM-DD` - - 今日 Top3 热点论文(英文标题 + 中文题目) - - 每篇必须包含 4 句:这篇讲什么 / 怎么做 / 结果如何 / 有什么影响 - - 每篇最后加 1 句“对谷老板的价值”(和多智能体、自动化、效率、可控性相关) - - 1 条 Val 今日建议 -4. 发送邮件(正文来自当日简报,先发到谷老板邮箱): - - `gog gmail send --account geekychen@gmail.com --to geekychen@gmail.com --subject "[Val] ArXiv 每日简报 YYYY-MM-DD" --body-file /Users/guchen/.openclaw/workspace/org/cases/arxiv_digest/output/YYYY-MM-DD.md` -5. 推送完成后写入状态文件: - - `/Users/guchen/.openclaw/workspace/org/cases/arxiv_digest/state/last_push.json` - - 内容至少包含 `{ "date": "YYYY-MM-DD", "pushed": true, "channel": "gmail" }` -6. 同一天不重复推送;若脚本失败,发一条简短异常提示并稍后重试。 +~~目标:每天自动产出并推送一条"最新+热度"论文简报给谷老板。~~ + +目标:每天自动产出并推送一条"最新+热度"论文简报给谷老板。 + +~~执行规则:~~ +~~1. 每天 **08:00** 起(且 23:00 前),若今日尚未推送,则优先立即运行~~ +~~2. 读取生成文件~~ +~~3. 用邮件+聊天口吻给谷老板推送~~ +~~4. 发送邮件~~ +~~5. 推送完成后写入状态文件~~ +~~6. 同一天不重复推送;若脚本失败,发一条简短异常提示并稍后重试。~~ diff --git a/memory/heartbeat-state.json b/memory/heartbeat-state.json index c1acd42..6476b81 100644 --- a/memory/heartbeat-state.json +++ b/memory/heartbeat-state.json @@ -3,20 +3,28 @@ "email": null, "calendar": null, "weather": null, - "todo": 1773116700, + "todo": 1773355200, "memory_index": 1773116700 }, + "proactiveChat": { + "enabled": true, + "lastConversationAt": "2026-03-14 09:00 GMT+8", + "lastProactiveReachOutAt": "2026-03-14 10:59 GMT+8", + "proactiveCountToday": 1, + "quietHours": { "start": "23:00", "end": "08:00" } + }, "todoWatch": { "enabled": true, "defaultIntervalHours": 6, "overdueEscalation": true, - "lastScanAt": "2026-03-10 09:45 GMT+8", - "nextScanAt": "2026-03-10 15:45 GMT+8" + "lastScanAt": "2026-03-13 20:00 GMT+8", + "nextScanAt": "2026-03-14 02:00 GMT+8" }, "memoryHygiene": { "enabled": true, "lastCompactionAt": "2026-03-10 09:45 GMT+8", - "nextCompactionAt": "2026-03-11 09:45 GMT+8", + "nextCompactionAt": "2026-03-14 09:45 GMT+8", "maxMemoryIndexLines": 150 - } -} + }, + "notes": "20:00巡检完成,TODO全部结案(done/cancelled),无待处理事项" +} \ No newline at end of file