Skip to main content
__HEADING_0__Cron与心跳:何时使用哪种机制 心跳和Cron作业都允许你按计划运行任务。本指南将帮助你为自己的用例选择合适的机制。

快速决策指南

用例推荐原因
每30分钟检查一次收件箱心跳可与其他检查批量处理,具备上下文感知能力
每天早上9点准时发送日报Cron(隔离)需要精确的定时
监控日历以获取即将到来的事件心跳非常适合周期性状态感知
每周运行深度分析Cron(隔离)独立任务,可使用不同模型
20分钟后提醒我Cron(主会话,--at一次性任务,定时精准
后台项目健康检查心跳利用现有周期进行附加操作

心跳:周期性状态感知

心跳在主会话中以固定间隔(默认30分钟)运行。其设计目的是让代理定期检查各项状态,并及时上报重要信息。

何时使用心跳

  • 多项周期性检查:与其为收件箱、日历、天气、通知和项目状态分别配置5个独立的Cron作业,不如采用统一的心跳机制,批量处理所有这些任务。
  • 上下文感知决策:代理能够全面掌握主会话的完整上下文,从而智能判断哪些事项紧急、哪些可以延后处理。
  • 对话连续性:心跳在共享同一会话的基础上运行,使代理能够记住最近的对话,并自然地展开后续跟进。
  • 低开销监控:只需一个心跳即可替代多个小型轮询任务。

心跳的优势

  • 批量处理多项检查:只需一次代理调用,即可同时检查收件箱、日历和通知。
  • 减少API调用:与五个独立的Cron作业相比,单个心跳更加经济高效。
  • 上下文感知:代理能够了解你当前的工作内容,并据此智能地为相关事项分配优先级。
  • 智能抑制:如果没有需要关注的事项,代理会回复 HEARTBEAT_OK,且不会发送任何消息。
  • 自然的定时机制:定时可能会根据队列负载略有偏差,但这在大多数监控场景中是可以接受的。

心跳示例:HEARTBEAT.md检查清单

# Heartbeat checklist

- Check email for urgent messages
- Review calendar for events in next 2 hours
- If a background task finished, summarize results
- If idle for 8+ hours, send a brief check-in
代理在每次心跳时读取此清单,并在一次调用中处理所有事项。

配置心跳

{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",        // interval
        target: "last",      // where to deliver alerts
        activeHours: { start: "08:00", end: "22:00" }  // optional
      }
    }
  }
}
完整配置请参见 心跳 __HEADING_0__Cron:精确调度 Cron作业在精确的时间运行,并且可以在隔离的会话中执行,而不会影响主会话的上下文。

何时使用Cron

  • 需要精确的定时:“每周一上午9:00发送”(而不是“大约9点”)。
  • 独立任务:不需要对话上下文的任务。
  • 不同的模型或思维模式:需要更强大模型的重型分析任务。
  • 一次性提醒:“20分钟后提醒我”,使用 --at
  • 高频或嘈杂的任务:如果任务过于频繁,可能会干扰主会话历史记录。
  • 外部触发:无论代理是否处于活动状态,任务都应独立运行。
__HEADING_0__Cron的优势
  • 精确的定时:支持带时区的5字段Cron表达式。
  • 会话隔离:在 cron:<jobId> 中运行,不会污染主历史记录。
  • 模型覆盖:每个作业可以使用更便宜或更强大的模型。
  • 交付控制:可以直接发送到某个渠道;默认仍会在主会话中发布摘要(可配置)。
  • 无需代理上下文:即使主会话空闲或被压缩,也能正常运行。
  • 支持一次性任务--at 可用于精确的未来时间戳。
__HEADING_0__Cron示例:每日晨间简报
openclaw cron add \
  --name "Morning briefing" \
  --cron "0 7 * * *" \
  --tz "America/New_York" \
  --session isolated \
  --message "Generate today's briefing: weather, calendar, top emails, news summary." \
  --model opus \
  --deliver \
  --channel whatsapp \
  --to "+15551234567"
此任务将于纽约时间每天早上7:00准时执行,使用Opus模型以确保质量,并直接发送到WhatsApp。 __HEADING_0__Cron示例:一次性提醒
openclaw cron add \
  --name "Meeting reminder" \
  --at "20m" \
  --session main \
  --system-event "Reminder: standup meeting starts in 10 minutes." \
  --wake now \
  --delete-after-run
有关完整的CLI参考,请参阅 Cron作业

决策流程图

Does the task need to run at an EXACT time?
  YES -> Use cron
  NO  -> Continue...

Does the task need isolation from main session?
  YES -> Use cron (isolated)
  NO  -> Continue...

Can this task be batched with other periodic checks?
  YES -> Use heartbeat (add to HEARTBEAT.md)
  NO  -> Use cron

Is this a one-shot reminder?
  YES -> Use cron with --at
  NO  -> Continue...

Does it need a different model or thinking level?
  YES -> Use cron (isolated) with --model/--thinking
  NO  -> Use heartbeat

结合使用两者

最高效的设置是同时使用两者
  1. 心跳每30分钟批量处理例行监控任务(收件箱、日历、通知等)。
  2. Cron负责执行精确的定时任务(日报、周报)以及一次性提醒。

示例:高效自动化设置

HEARTBEAT.md(每30分钟检查一次):
# Heartbeat checklist
- Scan inbox for urgent emails
- Check calendar for events in next 2h
- Review any pending tasks
- Light check-in if quiet for 8+ hours
Cron作业(精确定时):
# Daily morning briefing at 7am
openclaw cron add --name "Morning brief" --cron "0 7 * * *" --session isolated --message "..." --deliver

# Weekly project review on Mondays at 9am
openclaw cron add --name "Weekly review" --cron "0 9 * * 1" --session isolated --message "..." --model opus

# One-shot reminder
openclaw cron add --name "Call back" --at "2h" --session main --system-event "Call back the client" --wake now

龙虾:带有审批的确定性工作流

Lobster是一种用于多步骤工具管道的工作流运行时,特别适用于需要确定性执行和显式审批的场景。 当任务涉及多步代理调用,并且你需要一个可恢复的工作流以及人工检查点时,就该使用Lobster。

龙虾的适用场景

  • 多步骤自动化:你需要一个固定的工具调用流水线,而不是一次性的提示。
  • 审批关卡:副作用应在你批准后暂停,然后在你再次批准时继续。
  • 可恢复运行:在暂停后,工作流可以从中断处继续执行,而无需重新运行之前的步骤。

如何与心跳和Cron配合使用

  • 心跳/Cron决定何时运行。
  • Lobster定义运行开始后执行的步骤
对于计划的工作流,使用Cron或心跳触发代理调用Lobster。 对于临时工作流,则直接调用Lobster。

操作注意事项(来自代码)

  • Lobster以本地子进程lobsterCLI)的形式在工具模式下运行,并返回一个JSON封装
  • 如果工具返回 needs_approval ,则需使用 resumeTokenapprove 标志继续运行。
  • 工具是可选插件;建议通过 tools.alsoAllow: ["lobster"] 以附加方式启用。
  • 如果传递 lobsterPath ,则必须是绝对路径
完整用法和示例请参见 龙虾

主会话与隔离会话

心跳和Cron都可以与主会话交互,但方式有所不同:
心跳Cron(主会话)Cron(隔离)
会话主会话主会话(通过系统事件)cron:<jobId>
历史共享共享每次运行都是全新历史
上下文完整完整无(从干净状态开始)
模型主会话模型主会话模型可覆盖
输出若非 HEARTBEAT_OK ,则会送达心跳提示 + 事件摘要发布到主会话

何时使用主会话Cron

当您希望以下情况发生时,请使用 --session main 并搭配 --system-event
  • 提醒/事件显示在主会话上下文中
  • 代理在下次心跳时以完整上下文处理该事件
  • 无需单独的隔离运行
openclaw cron add \
  --name "Check project" \
  --every "4h" \
  --session main \
  --system-event "Time for a project health check" \
  --wake now

何时使用隔离Cron

当您希望以下情况发生时,请使用 --session isolated
  • 从干净状态开始,不携带先前的上下文
  • 使用不同的模型或思维设置
  • 输出直接发送到某个渠道(默认仍会在主会话中发布摘要)
  • 历史记录不会污染主会话
openclaw cron add \
  --name "Deep analysis" \
  --cron "0 6 * * 0" \
  --session isolated \
  --message "Weekly codebase analysis..." \
  --model opus \
  --thinking high \
  --deliver

成本考量

机制成本概况
心跳每N分钟调用一次;成本随HEARTBEAT.md大小而变化
Cron(主会话)在下次心跳时添加事件(无需隔离运行)
Cron(隔离)每个作业都需要一次完整的代理调用;可使用更便宜的模型
提示
  • 保持 HEARTBEAT.md 简短,以最大限度降低令牌开销。
  • 将相似的检查合并到心跳中,而不是使用多个Cron作业。
  • 如果只需内部处理,可在心跳中使用 target: "none"
  • 对于常规任务,可使用隔离Cron并搭配更便宜的模型。

相关内容