IA / Automatisation 8 mai 2026

2026 : incompatibilités de runtime Node OpenClaw MCP — pourquoi nvm fonctionne dans le Terminal alors que les sous-processus MCP plantent en ENOENT sur un Mac mini ProxyMac loué

Équipe technique ProxyMac 8 mai 2026 ~12 min de lecture

Les équipes qui déploient OpenClaw avec des serveurs MCP personnalisés sur des locations Mac mini M4 à Hong Kong, au Japon, en Corée, à Singapour et aux États-Unis collent souvent une stderr affichant /usr/bin/env: node: No such file or directory alors que Node v22 s’affiche parfaitement dans Terminal.app. Le coupable n’est pas « OpenClaw est cassé » : ce sont plusieurs installations Node qui se masquent mutuellement, dont une seule est héritée par les passerelles lancées par launchd. Ce manuel couvre (1) comment les piles amont supposent de plus en plus une sémantique Node moderne pour les transports MCP, (2) une table de symptômes reliant les chaînes errno aux correctifs, (3) pourquoi les hooks nvm ne s’exécutent pas sous LaunchAgents, (4) une échelle d’audit en neuf étapes croisée avec PATH et Homebrew, les variables d’environnement et le retour arrière de version, plus (5) les cas limites Corepack lorsque les shells MCP invoquent pnpm dlx. Repères chiffrés : Node 22 comme seuil de fonctionnalités, tempêtes de redémarrage 120 s, et zéro tolérance pour la dépendance implicite aux dotfiles dans les flottes réglementées.

La fracture de runtime : shells interactifs contre « planètes » LaunchAgent

Les sessions zsh interactives sourcent volontiers nvm.sh, préfixent les chemins Homebrew Apple Silicon et exposent les shims Corepack. launchd démarre OpenClaw avec un environnement clairsemé — souvent seulement /usr/bin:/bin:/usr/sbin:/sbin — sauf si votre plist énumère des ajouts. Les serveurs MCP héritent de ce que la passerelle parente a reçu ; les shebangs #!/usr/bin/env node explosent donc quand env ne trouve pas node sur ce morceau de PATH.

  • Métrique observable : capturez node -p process.execPath depuis le Terminal et depuis un petit job LaunchAgent d’echo — un désaccord dépassant un composant de chemin mérite une édition immédiate du plist.
  • Échecs ABI : mélanger des binaires arm64 avec des shells Rosetta donne des plantages V8 obscurs plutôt qu’un ENOENT propre — toujours un décalage de runtime.
  • Installations parallèles : Homebrew /opt/homebrew/bin/node, paquet pkg téléchargé à la main et builds gérés par nvm peuvent coexister ; un JSON CI copié qui ne référence qu’un seul cas casse ailleurs.
Astuce : estampez chaque archive Node déployée sur les mini cloud avec un fichier texte /etc/proxymac-node.channel listant semver + checksum — les opérateurs closent les tickets ambigus 35 % plus vite lorsqu’il existe.

Table de symptômes : chaînes errno pour les opérateurs MCP

Empreinte journalCause probablePremier geste correctif
env: node: No such filePATH sans préfixe brew/nvmAjouter un bloc PATH absolu ou un lien sous /usr/local/bin
Error: Cannot find module 'node:fs'Node trop ancien pour des import maps modernesPasser au canal LTS ≥22 selon la plateforme
MODULE_NOT_FOUND dans le worker MCPNODE_PATH absent pour le démonUtiliser un workingDirectory explicite ou empaqueter les dépendances
spawn EBADF après mise à jourInstallations partielles mélangéesRetour arrière via le guide de rollback

Pourquoi sourcer nvm.sh est le mauvais contrat de production

nvm retarde les téléchargements Node derrière des fonctions shell — idéal pour les humains, fragile pour l’automatisation de minuit. Installez plutôt un chemin d’interpréteur béni référencé directement par le JSON MCP, ou enveloppez avec /bin/bash -lc seulement après analyse des risques d’injection. Croisez avec l’hygiène des secrets du guide Trousseau pour que les enveloppes ne fuient pas de jetons via set -x.

Échelle d’audit runtime en neuf étapes

  1. Geler les déploiements : suspendez les fusions CI jusqu’à la fin du diagnostic — évitez de marteler launchctl kickstart.
  2. Vider le PATH effectif : instrumentez temporairement le LaunchAgent pour journaliser l’environnement trié (fichier protégé).
  3. Comparer les builds Node : exécutez node -p "[process.version, process.arch]" dans les deux contextes.
  4. Normaliser le JSON MCP : remplacez les indices d’interpréteur relatifs par des chemins d’exécution absolus.
  5. Aligner Corepack : activez une fois globalement avec des gestionnaires de paquets épinglés — documentez les versions.
  6. Recouper les montées OpenClaw : suivez la matrice de mise à niveau.
  7. Suivre le JSONL : corrélez stderr avec le guide journalisation.
  8. Valider ulimit : les gros monorepos épuisent parfois les descripteurs — voir ulimits.
  9. Publier l’ARC : relevez les régions touchées (HK / JP / KR / SG / US) et les points de terminaison semver.
À éviter : fourrer tout le .zshrc dans ProgramArguments du plist — les relecteurs ne peuvent pas raisonnablement différ des régressions de sécurité.

Corepack, pnpm et les points d’entrée MCP qui lancent des gestionnaires de paquets

Lorsque les définitions MCP appellent pnpm dlx ou yarn node, Corepack doit être activé de façon cohérente — les shells interactifs achèvent souvent des invites que launchd ne voit jamais. Prévoyez des drapeaux non interactifs et des miroirs de cache sous des répertoires appartenant au service pour que les répliques HK et US se comportent pareil.

FAQ

Docker fait-il disparaître ce problème ? Les conteneurs épinglent les images OS mais vous devez toujours choisir une image de base Node — même discipline semver.

Apple Silicon compte-t-il ? Oui — des binaires universels construits sur des portables Intel ciblent mal les mini arm64.

Où placer les sessions SSH ? Le SSH manuel hérite des shells de connexion ; les processus passerelle non — traitez les tests SSH comme des indices, pas comme un contrat.

Pourquoi le Mac mini ProxyMac convient à un calage Node rigoureux

Les hôtes Mac mini M4 loués en HK / JP / KR / SG / US offrent des environnements Apple Silicon déterministes sans délai d’achat — idéal quand les passerelles MCP doivent suivre le rythme Node amont chaque mois. Associez la location matérielle sur la page tarifs à la doc opérationnelle du centre d’aide ; utilisez VNC lorsque des installateurs GUI doivent cliquer Gatekeeper interactivement.

Expédiez MCP avec un seul binaire Node validé

OpenClaw · MCP · HK / JP / KR / SG / US