2026 OpenClaw на аренде Mac Mini: GitHub repository_dispatch — цепочки ночных задач, тихие окна и backoff
Инженерам автоматизации, которые держат OpenClaw на арендованной Mac Mini в режиме 7×24, часто нужен «пульт» на стороне Git без жёсткой привязки к одному файлу workflow. Эндпоинт GitHub API POST …/dispatches с типом repository_dispatch как раз про это: строка event_type, JSON client_payload и явный список on.repository_dispatch.types в YAML.
Этот материал сознательно не пересекается с гайдом про workflow_dispatch и ночной батч: там API указывает конкретный workflow и карту inputs. Здесь — цепочка событий, которую могут потреблять несколько workflow или несколько job в одном файле; удобно, когда OpenClaw даёт первый импульс, а затем сводит URL запусков и ошибки в один дайджест.
Дополните схему launchd, health и webhook с backoff, матрицей планирования 7×24 и установкой heartbeat и самовосстановлением, чтобы часы на Mac Mini оставались источником правды для ночных задач.
- Триггер: OpenClaw или
launchdна узле аренды один раз вызываетPOST /repos/{owner}/{repo}/dispatchesна стартовый event_type. - Цепочка: сегмент A проверяет payload, выполняет работу и инициирует следующий dispatch (тем же PAT снаружи или
GITHUB_TOKENиз Actions приcontents: writeв job). - Сводка: OpenClaw забирает ссылки на run из payload или выходов job и шлёт один дайджест на батч вместо потока сообщений в чат.
PAT с минимальными правами
Вызов dispatch — это POST https://api.github.com/repos/OWNER/REPO/dispatches. Для Fine-grained PAT ограничьте доступ одним репозиторием автоматизации, включите чтение Metadata и Contents: read and write — этого достаточно для контракта REST без выдачи каждому скрипту scope Actions: write, который чаще нужен именно для workflow_dispatch в соседнем руководстве.
Если политика безопасности требует частой ротации, рассмотрите GitHub App с installation token и тем же объёмом прав на репозиторий. Храните секреты в связке ключей macOS или в root-owned plist; ротацию синхронизируйте с чекпойнтами обновления и отката шлюза OpenClaw.
- Не смешивайте PAT с админскими или publish-пакетами задачами.
- Разводите инфраструктурный и прикладной код по репозиториям; кросс-репозиторные dispatches оставляйте только когда второй токен неизбежен.
Соглашение по payload
Считайте client_payload версионируемым контрактом: заранее зафиксируйте обязательные ключи, чтобы первый шаг каждого workflow проверял структуру через jq или компактную JSON Schema.
| Поле | Роль |
|---|---|
| batch_id | Ключ идемпотентности и чекпойнта на Mini |
| segment | Метка сегмента в логах и дайджестах OpenClaw |
| correlation_id | UUID: журнал Mac, Actions и исходящие webhook |
| issuer | openclaw_gateway | launchd | manual |
| artifact_ref | Указатель на объектное хранилище вместо «толстого» JSON |
Пример заголовка workflow, слушающего два сегмента:
on:
repository_dispatch:
types: [openclaw_night_a, openclaw_night_b]
Конечный автомат цепочки
Опишите батч явно: QUEUED (Mac принял расписание) → SEGMENT_A (первый dispatch доставлен) → SEGMENT_B → COMPLETED или FAILED. Сохраняйте последний успешный batch_id и сегмент в /var/db или домашнем каталоге сервиса, чтобы перезагрузка не породила повторных побочных эффектов.
Переход «вперёд» делайте одним владельцем часов: финальный job шлёт curl с PAT, переиспользуемый workflow вызывает gh api, либо Mini опрашивает Checks API и сам инициирует следующий event_type — смешивайте эти роли только осознанно, иначе появятся гонки. Для более широкой картины см. мультисценарную оркестрацию OpenClaw.
- Отправьте
openclaw_night_aс полезной нагрузкой; полеnext_event_typeдержите как подсказку после валидации, а не как немедленный автотриггер. - При ошибке валидации перейдите в FAILED и вызовите путь алерта один раз.
- При успехе выполните POST с
openclaw_night_bи тем жеcorrelation_id.
Тихие окна
Тяжёлую работу по диску APFS сосредоточьте в локальной полосе тишины (например 01:00–05:00 по часовому поясу узла). launchd должен вызывать скрипт только внутри окна; вне его — exit 0 без обращения к GitHub. По желанию добавьте в workflow ранний guard: читайте TZ из payload и завершайте job быстро, если кто-то дернул dispatch вручную в рабочее время.
Если маркетинговые или саппорт-окна пересекаются с ночным слотом, пусть OpenClaw буферизует пропуски: пишите JSON-строки в локальную очередь и отправляйте один отчёт «подавленные срабатывания» при открытии окна — в духе guardian и health-webhook на аренде Mac Mini.
Алерты при сбоях
Оборачивайте каждый HTTP-вызов экспоненциальным backoff на ответы 429 и 5xx, уважайте заголовок Retry-After. Ограничьте число попыток (например пять), затем эскалируйте. В webhook эскалации передавайте batch_id, последний HTTP-статус и укороченное тело ответа — никогда не кладите PAT в исходящий канал.
OpenClaw подписывается на этот webhook, может обогатить событие хвостом лога с Mini и открыть тикет только после исчерпания бюджета повторов — так ночные задачи не будят дежурного из-за кратковременных сбоев GitHub.
Воспроизводимые примеры curl и gh
Экспортируйте GITHUB_TOKEN или используйте Fine-grained PAT в GH_TOKEN для CLI. Замените OWNER, REPO и идентификаторы.
curl -sS -X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/OWNER/REPO/dispatches \
-d '{"event_type":"openclaw_night_a","client_payload":{"batch_id":"20260424","segment":"a","correlation_id":"'"$(uuidgen)"'","issuer":"launchd"}}'
gh api -X POST repos/OWNER/REPO/dispatches --input - <<'JSON'
{
"event_type": "openclaw_night_b",
"client_payload": {
"batch_id": "20260424",
"segment": "b",
"correlation_id": "REPLACE_WITH_UUID",
"issuer": "openclaw_gateway"
}
}
JSON
Сначала прогоните команды с ноутбука, убедитесь, что во вкладке Actions появился ожидаемый запуск, затем перенесите ту же команду в root-owned обёртку launchd на арендованной Mac Mini.
FAQ
- Почему не везде workflow_dispatch?
- workflow_dispatch заточен под выбор оператором конкретного workflow и typed inputs. repository_dispatch заточен под машинный поток event_type и более узкий токен там, где не нужен scope Actions write с самой Mini.
- Можно ли нацелить repository_dispatch на feature-ветку?
- По умолчанию события обрабатываются workflow на ветке по умолчанию; для изолированных тестов планируйте отдельный репозиторий или явную стратегию веток в файлах workflow.
- Где граница ответственности OpenClaw?
- OpenClaw остаётся пограничным оркестратором: решает, когда отдать первый dispatch, хранит чекпойнты и агрегирует исходящие webhook так, чтобы человек читал одну сводку на батч.
Итог. Выделенный Apple Silicon под цепочки GitHub API оформляется без лишней бюрократии: откройте тарифы, пройдите оформление аренды (где доступно — без обязательного входа) и держите под рукой центр помощи с заметками по SSH рядом с plist.
Mac Mini для OpenClaw и цепочек repository_dispatch
Запускайте 7×24 цепочки событий с запасом по CPU и NVMe на стабильном хосте. Загляните на главную, сравните планы, затем оформите аренду. В блоге — ещё материалы по эксплуатации OpenClaw.
Добавьте в закладки блог и оформление до того, как расширять права токена на общей Mini.