OpenClaw 快速上手(八):Heartbeat、Cron,以及怎么让它早上 7 点叫你
OpenClaw 的两个调度原语——Heartbeat 是带脉搏的巡逻员,Cron 是厨房计时器。给一份能跑的早报、周报、竞品监控配置,外加那个会半夜把你叫醒的反模式。
第一次部署 OpenClaw 那两天,我坐在那里一句一句给它发消息。两天过后才意识到:我做的是聊天机器人,不是 Agent。让它真正变成 Agent 的那一刻,是它主动给我发了第一条消息。
这一篇就是讲怎么让那一刻发生。
Heartbeat 和 Cron——脑子里先分清
两个都是定时调度,但根本不是一回事。
| Heartbeat | Cron | |
|---|---|---|
| 触发 | 固定间隔(如每 30 分钟) | 固定时间(如每天 8:30) |
| 默认行为 | “巡一圈,有事再叫我” | “到点就跑,到点就发” |
| 适合 | 抓异常、捡漏 | 日常推送、周期任务 |
| 会话 | 用最近活跃的渠道 | 默认隔离 |
Heartbeat 是巡逻员,Cron 是闹钟。
我自己生产环境两个都用:Cron 负责早 7 点的简报和下午 5 点的收工总结;Heartbeat 每 45 分钟巡一圈"有没有忘掉的 PR"。
先打开
| |
message 必须开。没有它,Agent 没办法主动往外发任何东西。
Heartbeat——巡逻员
{
agents: {
defaults: {
heartbeat: {
every: "45m",
target: "last",
prompt: "Read HEARTBEAT.md if it exists. Follow it strictly. If nothing needs attention, reply HEARTBEAT_OK.",
activeHours: {
start: "09:00",
end: "22:00",
timezone: "Asia/Shanghai"
}
}
}
}
}
关键是 HEARTBEAT_OK 这个约定。你要的是安静的巡逻。默认 prompt 显式告诉 Agent:“没事就闭嘴。” 没这一行,你每 45 分钟收一条"一切正常"——烦人程度刚好如你所想。
HEARTBEAT.md 写真正的规则:
| |
Cron——闹钟
两种方式。CLI 是最稳的(Gateway 重启不丢):
| |
一次性延时(“20 分钟后提醒我"这种):
| |
查看和删除:
| |
Cron 任务持久化到磁盘。Gateway 重启自动恢复。
实际在用的三种模式
早报——Cron,6:47。 天气、当天日程、最活跃的三条 GitHub。发到我昨天最常看的那个渠道。6:47 而不是 7:00 是故意的——大多数人拿起手机的时候,消息已经在那儿了。
仓库巡查——Cron,每小时。 新 PR、新 issue、主分支 CI 失败、依赖安全告警。只在有事时发;“一切正常"会被静音。
竞品监控——Cron,每天 21:00。 Diff 一小份我关心的页面:新博客、新定价档、新 Feature 页面 → 提醒。这个上线两周就回本了。
凌晨三点的反模式
会把你叫醒的那种错:Heartbeat 设了 target: "all",没设 activeHours,HEARTBEAT.md 又没在没事时回 HEARTBEAT_OK。
后果:每 45 分钟,你所在的每一个渠道都被点亮一次"巡查完毕,无异常”。包括凌晨三点。包括那些没让你发的群聊。
两条修法:尊重 activeHours,并把 HEARTBEAT_OK 在规则文件里写成最响亮的默认。
收尾
OpenClaw 的整个意义就在于"Agent 来找你”。Heartbeat 和 Cron 是开这扇门的两把钥匙。该按时干的事用 Cron,出事才该叫你的事用 Heartbeat——别搞混了。