Автоматизация
Cron-задачи
Cron или Heartbeat? См. Cron vs Heartbeat для рекомендаций, когда использовать каж дый из них.
Cron — это встроенный планировщик Шлюза. Он сохраняет задания, пробуждает агента в нужное время и может при необходимости доставлять вывод обратно в чат. Если вам нужно «запускать это каждое утро» или «пнуть агента через 20 минут», cron — это механизм для этого. Устранение неполадок: /automation/troubleshooting
Кратко
- Cron работает внутри Шлюза (а не внутри модели).
- Задания сохраняются в
~/.openclaw/cron/, поэтому перезапуски не приводят к потере расписаний. - Два стиля выполнения:
- Основная сессия: поставить системное событие в очередь, затем выполнить при следующем сердцебиении.
- Изолированный: выполнить выделенный ход агента в
cron:, с доставкой (по умолчанию объявление или без).
- Пробуждения являются первоклассными: задание может запросить «пробудиться сейчас» или «при следующем сердцебиении».
- Отправка вебхука настраивается для каждого задания через
delivery.mode = "webhook"+delivery.to = "". - Устаревший запасной вариант сохраняется для сохранённых заданий с
notify: true, когда установленcron.webhook; перенесите эти задания в режим доставки вебхуком.
Быстрый старт (практично)
Создайте одноразовое напоминание, проверьте его существование и запустите немедленно:
openclaw cron add \
--name "Reminder" \
--at "2026-02-01T16:00:00Z" \
--session main \
--system-event "Reminder: check the cron docs draft" \
--wake now \
--delete-after-run
openclaw cron list
openclaw cron run <job-id>
openclaw cron runs --id <job-id>
Запланируйте повторяющееся изолированное задание с доставкой:
openclaw cron add \
--name "Morning brief" \
--cron "0 7 * * *" \
--tz "America/Los_Angeles" \
--session isolated \
--message "Summarize overnight updates." \
--announce \
--channel slack \
--to "channel:C1234567890"
Эквиваленты вызова инструментов (инструмент cron Шлюза)
Для канонических JSON-структур и примеров см. JSON-схема для вызовов инструментов.
Где хранятся cron-задания
Cron-задания по умолчанию сохраняются на хосте Шлюза в ~/.openclaw/cron/jobs.json. Шлюз загружает файл в память и записывает его обратно при изменениях, поэтому ручное редактирование безопасно только при остановленном Шлюзе. Предпочитайте openclaw cron add/edit или API вызова инструм ента cron для изменений.
Обзор для начинающих
Представьте cron-задание как: когда запускать + что делать.
- Выберите расписание
- Одноразовое напоминание →
schedule.kind = "at"(CLI:--at) - Повторяющееся задание →
schedule.kind = "every"илиschedule.kind = "cron" - Если ваша временная метка ISO не содержит часового пояса, она обрабатывается как UTC.
- Одноразовое напоминание →
- Выберите, где оно выполняется
sessionTarget: "main"→ выполнить во время следующего сердцебиения с основным контекстом.sessionTarget: "isolated"→ выполнить выделенный ход агента вcron:.
- Выберите полезную нагрузку
- Основная сессия →
payload.kind = "systemEvent" - Изолированная сессия →
payload.kind = "agentTurn"
- Основная сессия →
Опционально: одноразовые задания (schedule.kind = "at") по умолч анию удаляются после успешного выполнения. Установите deleteAfterRun: false, чтобы сохранить их (они отключатся после успеха).
Концепции
Задания
Cron-задание — это сохранённая запись с:
- расписанием (когда оно должно выполняться),
- полезной нагрузкой (что оно должно делать),
- опциональным режимом доставки (
announce,webhookилиnone). - опциональной привязкой к агенту (
agentId): выполнить задание под определённым агентом; если отсутствует или неизвестен, шлюз возвращается к агенту по умолчанию.
Задания идентифицируются стабильным jobId (используется CLI/API Шлюза). В вызовах инструментов агента jobId является каноническим; устаревший id принимается для совместимости. Одноразовые задания по умолчанию автоматически удаляются после успеха; установите deleteAfterRun: false, чтобы сохранить их.
Расписания
Cron поддерживает три вида расписаний:
at: одноразовая временная метка черезschedule.at(ISO 8601).every: фиксированный интервал (мс).cron: 5-полевое cron-выражение (или 6-полевое с секундами) с опциональным часовым поясом IANA.
Cron-выражения используют croner. Если часовой пояс опущен, используется локальный часовой пояс хоста Шлюза. Чтобы уменьшить пиковые нагрузки в начале часа на многих шлюзах, OpenClaw применяет детерминированное окно смещения до 5 минут для повторяющихся выражений начала часа (например, 0 * * * *, 0 */2 * * *). Выражения с фиксированным часом, такие как 0 7 * * *, остаются точными. Для любого cron-расписания вы можете установить явное окно смещения с помощью schedule.staggerMs (0 сохраняет точное время). Сокращения CLI:
--stagger 30s(или1m,5m) для установки явного окна смещения.--exactдля принудительной установкиstaggerMs = 0.
Основное vs изолированное выполнение
Задания основной сессии (системные события)
Основные задания ставят системное событие в очередь и опционально пробуждают исполнитель сердцебиения. Они должны использовать payload.kind = "systemEvent".
wakeMode: "now"(по умолчанию): событие запускает немедленное выполнение сердцебиения.wakeMode: "next-heartbeat": событие ждёт следующего запланированного сердцебиения.
Это лучший вариант, когда вам нужен обычный промпт с ердцебиения + контекст основной сессии. См. Heartbeat.
Изолированные задания (выделенные cron-сессии)
Изолированные задания выполняют выделенный ход агента в сессии cron:. Ключевые особенности:
- Промпт имеет префикс
[cron: ]для отслеживаемости. - Каждый запуск начинается с нового идентификатора сессии (без переноса предыдущего разговора).
- Поведение по умолчанию: если
deliveryопущен, изолированные задания объявляют сводку (delivery.mode = "announce"). delivery.modeвыбирает, что происходит:announce: доставить сводку в целевой канал и опубликовать краткую сводку в основной сессии.webhook: отправить POST полезной нагрузки завершённого события вdelivery.to, когда завершённое событие включает сводку.none: только внутреннее (без доставки, без сводки в основной сессии).
wakeModeконтролирует, когда публикуется сводка в основной сессии:now: немедленное сердцебиение.next-heartbeat: ждёт следующего запланированного сердцебиения.
Используйте изолированные задания для шумных, частых или «фоновых задач», которые не должны засорять историю основного чата.
Формы полезной нагрузки (что выполняется)
Поддерживаются два вида полезной нагрузки:
systemEvent: только основная сессия, направляется через промпт сердцебиения.agentTurn: только изолированная сессия, выполняет выделенный ход агента.
Общие поля agentTurn:
message: обязательный текстовый промпт.model/thinking: опциональные переопределения (см. ниже).timeoutSeconds: опциональное переопределение таймаута.lightContext: опциональный облегчённый режим начальной загрузки для заданий, которым не требуется инъекция файлов начальной загрузки рабочей области.
Конфигурация доставки:
delivery.mode:none|announce|webhook.delivery.channel:lastили конкретный канал.delivery.to: целевой объект, специфичный для канала (объявление) или URL вебхука (режим вебхука).delivery.bestEffort: избегать сбоя задания, если доставка объявления не удалась.
Доставка объявления подавляет отправку инструментов сообщений для запуска; используйте delivery.channel/delivery.to для нацеливания на чат. Когда delivery.mode = "none", сводка не публикуется в основной сессии. Если delivery опущен для изолированных заданий, OpenClaw по умолчанию использует announce.