OpenClaw 快速上手(八):Heartbeat、Cron,以及怎么让它早上 7 点叫你

OpenClaw 的两个调度原语——Heartbeat 是带脉搏的巡逻员,Cron 是厨房计时器。给一份能跑的早报、周报、竞品监控配置,外加那个会半夜把你叫醒的反模式。

第一次部署 OpenClaw 那两天,我坐在那里一句一句给它发消息。两天过后才意识到:我做的是聊天机器人,不是 Agent。让它真正变成 Agent 的那一刻,是它主动给我发了第一条消息。

这一篇就是讲怎么让那一刻发生。

Heartbeat 和 Cron——脑子里先分清

两个都是定时调度,但根本不是一回事。

HeartbeatCron
触发固定间隔(如每 30 分钟)固定时间(如每天 8:30)
默认行为“巡一圈,有事再叫我”“到点就跑,到点就发”
适合抓异常、捡漏日常推送、周期任务
会话用最近活跃的渠道默认隔离

Heartbeat 是巡逻员,Cron 是闹钟。

我自己生产环境两个都用:Cron 负责早 7 点的简报和下午 5 点的收工总结;Heartbeat 每 45 分钟巡一圈"有没有忘掉的 PR"。

先打开

1
2
3
4
5
6
{
  "tools": {
    "cron":    { "enabled": true },
    "message": { "enabled": true }
  }
}

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 写真正的规则:

1
2
3
4
5
6
# Heartbeat 规则

## 每次巡逻
-`gh pr list --search "review-requested:@me"`,非空就总结。
-`mail-count` skill 看邮箱,超 20 封就提醒。
- 否则:回 HEARTBEAT_OK。

Cron——闹钟

两种方式。CLI 是最稳的(Gateway 重启不丢):

1
2
3
4
5
6
7
openclaw cron add \
  --name "morning-brief" \
  --cron "30 7 * * *" \
  --tz "Asia/Shanghai" \
  --session main \
  --system-event "生成今日简报:天气、日程、PR/issue 前三条" \
  --wake now

一次性延时(“20 分钟后提醒我"这种):

1
2
3
4
5
openclaw cron add \
  --name "standup-prep" \
  --at "20m" \
  --session main \
  --system-event "20 分钟后开站会,把昨天的工作总结一下"

查看和删除:

1
2
openclaw cron list
openclaw cron delete --name morning-brief

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——别搞混了。

翻完了?

去 GitHub 关注一下,新一篇通常隔一周就到。

GitHub