Перейти к основному содержанию

Cron vs Heartbeat: когда использовать каждый вариант

И heartbeats, и задания cron позволяют запускать задачи по расписанию. Это руководство помогает выбрать подходящий механизм для вашего сценария использования.

Краткое руководство по выбору

Сценарий использованияРекомендуетсяПочему
Проверять почту каждые 30 минHeartbeatОбъединяется с другими проверками, учитывает контекст
Отправлять ежедневный отчёт ровно в 9 утраCron (изолированный)Требуется точное время
Следить за календарём на предмет предстоящих событийHeartbeatЕстественно подходит для периодической осведомлённости
Запускать еженедельный глубокий анализCron (изолированный)Самостоятельная задача, можно использовать другую модель
Напомнить мне через 20 минутCron (основной, --at)Одноразовая задача с точным временем
Фоновая проверка состояния проектаHeartbeatИспользует существующий цикл

Heartbeat: периодическая осведомлённость

Heartbeats выполняются в основном сеансе с регулярным интервалом (по умолчанию: 30 мин). Они предназначены для того, чтобы агент проверял состояние дел и выявлял всё важное.

Когда использовать heartbeat

  • Несколько периодических проверок: Вместо 5 отдельных заданий cron для проверки почты, календаря, погоды, уведомлений и статуса проекта один heartbeat может объединить всё это.
  • Решения с учётом контекста: У агента есть полный контекст основного сеанса, поэтому он может разумно решать, что срочно, а что может подождать.
  • Непрерывность диалога: Запуски heartbeat используют один и тот же сеанс, поэтому агент помнит недавние разговоры и может естественно продолжать взаимодействие.
  • Мониторинг с низкими накладными расходами: Один heartbeat заменяет множество мелких задач опроса.

Преимущества heartbeat

  • Объединяет несколько проверок: За один ход агент может просмотреть почту, календарь и уведомления вместе.
  • Снижает количество API-вызовов: Один heartbeat дешевле, чем 5 изолированных заданий cron.
  • Учитывает контекст: Агент знает, над чем вы работали, и расставляет приоритеты соответствующим образом.
  • Умное подавление: Если ничего не требует внимания, агент отвечает HEARTBEAT_OK, и сообщение не доставляется.
  • Естественное время выполнения: Возможен небольшой дрейф в зависимости от нагрузки очереди, что подходит для большинства задач мониторинга.

Пример heartbeat: чек-лист 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
Агент читает это при каждом heartbeat и обрабатывает все пункты за один ход.

Настройка heartbeat

{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m", // interval
        target: "last", // where to deliver alerts
        activeHours: { start: "08:00", end: "22:00" }, // optional
      },
    },
  },
}
Полную конфигурацию см. в разделе Heartbeat.

Cron: точное планирование

Задания cron выполняются в строго заданное время и могут запускаться в изолированных сеансах, не влияя на основной контекст.

Когда использовать cron

  • Требуется точное время: «Отправить это в 9:00 утра каждый понедельник» (а не «примерно около 9»).
  • Самостоятельные задачи: Задачи, которым не нужен контекст диалога.
  • Другая модель/мышление: Тяжёлый анализ, для которого оправдано использование более мощной модели.
  • Одноразовые напоминания: «Напомни мне через 20 минут» с --at.
  • Шумные/частые задачи: Задачи, которые захламляли бы историю основного сеанса.
  • Внешние триггеры: Задачи, которые должны выполняться независимо от того, активен ли агент в остальном.

Преимущества cron

  • Точное время: 5-польные cron-выражения с поддержкой часовых поясов.
  • Изоляция сеанса: Выполняется в cron:<jobId> без загрязнения основной истории.
  • Переопределение модели: Используйте более дешёвую или более мощную модель для каждого задания.
  • Контроль доставки: Изолированные задания по умолчанию используют announce (сводка); при необходимости выберите none.
  • Немедленная доставка: Режим announce публикует результат напрямую, не дожидаясь heartbeat.
  • Контекст агента не требуется: Выполняется, даже если основной сеанс простаивает или уплотнён.
  • Поддержка одноразовых задач: --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 jobs.

Блок-схема принятия решения

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. Heartbeat обрабатывает рутинный мониторинг (почта, календарь, уведомления) одним пакетным запуском каждые 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 "..." --announce

# 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 — это среда выполнения рабочих процессов для многошаговых конвейеров инструментов, которым требуется детерминированное выполнение и явные подтверждения. Используйте его, когда задача выходит за рамки одного хода агента и нужен возобновляемый рабочий процесс с контрольными точками для человека.

Когда подходит Lobster

  • Многошаговая автоматизация: Нужен фиксированный конвейер вызовов инструментов, а не разовый промпт.
  • Шлюзы подтверждения: Побочные эффекты должны останавливаться до вашего подтверждения, а затем возобновляться.
  • Возобновляемые запуски: Продолжение приостановленного рабочего процесса без повторного выполнения ранних шагов.

Как он сочетается с heartbeat и cron

  • Heartbeat/cron определяют, когда происходит запуск.
  • Lobster определяет, какие шаги выполняются после начала запуска.
Для запланированных рабочих процессов используйте cron или heartbeat, чтобы инициировать ход агента, который вызывает Lobster. Для ad-hoc рабочих процессов вызывайте Lobster напрямую.

Операционные примечания (из кода)

  • Lobster запускается как локальный подпроцесс (CLI lobster) в режиме инструмента и возвращает JSON-конверт.
  • Если инструмент возвращает needs_approval, вы возобновляете выполнение с resumeToken и флагом approve.
  • Инструмент является необязательным плагином; включайте его аддитивно через tools.alsoAllow: ["lobster"] (рекомендуется).
  • Если вы передаёте lobsterPath, это должен быть абсолютный путь.
Полное описание использования и примеры см. в разделе Lobster.

Основной сеанс vs изолированный сеанс

И heartbeat, и cron могут взаимодействовать с основным сеансом, но по-разному:
HeartbeatCron (основной)Cron (изолированный)
SessionОсновнойОсновной (через системное событие)cron:<jobId>
HistoryОбщий доступОбщий доступНовая при каждом запуске
ContextПолныйПолныйНет (чистый старт)
ModelМодель основного сеансаМодель основного сеансаМожно переопределить
OutputДоставляется, если не HEARTBEAT_OKПромпт heartbeat + событиеОбъявить сводку (по умолчанию)

Когда использовать cron в основном сеансе

Используйте --session main с --system-event, если вы хотите:
  • Чтобы напоминание/событие появилось в контексте основного сеанса
  • Чтобы агент обработал его при следующем heartbeat с полным контекстом
  • Отсутствие отдельного изолированного запуска
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

Соображения по стоимости

МеханизмПрофиль стоимости
HeartbeatОдин ход каждые N минут; масштабируется с размером HEARTBEAT.md
Cron (основной)Добавляет событие к следующему heartbeat (без изолированного хода)
Cron (изолированный)Полный ход агента на задание; можно использовать более дешёвую модель
Советы:
  • Держите HEARTBEAT.md небольшим, чтобы минимизировать накладные расходы на токены.
  • Объединяйте похожие проверки в heartbeat вместо нескольких заданий cron.
  • Используйте target: "none" для heartbeat, если нужна только внутренняя обработка.
  • Используйте изолированный cron с более дешёвой моделью для рутинных задач.

Связанное

  • Heartbeat — полная конфигурация heartbeat
  • Cron jobs — полная справка по CLI и API cron
  • System — системные события и управление heartbeat