AI Frontier

Profils d’espace OpenClaw sur macOS en 2026 : passerelles staging vs production, isolation LaunchAgent et fumées doctor sur Mac mini cloud

MacHTML Lab2026.05.13environ 34 min de lecture

En 2026, les équipes qui pilotent OpenClaw veulent souvent une passerelle staging à côté d’une passerelle production sur le même Mac mini physique pour raccourcir la procurement—puis elles voient les deux profils écraser le même cache de jetons, se battre pour TCP 8787 ou hériter du même PATH parce que launchd a recyclé un modèle de plist. Ce guide propose une séparation opérationnelle : répertoires racine distincts, ports non chevauchants, labels LaunchAgent différents, journaux séparés et une fumée doctor-first alignée avec la triade EADDRINUSE, le premier démarrage PATH/Node et les diagnostics doctor.

Vous repartez avec une matrice de ports, une checklist collable dans les tickets et des chiffres tangibles—environ 16,9 $ par jour de location, paire de ports 8787/8788, droits 700 sur les répertoires et une fenêtre de fumée de cinq minutes avant d’accepter le trafic.

Pourquoi deux profils sur un Mac

Les nœuds Mac mini Apple Silicon restent silencieux avec deux passerelles, offrent la sémantique native de launchd et correspondent aux pilotes CapEx-light attendus par la finance. Louer via MacHTML se situe autour de 16,9 $/jour sur les pages publiques—moins cher qu’expédier le mauvais profil en production parce que staging a tourné une clé API lue par les deux instances. Séparer les profils garde les listes d’outils expérimentales loin de l’automatisation client tout en permettant des diffs plist sur du métal réel plutôt que dans un CI Linux sans invites Trousseau.

Modèle mental strict : les profils sont des frontières d’isolement, pas des feature flags. Chaque profil possède son répertoire de configuration, ses journaux, son port, son label LaunchAgent et son calendrier de rotation des secrets.

Répertoires et secrets

Créez ~/.openclaw-staging et ~/.openclaw-prod avec chmod 700 pour empêcher d’autres comptes console de traverser les caches. Stockez jetons fournisseurs, état sqlite et skills téléchargés dans chaque racine—ne liez jamais staging vers production « pour gagner du disque ». Le disque coûte moins qu’un incident : même un mini 512 Go vaut moins qu’une conversation production mal routée si des identifiants staging fuient via un cache partagé.

Documentez quel utilisateur d’automatisation possède chaque arbre. Si les deux agents partagent le même utilisateur macOS, la séparation repose entièrement sur les répertoires et les arguments plist—gardez les noms de dossiers si vous migrez vers des comptes séparés.

Labels, journaux, blocs d’environnement

Utilisez des labels distincts comme com.example.openclaw.gateway.staging et com.example.openclaw.gateway.prod ; des labels dupliqués font redémarrer le mauvais monde avec launchctl kickstart -k. Pointez StandardOutPath et StandardErrorPath vers des fichiers séparés sous ~/Library/Logs/OpenClaw/ pour permettre des tail -F propres.

Dans chaque plist, définissez LaunchEnvironmentVariables avec le binaire Node absolu issu de which node, un PATH élagué listant les shims Homebrew ou volta avant les chemins système, et une variable comme OPENCLAW_PROFILE_DIR vers la racine du profil. Testez la plist manuellement avant launchctl bootstrap gui/$(id -u).

Pendant les boucles de crash, fixez ThrottleInterval à au moins 10 secondes pour éviter des milliers de traces identiques.

Matrice ports et responsabilités

DimensionStagingProduction
Port d’écoute87878788
Racine de config~/.openclaw-staging~/.openclaw-prod
Label LaunchAgent…gateway.staging…gateway.prod
Rotation des cléshebdomadaire en dev actifmensuelle ou par fenêtre de changement
doctoravant chaque preview de mergeaprès chaque tag de déploiement

Surveillance, dérive et instantanés launchctl

Archivez chaque semaine la sortie de launchctl print gui/$(id -u) par profil et comparez les empreintes SHA-256 des plists exportées avec votre gestionnaire de configuration. Un simple espace ou un BOM invisible suffit à faire diverger launchd silencieusement.

Exposez des histogrammes légers : nombre d’appels d’outils actifs, latence moyenne vers l’API modèle, taux de réponses 429 et nombre de doctor verts par jour. Limitez la cardinalité—pas plus de 12 buckets par histogramme pour éviter d’étouffer Prometheus sur le mini.

Testez sauvegarde/restauration chaque trimestre : supprimez staging puis restaurez depuis le dernier tarball ; pour la production, faites un dry-run documenté. Objectif : moins de 30 minutes jusqu’au health check vert.

Proxys inverses, boucle locale et pièges

Terminez TLS sur nginx ou Caddy et proxifiez vers la boucle locale. Gardez les passerelles sur 127.0.0.1 sauf règles pare-feu explicites—0.0.0.0 expose l’automation au LAN. Alignez les timeouts idle à ±5 % entre staging et production pour conserver la reproductibilité.

La Trousseau couple discrètement : deux profils partageant le même certificat client réutilisent souvent le même déverrouillage de session. Joignez des captures security find-identity -v -p codesigning aux tickets d’audit.

Incident : une page de runbook indiquant quel bootout en premier, quel port vider, quel tarball restaurer et quels drapeaux doctor étaient verts. Évitez killall node, qui contourne launchd et laisse un troisième processus fantôme.

Capacité, RAM et dégradation douce

Deux passerelles Node plus proxy consomment vite 6 à 8 Go résidents sur un mini 16 Go lorsque les sorties d’outils sont tamponnées. Fixez des limites dures—par exemple quatre workers simultanés en staging et huit en production—et notez-les dans la revue capacitaire.

Le CPU Apple Silicon tient bien, mais la modulation thermique après de longs builds peut changer le JIT. Laissez 45 minutes après un gros npm install avant d’exiger des health checks verts.

En cas d’OOM, arrêtez uniquement le label fautif pour garder l’autre passerelle comme témoin pendant la collecte de dumps. Référencez les articles sur les codes de sortie dans le post-mortem.

Checklist de déploiement

  1. Créer les répertoires chmod 700 et vérifier avec ls -le.
  2. Contrôler lsof -nP -iTCP:8787 -sTCP:LISTEN et 8788.
  3. Diff des plists : seuls label, chemins, ports, environnement changent.
  4. Lancer openclaw doctor depuis chaque racine avec l’environnement cible.
  5. Démarrer staging ; trois sondes 200 sur 127.0.0.1:8787 espacées de deux secondes.
  6. Bootstrap production et répéter sur 8788.
  7. Archiver les SHA-256 des plists dans le ticket.
  8. Documenter le rollback bootout production puis retour staging seul.

Si les sondes échouent alors que doctor est vert, vérifiez l’adresse de bind : mélanger 127.0.0.1 et 0.0.0.0 rend les checks menteurs—l’URL de probe doit égaler ProgramArguments.

FAQ

Partager un seul répertoire de configuration ?

Non—caches de jetons, verrous sqlite et skills entrent en collision.

Un seul nom d’hôte public ?

Terminez TLS au proxy et routez par SNI ou chemin vers deux ports loopback.

Prouver l’isolement à la sécurité ?

Labels distincts, journaux séparés, clés API différentes, captures doctor horodatées.

Pourquoi pas Docker sur Linux ?

Pas de launchd/Trousseau/GPU Apple Silicon identiques à la prod desktop.

Les Mac mini Apple Silicon loués restent silencieux avec deux passerelles Node, des smokes Safari et log stream, souvent sous 12 W au repos bureau. MacHTML fournit SSH et VNC optionnel pour revues plist à deux sans envoyer d’ordinateurs à l’international. Fin du pilote : arrêtez l’instance et payez les jours calendaires utilisés.

Les profils OpenClaw sont temporaires : staging bouge chaque semaine, la production doit rester ennuyeuse. La location rend les deux réalités sur un même bureau silencieux sans acheter une seconde tour inutilisée.

Réessayer deux profils OpenClaw sur macOS réel

Louez un Mac mini cloud pour valider l’isolement des plists, les ports séparés et doctor avant merge production.

Mac cloud profils doubles
Dès 16,9 $/jour