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
Cron: точное планирование
Задания cron выполняются в строго заданное время и могут запускаться в изолированных сеансах, не влияя на основной контекст.Когда использовать cron
- Требуется точное время: «Отправить это в 9:00 утра каждый понедельник» (а не «примерно около 9»).
- Самостоятельные задачи: Задачи, которым не нужен контекст диалога.
- Другая модель/мышление: Тяжёлый анализ, для которого оправдано использование более мощной модели.
- Одноразовые напоминания: «Напомни мне через 20 минут» с
--at. - Шумные/частые задачи: Задачи, которые захламляли бы историю основного сеанса.
- Внешние триггеры: Задачи, которые должны выполняться независимо от того, активен ли агент в остальном.
Преимущества cron
- Точное время: 5-польные cron-выражения с поддержкой часовых поясов.
- Изоляция сеанса: Выполняется в
cron:<jobId>без загрязнения основной истории. - Переопределение модели: Используйте более дешёвую или более мощную модель для каждого задания.
- Контроль доставки: Изолированные задания по умолчанию используют
announce(сводка); при необходимости выберитеnone. - Немедленная доставка: Режим announce публикует результат напрямую, не дожидаясь heartbeat.
- Контекст агента не требуется: Выполняется, даже если основной сеанс простаивает или уплотнён.
- Поддержка одноразовых задач:
--atдля точных будущих временных меток.
Пример cron: ежедневный утренний брифинг
Пример cron: одноразовое напоминание
Блок-схема принятия решения
Сочетание обоих
Наиболее эффективная настройка использует оба механизма:- Heartbeat обрабатывает рутинный мониторинг (почта, календарь, уведомления) одним пакетным запуском каждые 30 минут.
- Cron обрабатывает точные расписания (ежедневные отчёты, еженедельные обзоры) и одноразовые напоминания.
Пример: эффективная настройка автоматизации
HEARTBEAT.md (проверяется каждые 30 мин):Lobster: детерминированные рабочие процессы с подтверждениями
Lobster — это среда выполнения рабочих процессов для многошаговых конвейеров инструментов, которым требуется детерминированное выполнение и явные подтверждения. Используйте его, когда задача выходит за рамки одного хода агента и нужен возобновляемый рабочий процесс с контрольными точками для человека.Когда подходит Lobster
- Многошаговая автоматизация: Нужен фиксированный конвейер вызовов инструментов, а не разовый промпт.
- Шлюзы подтверждения: Побочные эффекты должны останавливаться до вашего подтверждения, а затем возобновляться.
- Возобновляемые запуски: Продолжение приостановленного рабочего процесса без повторного выполнения ранних шагов.
Как он сочетается с heartbeat и cron
- Heartbeat/cron определяют, когда происходит запуск.
- Lobster определяет, какие шаги выполняются после начала запуска.
Операционные примечания (из кода)
- Lobster запускается как локальный подпроцесс (CLI
lobster) в режиме инструмента и возвращает JSON-конверт. - Если инструмент возвращает
needs_approval, вы возобновляете выполнение сresumeTokenи флагомapprove. - Инструмент является необязательным плагином; включайте его аддитивно через
tools.alsoAllow: ["lobster"](рекомендуется). - Если вы передаёте
lobsterPath, это должен быть абсолютный путь.
Основной сеанс vs изолированный сеанс
И heartbeat, и cron могут взаимодействовать с основным сеансом, но по-разному:| Heartbeat | Cron (основной) | Cron (изолированный) | |
|---|---|---|---|
| Session | Основной | Основной (через системное событие) | cron:<jobId> |
| History | Общий доступ | Общий доступ | Новая при каждом запуске |
| Context | Полный | Полный | Нет (чистый старт) |
| Model | Модель основного сеанса | Модель основного сеанса | Можно переопределить |
| Output | Доставляется, если не HEARTBEAT_OK | Промпт heartbeat + событие | Объявить сводку (по умолчанию) |
Когда использовать cron в основном сеансе
Используйте--session main с --system-event, если вы хотите:
- Чтобы напоминание/событие появилось в контексте основного сеанса
- Чтобы агент обработал его при следующем heartbeat с полным контекстом
- Отсутствие отдельного изолированного запуска
Когда использовать изолированный cron
Используйте--session isolated, если вы хотите:
- Чистое состояние без предыдущего контекста
- Другую модель или настройки «мышления»
- Прямую публикацию сводок в канал
- Историю, которая не захламляет основной сеанс
Соображения по стоимости
| Механизм | Профиль стоимости |
|---|---|
| Heartbeat | Один ход каждые N минут; масштабируется с размером HEARTBEAT.md |
| Cron (основной) | Добавляет событие к следующему heartbeat (без изолированного хода) |
| Cron (изолированный) | Полный ход агента на задание; можно использовать более дешёвую модель |
- Держите
HEARTBEAT.mdнебольшим, чтобы минимизировать накладные расходы на токены. - Объединяйте похожие проверки в heartbeat вместо нескольких заданий cron.
- Используйте
target: "none"для heartbeat, если нужна только внутренняя обработка. - Используйте изолированный cron с более дешёвой моделью для рутинных задач.