Munder Difflin — локальный мультиагентный харнес для Claude Code

· 2 мин чтения
multi-agent claude-code electron memory orchestration
📂 Исходный код на GitHub

Локальный мультиагентный харнес для Claude Code: агенты с памятью, почтой и визуализацией на 2D-офисе, координируемые GOD-оркестратором.

Munder Difflin — локальный мультиагентный харнес для Claude Code

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.

Источник: https://github.com/chaitanyagiri/munder-difflin