Come Trasformare gli Agenti AI da Console in un Ufficio Pixel de 'The Office'
Recentemente mi sono imbattuto in una repository che è difficile ignorare se hai mai eseguito utility console autonome come Claude Code e hai pensato che gestire decine di schede terminale aperte sia incredibilmente scomodo. Il progetto si chiama Munder Difflin.

Gli autori hanno affrontato l'orchestrazione degli agenti terminale con un umorismo inaspettato. Hanno avvolto i processi console in un'applicazione desktop costruita con Electron e Pixi.js, dove ogni agente in esecuzione si muove in un ufficio pixel, porta buste virtuali e comunica con i colleghi attraverso il file system locale. A supervisionare tutto c'è il tuo clone di nome Michael, seduto in un ufficio separato.
Sembra un giocattolo scherzoso, ma sotto il cofano c'è un'impalcatura seria per eseguire Claude Code, Antigravity, OpenAI Codex, Kimi, Qwen e modelli locali in parallelo tramite Ollama.

Cos'è in sostanza
Invece di inventare un client API personalizzato per ogni modello, Munder Difflin utilizza gli strumenti CLI già pronti che esegui nel terminale. L'applicazione avvia un vero pseudo-terminale per ogni agente tramite node-pty e lo renderizza nell'interfaccia usando xterm.js.
Di conseguenza, l'agente lavora nel suo ambiente nativo. Mantiene l'accesso ai file locali, esegue test, fa commit e legge l'output della build esattamente come se lo avessi avviato manualmente in una normale scheda di iTerm o Alacritty.
La differenza principale è che i processi sono uniti in una rete condivisa. Assegni un task di alto livello all'agente orchestrator principale (agente GOD), che distribuisce i sottotask tra agenti specializzati, monitora il loro stato e chiede il tuo permesso solo prima di operazioni pericolose.
Come funziona l'interazione tra agenti
L'intera architettura è costruita su file locali e il protocollo Git, senza database cloud esterni.
Caselle di posta e memoria condivisa
Quando gli agenti devono passare contesto o risultati del lavoro, non chiamano RPC remote complesse. Il sistema utilizza un'architettura mailbox direttamente su disco:
- L'agente scrive un messaggio o un artefatto nella sua directory locale
outbox/. - Un router interno sposta il file nella cartella del destinatario
inbox/. - Il destinatario si attiva tramite un evento del file system, legge il messaggio e raccoglie il task.
- La memoria a lungo termine viene archiviata in Markdown normale e indicizzata da ricerca semantica locale per un rapido recupero del contesto tra le sessioni.
Per evitare che processi paralleli blocchino index.lock nel repository, le scritture nella cronologia dei commit passano attraverso un singolo processo committer.
Protezione da cicli infiniti e sforamento del budget
Uno dei principali problemi con gli agenti CLI autonomi è il rischio di looping, quando uno script inizia a correggere ripetutamente lo stesso test o a bombardare l'API con centinaia di richieste.
Munder Difflin ha un meccanismo Circuit Breaker integrato:
- ogni agente ha un limite rigido di token e monitoraggio dei costi in tempo reale delle richieste dai log.
- Il sistema traccia gli errori a cascata e i tentativi di retry dei comandi falliti.
- Quando si supera il budget o si manifesta un comportamento anomalo, l'agente riceve prima un avviso e una limitazione del contesto, e se i fallimenti continuano, viene fermato forzatamente.
- Le azioni distruttive, i cambiamenti di scope e la spesa di denaro richiedono conferma attraverso il pannello Approvals.
Cosa c'è dentro: stack tecnico
Architetturalmente, l'applicazione è divisa in due piani isolati che convergono in 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│
└─────────────────────┘
Il processo principale Node.js gestisce il ciclo di vita del terminale, il routing dei file e un database SQLite per la persistenza della cronologia delle sessioni. Il renderer su React e Pixi.js riceve i dati attraverso un bridge IPC tipizzato window.cth.
Oltre all'ufficio visivo, il client desktop include un editor Monaco integrato, una kanban board dei task con dipendenze, un visualizzatore diff Git e l'integrazione con webhook Slack. Puoi inviare un task a una chat di lavoro, Michael creerà un agente temporaneo in background, risolverà il problema e restituirà la risposta nel thread.
Come distribuire e provarlo
Per eseguirlo, avrai bisogno di Node.js 18+, un compilatore C/C++ per la compilazione del modulo nativo node-pty (su macOS, Xcode Command Line Tools è sufficiente) e almeno un agente console installato.
Clona la repository ed esegui il progetto in modalità sviluppo:
git clone https://github.com/chaitanyagiri/munder-difflin.git
cd munder-difflin
npm install
npm run dev
Al primo avvio, si aprirà una procedura guidata di configurazione. Lì puoi specificare i percorsi dei binari claude, codex, copilot o impostare gli indirizzi per i server locali LM Studio / Ollama / vLLM.
Se il binario richiesto non è nel sistema, l'applicazione può eseguire l'auto-installazione direttamente nella finestra del terminale integrato.
A chi sarà utile questo progetto
Munder Difflin è difficile da definire un'utility quotidiana leggera—Electron e il rendering degli sprite tramite Pixi.js richiedono prevedibilmente risorse. Ma se sperimenti frequentemente scenari multi-agente, scrivi refactoring complessi alimentati da più modelli, o sei stanco di controllare manualmente le esecuzioni parallele di Claude Code in tmux, c'è molto da imparare qui.
Il concetto di gestire i processi attraverso file Markdown, l'isolamento dei branch tramite git worktrees e il controllo visivo amichevole di ciò che sta accadendo rendono questo progetto uno degli hack open-source più originali attorno agli agenti AI locali. La repository riceve commit attivi, il codice è scritto in TypeScript pulito, quindi scavare negli hook interni e nei gestori PTY vale sicuramente la pena.
Progetti correlati