
OpenClaw Heartbeat 详解
谁是主动的?谁是被动的?这个问题是 AI agent 设计的首要问题。
今天的 AI agent,绝大多数是被动的。你不说话,它就不动。你去开会,它就发呆。你的收件箱涌进了十封紧急邮件,它一封也看不见。日历上的会议还有五分钟开始,它一个字也不提醒。后台任务早就跑完了,它闷在那里,等你想起来去问。
这种 agent,说到底,是个工具。你拿起来它才有用,你放下去它就是死的。
OpenClaw 的 Heartbeat 要解决的,就是这个问题。
一、Heartbeat 是什么
Heartbeat 是一个闹钟。每隔 30 分钟响一次。响了,agent 就醒。醒了,它照着你事先列好的清单,逐条检查。有事,报告你。没事,回一句 HEARTBEAT_OK,系统把这句话吞掉,你什么也收不到。
就这么简单。
具体流程五步:
- 系统定时器到点,触发一轮对话
- Agent 读取工作区根目录下的
HEARTBEAT.md,这是你给它写的检查清单 - Agent 按清单逐条执行
- 没事,回
HEARTBEAT_OK,系统静默处理,你不被打扰 - 有事,agent 把消息发到你指定的渠道,WhatsApp 也好,Telegram 也好,Slack 也好
这里面最要紧的一条设计:agent 默认是不出声的。只有真正有事才开口。不搞通知轰炸那一套。
检查清单:HEARTBEAT.md
这个文件放在工作区根目录。你写什么,agent 就查什么。
# Heartbeat checklist
- 扫一眼收件箱,有没有紧急邮件
- 看日历,近 2 小时内有没有会议
- 我要是 8 小时以上没动静了,问一声
写短一点。这个文件每次心跳都要塞进 prompt,写长了就是白花 token 钱。
你授权的话,agent 自己也能改这个文件,发现什么值得盯的新项目,自己加上去。
二、Heartbeat 为什么要存在
道理不复杂。
没有 Heartbeat 的时候,你要自己定期查邮箱,自己盯日历,自己看任务跑到哪一步了。你要是想让 agent 帮你盯,就得给每件事单独接一个定时任务。邮箱一个,日历一个,任务队列又一个。事情一多,光维护这些定时任务就够你喝一壶。
而且还有一个根本性的漏洞:两次检查之间发生的事,你是看不到的。agent 也看不到。
Heartbeat 的办法是:一个闹钟,一份清单,一轮对话,把所有检查打包做完。邮箱查了,日历查了,任务进度查了,你要是好几个小时没动,它还能问你一句。一次心跳,全部搞定。
这就把 agent 的性质变了。从"你拿起来用的锤子",变成"替你站岗的哨兵"。
三、钱的问题
Heartbeat 好是好,可是每跳一次就是一轮 agent 对话,对话就要花 token。不管不顾地跑,一个月四百多美金打了水漂。
钱花在哪里?花在对话历史上。
默认配置下,heartbeat 跑在 agent 的主 session 里。主 session 带着全部对话历史。你跟 agent 聊了半天,积累了十万个 token 的上下文,每次心跳就要把这十万个 token 重新发一遍。一天 48 次心跳,48 次重复发送。这就是浪费的根源。
怎么治?
第一刀:隔离 session
设 isolatedSession: true。每次心跳开一个干净的新 session,不带任何历史。输入 token 从十万降到两三千。一个参数,砍掉 95% 以上的成本。这是最狠的一刀。
第二刀:精简上下文
OpenClaw 启动时会往 session 里塞一堆工作区文件做引导。配置文件、文档、各种杂项。heartbeat 巡检用不着这些东西。设 lightContext: true,只保留 HEARTBEAT.md 一个文件,其余全扔。
第三刀:换便宜模型
巡检这种活,不需要最聪明的脑子。"收件箱有没有急件"这种判断,一个本地小模型就够了。设 model: "ollama/llama3.2:1b",成本直接归零。
想看更多实战拆解?
AI、工程与实验,每月 1–2 封。
无垃圾邮件,随时取消。
第四刀:空文件跳过
HEARTBEAT.md 要是只有标题和空行,OpenClaw 连 API 调用都不发,直接跳过。
算一笔账
拿 Claude Sonnet 4.6 来算(输入 $3/百万 token,输出 $15/百万 token),30 分钟一次,一天 48 次:
| 配置 | 每天 | 每月 |
|---|---|---|
| 不优化,带完整历史,约 10 万 input/次 | ~$14.50 | ~$434 |
| 隔离 session + 精简上下文,约 2.5K input/次 | ~$0.42 | ~$12.60 |
| 再加上只在工作时间跑(09:00-22:00) | ~$0.23 | ~$6.90 |
| 本地模型 Llama 3.2 1B | ~$0 | ~$0 |
不优化,月均 434 美金。加两个参数,12 块 6。再限制工作时间,不到 7 块。差了六十倍。
这六十倍的差距,全在一个地方:你有没有砍掉对话历史的重复发送。
四、Heartbeat 和 Cron 的分别
OpenClaw 里还有一个定时机制叫 Cron。两个都是定时跑的,容易搞混。其实性质完全不同。
Heartbeat 是巡逻。每隔一段时间醒来,按清单走一圈,有情况就报,没情况就回去睡。时间不用太精确,漂移几分钟无所谓。重点是把多件事打包在一轮里查完。
Cron 是命令。几点钟做什么事,一秒不差。支持标准 cron 表达式,可以给每个任务配不同的模型,可以在隔离 session 里跑,也可以设一次性提醒。
什么时候用哪个?
| 场景 | 用什么 | 为什么 |
|---|---|---|
| 每半小时扫一次收件箱 | Heartbeat | 跟其他检查打包,省 API 调用 |
| 每天早上 7 点发日报 | Cron | 要求准时 |
| 盯着日历看近期有没有事 | Heartbeat | 周期性感知,不要求精确 |
| 每周一做一次深度代码审查 | Cron(隔离) | 独立重活,可以用更强的模型 |
| 20 分钟后提醒我回电话 | Cron(--at) | 一次性精确提醒 |
| 后台项目健康检查 | Heartbeat | 搭便车,跟其他检查一起跑 |
判断的路径也简单:
要精确时间的,用 Cron。要隔离 session 或者换模型的,用 Cron。能跟别的检查合并的,用 Heartbeat。一次性提醒,用 Cron --at。都不沾边的,默认 Heartbeat。
最好的做法是两个一起用。Heartbeat 管日常巡检,把零碎的检查合成一轮。Cron 管定点任务和重型独立作业。各管各的,互不干涉。
五、几种实际配置
当个人助理用
写一份 HEARTBEAT.md,盯住日常要务:
# Heartbeat checklist
- 扫收件箱有没有紧急邮件
- 看日历,近 2 小时内有没有会议
- 安静超过 8 小时就问候一下
配 target: "last",消息自动发到你最近用的聊天渠道。
当运维监控用
专门拉一个 ops agent,每小时查一次系统状态:
{
id: "ops",
heartbeat: {
every: "1h",
target: "slack",
prompt: "Check server health metrics. If CPU > 80% or disk > 90%, alert immediately."
}
}
当后台哨兵用
不需要给你发消息,只在内部默默记录:
heartbeat: {
every: "30m",
target: "none",
isolatedSession: true,
lightContext: true
}
醒来,查一圈,有情况就写内部笔记,没情况就继续睡。零通知,近零成本。
只在工作时间跑
不想半夜三点被吵醒:
heartbeat: {
every: "30m",
target: "whatsapp",
to: "+15551234567",
activeHours: { start: "09:00", end: "22:00" }
}
不想等下一个周期,手动触发
openclaw system event --text "Check for urgent follow-ups" --mode now
完整配置:Heartbeat + Cron 配合
HEARTBEAT.md(每 30 分钟跑一次):
# Heartbeat checklist
- 扫收件箱有没有紧急邮件
- 看日历近 2 小时内的事件
- 检查待办任务进度
- 安静超过 8 小时就问候一下
Cron 任务(定点定时):
# 每天早上 7 点的晨报
openclaw cron add --name "Morning brief" --cron "0 7 * * *" \
--session isolated --message "..." --announce
# 每周一早 9 点的项目复盘,用更强的模型
openclaw cron add --name "Weekly review" --cron "0 9 * * 1" \
--session isolated --message "..." --model opus
# 一次性提醒,2 小时后
openclaw cron add --name "Call back" --at "2h" \
--session main --system-event "回电话给客户" --wake now
六、总结
Heartbeat 这个机制,说到底就一句话:给 agent 装个闹钟,让它从被动等命令,变成主动盯着干。
设计上克制。没事不吭声,有事才开口。不做消息轰炸机。
成本可控。两个参数砍掉 95% 的开支,换个本地模型更是分文不花。
跟 Cron 各有分工。巡检归 Heartbeat,定点归 Cron,各管一摊,配合着用。
Agent 从工具变成哨兵,靠的就是这个闹钟。
参考来源:
新文章,直接发到你的邮箱。
AI、工程与实验,每月 1–2 封。
无垃圾邮件,随时取消。