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

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

Быстрое руководство по принятию решений

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

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

Heartbeat выполняется в основной сессии через регулярные интервалы (по умолчанию: 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",        // интервал
        target: "last",      // куда доставлять оповещения
        activeHours: { start: "08:00", end: "22:00" }  // опционально
      }
    }
  }
}

См. Heartbeat для полной конфигурации.

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

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

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

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

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

  • Точное время: 5-полевые выражения cron с поддержкой часового пояса.
  • Изоляция сессии: Выполняется в cron:<jobId> без загрязнения основной истории.
  • Переопределения модели: Используйте более дешевую или более мощную модель для каждого задания.
  • Контроль доставки: Может доставлять непосредственно в канал; по умолчанию все равно публикует сводку в основную сессию (настраивается).
  • Не нужен контекст агента: Выполняется, даже если основная сессия неактивна или сжата.
  • Поддержка одноразовых: --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 \
  --deliver \
  --channel whatsapp \
  --to "+15551234567"

Это выполняется ровно в 7:00 AM по времени Нью-Йорка, использует 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

См. Задания Cron для полной справки CLI.

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

Задача должна выполняться в ТОЧНОЕ время?
  ДА -> Используйте cron
  НЕТ -> Продолжить...

Задача нуждается в изоляции от основной сессии?
  ДА -> Используйте cron (isolated)
  НЕТ -> Продолжить...

Эту задачу можно объединить с другими периодическими проверками?
  ДА -> Используйте heartbeat (добавить в HEARTBEAT.md)
  НЕТ -> Используйте cron

Это одноразовое напоминание?
  ДА -> Используйте cron с --at
  НЕТ -> Продолжить...

Нужна другая модель или уровень мышления?
  ДА -> Используйте cron (isolated) с --model/--thinking
  НЕТ -> Используйте 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 (точное время):

# Ежедневный утренний брифинг в 7 утра
openclaw cron add --name "Morning brief" --cron "0 7 * * *" --session isolated --message "..." --deliver

# Еженедельный обзор проекта по понедельникам в 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

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

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

  • Heartbeat/cron решают, когда происходит запуск.
  • Lobster определяет, какие шаги происходят после начала запуска.

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

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

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

См. Lobster для полного использования и примеров.

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

И heartbeat, и cron могут взаимодействовать с основной сессией, но по-разному:

HeartbeatCron (main)Cron (isolated)
СессияОсновнаяОсновная (через системное событие)cron:<jobId>
ИсторияОбщаяОбщаяСвежая каждый запуск
КонтекстПолныйПолныйНет (начинается чистым)
МодельМодель основной сессииМодель основной сессииМожно переопределить
ВыводДоставляется, если не 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 \
  --deliver

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

МеханизмПрофиль стоимости
HeartbeatОдин ход каждые N минут; масштабируется с размером HEARTBEAT.md
Cron (main)Добавляет событие к следующему heartbeat (без изолированного хода)
Cron (isolated)Полный ход агента для каждого задания; может использовать более дешевую модель

Советы:

  • Держите HEARTBEAT.md маленьким, чтобы минимизировать накладные расходы на токены.
  • Группируйте похожие проверки в heartbeat вместо нескольких заданий cron.
  • Используйте target: "none" для heartbeat, если хотите только внутреннюю обработку.
  • Используйте изолированный cron с более дешевой моделью для рутинных задач.

Связанное

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