最近在配置 OpenClaw(部署节点)的定期邮件检查时,发现 HEARTBEAT.md 配置了但几乎不执行。排查后发现问题出在对 heartbeat 机制的理解上。

HEARTBEAT.md 是什么 链接到标题

OpenClaw 的 heartbeat 机制是约每 30 分钟触发一次的 agent turn,让 AI 在主会话中检查是否有需要处理的事项。它有两种配置方式:

  1. 自然语言格式:用 Markdown 标题+列表描述任务
  2. tasks: 块:YAML 结构化格式

自然语言写法的问题 链接到标题

之前的配置类似这样:

## 定期任务

### 邮件检查(每天 9:00-18:00 每2小时一次)
- 参考 email-cs skill,执行邮件检查流程

这种写法无法被系统级解析。OpenClaw 只是把文件内容作为 prompt 上下文传给 AI,AI 可能偶尔理解并执行,但不是每次都触发。而且 heartbeat-state.json 显示 email: null,说明从未稳定执行过。

tasks: 块的正确格式 链接到标题

2026.4.2 版本后支持结构化的 tasks 块:

tasks:

- name: email-check
  interval: 2h
  prompt: "参考 email-cs skill,执行邮件检查流程"

OpenClaw 会解析 tasks 块,按 interval 追踪任务到期时间,只有到期任务才会包含在 heartbeat prompt 中。

heartbeat vs cron:何时用哪个 链接到标题

场景 推荐 原因
近似时间(如每隔 2 小时) heartbeat 批次检查,节省 API 调用
精确定时(如每天 9:00) cron cron 表达式精确控制

heartbeat 的核心逻辑:

  • 默认每 30 分钟检查一次
  • 任务到期才执行,没到期就跳过
  • 时间不精确,每隔 2 小时实际上是每 30 分钟检查,任务到期则执行

结论 链接到标题

heartbeat 适合非严格时间的批次检查(如邮件、日历、通知);需要精确控制执行时间必须用 cron 系统。