[đ ] AI Orchestration #2: Jâai remplacĂ© le Cell conçu comme un Linux Container par un utilisateur macOS
⚠Résumé de GPT-5.6 Sol
Le rĂ©cit de lâabandon du plan qui faisait dâune Linux VM et de Containers par utilisateur la solution par dĂ©faut, pour redĂ©finir lâunitĂ© dâexĂ©cution comme un utilisateur macOS par employĂ© avec OpenClaw native.
Jâai renversĂ© la structure de base en une seule journĂ©e
Hier, jâai reliĂ© un coordinateur et plusieurs workers en pratique. Jâai expĂ©rimentĂ© une mĂ©thode pour sĂ©parer les rĂ©sultats produits par plusieurs IA entre Worktrees, Branches et commits, avant de les rĂ©unir de nouveau.
En parallĂšle, je construisais aussi lâenvironnement dâexĂ©cution dâAI Orchestration. Jusquâau 14, la structure de base Ă©tait la suivante.
Mac mini
â 1 Colima Linux VM
â OpenClaw Cell Containers par employĂ©
CrĂ©er une Image commune et sĂ©parer le Network et le Volume de chaque employĂ© semblait faciliter le dĂ©ploiement et la reproductibilitĂ©. Jâavais dĂ©jĂ vĂ©rifiĂ© lâImage Linux arm64 officielle dâOpenClaw et créé une child Image ainsi quâun contrat de Cell Network. La voie qui consistait Ă isoler lâenvironnement de chaque employĂ© dans un Container Ă©tait dĂ©jĂ trĂšs concrĂšte.
Pourtant, le 15, jâai retirĂ© cette structure de la solution par dĂ©faut.
Ce que je voulais construire nâĂ©tait pas un service de Containers
En reformulant lâobjectif dâAI Orchestration, jâai vu ce qui ne correspondait pas.
Je voulais crĂ©er un environnement oĂč les employĂ©s nâauraient quâĂ dĂ©crire leur objectif dans le WebChat, puis oĂč une IA personnelle dĂ©couperait le travail nĂ©cessaire, choisirait les outils et le mĂšnerait jusquâau bout. Il ne sâagissait pas seulement de produire du code et des documents. LâIA devait aussi manipuler des apps Mac, lancer Xcode et Simulator, et laisser des rĂ©sultats rĂ©els dans le Workspace et sous la Git identity de lâutilisateur.
DĂšs quâon force un Linux Container Ă appeler des fonctions macOS, la structure devient Ă©trange. Il faut placer un exĂ©cuteur sĂ©parĂ© hors du Container, reconnecter ensuite les droits et les Ă©tats, puis transmettre le Keychain et la GUI Session de lâutilisateur. La couche ajoutĂ©e pour isoler oblige justement les fonctionnalitĂ©s essentielles Ă emprunter sans cesse des chemins dĂ©tournĂ©s.
OpenClaw nâĂ©tait pas non plus un simple stateless worker. Il ressemblait davantage Ă un environnement personnel qui rĂ©unit le Gateway, le Profile, la Session, la Memory, lâOAuth et lâĂ©tat dâexĂ©cution dâun utilisateur. Dans ce cas, câĂ©tait peut-ĂȘtre la dĂ©finition mĂȘme dâun Cell comme un Container qui Ă©tait erronĂ©e.
Le 15, jâai redĂ©fini le Cell.
1 employé
= 1 utilisateur macOS
= 1 OpenClaw Gateway indépendant
= 1 ensemble UID·HOME·Keychain
= 1 ensemble ChatGPT OAuth·CODEX_HOME
= 1 ensemble Workspace·Git identity·Session·Memory
Cette nouvelle structure crĂ©e un utilisateur macOS indĂ©pendant pour chaque employĂ© sur un mĂȘme Mac mini, puis exĂ©cute un OpenClaw Gateway complet en native dans chacun de ces comptes.
Les Containers sont restés des sandboxes optionnelles
LâexpĂ©rience avec les Containers avait apportĂ© des constats clairs. Les preuves concernant lâImage officielle, lâexĂ©cution non-root, une root read-only, la sĂ©paration du Network, les frontiĂšres des Volumes et credentials, lâImage provenance et le restart conservaient leur valeur.
La Linux VM et les Containers ne constituaient plus lâenvironnement Pilot par dĂ©faut. Ils devenaient des candidats au rĂŽle de sandbox, rĂ©servĂ©s aux tĂąches particuliĂšres qui exigeaient rĂ©ellement une isolation. Le macOS native devenait la base, et le Container un outil Ă employer une fois son besoin dĂ©montrĂ©.
SĂ©parer les utilisateurs macOS ne suffisait pas non plus Ă garantir lâisolation
La structure native semblait simple, mais elle soulevait encore plus de points à vérifier.
- lâemployĂ© connectĂ© et lâutilisateur macOS qui exĂ©cute rĂ©ellement le processus sont-ils bien la mĂȘme personne ?
- le Gateway, lâOAuth, le Workspace et lâauteur Git de cet utilisateur sont-ils correctement liĂ©s ?
- si lâauthentification dâun utilisateur Ă©choue, le systĂšme Ă©vite-t-il de basculer vers celle dâun autre ?
- est-il impossible dâaccĂ©der au HOME, au Keychain, au Port et au Workspace dâun autre utilisateur ?
- aprĂšs un changement rapide dâutilisateur ou un reboot, chaque Gateway retrouve-t-il son propre Ă©tat ?
Je ne me suis donc pas contentĂ© de changer la topology dans les documents. Jâai créé un nouveau contrat et de nouvelles Acceptance pour le native macOS Cell, puis laissĂ© en NOT_READY les Ă©lĂ©ments dĂ©pourvus de preuves rĂ©elles dans le Runtime.
La rĂ©ussite dâun test fixture ne permettait pas non plus dâaffirmer que lâisolation entre deux vrais utilisateurs Ă©tait terminĂ©e. Jâai sĂ©parĂ© le hash des fichiers dâentrĂ©e externes des preuves dâexĂ©cution des probes rĂ©els, puis continuĂ© Ă corriger le systĂšme pour empĂȘcher le contournement des vĂ©rifications par une valeur imitant un autre utilisateur, un symlink ou un alias de chemin macOS liĂ© Ă la casse ou Ă Unicode.
AprĂšs avoir changĂ© la topology Ă midi, jâai passĂ© lâaprĂšs-midi Ă enchaĂźner les commits pour fermer les « brĂšches qui permettaient de mentir en prĂ©tendant que le test Ă©tait passĂ© ». Rendre honnĂȘtes les conditions de rĂ©ussite de la nouvelle structure a demandĂ© davantage de code que le changement de structure lui-mĂȘme.
Jâai aussi sĂ©parĂ© les Workflows communs de lâĂ©tat personnel
MĂȘme en donnant Ă chaque employĂ© un environnement totalement indĂ©pendant, les Workflows communs gĂ©rĂ©s par lâentreprise devaient ĂȘtre distribuĂ©s dans une mĂȘme version. Ă lâinverse, la mise Ă jour dâun Workflow commun ne devait modifier ni lâOAuth, ni la Memory, ni le Workspace personnels.
Dans lâaprĂšs-midi du 15, jâai fixĂ© chaque Workflow Release par version et content hash, puis créé un contrat dâadmission qui nâautorisait que les releases validĂ©s. La sĂ©lection dâun nouveau release devait changer de maniĂšre atomique ; les tĂąches en cours devaient rester fixĂ©es sur le release choisi Ă leur dĂ©marrage ; et aucun release utilisĂ© ne devait disparaĂźtre pendant un rollback ou un nettoyage.
LĂ encore, je nâai pas Ă©crit que le systĂšme Ă©tait dĂ©ployĂ© dans lâemplacement partagĂ© du Mac simplement parce que le Source et les tests existaient. Un Runtime non installĂ© est restĂ© NOT_READY jusquâau bout.
Environnement dâexĂ©cution par dĂ©faut et validations restantes
- Cell par défaut : un compte utilisateur macOS natif par employé, avec un OpenClaw Gateway indépendant
- Isolation optionnelle : un Linux Container sandbox uniquement pour les tùches dont le besoin est démontré
- Ătat commun : un Workflow release fixĂ© par version et content hash
- Ătat personnel : OAuth, Memory, Workspace, Git identity et Session
- Isolation réelle entre plusieurs utilisateurs dans le Runtime :
NOT_READY
Le 15, jâai arrĂȘtĂ© la topologie. Lâisolation rĂ©elle entre deux utilisateurs et lâinstallation du Workflow commun devaient encore ĂȘtre confirmĂ©es par des preuves Runtime ultĂ©rieures.
Laisser un commentaire