Faire tourner OpenClaw avec plusieurs paquets de compétences sur un Mac distant loué, c’est un partage de capacité : un projet bruyant peut affamer les autres ou vider les plafonds fournisseur. Il faut une couche budgétaire en passerelle : compteurs par locataire et par projet, fusibles explicites, dégradation documentée et journaux d’audit attribuables. Runbook reproductible après mise en ligne de la passerelle (Docker & durcissement, Ollama batch, sandbox sortie). Focus : dépense, jetons, multi-location, audit, moindre privilège.
① Modèle de budget et dimensions de comptage
Raisonnez en dimensions que vous pouvez attribuer dans les journaux. Sur un matériel loué partagé, l’attribution est votre facture interne — et votre défense lorsque la facture fournisseur grimpe.
- Locataire / centre de coûts — Identifiant stable (par ex. tenant=acme) propagé depuis la CI ou la session passerelle. Chaque événement compté doit l’inclure pour le multi-tenant.
- Projet ou paquet de compétences — Compteurs indépendants par dépôt ou bundle packagé (project=mobile-ci, pack=release-notes) afin qu’un pack ne consomme pas le quota d’un autre.
- Surface amont — Budgets séparés pour complétions type « OpenAI », embeddings, outils de recherche web et modèles auto-hébergés en loopback. Cette découpe affine la dégradation : vous pouvez limiter la surface coûteuse sans tuer les étapes locales bon marché.
- Fenêtres temporelles — Associez une fenêtre de rafale (par minute ou 10 secondes) à une fenêtre de budget (heure ou jour). La rafale limite orages thermiques et connexions sur le Mac ; le plafond journalier protège la ligne financière.
- Unité de comptage — Une unité primaire par route : requêtes HTTP vers un fournisseur, invocations d’outils journalisées par OpenClaw, USD estimé à partir des métadonnées d’usage, ou jetons fournisseur (prompt + complétion). Mélanger les unités dans un même compteur embrouille l’exploitation ; si vous avez besoin à la fois de requêtes et de jetons, maintenez deux séries parallèles avec les mêmes étiquettes.
Passerelle versus compétence : plafonds sur proxy, passerelle ou sidecar devant OpenClaw ; identifiants compétence courts et restreints. État des compteurs : Redis (multi-workers) ; limiteur mémoire seulement en labo.
② Fichiers de configuration et modèles de variables d’environnement
Versionnez les modèles à côté de votre compose ou de votre plist launchd. Les secrets restent dans un fichier d’environnement protégé sur l’hôte loué, pas dans le dépôt Git. Les noms ci-dessous sont indicatifs — mappez-les sur votre stack (Envoy, nginx + lua, Caddy avec module, petit sidecar Go, etc.).
.env.budget.example (à expurger avant diffusion externe) :
# Backend des compteurs
BUDGET_REDIS_URL=redis://127.0.0.1:6379/0
BUDGET_KEY_PREFIX=oc:gw:2026
# Valeurs par défaut si le client n’envoie pas d’en-tête projet
BUDGET_DEFAULT_TENANT=shared-lab
BUDGET_DEFAULT_PROJECT=misc
# Plafond journalier par locataire (USD estimé depuis en-têtes ou grille tarifaire)
BUDGET_TENANT_DAILY_USD_MAX=200
BUDGET_PROJECT_DAILY_USD_MAX=50
# Rafale : requêtes par minute par (locataire, projet)
BUDGET_RPM_BURST=60
# Fusible : fenêtre de taux d’erreur
FUSE_WINDOW_SEC=60
FUSE_ERROR_RATIO_OPEN=0.5
FUSE_COOLDOWN_SEC=120
# Audit
BUDGET_LOG_SAMPLE_RATE=1.0
BUDGET_LOG_REDACT_HEADERS=Authorization,X-Api-Key
Jetons à moindre privilège : clés fournisseur par locataire ou dépôt CI, mappées en métadonnées passerelle. Le jeton OpenClaw sur 18789 = transport uniquement — pas les clés modèle ni les jetons facturés. Runbook : trois familles (auth passerelle, clé fournisseur, dépense jetons). En production, exiger X-Tenant-Id et X-Project-Id ; rejeter l’absence d’étiquettes.
③ Fusibles et tableau de stratégie de dégradation
Un fusible s’ouvre lorsque le système est dégradé ou non rentable ; la dégradation décrit ce que vous faites pendant l’ouverture. Fixez les comportements à l’avance — sinon l’équipe improvise sous le bruit des alertes.
| Condition (ouverture fusible) | Détection | Comportement dégradé | Champs journal d’audit |
|---|---|---|---|
| USD journalier projet > plafond | Somme glissante depuis en-têtes d’usage ou grille | HTTP 429 + Retry-After ; file optionnelle pour rejeu asynchrone | tenant, project, window, spent, cap |
| Rafale RPM dépassée | Compteur glissant par clé | Réduction : couper d’abord les routes « basse priorité » (ex. synthèse optionnelle) | route_class, rpm, limit |
| Série de 5xx / timeouts amont | Ratio sur FUSE_WINDOW_SEC | Fusible ouvert : court-circuit vers réponse en cache, modèle local ou mode statique « dégradé » | error_ratio, upstream, fuse_state |
| Plafond global locataire (multi-projets) | Somme des projets sous l’id locataire | Arrêt dur pour ce locataire ; les autres non affectés | tenant_spend, projects_included |
| Pression disque / file sur le Mac | Métriques locales (volume scratch, profondeur jobs launchd) | Réduire la concurrence ; suspendre la classe de trafic non-CI | host, metric, action |
À la fermeture du fusible, remontez en semi-ouvert (sondage partiel puis restauration). Journalisez chaque transition ; sur disques loués recyclés, l’historique local est peu fiable.
④ Synergie avec la fréquence d’appels CI
La CI casse souvent le budget : workflows multiples, matrices et appels agent à chaque push se synchronisent et saturent les rafales.
- Clés CI dédiées — Associez les clés fournisseur (ou sous-clés passerelle) à tenant=ci et à des valeurs project par dépôt. Limitez la CI avec un plafond journalier USD plus bas que le développement interactif si les jobs sont explosifs.
- Jitter et décalage — Évitez cron 0 * * * * pour les crochets agent ; utilisez des offsets aléatoires ou des groupes de concurrence workflow pour lisser l’arrivée sur le Mac loué.
- Idempotence — Propagez un Idempotency-Key stable (ou SHA de commit) via la passerelle pour que les nouvelles tentatives après 429 ne facturent pas trois fois la même opération logique si le fournisseur a déjà accepté la première.
- Nœuds séparés pour les voies lourdes — Si builds mobile release et batch LLM partagent un seul Mac, répartissez-les sur deux locations ou créneaux horaires ; la couche budget aide, mais la physique (CPU et montant amont) demeure le fusible ultime.
Croisez avec concurrency et chemins lourds en workflow_dispatch : la passerelle fixe le plafond dur, la CI doit rester en dessous.
⑤ FAQ dépassements courants
Q : Les compteurs semblent corrects mais la facture fournisseur a encore bondi.
A : Cherchez un trafic qui contourne la passerelle (scripts locaux avec clés brutes, autre conteneur sur l’hôte, portable développeur dans la même org fournisseur). Faites tourner les clés et canalisez toute dépense de production vers le chemin compté.
Q : Un projet reçoit 429 pendant que les autres sont au repos.
A : Comportement attendu si des plafonds par projet s’appliquent. Augmentez le plafond via procédure, ou déplacez la charge vers une clé projet dédiée avec sa propre série budgétaire.
Q : Faut-il regrouper embeddings et chat dans un seul seau ?
A : Uniquement si vous voulez qu’ils se fassent concurrence. La plupart des équipes les séparent pour que les jobs retrieval massifs ne bloquent pas le support conversationnel en incident.
Q : Que doit contenir une ligne de journal pour un audit conforme ?
A : Horodatage (UTC), tenant, project, nom de route ou d’outil, décision (allow / deny_budget / fuse_open), coût estimé ou delta de jetons, identifiant de corrélation partagé avec les journaux d’outils OpenClaw. Masquez les secrets ; conservez les identifiants de version de politique.
Q : Redis a disparu — que se passe-t-il ?
A : Politique explicite fail-closed (protège la dépense, arrête le travail) ou fail-open (risque de dépassement). En lab loué, fail-closed aux heures ouvrées + alerte est souvent raisonnable.
Synthèse
OpenClaw multi-projets sur Mac loué reste prévisible lorsque les budgets sont étiquetés (locataire, projet, surface amont), appliqués en passerelle, soutenus par des fusibles et un tableau de dégradation, et expliqués par des journaux d’audit structurés. Associez les limites numériques à des clés fournisseur à moindre privilège et à une séparation claire entre authentification passerelle et dépense modèle. La CI exige ses propres clés et cadences pour ne pas synchroniser ses pics avec les compteurs utilisés en interactif.
Si la latence grimpe malgré des budgets sains, ajoutez du métal avant d’augmenter les plafonds. Tarifs et Achat (Mac mini M4, régions) sont lisibles sans compte ; Aide pour le dépannage. Louer ou acheter de la capacité stabilise passerelle, compteurs et sidecars 24h/24 et évite de saturer votre liaison quand plusieurs projets tirent les mêmes quotas API.