2026 OpenClaw レンタル Mac Mini 実戦:GitHub repository_dispatch API で夜間イベント連鎖・サイレンス窓・退避アラートを最小再現
自動化エンジニア向けにレンタル Mac Mini+OpenClawで夜間を回すとき、Git 側は「単一 YAML 名」ではなくイベント型のPOST …/dispatches(repository_dispatch)へ寄せる選択があります。event_typeとclient_payloadでワークフローを起こすバスです。workflow_dispatch 夜間稿と分担し、OpenClaw が初段トリガーと失敗要約。導入・cron/退避・七時二十四分行列。
PAT 最小権限
外向きはGITHUB_TOKEN不可。Fine-grained PATを単一リポに閉じ、Metadata: ReadとContents: Read and writeで…/dispatchesを満たし、workflow_dispatch用のActions 書込みトークンと分離します。GitHub App・キーチェーン/plist・chmod 600。gateway 門限と同日ローテ推奨。
ペイロード規約(client_payload)
client_payloadはバージョン付きの契約として扱い、先頭ステップで jq か極小スキーマで必須キーを検証します。巨大 JSON は載せず参照だけ渡します。
| キー | 役割 |
|---|---|
| batch_id | Mac 側チェックポイントの冪等キー |
| segment | ログと OpenClaw ダイジェスト用ラベル |
| correlation_id | Mac・Actions・Webhook を束ねる UUID |
| issuer | openclaw_gateway / launchd / manual |
| artifact_ref | オブジェクトストレージ等へのポインタ(本文は瘦せる) |
on:
repository_dispatch:
types: [openclaw_night_a, openclaw_night_b]
チェーンタスクの状態機械
QUEUED→SEGMENT_A(openclaw_night_a)→SEGMENT_B→COMPLETED/FAILED。/var/db 等に batch_id と最終セグメントを JSON 保存し再起動リプレイを防ぐ。進行役は curl/gh/Checks ポールのいずれか一つに固定。多シナリオ稿参照。
- 検証失敗なら連鎖を止め、FAILED でアラート経路は一度だけ。
- 成功時のみ同じ correlation_id で
openclaw_night_bを POST。
サイレンス窓(静穏帯)
例:01:00–05:00 のみ launchd が実行し、帯外は exit 0 で GitHub 非呼出。昼の手動 dispatch はペイロード TZ でワークフロー先頭ガード。スキップは JSONL に溜め、ヘルス Webhook 稿同様 OpenClaw が窓明けに抑制件数を要約。心拍回復と併用。
失敗アラート(上限付き退避)
四二九は Retry-After 優先、五系は指数バックオフ(基準二秒・上限六十秒・五回・二割ジッタ)上限後にエスカレーション。batch_id・最終 HTTP・短い断片のみ、PAT 禁止。OpenClaw で一バッチ一通知。水位 FAQと併せ APFS 黄赤で dispatch ゲート。
再現用 curl/gh 例
ローカルで一度成功を確認してから、同じコマンドをレンタル Mac の root 所有 launchd ラッパへ移します。GH_TOKEN に Fine-grained PAT を載せれば gh からも同じエンドポイントへ送れます。
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
HowTo(そのまま手順化できる順序)
- リポに
repository_dispatch.typesを登録した YAML をマージする。 - Mac で窓内のみ走るシェルから上記 curl で
openclaw_night_aを送る。 - Actions の Run URL を client_payload か成果物メタに残し、OpenClaw が一覧化できるようにする。
- セグメント A の最終ステップで PAT または
GITHUB_TOKEN(リポ内ジョブ)から B を POST。 - 退避上限超過時のみ署名付き Webhook を飛ばし、OpenClaw でチケット化する。
FAQ
- 二〇四なのに Actions に出ない
event_typeが YAML のtypesと一致しているか、default branch にワークフローがあるかを確認。Runs の queued も併見。- feature branch で試したい
- repository_dispatch は基本 default branch 上のワークフロー定義に束縛されるため、検証用リポを分けるか、マージ戦略を決める。
- OpenClaw は GitHub を所有しないが何をするか
- エッジのオーケストレータとして初段 dispatch・チェックポイント・Webhook 要約を担い、人間はバッチ単位のサマリだけ読む。
まとめ:狭い PAT・契約化した client_payload・明示状態機械・サイレンス窓・上限付き退避と単発アラート。料金・ヘルプ・公開購入(ログイン不要可)でApple Siliconノードを確保し、夜間 GitHub API 連鎖の余白を確保してください。
関連:ブログ。OpenClaw ハブ。公開購入はアカウント不要の場合あり。