Munder Difflin — локальный мультиагентный харнес для Claude Code
📂 Исходный код на GitHubЛокальный мультиагентный харнес для Claude Code: агенты с памятью, почтой и визуализацией на 2D-офисе, координируемые GOD-оркестратором.
Munder Difflin — локальный мультиагентный харнес для Claude Code. Десктопное приложение на Electron, которое превращает отдельные терминальные сессии claude в координированную команду: каждый агент получает долгосрочную память, почтовый ящик и рабочее место на 2D-офисном этаже. GOD-оркестратор маршрутизирует задачи между агентами, а вы наблюдаете за процессом в реальном времени.
Репозиторий: github.com/chaitanyagiri/munder-difflin
Что это
Munder Difflin — это десктопное приложение (Electron + React + TypeScript), которое оборачивает реальные процессы Claude Code в полностью автономных агентов. Каждый claude-сеанс работает как отдельный процесс в псевдотерминале (node-pty), отображается через xterm.js и представлен аватаром на Pixi.js-сцене офисного этажа.
Название — отсылка к Dunder Mifflin из сериала «Офис»: 15 аватаров основаны на персонажах шоу, а GOD-агент сидит в «кабинете Майкла».
Как устроена архитектура
Система работает на двух плоскостях данных, которые сходятся в одном рендерере:
Терминальная плоскость — PtyManager в главном процессе порождает каждого агента как node-pty-процесс и стримит вывод через IPC (pty:data:<id>). Рендерер общается только через типизированный мост window.cth.
Плоскость событий (hive) — hive.ts реализует дисковый мультиагентный слой: идентичность + память агента, атомарные почтовые ящики, общая доска объявлений (blackboard), append-only лог событий. hooks.ts поднимает Unix-socket сервер, куда каждый агентный cth-hook шим отправляет хуки Claude Code (PreToolUse, PostToolUse, Stop). Роутер доставляет сообщения, GOD-агент adjudицирует, а Stop-loop заставляет idle-агентов опустошать свои инбоксы.
вы ── говорите с ──► ┌─────────────┐
│ GOD-агент │ оркестратор / супервизор
│ (кабинет │ ростер · маршрутизация
│ Майкла) │ blackboard · задача ledger
└──────┬──────┘
│ назначает · маршрутизирует · эскалирует
┌─────────────────────────┼─────────────────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ агент A │ сообщение │ агент B │ сообщение │ агент C │
│ claude │ ──────────► │ claude │ ──────────► │ claude │
│ + память │ │ + память │ │ + память │
└───────────┘ └───────────┘ └───────────┘
└──────── общий hive: память · почта · blackboard · лог ────────┘
Агенты сотрудничают через hive — локальный git-репозиторий обычных файлов. Каждый агент пишет в свой outbox/, харнес-роутер доставляет в inbox/ получателя. Ни один агент не трогает git напрямую (single-committer дизайн исключает index.lock-коррупцию).
GOD-оркестратор
GOD-агент — это постоянно работающий супервизор, который:
- Читает каждый запрос и разрешает рутинные задачи самостоятельно
- Маршрутизирует сложные задачи нужным агентам
- Эскалирует только критичные вопросы (траты, деструктивные операции, изменения scope) в очередь подтверждений для человека
- Ведёт blackboard и задач ledger
Слой памяти
Память каждого агента — markdown-файлы, из которых строится общий семантический индекс (memory palace) для мгновенного recall. Если индекс не установлен, система деградирует грациозно — markdown-память продолжает работать. Поиск по памяти доступен из UI.
Визуализация офисного этажа
Pixi.js-сцена с Tiled-картой офиса, камерой, 15 перекрашенными аватарами (персонажи «Офиса»), pathfinding-ом и привязкой к рабочим местам. Когда hive маршрутизирует сообщение, конверт летит от отправителя к получателю, окрашенный по типу речевого акта. Эскалации летят к двери с искрой прибытия.
Дизайн-система — Animal Crossing × Earthbound × SNES menu UI: пиксельные панели, кнопки, бейджи. Фирменные цвета — бордовый (#6E1423) и золотой (#6E1423).
Ключевые возможности
| Область | Что работает |
|---|---|
| Терминалы | Запуск любой команды (по умолчанию claude) в node-pty PTY. Чтение/запись/ресайз/kill, live streaming через IPC |
| Hive | Дисковый мультиагентный слой: идентичность + долгосрочная память, атомарные почтовые ящики, blackboard, append-only лог, single-committer git |
| GOD-оркестратор | Супервизор, который adjudицирует трафик, маршрутизирует задачи, эскалирует только критичные items |
| Память | Markdown-first долгосрочная память + семантический palace для мгновенного recall |
| Git-изоляция | Переключатель «Git isolation» автоматически создаёт git worktree для каждого агента при spawn и удаляет при kill |
| Токен-телеметрия | Activity-таб читает ~/.claude/projects/ JSONL-транскрипты и показывает реальные токены + стоимость USD |
| Канбан задач | Dependency-aware доска в Command Center: назначение задач агентам, статусы todo/doing/blocked/done |
| Запланированные миссии | Повторяющиеся auto-dispatch миссии с таймером — пол продолжает работать без человека |
| GitHub-ингестия | Загрузка открытых issues через gh CLI и назначение их агентам в один клик |
| CI-статус | Live pass/fail/in-progress для GitHub Actions в Activity-табе |
| Потоки сообщений | Hive-сообщения сгруппированы по беседам и отображаются как цепочки ответов |
| Desktop-уведомления | Нативные уведомления OS при завершении задачи или ожидании ввода |
| Архивация агентов | Закрытие вкладки агента архивирует его (память + история сохраняются) |
Command Center
«Кабинет Майкла» — панель управления с вкладками:
- Terminal — обзор всех терминалов
- Floor — ростер агентов + dispatch + выбор модели для каждого агента
- Memory — MemPalace + текстовый поиск + граф памяти
- Activity — лог + доска + реальная токен-телеметрия + CI-вотчер
- Tasks — канбан с зависимостями и трекингом статуса
- Schedules — повторяющиеся миссии на таймере
Установка и запуск
Требования:
- macOS (платформа первого приоритета; Windows/Linux тоже поддерживаются)
- Node.js 18+ и npm
- C/C++ toolchain для нативного аддона
node-pty(xcode-select --install) - Claude Code на
PATH
git clone https://github.com/chaitanyagiri/munder-difflin.git
cd munder-difflin
npm install # postinstall пересобирает node-pty под ABI Electron
npm run dev # запуск Electron-приложения с hot reload
При первом запуске пройдите onboarding-визард, затем используйте Add agent для создания первого сеанса. GOD-агент автоматически сядет в кабинет Майкла.
Стек технологий
- Electron + React + TypeScript — десктоп-приложение
- Pixi.js — 2D-сцена офисного этажа
- xterm.js — рендеринг терминалов
- node-pty — псевдотерминалы
- zustand — стейт-менеджмент
- CodeMirror — редактор файлов
- electron-vite — сборка
- Remotion — анимация для лендинга
Лицензия
Исходный код — MIT. Пиксель-арт ассеты от LimeZu (non-commercial use only) — для коммерческого использования нужна платная лицензия LimeZu или замена ассетов. Munder Difflin — пародия, не аффилирована с NBC или Dunder Mifflin.