Sur un pont IDE distant, deux peurs dominent : un agent ou un script qui réécrit au-delà du dépôt prévu, et une passerelle « à moitié vivante » que personne ne remarque tant que l’UI répond encore. En verrouillant le code en lecture seule, en concentrant toute écriture dans un bac à sable, en gardant la passerelle sur le loopback avec un jeton minimal, puis en ajoutant doctor et une sonde /health régulière, vous rendez les incidents auditables au lieu de mystérieux.

Ce guide suppose qu’OpenClaw est déjà installé sur le Mac distant ; pour l’installation et le vocabulaire (passerelle, préchargement des modèles), voir le centre d’aide · Guide OpenClaw. Nous partons d’un flux classique : VS Code, Cursor ou équivalent en Remote-SSH, l’IDE local pilotant la chaîne d’outils sur le serveur. Les articles automatisation, LLM et OpenClaw du blog posent le cadre passerelle / préfetch ; ici nous complétons par les frontières de privilèges et la visibilité opérationnelle. Pour la discipline disque d’un RAG local, croisez avec RAG local sur Mac (2026) : matrice chunk et quotas vectoriels ; pour le produit, l’accueil résume l’offre, et l’page d’achat permet de comparer régions et configurations sans engagement immédiat. Une expérience terrain sur Mac loué est décrite dans l’expérience freelance Mac mini M4 (2026).

Principes de conception (moindre privilège, 2026)

  • Passerelle uniquement en boucle locale. Lier openclaw gateway listen à 127.0.0.1 et n’atteindre ce port que via tunnel SSH inverse ou réseau interne. Évitez d’écouter sur 0.0.0.0 face à Internet sans couche TLS et filtrage adaptés.
  • Jeton découpé par scopes. Accorder seulement ce qui est nécessaire (workspace:read, exécutions sur liste blanche, etc.). Fichier token en 0600, référence via OPENCLAW_TOKEN_FILE ; ne jamais coller le secret dans le dépôt ni dans l’historique du shell.
  • Schéma « deux dossiers ». repo en lecture seule pour le code synchronisé ; scratch seul en écriture pour builds, caches, journaux de sondes et artefacts temporaires.
  • Changements visibles par diff synthétique. Avant et après chaque tâche automatisée, enregistrer git diff --stat (et index) pour que humains et scripts voient l’ampleur des modifications sans dump complet.
  • Doctor puis heartbeat. Après toute évolution de config, openclaw doctor (de préférence avec sortie JSON archivée) ; ensuite une requête périodique vers /health pour distinguer « processus présent » de « service réellement utilisable ».

Procédure reproductible

1. Répertoires et droits. Sur le Mac distant :

mkdir -p ~/ide-bridge/repo ~/ide-bridge/scratch/probe # Code cloné ou synchronisé sous repo, puis retrait du bit écriture (exemple) chmod -R a-w ~/ide-bridge/repo

Si plusieurs comptes cohabitent, vous pouvez affiner avec des ACL ou un utilisateur dédié à la passerelle pendant que l’IDE reste en lecture sur l’arbre source. L’objectif non négociable est que le chemin par défaut des agents ne modifie pas silencieusement le dépôt principal.

2. Jeton passerelle. Selon votre version de la CLI, émettez un jeton et enregistrez-le dans ~/.openclaw/gateway.token avec chmod 600. Dans ~/.zprofile ou l’environnement d’un service launchd, exportez OPENCLAW_TOKEN_FILE="$HOME/.openclaw/gateway.token". Évitez les export MON_TOKEN=… visibles dans tous les shells interactifs.

3. Démarrage de la passerelle (loopback). Harmonisez le port avec la configuration de l’IDE :

openclaw gateway listen \ --bind 127.0.0.1:18765 \ --token-file "$HOME/.openclaw/gateway.token"

Pour un service permanent, encapsulez dans un LaunchAgent avec KeepAlive et redirigez stdout/stderr vers ~/ide-bridge/scratch/logs/gateway.log afin de corréler redémarrages et sondes.

4. Workspace IDE. Racine Remote-SSH : ~/ide-bridge/repo. Orientez OUT_DIR, répertoires temporaires et caches OpenClaw vers ~/ide-bridge/scratch. Ainsi, une tentative d’écriture dans l’arbre « officiel » échoue tôt au lieu de polluer l’historique Git.

5. Journal de diff résumé. Entourez vos scripts d’automatisation :

LOG=~/ide-bridge/scratch/probe/diff-$(date +%F).log { echo "=== $(date -Iseconds) pre ==="; git -C ~/ide-bridge/repo diff --stat; \ git -C ~/ide-bridge/repo diff --cached --stat; } >> "$LOG" # … travail agent / CI … { echo "=== $(date -Iseconds) post ==="; git -C ~/ide-bridge/repo diff --stat; \ git -C ~/ide-bridge/repo diff --cached --stat; } >> "$LOG"

Sans afficher le diff complet, vous obtenez une courbe simple du « bruit » par session — utile pour les revues, les rollbacks et les alertes.

6. doctor et sonde de santé. Après modification de la configuration :

openclaw doctor --json > ~/ide-bridge/scratch/probe/doctor-last.json

Puis planifiez via launchd un appel toutes les cinq minutes (ajustez l’en-tête d’auth à votre mode réel) :

curl -fsS -H "Authorization: Bearer $(cat ~/.openclaw/gateway.token)" \ http://127.0.0.1:18765/health \ || echo "$(date -Iseconds) health FAIL" >> ~/ide-bridge/scratch/probe/health.log

En cas d’échec, enchaînez tail sur ce journal, les logs passerelle et un nouveau doctor. Les causes fréquentes (disque plein, port déjà pris) sont indépendantes du plan tarifaire — voir néanmoins les specs sur la page tarifs pour dimensionner RAM et stockage.

FAQ dépannage

/health répond 401 ou 403 ? Vérifiez les permissions du fichier token et le format exact de l’en-tête Authorization. Après rotation du secret, redémarrez à la fois la passerelle et le job launchd qui appelle curl, sinon deux versions du jeton coexistent.

EROFS ou refus d’écriture à la sauvegarde dans l’IDE ? Vous tentez d’écrire dans repo en lecture seule. Basculez l’édition vers un worktree inscriptible, un patch dans scratch ou une branche gérée hors arbre gelé, puis fusionnez proprement.

doctor se plaint des chemins de modèles ou du cache ? Forcez un répertoire cache sous ~/ide-bridge/scratch/openclaw-cache dans la configuration pour éviter un défaut qui pointerait vers un volume monté en lecture seule ou un partage réseau lent.

Les statistiques git diff restent vides ? Contrôlez que git -C ~/ide-bridge/repo cible bien la racine où se trouve .git. Pour les sous-modules, ajoutez des blocs séparés avec git -C chemin/sous-module.

Passerelle intermittente sans crash explicite ? Inspectez launchctl print, limites utilisateur et charge I/O ; comparez une sonde curl manuelle à un doctor pour savoir si le problème est réseau (tunnel) ou processus bloqué.

En bref : sandbox minimal = dépôt en lecture seule + scratch pour toute écriture + passerelle loopback + jeton à scopes réduits. Visibilité = ligne de base doctor --json + journaux diff --stat + appels réguliers à /health. Ce trio permet d’exploiter OpenClaw sur un Mac distant sans céder la machine entière à une seule expérience.