2026 OpenClaw, pratique front sur Mac distant :
Webhook de preview, Lighthouse CLI, seuils JSON, codes de sortie et digest lisible en pull request
Public : équipes qui font tourner une passerelle OpenClaw sur un Mac loué à distance et veulent une chaîne unique et reproductible depuis le webhook de déploiement (URL de preview) jusqu’au Lighthouse CLI, au fichier seuils JSON versionné, aux codes de sortie exploitables par CI, puis à un résumé Markdown directement lisible dans la pull request. Fichier unique : 2026-openclaw-remote-mac-preview-lighthouse-webhook.html. Pour l’intégration GitHub Deployments, voir Deployments + Lighthouse ; pour les en-têtes de fumée côté fournisseur, hook Vercel et en-têtes ; pour les alertes planifiées, Lighthouse performance alert.
Les webhooks de preview transportent preview_url et les métadonnées de commit. Une CI Linux ne reproduit ni le composite GPU Apple ni le chemin Safari / WebKit qu’empruntent vos utilisateurs. Une passerelle OpenClaw sur Mac distant vérifie les signatures, normalise le JSON, exécute Lighthouse CLI (Chromium headless pour des scores de laboratoire stables), compare lhr.json à un seuils JSON figé dans le dépôt, traduit les régressions en code de sortie 2 et les incidents réseau ou d’auth en code 3, puis émet un digest PR court que les revues peuvent scanner sur mobile.
Résultat attendu. Une seule URL HTTPS côté passerelle, des artefacts sous .openclaw/reports/, et un bloc Markdown identique entre le commentaire bot et, si vous le souhaitez, la ligne NDJSON consommée par vos tableaux de bord OpenClaw. En complément, une fumée WebKit sur le même hôte relie l’automatisation à un navigateur réel sans confondre les missions : Lighthouse pour la mesure lab, Safari pour le signal moteur natif.
Ce que ce modèle élimine
- Hooks non authentifiés. Un
curlnu depuis la CI vers un script shell expose rejouabilité, absence d’audit et fuite de jetons. - Verdicts prisonniers de la console. Si le score Lighthouse ne revient pas sur GitHub, la PR part en revue alors que la régression n’existe que dans l’historique du terminal.
- Comparaisons bruitées. Sans Chromium épinglé, chauffe HTTP cohérente et budgets numériques JSON, les seuils oscillent et les équipes désactivent les alertes.
01 Pourquoi OpenClaw doit terminer le webhook côté passerelle
Les capacités webhook de la passerelle OpenClaw s’articulent autour de quatre responsabilités : terminaison TLS, vérification HMAC (ou mTLS si vous préférez certificats mutuels), limite de débit et journalisation structurée (souvent une ligne NDJSON par phase). Lorsque Vercel, Netlify, Cloudflare Pages ou votre orchestrateur interne envoie un deployment webhook, la passerelle rejette les corps hors fenêtre temporelle, déduplique avec Idempotency-Key, puis confie l’exécution lourde au Mac loué afin que les PAT GitHub et secrets PaaS ne transitent pas sur le bord public. Vous réutilisez la même ingress pour d’autres portes documentées, par exemple Lighthouse pré-déploiement ou métriques de build en synthèse PR.
Après Lighthouse (Chromium), programmez une courte session Safari / WebKit — Playwright webkit, XCTest web, ou capture manuelle pilotée — sur le même profil machine. L’objectif n’est pas de dupliquer Lighthouse : c’est d’aligner la discussion produit sur « ce que voit Safari » tout en conservant une porte numérique automatisable pour la fusion.
02 Matrice d’ingress
| Approche | Atout | Compromis |
|---|---|---|
| Webhook passerelle OpenClaw | Vérification centralisée des signatures, normalisation JSON, déduplication partagée, enchaînement immédiat sur du matériel Apple. | Vous opérez certificats TLS, politiques de backoff et supervision vous-mêmes. |
GitHub repository_dispatch seul |
Piste d’audit native dans GitHub. | Flux chaud et traces NDJSON côté Mac exigent souvent de dupliquer des jetons dans Actions. |
03 Étapes HowTo reproductibles
- Publier le hook. POST JSON vers la route HTTPS OpenClaw avec en-tête de signature ; rejeter les horodatages obsolètes (> quelques minutes).
- Normaliser les champs. Mapper les clés fournisseur vers
PREVIEW_URL, capturerGIT_SHA,PR_NUMBER, émettreOPENCLAW_RUN_IDunique. - Mettre en file sur le Mac. Écrire un job sous
.openclaw/queue/; un agentlaunchdou observateur local relance le worker pour survivre aux micro-coupures SSH. - Chauffer la preview. Deux GET (document + bundle JS principal) avec le user-agent Lighthouse ; backoff exponentiel sur
429. - Lancer Lighthouse CLI. Par exemple
pnpm exec lighthouse "$PREVIEW_URL" --only-categories=performance --output=json --output-path=".openclaw/reports/${OPENCLAW_RUN_ID}.lhr.json" --chrome-flags="--headless=new"; épinglez la révision Chromium par branche. - Évaluer les seuils. Lire
perf/thresholds.jsonau commit courant ; produireverdict.jsonavec deltas chiffrés. - Codes de sortie.
0succès,2régression produit,3infra (timeout, 403 persistant, certificat) après une relance contrôlée. - Publier le digest. Remplir le gabarit ci-dessous, POST vers l’API commentaires ou Checks, ajouter une ligne NDJSON
phase=preview_lighthousepour corrélation.
# Garde minimale avant fork worker (exemple)
set -euo pipefail
test -n "${PREVIEW_URL:-}" && test -n "${GIT_SHA:-}" || exit 3
# openclaw-hook-verify --secret "$HOOK_SECRET" --body "$RAW_BODY" --sig "$SIG_HEADER" || exit 3
04 Tableau des seuils, JSON et codes de sortie
| Métrique | Budget indicatif | Action en échec |
|---|---|---|
| Score performance | >= 0,85 préréglage mobile |
Sortie 2 ; afficher le delta vs artefact baseline archivé. |
| LCP / CLS / TBT | LCP <= 2500 ms, CLS <= 0,08, TBT <= 200 ms |
Sortie 2 ; citer la métrique dominante en premier. |
| Timeout de navigation | maxWaitForLoad <= 45000 ms |
Une relance puis 3 pour ne pas confondre avec une régression Lighthouse. |
{
"performance": { "minScore": 0.85 },
"metrics": {
"largest-contentful-paint": { "maxNumericValue": 2500 },
"cumulative-layout-shift": { "maxNumericValue": 0.08 },
"total-blocking-time": { "maxNumericValue": 200 }
}
}
Code 0 : tous les budgets respectés. Code 2 : régression mesurable — bloquer ou signaler la fusion selon votre politique. Code 3 : infrastructure ou authentification — relève de l’exploitation, pas du produit front.
05 Gabarit de digest lisible en pull request
Restez sous ~4 Ko pour l’application mobile GitHub. Si vous synchronisez aussi l’onglet Déploiements, réutilisez le même texte comme dans le guide API Deployments + Lighthouse.
### OpenClaw · Porte Lighthouse (preview)
- **Run** `OPENCLAW_RUN_ID` @ `GIT_SHA` sur Mac distant (Chromium épinglé)
- **URL** `PREVIEW_URL`
- **Scores** perf **{{score}}** (Δ {{delta}} vs baseline)
- **Métriques** LCP **{{lcp}} ms**, CLS **{{cls}}**, TBT **{{tbt}} ms**
- **Verdict** {{pass_or_fail}} — journaux `.openclaw/reports/{{run}}.lhr.json`
- **WebKit** {{webkit_smoke_one_liner}}
Épingler Chromium chaque semaine ; archiver lhr.json sous .openclaw/reports/${OPENCLAW_RUN_ID}.lhr.json ; ajouter en pied de commentaire une ligne WebKit (« smoke OK / échec étape X ») pour rappeler le Mac réel derrière l’automatisation.
06 FAQ : 403, timeouts, hooks en double
Pourquoi Lighthouse voit HTTP 403 sur la preview ?
Les règles deploy protection, les pare-feux « humains seulement » ou un Authorization absent bloquent Chrome headless. Répliquez les en-têtes validés dans la fumée Deployment Hook, autorisez l’IP de sortie du Mac, ou injectez un jeton courte durée via variable d’environnement — jamais en clair dans le corps de PR.
Comment éviter que des timeouts flaky bloquent les merges ?
Autorisez une seule relance avec le même OPENCLAW_RUN_ID, augmentez légèrement --max-wait-for-load, puis basculez en code 3 pour que la file distingue incident d’hébergement et baisse de score.
Le fournisseur envoie deux webhooks identiques : que faire ?
Exigez Idempotency-Key: ${GIT_SHA}:${OPENCLAW_RUN_ID}:lighthouse côté passerelle et ignorez les POST si l’entrée de file existe déjà, afin d’éviter un double run Lighthouse coûteux.
Le même Apple Silicon que vos portes Safari
Ouvrez l’accueil, consultez l’aide (SSH, VNC, premiers pas), comparez les tarifs, puis passez par la page achat ou location — le tout sans compte obligatoire. Revenez à l’index du blog pour d’autres playbooks OpenClaw.