Jak zamienić konsolowe agenty AI w pikselowe biuro z The Office
Niedawno natknąłem się na repozytorium, obok którego trudno przejść, jeśli kiedykolwiek uruchamiałeś autonomiczne narzędzia konsolowe takie jak Claude Code i złapałeś się na tym, że zarządzanie dziesiątkami otwartych kart terminala jest niezwykle niewygodne. Projekt nazywa się Munder Difflin.

Autorzy podeszli do orkiestracji agentów terminalowych z nieoczekiwanym humorem. Opakowali procesy konsolowe w aplikację desktopową zbudowaną z Electron i Pixi.js, gdzie każdy działający agent spaceruje po pikselowym biurze, nosi wirtualne koperty i komunikuje się ze współpracownikami przez lokalny system plików. Nad wszystkim czuwa twoja kopia o imieniu Michael, siedząca w osobnym biurze.
Brzmi jak żart, ale pod maską kryje się poważny szkielet do uruchamiania Claude Code, Antigravity, OpenAI Codex, Kimi, Qwen i modeli lokalnych równolegle przez Ollama.

Co to w ogóle jest
Zamiast wymyślać niestandardowego klienta API dla każdego modelu, Munder Difflin wykorzystuje gotowe narzędzia CLI, które już uruchamiasz w terminalu. Aplikacja uruchamia prawdziwy pseudo-terminal dla każdego agenta przez node-pty i renderuje go w interfejsie za pomocą xterm.js.
W rezultacie agent pracuje w swoim natywnym środowisku. Zachowuje dostęp do lokalnych plików, uruchamia testy, wykonuje commity i czyta wyniki builda dokładnie tak, jakbyś uruchomił go ręcznie w zwykłej karcie iTerm lub Alacritty.
Główna różnica polega na tym, że procesy są zjednoczone we wspólną sieć. Zadasz wysokopoziomowe zadanie głównemu agentowi-orkiestratorowi (agent GOD), który rozdziela podzadania między wyspecjalizowanych agentów, monitoruje ich status i prosi o twoją zgodę tylko przed niebezpiecznymi operacjami.
Jak działa interakcja agentów
Cała architektura jest zbudowana na lokalnych plikach i protokole Git, bez zewnętrznych baz danych w chmurze.
Skrzynki pocztowe i pamięć współdzielona
Gdy agenci muszą przekazać kontekst lub wyniki pracy, nie wywołują skomplikowanych zdalnych RPC. System wykorzystuje architekturę skrzynek pocztowych bezpośrednio na dysku:
- Agent zapisuje wiadomość lub artefakt do swojego lokalnego katalogu
outbox/. - Wewnętrzny router przenosi plik do folderu odbiorcy
inbox/. - Odbiorca budzi się przez zdarzenie systemu plików, czyta wiadomość i odbiera zadanie.
- Długoterminowa pamięć jest przechowywana w zwykłym Markdown i indeksowana przez lokalne wyszukiwanie semantyczne dla szybkiego pobierania kontekstu między sesjami.
Aby zapobiec blokowaniu index.lock w repozytorium przez równoległe procesy, zapisy do historii commitów przechodzą przez pojedynczy proces committera.
Ochrona przed nieskończonymi pętlami i przekroczeniem budżetu
Jednym z głównych problemów autonomicznych agentów CLI jest ryzyko zapętlenia, gdy skrypt zaczyna wielokrotnie naprawiać ten sam test lub bombardować API setkami żądań.
Munder Difflin ma wbudowany mechanizm Circuit Breaker:
- Każdy agent ma twardy limit tokenów i monitorowanie kosztów żądań w czasie rzeczywistym z logów.
- System śledzi kaskadowe błędy i próby ponowień nieudanych poleceń.
- Przy przekroczeniu budżetu lub nietypowym zachowaniu, agent najpierw otrzymuje ostrzeżenie i ograniczenie kontekstu, a jeśli błędy trwają, jest zatrzymywany siłą.
- Działania destrukcyjne, zmiany zakresu i wydawanie pieniędzy wymagają potwierdzenia przez panel Approvals.
Co w środku: stos technologiczny
Architektonicznie aplikacja jest podzielona na dwie izolowane płaszczyzny, które zbiegają się w 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│
└─────────────────────┘
Główny proces Node.js zarządza cyklem życia terminala, routingiem plików i bazą danych SQLite dla trwałości historii sesji. Renderer w React i Pixi.js odbiera dane przez typizowany mostek IPC window.cth.
Oprócz wizualnego biura, klient desktopowy zawiera wbudowany edytor Monaco, tablicę kanban zadań z zależnościami, przeglądarkę diffów Git i integrację ze Slack webhook. Możesz wysłać zadanie na czat roboczy, Michael utworzy tymczasowego agenta w tle, rozwiąże problem i zwróci odpowiedź do wątku.
Jak wdrożyć i wypróbować
Aby uruchomić, potrzebujesz Node.js 18+, kompilatora C/C++ do budowania natywnego modułu node-pty (na macOS wystarczą Xcode Command Line Tools) oraz co najmniej jednego zainstalowanego agenta konsolowego.
Sklonuj repozytorium i uruchom projekt w trybie deweloperskim:
git clone https://github.com/chaitanyagiri/munder-difflin.git
cd munder-difflin
npm install
npm run dev
Przy pierwszym uruchomieniu otworzy się kreator konfiguracji. Możesz tam określić ścieżki do binarek claude, codex, copilot lub ustawić adresy dla lokalnych serwerów LM Studio / Ollama / vLLM.
Jeśli wymagana binarka nie znajduje się w systemie, aplikacja może przeprowadzić auto-instalację bezpośrednio w wbudowanym oknie terminala.
Komu przyda się ten projekt
Munder Difflin trudno nazwać lekkim narzędziem codziennego użytku — Electron i renderowanie sprite'ów przez Pixi.js przewidywalnie wymagają zasobów. Ale jeśli często eksperymentujesz z scenariuszami multi-agent, piszesz złożone refaktoryzacje wspierane przez wiele modeli, lub masz dość ręcznego kontrolowania równoległych uruchomień Claude Code w tmux, jest tu wiele do zaczerpnięcia.
Koncepcja zarządzania procesami przez pliki Markdown, izolacji przez git worktrees i przyjaznej wizualnej kontroli tego, co się dzieje, sprawia, że ten projekt jest jednym z najbardziej oryginalnych open-source'owych hacków wokół lokalnych agentów AI. Repozytorium jest aktywnie rozwijane, kod jest napisany w czystym TypeScript, więc zgłębianie wewnętrznych hooków i handlerów PTY zdecydowanie warto.
Powiązane projekty