Cron 与心跳:何时使用各自

心跳和定时任务都可以让您按计划运行任务。本指南帮助您为您的用例选择正确的机制?

快速决策指?

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

心跳:周期性感?

心跳在固定间隔(默认?0 分钟)在**主会?*中运行。它们专为代理检查事物并显示重要内容而设计?

何时使用心跳

  • **多个定期检?*:与其使?5 个单独的定时任务检查收件箱、日历、天气、通知和项目状态,不如将它们全部批处理到一个心跳中?
  • **上下文感知决?*:代理拥有完整的主会话上下文,因此可以智能地决定什么是紧急的,什么可以等待?
  • **对话连续?*:心跳运行共享同一个会话,因此代理记得最近的对话,可以自然地跟进?
  • 低开销监控:一个心跳取代许多小型轮询任务?

心跳优势

  • **批量多个检?*:一个代理回合可以一起查看收件箱、日历和通知?
  • 减少 API 调用:单个心跳比 5 个独立定时任务更便宜?
  • **上下文感?*:代理知道您一直在做什么,可以相应地确定优先级?
  • 智能抑制:如果不需要关注,代理会回?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", // 间隔
        target: "last", // 明确的告警投递目标(默认?"none"?
        activeHours: { start: "08:00", end: "22:00" }, // 可?
      },
    },
  },
}

请参阅心跳获取完整配置?

Cron:精确调?

定时任务在精确时间运行,可以在不影响主上下文的情况下在独立会话中运行? 重复的整点计划会自动通过每任务确定性偏移在 0-5 分钟窗口内分散?

何时使用 cron

  • **需要精确时?*?每周一上午 9:00 发送这?(不?大约 9 ?)?
  • 独立任务:不需要对话上下文的任务?
  • **不同模型/思?*:值得使用更强大模型的重型分析?
  • **一次性提?*?20 分钟后提醒我”,使?--at?
  • **嘈杂/频繁的任?*:会弄乱主会话历史的任务?
  • 外部触发:无论代理是否在其他地方活跃都应该独立运行的任务?

Cron 优势

  • 精确时间:支持时区的 5 字段?6 字段(秒)cron 表达式?
  • 内置负载分散:重复的整点计划默认最多分?5 分钟?
  • **每任务控?*:用 --stagger <duration> 覆盖抖动或用 --exact 强制精确时间?
  • 会话隔离:在 cron:<jobId> 中运行,不会污染主历史?
  • 模型覆盖:每个任务可以使用更便宜或更强大的模型?
  • **投递控?*:独立任务默认为 announce(摘要);根据需要选择 none?
  • **即时投?*:宣布模式直接发布,无需等待心跳?
  • 不需要代理上下文:即使主会话空闲或压缩也会运行?
  • **一次性支?*:用于精确未来时间戳?--at?

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 \
  --announce \
  --channel whatsapp \
  --to "+15551234567"

这在纽约时间上午 7:00 精确运行,使?Opus 以获得质量,并直接将摘要宣布?WhatsApp?

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
  ?-> 继续...

任务需要与主会话隔离吗?
  ?-> 使用 cron(独立)
  ?-> 继续...

这个任务可以与其他定期检查批量处理吗?
  ?-> 使用心跳(添加到 HEARTBEAT.md?
  ?-> 使用 cron

这是一次性提醒吗?
  ?-> 使用?--at ?cron
  ?-> 继续...

它需要不同的模型或思考级别吗?
  ?-> 使用?--model/--thinking ?cron(独立)
  ?-> 使用心跳

两者结?

最高效的设?*同时使用**两者:

  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

定时任务(精确时间)?

# 每天上午 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

# 一次性提?
openclaw cron add --name "Call back" --at "2h" --session main --system-event "Call back the client" --wake now

Lobster:带审批的确定性工作流

Lobster 是需要确定性执行和明确审批?*多步骤工具管?*的工作流运行时? 当任务不仅仅是单个代理回合,且您想要具有人工检查点的可恢复工作流时使用它?

Lobster 适合的场?

  • 多步骤自动化:您需要固定的工具调用管道,而不是一次性提示?
  • **审批?*:副作用应暂停直到您批准,然后恢复?
  • **可恢复运?*:继续已暂停的工作流,而无需重新运行 earlier 步骤?

它如何与心跳?cron 配对

  • 心跳/cron 决定运行何时发生?
  • Lobster 定义一旦运行开?发生什么步??

对于计划的工作流,使?cron 或心跳触发调?Lobster 的代理回合? 对于临时工作流,直接调用 Lobster?

运营说明(来自代码)

  • Lobster 作为**本地子进?*(lobster CLI)在工具模式下运行,并返?JSON 信封?
  • 如果工具返回 needs_approval,您可以使用 resumeToken ?approve 标志恢复?
  • 该工具是**可选插?*;通过 tools.alsoAllow: ["lobster"] 附加启用(推荐)?
  • Lobster 期望 lobster CLI ?PATH 上可用?

请参?Lobster 获取完整用法和示例?

主会?vs 独立会话

心跳和定时任务都可以与主会话交互,但方式不同?

心跳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 \
  --announce

成本考虑

机制成本配置
心跳?N 分钟一轮;?HEARTBEAT.md 大小扩展
Cron(主会话?添加事件到下次心跳(无独立回合)
Cron(独立)每任务完整代理回合;可以使用更便宜的模型

提示?

  • 保持 HEARTBEAT.md 较小以最小化令牌开销?
  • 将类似的检查批量到心跳中,而不是多个定时任务?
  • 如果您只想要内部处理,请在心跳上使用 target: "none"?
  • 对常规任务使用带更便宜模型的独立 cron?

相关内容