Автоматизация: cron, hooks, standing orders, задачи

OpenClaw имеет четыре механизма автоматизации: cron (расписание), hooks (события), standing orders (постоянные инструкции) и background tasks (учёт фоновой работы). Вместе они позволяют агенту работать автономно — от ежедневных дайджестов до мониторинга систем.

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

Механизм Когда использовать Пример
Cron Точное время или интервал «Каждый день в 9:00 собрать новости»
Hooks Событие внутри Gateway «При /new сохранить контекст сессии»
Standing orders Постоянные полномочия «Ты отвечаешь за еженедельный отчёт»
Heartbeat Периодические проверки (batch) «Проверяй почту + календарь каждые 30 мин»

Cron — расписание

Cron — встроенный планировщик Gateway. Он хранит задачи, будит агента в нужное время и доставляет результат в чат или webhook.

Типы расписания

Тип Флаг Описание
at --at Разовый запуск (ISO 8601 или относительный: 20m)
every --every Фиксированный интервал
cron --cron Cron-выражение (5 полей) + --tz

Стили выполнения

Стиль --session Где запускается Для чего
Main session main Следующий heartbeat Напоминания, системные события
Isolated isolated Отдельная сессия cron: Отчёты, фоновые задачи
Current session current Привязана при создании Контекстная работа
Custom session session:custom-id Именованная persistent Workflow с историей

Доставка результата

Режим Что происходит
announce Доставляет текст в указанный чат
webhook POST на URL
none Ничего не делать с результатом

Примеры

Разовое напоминание:

openclaw cron add \
  --name "Напоминание" \
  --at "20m" \
  --session main \
  --system-event "Напоминание: проверь статус дайджesta" \
  --wake now

Ежедневный дайджест с доставкой:

openclaw cron add \
  --name "Утренний бриф" \
  --cron "0 7 * * *" \
  --tz "Europe/Moscow" \
  --session isolated \
  --message "Собери новости AI за сутки" \
  --announce \
  --channel telegram \
  --to "116941204"

Управление

openclaw cron list          # Список задач
openclaw cron show      # Детали задачи
openclaw cron runs --id  # История запусков
openclaw cron run --id   # Запустить вручную
openclaw cron remove --id  # Удалить

Webhooks — внешние триггеры

Gateway может принимать HTTP-запросы для запуска задач:

# Системное событие
curl -X POST http://127.0.0.1:18789/hooks/wake \
  -H 'Authorization: Bearer SECRET' \
  -d '{"text":"Новое письмо","mode":"now"}'

# Изолированный запуск агента
curl -X POST http://127.0.0.1:18789/hooks/agent \
  -H 'Authorization: Bearer SECRET' \
  -d '{"message":"Обобщи входящие","name":"Email"}'

Настройка:

{
  "hooks": {
    "enabled": true,
    "token": "shared-secret",
    "path": "/hooks"
  }
}

Hooks — событийные хуки

Hooks — это скрипты, которые запускаются при событиях внутри Gateway. В отличие от cron (по времени), hooks работают по событиям.

Типы событий

Событие Когда срабатывает
command:new /new команда
command:reset /reset команда
command:stop /stop команда
session:compact:before До компактификации
session:compact:after После компактификации
agent:bootstrap До инъекции bootstrap-файлов
gateway:startup После запуска Gateway
message:received Входящее сообщение
message:sent Исходящее сообщение
message:transcribed После транскрибации аудио

Встроенные хуки

Хук События Что делает
session-memory command:new, command:reset Сохраняет контекст сессии в memory/
bootstrap-extra-files agent:bootstrap Инжектирует дополнительные bootstrap-файлы
command-logger command Логирует все команды
boot-md gateway:startup Запускает BOOT.md при старте

Структура хука

my-hook/
├── HOOK.md          # Метаданные + документация
└── handler.ts       # Реализация

HOOK.md:

---
name: my-hook
description: "Что делает хук"
metadata:
  {"openclaw": {"events": ["command:new"], "emoji": "🔗"}}
---

# My Hook

Документация...

Управление

openclaw hooks list           # Список хуков
openclaw hooks enable   # Включить
openclaw hooks disable  # Выключить
openclaw hooks info     # Детали

Standing orders — постоянные полномочия

Standing orders дают агенту постоянные полномочия для определённых программ. Вместо того чтобы каждый раз давать инструкции, вы определяете программы с областью, триггерами и правилами эскалации.

Структура standing order

## Program: Еженедельный отчёт

**Authority:** Собрать данные, сгенерировать отчёт, доставить
**Trigger:** Каждую пятницу в 16:00 (через cron)
**Approval gate:** Стандартные отчёты — без проверки. Аномалии — на ревью.
**Escalation:** Если источник данных недоступен или метрики > 2σ от нормы

### Шаги выполнения
1. Собрать метрики из настроенных источников
2. Сравнить с прошлой неделей и целями
3. Сгенерировать отчёт в Reports/weekly/YYYY-MM-DD.md
4. Доставить саммари через канал
5. Залогировать завершение

### Чего НЕ делать
- Не отправлять отчёт внешним сторонам
- Не изменять исходные данные
- Не пропускать доставку если метрики плохие

Standing orders + cron

Standing orders определяют что делать. Cron определяет когда. Вместе:

Standing Order: "Ты отвечаешь за ежедневный триаж почты"
    ↓
Cron Job (8:00 daily): "Выполни триаж почты по standing orders"
    ↓
Агент: Читает standing orders → выполняет шаги → отчитывается

Паттерн Execute-Verify-Report

Каждая задача в standing order должна следовать циклу:

1. Execute — выполнить работу (не подтвердить намерение)

2. Verify — проверить результат (файл создан, сообщение доставлено)

3. Report — отчитаться что сделано и что проверено

### Правила выполнения
- Каждая задача: Execute → Verify → Report. Без исключений.
- "Сделаю" — это не выполнение. Сделай, потом отчитайся.
- "Готово" без проверки не принимается. Докажи.
- Если выполнение не удалось: повторить 1 раз.
- Если снова не удалось: отчитаться с диагностикой. Молчать нельзя.

Background tasks — учёт фоновой работы

Background tasks — это журнал фоновой работы: ACP-запуски, субагенты, cron-выполнения, CLI-операции.

Что создаёт задачи, а что нет

Создаёт задачи:

  • ACP background runs
  • Subagent spawns
  • Все cron-выполнения
  • CLI-операции (openclaw agent)
  • video_generate runs

НЕ создаёт задачи:

  • Heartbeat-ходы
  • Обычные чат-сообщения
  • Ответы на команды

Жизненный цикл

Статус Значение
queued Создано, ждёт запуска
running Выполняется
succeeded Успешно завершено
failed Завершено с ошибкой
timed_out Превышен таймаут
cancelled Остановлено оператором
lost Runtime потерял backing state (>5 мин grace)

Управление

openclaw tasks list              # Список задач
openclaw tasks list --status running  # Фильтр по статусу
openclaw tasks show          # Детали
openclaw tasks cancel        # Отменить
openclaw tasks audit             # Аудит здоровья
openclaw tasks maintenance --apply # Очистка

Terminal-записи хранятся 7 дней, потом автоматически удаляются.

Доставка уведомлений

Когда задача завершается, OpenClaw уведомляет:

  • Прямая доставка — если есть channel target, результат идёт прямо в чат
  • Через сессию — если прямая доставка не удалась, событие ставится в очередь сессии и появляется на следующем heartbeat

Практический пример

Полный pipeline для дайджesta:

1. Standing order в AGENTS.md: «Ты отвечаешь за AI-дайджест. Каждый день собираешь, пишешь, публикуешь.»

2. Cron (06:00): запуск isolated-сессии для сбора новостей

3. Cron (09:00): запуск isolated-сессии для публикации из digest-today.txt

4. Background tasks: журнал всех запусков, статусы, таймауты

5. Hooks (опционально): session-memory для автосохранения контекста

Частые ошибки

  • Cron без timezone. Timestamps без timezone считаются UTC. Всегда указывайте --tz.
  • Standing orders слишком общие. «Делай что хочешь» — плохой standing order. Чем уже полномочия, тем лучше.
  • Hooks не включены. По умолчанию hooks не загружаются. Нужно openclaw hooks enable .
  • Polling loop для задач. Не проверяйте tasks list в цикле. Completion — push-based.
📦 Плагин Webhooks (подробно)

Плагин Webhooks добавляет авторизованные HTTP-маршруты, которые связывают внешнюю автоматизацию с TaskFlows OpenClaw.

Используйте его, когда нужно, чтобы доверенная система (Zapier, n8n, CI-джоб или внутренний сервис) создавала и управляла TaskFlows без написания кастомного плагина.

Где работает

Плагин Webhooks работает внутри процесса Gateway. Если Gateway на другой машине — установите и настройте плагин на том хосте, затем перезапустите Gateway.

Настройка маршрутов

Конфигурация — plugins.entries.webhooks.config:

{
  plugins: {
    entries: {
      webhooks: {
        enabled: true,
        config: {
          routes: {
            zapier: {
              path: "/plugins/webhooks/zapier",
              sessionKey: "agent:main:main",
              secret: {
                source: "env",
                provider: "default",
                id: "OPENCLAW_WEBHOOK_SECRET",
              },
              controllerId: "webhooks/zapier",
              description: "Zapier TaskFlow bridge",
            },
          },
        },
      },
    },
  },
}

Поля маршрута

enabled Опционально, по умолчанию true
path Опционально, по умолчанию /plugins/webhooks/<routeId>
sessionKey Обязательная сессия-владелец привязанных TaskFlows
secret Общий секрет или SecretRef
controllerId ID контроллера для создаваемых managed flows (опционально)
description Заметка оператора (опционально)

Поддерживаемые типы secret:

  • Строка
  • SecretRef с source: "env" | "file" | "exec"
Если секрет не удаётся резолвить при старте — плагин пропускает маршрут и логирует предупреждение вместо открытия сломанного endpoint.

Модель безопасности

Каждый маршрут доверен и действует с authority TaskFlow настроенной sessionKey. Это значит, что маршрут может просматривать и изменять TaskFlows, принадлежащие этой сессии.

Рекомендации:

  • Уникальный сильный секрет на маршрут
  • Предпочитать ссылки на секреты вместо inline-текста
  • Привязывать маршруты к максимально узкой сессии
  • Открывать только конкретный webhook path

Плагин применяет:

  • Аутентификацию общим секретом
  • Ограничения размера тела и таймауты
  • Rate limiting (фиксированное окно)
  • Ограничение одновременных запросов
  • Доступ к TaskFlows через привязку к сессии-владельцу

Формат запроса

Отправляйте POST с:

  • Content-Type: application/json
  • Authorization: Bearer <secret> или x-openclaw-webhook-secret: <secret>
curl -X POST https://gateway.example.com/plugins/webhooks/zapier \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_SHARED_SECRET' \
  -d '{"action":"create_flow","goal":"Review inbound queue"}'

Поддерживаемые действия

Действие Описание
create_flow Создать managed TaskFlow для привязанной сессии
get_flow Получить TaskFlow
list_flows Список TaskFlows
find_latest_flow Найти последний TaskFlow
resolve_flow Разрешить TaskFlow
get_task_summary Получить саммари задачи
set_waiting Установить статус ожидания
resume_flow Возобновить TaskFlow
finish_flow Завершить TaskFlow
fail_flow Отметить TaskFlow как failed
request_cancel Запросить отмену
cancel_flow Отменить TaskFlow
run_task Создать дочернюю задачу внутри managed TaskFlow

Пример: create_flow

{
  "action": "create_flow",
  "goal": "Review inbound queue",
  "status": "queued",
  "notifyPolicy": "done_only"
}

Пример: run_task

Создаёт дочернюю managed-задачу внутри существующего TaskFlow. Разрешённые runtime: subagent, acp.

{
  "action": "run_task",
  "flowId": "flow_123",
  "runtime": "acp",
  "childSessionKey": "agent:main:acp:worker",
  "task": "Inspect the next message batch"
}

Формат ответа

Успешный ответ:

{
  "ok": true,
  "routeId": "zapier",
  "result": {}
}

Отклонённый запрос:

{
  "ok": false,
  "routeId": "zapier",
  "code": "not_found",
  "error": "TaskFlow not found.",
  "result": {}
}
Плагин намеренно очищает метаданные owner/session из ответов webhook.

Что дальше