Cron vs Heartbeat
И heartbeat, и cron-задания позволяют запускать задачи по расписанию. Это руководство поможет выбрать правильный механизм для вашего случая использования.
Краткое руководство по принятию решений
| Случай использования | Рекомендация | Почему |
|---|---|---|
| Проверять почту каждые 30 мин | Heartbeat | Объединяется с другими проверками, учитывает контекст |
| Отправлять ежедневный отчет ровно в 9 утра | Cron (изолированный) | Требуется точное время |
| Мониторить календарь на предстоящие события | Heartbeat | Естественно подходит для периодической осведомленности |
| Запускать еженедельный глубокий анализ | Cron (изолированный) | Самостоятельная задача, можно использовать другую модель |
| Напомнить мне через 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", // явная цель доставки уведомлений (по умолчанию "none")
activeHours: { start: "08:00", end: "22:00" }, // опционально
},
},
},
}
См. Heartbeat для полной конфигурации.
Cron: Точное планирование
Cron-задания запускаются в точное время и могут выполняться в изолированных сессиях без влияния на основной контекст. Повторяющиеся расписания на начало часа автоматически распределяются с помощью детерминированного смещения для каждого задания в окне от 0 до 5 минут.
Когда использовать cron
- Требуется точное время: «Отправь это в 9:00 каждый понедельник» (а не «где-то около 9»).
- Самостоятельные задачи: Задачи, которым не нужен контекст диалога.
- Другая модель/уровень мышления: Сложный анализ, требующий более мощной модели.
- Одноразовые напоминания: «Напомни мне через 20 минут» с помощью
--at. - Шумные/частые задачи: Задачи, которые будут загромождать историю основной сессии.
- Внешние триггеры: Задачи, которые должны выполняться независимо от активности агента.
Преимущества cron
- Точное время: 5- или 6-полевые (секунды) cron-выражения с поддержкой часовых поясов.
- Встроенное распределение нагрузки: повторяющиеся расписания на начало часа по умолчанию смещаются до 5 минут.
- Контроль для каждого задания: переопределить смещение с помощью
--stagger <duration>или принудительно задать точное время с помощью--exact. - Изоляция сессии: Запускается в
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
См. Cron jobs для полной справки по CLI.
Блок-схема принятия решений
Нужно ли задаче выполняться в ТОЧНОЕ время?
ДА -> Использовать cron
НЕТ -> Продолжить...
Нужно ли задаче изолироваться от основной сессии?
ДА -> Использовать cron (изолированный)
НЕТ -> Продолжить...
Можно ли объединить эту задачу с другими периодическими проверками?
ДА -> Использовать heartbeat (добавить в HEARTBEAT.md)
НЕТ -> Использовать cron
Это одноразовое напоминание?
ДА -> Использовать cron с --at
НЕТ -> Продолжить...
Требуется ли другая модель или уровень мышления?
ДА -> Использовать cron (изолированный) с --model/--thinking
НЕТ -> Использовать heartbeat
Комбинирование обоих подходов
Наиболее эффективная настройка использует оба механизма:
- Heartbeat обрабатывает рутинный мониторинг (почта, календарь, уведомления) в одном объединенном цикле каждые 30 минут.
- 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. Для рабочих процессов по запросу вызывайте Lobster напрямую.
Операционные заметки (из кода)
- Lobster запускается как локальный подпроцесс (CLI
lobster) в режиме инструмента и возвращает JSON-конверт. - Если инструмент возвращает
needs_approval, вы возобновляете работу с помощьюresumeTokenи флагаapprove. - Инструмент является опциональным плагином; включите его дополнительно через
tools.alsoAllow: ["lobster"](рекомендуется). - Lobster ожидает, что CLI
lobsterбудет доступен вPATH.
См. Lobster для полного использования и примеров.
Основная сессия vs Изолированная сессия
И heartbeat, и cron могут взаимодействовать с основной сессией, но по-разному:
| Heartbeat | Cron (main) | Cron (isolated) | |
|---|---|---|---|
| Сессия | Основная | Основная (через системное событие) | cron:<jobId> |
| История | Общая | Общая | Новая при каждом запуске |
| Контекст | Полный | Полный | Отсутствует (начинается с чистого листа) |
| Модель | Модель основной сессии | Модель основной сессии | Можно переопределить |
| Вывод | Доставляется, если не HEARTBEAT_OK | Промпт heartbeat + событие | Сводка announce (по умолчанию) |
Когда использовать 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, когда хотите:
- Чистый лист без предыдущего контекста
- Другие настройки модели или уровня мышления
- Отправлять сводки announce напрямую в канал
- Чтобы история не загромождала основную сессию
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 (main) | Добавляет событие к следующему heartbeat (без изолированного цикла) |
| Cron (isolated) | Полный агентский цикл на задание; можно использовать более дешевую модель |
Советы:
- Держите
HEARTBEAT.mdнебольшим, чтобы минимизировать расход токенов. - Объединяйте похожие проверки в heartbeat вместо нескольких cron-заданий.
- Используйте
target: "none"для heartbeat, если нужна только внутренняя обработка. - Используйте изолированный cron с более дешевой моделью для рутинных задач.
Связанные темы
- Heartbeat - полная конфигурация heartbeat
- Cron jobs - полная справка по CLI и API для cron
- System - системные события + управление heartbeat
Cron JobsУстранение неполадок автоматизации