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
Комбинирование обоих
Наиболее эффективная настройка использует оба:
- 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 (точное время):
# Ежедневный утренний брифинг в 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 могут взаимодействовать с основной сессией, но по-разному:
| Heartbeat | Cron (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