Comment transformer des agents IA en ligne de commande en un bureau pixelisé inspiré de The Office
Récemment, je suis tombé sur un dépôt difficile à ignorer si vous avez déjà exécuté des utilitaires console autonomes comme Claude Code et vous êtes dit que gérer des dizaines d'onglets de terminal ouverts est incroyablement peu pratique. Le projet s'appelle Munder Difflin.

Les auteurs ont abordé l'orchestration des agents terminal avec un humour inattendu. Ils ont enveloppé les processus console dans une application de bureau construite avec Electron et Pixi.js, où chaque agent en cours d'exécution se promène dans un bureau pixelisé, transporte des enveloppes virtuelles et communique avec ses collègues via le système de fichiers local. Surveillant le tout se trouve votre clone nommé Michael, assis dans un bureau séparé.
Ça ressemble à un jouet humoristique, mais sous le capot, il y a une infrastructure sérieuse pour exécuter Claude Code, Antigravity, OpenAI Codex, Kimi, Qwen et des modèles locaux en parallèle via Ollama.

Qu'est-ce que c'est exactement
Au lieu d'inventer un client API personnalisé pour chaque modèle, Munder Difflin utilise les outils CLI existants que vous exécutez déjà dans le terminal. L'application fait tourner un véritable pseudo-terminal pour chaque agent via node-pty et le rend dans l'interface en utilisant xterm.js.
En conséquence, l'agent fonctionne dans son environnement natif. Il conserve l'accès aux fichiers locaux, exécute les tests, fait des commits et lit la sortie de build exactement comme si vous l'aviez lancé manuellement dans un onglet iTerm ou Alacritty classique.
La principale différence est que les processus sont unis en un réseau partagé. Vous donnez une tâche de haut niveau à l'agent orchestrateur principal (agent GOD), qui distribue les sous-tâches entre les agents spécialisés, surveille leur état et ne demande votre permission que avant les opérations dangereuses.
Comment fonctionne l'interaction des agents
Toute l'architecture est construite sur des fichiers locaux et le protocole Git, sans bases de données cloud externes.
Boîtes aux lettres et mémoire partagée
Lorsque les agents doivent transmettre du contexte ou des résultats de travail, ils n'appellent pas de RPC distants complexes. Le système utilise une architecture de boîte aux lettres directement sur le disque :
- L'agent écrit un message ou un artefact dans son répertoire local
outbox/. - Un routeur interne déplace le fichier vers le dossier du destinataire
inbox/. - Le destinataire se réveille via un événement du système de fichiers, lit le message et récupère la tâche.
- La mémoire à long terme est stockée en Markdown brut et indexée par recherche sémantique locale pour une récupération rapide du contexte entre les sessions.
Pour éviter que les processus parallèles ne bloquent index.lock dans le dépôt, les écritures dans l'historique des commits passent par un processus de commit unique.
Protection contre les boucles infinies et les dépassements de budget
L'un des principaux problèmes des agents CLI autonomes est le risque de boucle infinie, lorsqu'un script commence à corriger répétitivement le même test ou à bombarder l'API de centaines de requêtes.
Munder Difflin dispose d'un mécanisme de disjoncteur intégré :
- Chaque agent a une limite de tokens stricte et une surveillance des coûts en temps réel des requêtes à partir des logs.
- Le système suit les erreurs en cascade et les tentatives de réessai des commandes échouées.
- En cas de dépassement du budget ou de comportement anormal, l'agent reçoit d'abord un avertissement et une limitation du contexte, et si les échecs persistent, il est arrêté de force.
- Les actions destructives, les changements de portée et les dépenses nécessitent une confirmation via le panneau Approbations.
Ce qu'il y a à l'intérieur : pile technique
Architecturalement, l'application est divisée en deux plans isolés qui convergent dans Electron :
┌───────────────────────────────────────────────────────────────┐
│ Electron Renderer (React) │
│ ┌──────────────────┐ ┌──────────────────────────────┐ │
│ │ Office Floor │ │ Terminal + Command Bar │ │
│ │ (Pixi.js) │ │ Files + Git tabs (xterm.js) │ │
│ └─────────▲────────┘ └────────────▲─────────────────┘ │
│ │ avatar state │ pty bytes / fs / git │
└─────────────┼──────────────────────────┼──────────────────────┘
│ IPC (contextBridge: window.cth)
┌──────┴──────────┐ ┌──────┴─────────────┐
│ Event Plane │ │ Terminal Plane │
│ hooks / hive │ │ node-pty PTYs │
│ router + GOD │ │ + fs + git │
└────────▲────────┘ └──────▲─────────────┘
│ hook payloads │ stdin / stdout
└─────────┬──────────────┘
┌──────┴──────────────┐
│ claude / agy / codex│
└─────────────────────┘
Le processus principal Node.js gère le cycle de vie du terminal, le routage des fichiers et une base de données SQLite pour la persistance de l'historique des sessions. Le renderer sur React et Pixi.js reçoit les données via un pont IPC typé window.cth.
Au-delà du bureau visuel, le client de bureau comprend un éditeur Monaco intégré, un tableau kanban de tâches avec des dépendances, une visionneuse de diff Git et une intégration Slack webhook. Vous pouvez envoyer une tâche à un chat de travail, Michael créera un agent temporaire en arrière-plan, résoudra le problème et retournera la réponse au fil.
Comment déployer et essayer
Pour l'exécuter, vous aurez besoin de Node.js 18+, d'un compilateur C/C++ pour construire le module natif node-pty (sur macOS, Xcode Command Line Tools est suffisant) et d'au moins un agent console installé.
Clonez le dépôt et exécutez le projet en mode développement :
git clone https://github.com/chaitanyagiri/munder-difflin.git
cd munder-difflin
npm install
npm run dev
Lors du premier lancement, un assistant d'installation s'ouvrira. Vous pouvez y spécifier les chemins vers les binaires claude, codex, copilot ou définir les adresses des serveurs LM Studio / Ollama / vLLM locaux.
Si le binaire requis n'est pas dans le système, l'application peut exécuter l'auto-installation directement dans la fenêtre du terminal intégré.
Qui bénéficiera de ce projet
Munder Difflin est difficile à qualifier d'utilitaire léger quotidien — Electron et le rendu de sprites via Pixi.js consomment inévitablement des ressources. Mais si vous expérimentez fréquemment avec des scénarios multi-agents, écrivez des refactorisations complexes alimentées par plusieurs modèles, ou êtes fatigué de contrôler manuellement les lancements parallèles de Claude Code dans tmux, il y a beaucoup à apprendre ici.
Le concept de gestion des processus via des fichiers Markdown, l'isolation des branches via les git worktrees et le contrôle visuel convivial de ce qui se passe font de ce projet l'un des hacks open source les plus originaux autour des agents IA locaux. Le dépôt est activement maintenu, le code est écrit en TypeScript propre, donc explorer les hooks internes et les gestionnaires PTY vaut définitivement le coup.
Projets similaires