OpenClaw 心跳 Heartbeat:默认每 30 分钟的主动巡逻
心跳是 OpenClaw 「主动性」的来源:网关按周期在智能体的主会话里跑一轮,让它有机会把需要关注的事说出来。官方定义:「周期性的智能体轮次」,让模型呈现任何需要关注的事项,同时避免打扰。
运行机制
- 默认间隔 30 分钟(配置了 Anthropic OAuth/令牌验证时自动放宽为 1 小时;显式设置则一切以设置为准,设 0m 即禁用)。
- 底层由定时任务调度器托管:每个启用心跳的智能体在 cron 系统里有一条系统拥有的监控行(cron list --all 里能看到),但你应该编辑 agents 下的心跳配置,而不是直接改那条定时任务。
- 心跳轮次在主会话里跑,带完整对话上下文——这是它和定时任务(默认隔离)最大的差别。
默认提示与响应约定
默认提示词大意:遵循监控暂存清单;周期性任务属于定时任务,别在心跳里重复推断旧任务;没有需要关注的事,就回复固定确认令牌(HEARTBEAT_OK)。
- 固定确认令牌出现在回复开头或结尾时被识别并移除,剩余内容过短就整条丢弃——这就是「没事不打扰」的实现。
- 报警内容不要带确认令牌,正常输出即可投递到你指定的渠道。
常用配置项
{
"agents": {
"defaults": {
"heartbeat": {
"every": "30m",
"target": "last",
"activeHours": { "start": "08:00", "end": "24:00" },
"isolatedSession": true,
"lightContext": true
}
}
}
}
- target:none(默认,不外发)/ last(发给最近联系人)/ 指定渠道 ID;配套 to 可指定具体接收者。
- activeHours:活跃时段,窗口外跳过;注意起止相等会被当成零宽窗口(永远跳过)。
- isolatedSession + lightContext:每轮用新会话、跳过引导文件,大幅降低令牌成本——批量巡检型心跳的省钱标配。
- prompt:整段替换默认提示词,不合并。
- 每智能体覆盖:defaults 配全局,entries 里按智能体覆盖;只要有一个智能体写了心跳块,就只有这些智能体跑心跳。
监控暂存清单
每个心跳监视器有一个私有暂存文档(上限 256 KiB),存「每次巡逻顺手检查什么」:
openclaw cron scratch <任务ID> --set "1. 检查未读邮件 2. 看看日程冲突"
暂存内容存在时附加到心跳提示里;老式 HEARTBEAT.md 文件可以用 doctor --fix 迁移进暂存区。
排查与开销
- 心跳不延长会话新鲜度,也不会把会话保活——空闲过期照常。
- 定时任务忙时心跳自动推迟;禁用调度器(cron 关闭)时计划心跳不跑,手动唤醒仍可用。
- 成本主要来自每 30 分钟一次模型调用:轻上下文 + 隔离会话 + 便宜模型(可用 model 字段单独指定)是社区标准三件套。