2026 : OpenClaw sur Mac Mini loué — API GitHub repository_dispatch, chaîne nocturne d’événements, fenêtre silencieuse et alertes à backoff
Les ingénieurs automatisation qui louent un Mac Mini pour du 7×24 avec OpenClaw ont souvent besoin d’un plan de contrôle côté GitHub qui ne soit pas enfermé dans un seul nom de fichier YAML. L’endpoint REST repository_dispatch joue ce rôle de bus typé : chaînes event_type, enveloppe JSON client_payload, et workflows qui s’abonnent via on.repository_dispatch.types.
Ce guide est volontairement orthogonal au runbook workflow_dispatch et batch nocturne : là, l’API nomme un fichier workflow et une carte d’inputs. Ici, l’API nomme une chaîne d’événements que plusieurs workflows — ou un graphe de jobs — peuvent consommer ; c’est idéal lorsqu’OpenClaw déclenche le premier maillon et agrège ensuite les échecs ou les résumés de run.
L’API GitHub reste la source de vérité pour l’historique Actions ; le Mac Mini loué porte l’horloge locale, les checkpoints disque et la politique de fenêtre silencieuse. Croisez le tout avec la matrice planification 7×24, le fan-out cron, webhooks et backoff, et le volet heartbeat et dépannage passerelle pour que les tâches nocturnes ne se marchent pas dessus après une reprise SSH.
Enfin, rapprochez les digests « fenêtre fermée » de ce que vous faites déjà côté santé avec OpenClaw Guardian et webhooks de santé : une seule notification structurée vaut mieux que dix pings ignorés.
- Déclencheur : OpenClaw ou launchd sur la location envoie
POST /repos/{owner}/{repo}/dispatchesune fois parbatch_idaccepté. - Chaîne : le segment A valide le payload, exécute le travail, puis poste le prochain event_type pour B (même PAT côté Mac, ou
GITHUB_TOKENdans Actions avec périmètre contenu suffisant pour rappeler l’API). - Agrégat : OpenClaw ingère les URL de run depuis
client_payloadou les sorties job et n’envoie qu’un digest par lot vers le canal d’astreinte.
PAT et périmètre minimal
Un dispatch utilise POST https://api.github.com/repos/OWNER/REPO/dispatches. Avec un PAT fine-grained, limitez le dépôt d’automatisation, activez la lecture Métadonnées et accordez Contents en lecture et écriture sur ce dépôt seul. Cette combinaison suffit généralement au contrat REST sans distribuer Actions : write à chaque script — périmètre souvent nécessaire quand on centre tout sur workflow_dispatch dans le guide jumeau.
Si la conformité l’exige, préférez un jeton d’installation GitHub App avec le même périmètre « contenu » sur le dépôt cible et une rotation mensuelle. Stockez les secrets dans le trousseau de session ou une plist root, et alignez les rotations sur les jalons semver décrits dans upgrade et rollback passerelle OpenClaw.
- Ne réutilisez pas un PAT qui administre l’organisation ou publie des paquets.
- Séparez les dépôts lorsque le code applicatif et l’infra doivent rester isolés ; les dispatches inter-dépôts impliquent un second jeton — documentez-le dans le runbook.
Conventions de payload
Traitez client_payload comme un contrat versionné. Les équipes d’automatisation figent les clés obligatoires dès le début : chaque job peut alors les vérifier avec un petit schéma JSON ou un garde jq avant tout effet de bord réseau.
| Champ | Rôle |
|---|---|
| batch_id | Clé d’idempotence pour les checkpoints sur le Mini |
| segment | Libellé humain reflété dans les journaux et les digests OpenClaw |
| correlation_id | UUID reliant journaux Mac, exécutions Actions et webhooks |
| issuer | openclaw_gateway | launchd | manual |
| artifact_ref | Pointeur stockage objet à la place d’un JSON lourd |
Exemple d’en-tête workflow écoutant deux segments :
on:
repository_dispatch:
types: [openclaw_night_a, openclaw_night_b]
Machine à états de chaîne
Modélisez le lot comme une machine explicite : EN_FILE (le Mac a accepté le créneau) → SEGMENT_A (premier dispatch délivré) → SEGMENT_B (dispatch suivant) → TERMINÉ ou ÉCHEC. Persistez le dernier batch_id et segment réussi sous /var/db ou le répertoire du service afin qu’un redémarrage ne rejoue pas des effets de bord.
La chaîne peut avancer de trois façons : un job final appelle l’API avec le PAT, un workflow réutilisable invoque gh api, ou le Mac interroge l’API Checks puis envoie l’événement suivant — choisissez un seul propriétaire d’horloge pour éviter les courses. Pour des vues d’ensemble plus larges, voir orchestration multi-scénarios OpenClaw.
- Émettre
openclaw_night_aavec un payload contenantnext_event_type=openclaw_night_bcomme indication, pas comme déclencheur automatique, tant que la validation n’a pas réussi. - En cas d’échec de validation, passer à ÉCHEC et n’emprunter le chemin d’alerte qu’une fois.
- En cas de succès, poster
openclaw_night_ben conservant le mêmecorrelation_id.
Fenêtre silencieuse
Concentrez le travail lourd sur disque APFS dans une bande locale calme (par exemple 01h00–05h00). La plist launchd n’invoque le script de déclenchement que dans cette bande ; hors fenêtre, le script sort en zéro sans appeler GitHub. Vous pouvez ajouter un garde côté workflow qui lit un fuseau TZ dans le payload et échoue vite si un opérateur lance un dispatch manuel en journée.
Lorsque le marketing ou le support chevauchent la nuit européenne, laissez OpenClaw mettre en buffer les tentatives ignorées : append JSONL dans une file locale, puis émettre un résumé unique des « envois supprimés » à la réouverture de la fenêtre — même esprit que les digests décrits dans les guides webhook et Guardian déjà cités.
Alertes d’échec et backoff
Entourez chaque appel HTTP d’un backoff exponentiel sur les réponses 429 et 5xx. Respectez Retry-After lorsqu’il est présent. Plafonnez le nombre total de tentatives (par exemple cinq) avant escalade. L’escalade doit être un webhook signé contenant batch_id, le dernier statut HTTP et un extrait tronqué du corps — jamais le PAT.
OpenClaw s’abonne à ce webhook, enrichit avec les dernières lignes des journaux du Mini, et n’ouvre un ticket que lorsque le budget de retry est épuisé : les tâches nocturnes ne pagent plus sur une panne GitHub transitoire.
Exemples curl et gh reproductibles
Exportez GITHUB_TOKEN ou placez un PAT fine-grained dans GH_TOKEN pour la CLI gh. Remplacez owner, repo et identifiants.
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": "REMPLACER_PAR_UUID",
"issuer": "openclaw_gateway"
}
}
JSON
Validez d’abord depuis un poste de confiance (réponse vide avec code 204, run visible sous Actions), puis déplacez la même commande dans un wrapper launchd root sur le Mac Mini loué.
Guide pas à pas (HowTo)
- Créer le PAT ou l’App, tester un POST manuel vers
dispatches. - Ajouter les
typesYAML et fusionner sur la branche par défaut. - Verrouiller le contrat
client_payloadet un test jq dans le premier step. - Implémenter la transition A→B (curl, gh ou policy OpenClaw) avec le même
correlation_id. - Brancher launchd sur la fenêtre silencieuse et écrire le fichier d’état batch.
- Brancher l’escalade backoff → webhook signé → digest OpenClaw.
FAQ
- Pourquoi ne pas tout faire en workflow_dispatch ?
- workflow_dispatch optimise la sélection explicite de workflow et d’entrées UI. repository_dispatch optimise les flux machine avec event_type et des jetons souvent plus étroits lorsque l’écriture Actions n’est pas requise depuis le Mini.
- repository_dispatch cible-t-il une branche précise ?
- Les workflows s’exécutent en principe sur la branche par défaut ; prévoyez des dépôts ou fichiers distincts pour les expérimentations de branche feature.
- Quel rôle pour OpenClaw si GitHub reste maître d’œuvre ?
- OpenClaw reste l’orchestrateur de bord : il décide quand tirer le premier dispatch, persiste les checkpoints et agrège les webhooks pour qu’un humain ne lise qu’un résumé par lot.
Synthèse. Une machine Apple Silicon dédiée aux chaînes repository_dispatch se commande comme le reste du catalogue : tarifs, achat sans compte, aide SSH/VNC, blog.
Louer un Mac Mini pour OpenClaw + chaînes repository_dispatch
Enchaînez des tâches nocturnes 7×24 avec de la marge CPU et NVMe. Accueil, forfaits, louer sans compte, aide, blog.
Mac Mini loué pour OpenClaw et l’API GitHub : achat, aide, blog.