Local multi-agent harness for the terminal coding CLIs you already run — Claude Code, Antigravity (Gemini), OpenAI Codex, OpenCode, Crush, pi.dev, and GitHub Copilot CLI — with bring-your-own keys and local LLMs.
$ npx -y skills add chaitanyagiri/munder-difflin --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: chaitanyagiri/munder-difflin
What's inside
Local multi-agent harness for the terminal coding CLIs you already run — Claude Code, Antigravity (Gemini), OpenAI Codex, OpenCode, Crush, pi.dev, and GitHub Copilot CLI — with bring-your-own keys and local LLMs. Autonomous agents that message, route, and remember — coordinated by a GOD orchestrator you talk to, and visualized as avatars at work on a shared office floor.
[!NOTE] The world's best agents. The world's worst paper company. Munder Difflin takes the terminal-agent CLIs you already run —
claude,agy,codex,opencode,crush,pi, andcopilot— and turns them into a self-coordinating team: each agent gets long-term memory, a mailbox, and a desk on a 2D office floor — and a GOD orchestrator agent routes work between them while you watch.
Munder Difflin is a desktop app that wraps real terminal-agent CLIs as fully-capable agents, wires them into a hive mind, and puts a GOD orchestration agent in charge — the one agent you talk to in order to get things done. Under the hood it runs the fastest memory layer in the world so every agent remembers what it learns and recalls it instantly.
claude, agy, codex, opencode, crush, pi, copilot, or custom session runs as a real
process in a pseudo-terminal (node-pty), byte-for-byte authentic, rendered with xterm.js. you ── talk to ──► ┌─────────────┐
│ GOD agent │ orchestrator / supervisor
│ (Michael's │ roster · routing · adjudication
│ office) │ blackboard · task ledger
└──────┬──────┘
│ assigns · routes · escalates
┌────────────────────────┼────────────────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ agent A │ message │ agent B │ message │ agent C │
│ provider │ ─────────► │ provider │ ─────────► │ provider │
│ + memory │ │ + memory │ │ + memory │
└───────────┘ └───────────┘ └───────────┘
└──────── shared hive: memory · mailbox · blackboard · log ───────┘
claude, agy, codex, or custom)
with its own working directory, identity, and provider-specific lifecycle.outbox/; the harness's router delivers into recipients' inbox/. No agent ever touches git
(single-committer design avoids index.lock corruption).See HIVE.md for the full multi-agent design, SPEC.md for the
terminal/event plane, and DESIGN.md for the visual system.
The floor
node-pty PTY, rendered with xterm.js.Memory & coordination
Control & safety
Command Center
Getting work in and out
munderdifflin://hire link; import only pre-fills the form, a human still spawns it. Browse roles at the Agent Gallery.[!NOTE] Status: v0.3.7 — auto-update, fixed. A CommonJS/ESM import bug meant the native updater silently never ran in any packaged build from v0.3.4 on, so the app could only ever offer a link to the releases page. It now works, the toolbar version doubles as the update button, and update errors reach the UI and a log file instead of being swallowed. Existing v0.3.5 / v0.3.6 installs carry the broken updater and must install v0.3.7 manually, once — after that, updates are automatic. macOS (signed & notarized), Windows, and Linux builds are on the releases page.
node-pty's native addon — on macOS, install Xcode Command Line Tools:
xcode-select --install
PATH — Claude Code
(claude, the default), Antigravity (agy), OpenAI Codex (codex), xAI Grok (grok),
Kimi Code (kimi), OpenCode (opencode), Crush (crush), pi.dev (pi), or
GitHub Copilot (copilot). Most missing CLIs self-heal: the harness runs the installer in the
terminal and continues into the new binary.git clone https://github.com/chaitanyagiri/munder-difflin.git
cd munder-difflin
npm install # postinstall rebuilds node-pty against Electron's ABI
npm run dev # launches the Electron app with hot reload
On first launch you'll go through the onboarding wizard, then land on the floor. Use Add agent to spawn your first session — the GOD agent seats itself in Michael's office automatically.
npm run build # production build via electron-vite
npm run preview # preview the production build
npm run typecheck # type-check the node (main/preload) and web (renderer) projects
If
node-ptyfails to load after an Electron upgrade, re-runnpm install(thepostinstallhook runselectron-rebuildagainst the current Electron ABI).
Two data planes feed one renderer:
┌───────────────────────────────────────────────────────────────┐
│ 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│
└─────────────────────┘
PtyManager that spawns each agent as a node-pty
process and streams output over per-id IPC (pty:data:<id>). The renderer talks only through a
typed window.cth bridge (src/preload/index.ts), which also exposes
sandboxed filesystem and git helpers.hive.ts is the on-disk multi-agent layer; hooks.ts runs the hook
server that provider bridges POST lifecycle payloads to (cth-hook for Claude Code, agy-hook
for Antigravity). memory.ts wraps the semantic memory CLI. The router delivers messages, drains
provider outboxes, the GOD agent adjudicates, and idle/inbox wakeups keep workers draining mail.src/
main/ Electron main process (Node)
index.ts window, IPC handlers, quit guard
pty.ts node-pty manager (spawn/write/resize/kill/stream)
hive.ts on-disk multi-agent layer (memory, mailboxes, router)
hooks.ts hook server + provider hook shims (`cth-hook`, `agy-hook`)
memory.ts semantic memory layer (CLI wrapper, degrade-to-noop)
config.ts harness config persistence + home setup
transcript.ts reads ~/.claude/projects/ JSONL transcripts for real token/cost telemetry
telemetry.ts live OTel collector + usage/cost feed for observability
usage.ts / pricing.ts UsageProvider seam + per-model cost attribution
breaker.ts / control.ts cost/runaway circuit breaker (steer/constrain/stop) + HITL gate / steer / stop
reflect.ts MemoryReflector — memory condensation
db.ts SQLite durable store (window bounds + history) + durable cost ledger
github.ts GitHub issue + CI run ingestion via the gh CLI
shellEnv.ts resolve PATH and shell env for child processes
fs.ts / git.ts sandboxed filesystem + git bridges
preload/ contextBridge → typed window.cth API
renderer/src/
App.tsx top-level layout + wiring
design/ tokens.css / tokens.ts / global.css (design source of truth)
components/ PixelPanel, AgentDetailPanel, CommandBar, ApprovalsPanel, MemoryPanel, …
CommandCenterPanel, Michael's control surface (Terminal/Floor/Memory/Activity/Tasks/Schedules/Handbook tabs)
ToolWaterfall, per-agent tool-span waterfall for the observability view
TasksKanban, dependency-aware kanban board (Tasks tab)
ThreadsPanel, hive message conversation viewer (Messages tab)
MessageQueueComposer, park messages for a busy agent
scene/office/ Pixi office floor: OfficeFloor, Character, Camera, cast, pathfinding, …
store/ · hooks/ zustand store, event loop, PTY parser, typewriter
assets/ tilesets, maps, character sheets (see ATTRIBUTION.md)
docs/ `logo.png`, `banner.png`, landing page (GitHub Pages → munderdiffl.in)
docs/media/ `og.png` (social previews) + rendered Remotion clips
landing-remotion/ Remotion project that renders the landing page's "how it works" clips
HIVE.md · SPEC.md · DESIGN.md multi-agent · terminal/event · visual design
docs/message-queue.md who may type into an agent's terminal, and when
The aesthetic is Animal Crossing × Earthbound × SNES menu UI — pixel-snapped, chunky, friendly.
DESIGN.md is canonical; every component derives from its tokens. The Munder Difflin
brand layers a Dunder-Mifflin maroon (#6E1423) and gold (#F4D35E) on top for logo and
chrome. The 15 avatars are the cast of The Office, differentiated by hair/skin/shirt recipes.
Shipped through v0.3.7 — nine agent engines with BYOK keys and local LLMs, voice orchestration,
the hive (memory · mailboxes · blackboard · event log), Command Center with kanban and schedules,
a built-in Monaco IDE with git rails, integrations registry + secret broker, Slack-spawned workers,
shareable hires and the Agent Gallery, observability and the circuit breaker, durable persistence,
session resume, multi-window floors, and working auto-update.
Full history in CHANGELOG.md.
Next up:
Contributions are welcome — this is an early prototype with a lot of surface area. Start with
CONTRIBUTING.md. The short version: fork, npm install && npm run dev, keep
npm run typecheck green, and derive any new UI from DESIGN.md tokens. Good
first areas: wiring real hook events, the add-agent flow, the config drawer, and cross-platform work.
[!IMPORTANT] Asset licensing. The bundled pixel art (tilesets, maps, and the base character sheets the Office cast is recolored from) comes from LimeZu via
shahar061/the-officeunder the LimeZu FREE VERSION license — non-commercial use only. The recolored sprites inherit that restriction. Seesrc/renderer/src/assets/ATTRIBUTION.md. To commercialize, replace these assets or obtain a paid LimeZu license.
The source code is licensed under the MIT License — see LICENSE. The MIT grant
covers the code only; the non-commercial asset restriction above is carved out in the LICENSE scope
note. Munder Difflin is an affectionate parody and is not affiliated with NBC's The Office or
Dunder Mifflin.
shahar061/the-office — office tileset/map vendoring.landing-remotion/)..github/
FUNDING.yml
ISSUE_TEMPLATE/
bug_report.yml
config.yml
feature_request.yml
PULL_REQUEST_TEMPLATE.md
workflows/
blog.yml
ci.yml
release.yml
.gitignore
blog/
.gitignore
BLOG_README.md
eleventy.config.js
package-lock.json
package.json
scripts/
postbuild.mjs
src/
_data/
build.js
site.js
_includes/
base.njk
card.njk
footer.njk
nav.njk
page.njk
post.njk
404.njk
about.md
assets/
blog.css
feed.njk
index.njk
posts/
agent-security-and-sandboxing.md
agents-rule-of-two.md
ai-agent-glossary.md
append-only-event-log-agents.md
architecture-two-planes-one-renderer.md
atomic-file-mailboxes-for-agents.md
best-ai-coding-agents.md
best-claude-code-multi-agent-tools.md
building-a-terminal-ui-xterm-node-pty.md
building-an-ai-office-floor.md
building-reliable-ai-agents.md
can-claude-code-agents-talk-to-each-other.md
claude-code-automation-while-you-sleep.md
claude-code-git-worktrees-vs-hive.md
claude-code-hooks-explained.md
claude-code-multi-agent-setup-tutorial.md
claude-code-orchestration-guide.md
claude-code-orchestration-tools-compared.md
claude-code-subagents-vs-multi-agent-harness.md
claude-squad-alternative.md
claude-squad-vs-munder-difflin.md
cline-vs-munder-difflin.md
command-center-guide.md
compressing-agent-memory.md
conductor-claude-code-alternative.md
context-engineering-for-ai-agents.md
coordinating-ai-coding-agents.md
crewai-autogen-vs-a-local-agent-harness.md
crystal-claude-code-alternative.md
debugging-multi-agent-systems.md
deploy-a-blog-writer-agent.md
deploy-automated-pr-reviewer-agent.md
do-more-with-less-model-routing.md
does-the-june-2026-agent-sdk-change-affect-munder-difflin.md
evaluating-ai-agent-reliability.md
file-based-coordination-vs-message-queues.md
from-one-terminal-to-a-team.md
generative-engine-optimization-techniques.md
github-copilot-cli-vs-claude-code-for-hive-work.md
give-claude-code-long-term-memory.md
hire-manifest-untrusted-input.md
how-agents-remember-semantic-memory.md
how-ai-agents-verify-their-own-work.md
how-ai-answer-engines-choose-sources.md
how-the-god-orchestrator-works.md
how-to-add-a-github-copilot-cli-agent.md
how-to-choose-a-multi-agent-tool.md
how-to-hire-from-the-agent-gallery.md
how-to-install-and-use-munder-difflin.md
how-to-run-multiple-claude-code-agents.md
how-to-talk-to-your-orchestrator.md
how-to-use-the-built-in-monaco-ide.md
human-in-the-loop-ai-agents.md
human-in-the-loop-approving-ai-agents.md
keep-agent-semantic-memory-clean.md
launching-munder-difflin-v0-2-0.md
launching-munder-difflin-v0-2-4.md
launching-munder-difflin-v0-2-8.md
launching-munder-difflin-v0-3-0.md
launching-munder-difflin-v0-3-2.md
launching-munder-difflin-v0-3-3.md
launching-munder-difflin-v0-3-5.md
local-first-ai-agent-orchestration.md
local-first-vs-cloud-agent-sdks.md
long-running-agents-the-2026-shift.md
loop-engineering-for-ai-agents.md
manage-multiple-claude-code-sessions.md
markdown-first-agent-memory.md
mcp-and-skills-in-a-hive.md
mcp-security-tool-poisoning.md
multi-agent-orchestration-patterns.md
munder-difflin-faq.md
munder-difflin-v0-2-4-feature-walkthrough.md
node-pty-electron-real-terminals.md
observability-for-agent-fleets.md
one-prompt-automated-pr-review.md
open-source-ai-tools-on-purpose.md
orca-vs-munder-difflin.md
overnight-ai-coding-realistic-expectations.md
posts.json
prompt-caching-for-ai-agents.md
qm-vs-munder-difflin.md
recovering-from-agent-failures.md
rendering-many-live-terminals-performance.md
review-agent-work-where-it-happens.md
run-a-mixed-engine-office.md
run-ai-agent-hive-from-slack-setup.md
run-an-office-of-ai-agents.md
run-munder-difflin-on-a-mac-mini.md
run-munder-difflin-on-open-models.md
scheduling-autonomous-agent-missions.md
security-for-ai-coding-agents.md
semantic-memory-for-ai-agents.md
shareable-agent-roles.md
single-committer-git-pattern.md
small-team-ai-agents-playbook.md
the-clone-army-trap-mixed-swarm-vs-identical-agents.md
the-hook-shim-pattern.md
the-lethal-trifecta-for-coding-agents.md
the-multi-agent-cost-playbook.md
the-office-parody-behind-munder-difflin.md
tmux-and-scripts-vs-an-agent-harness.md
trigger-ai-agents-from-github-webhook.md
trigger-ai-agents-from-slack.md
vibe-kanban-alternative.md
visualizing-ai-agents-pixijs.md
voice-as-a-control-plane-for-agent-fleets.md
what-are-claude-code-agents.md
what-is-a-multi-agent-harness.md
what-is-aeo-for-dev-tools.md
what-is-an-agent-development-environment.md
what-is-harness-engineering.md
whats-new-in-agentic-ai-june-2026.md
whats-up-with-munder-difflin.md
when-do-agents-need-an-agent-protocol.md
why-cli-agents-are-powerful.md
why-local-first-matters-for-ai-agents.md
why-our-auto-update-never-ran.md
why-we-built-munder-difflin.md
your-first-hour-with-munder-difflin.md
sitemap.njk
tag.njk
topic.njk
topics-index.njk
build/
entitlements.mac.plist
icon.icns
icon.ico
icon.png
icon.svg
notarize.cjs
SIGNING.md
CHANGELOG.md
CODE_OF_CONDUCT.md
CONTRIBUTING.md
DESIGN.md
docs/
banner.png
banner.svg
blog/
404.html
about/
index.html
agent-security-and-sandboxing/
index.html
agents-rule-of-two/
index.html
ai-agent-glossary/
index.html
append-only-event-log-agents/
index.html
architecture-two-planes-one-renderer/
index.html
assets/
blog.css
atomic-file-mailboxes-for-agents/
index.html
best-ai-coding-agents/
index.html
best-claude-code-multi-agent-tools/
index.html
building-a-terminal-ui-xterm-node-pty/
index.html
building-an-ai-office-floor/
index.html
building-reliable-ai-agents/
index.html
can-claude-code-agents-talk-to-each-other/
index.html
claude-code-automation-while-you-sleep/
index.html
claude-code-git-worktrees-vs-hive/
index.html
claude-code-hooks-explained/
index.html
claude-code-multi-agent-setup-tutorial/
index.html
claude-code-orchestration-guide/
index.html
claude-code-orchestration-tools-compared/
index.html
claude-code-subagents-vs-multi-agent-harness/
index.html
claude-squad-alternative/
index.html
claude-squad-vs-munder-difflin/
index.html
cline-vs-munder-difflin/
index.html
command-center-guide/
index.html
compressing-agent-memory/
index.html
conductor-claude-code-alternative/
index.html
context-engineering-for-ai-agents/
index.html
coordinating-ai-coding-agents/
index.html
crewai-autogen-vs-a-local-agent-harness/
index.html
crystal-claude-code-alternative/
index.html
debugging-multi-agent-systems/
index.html
deploy-a-blog-writer-agent/
index.html
deploy-automated-pr-reviewer-agent/
index.html
do-more-with-less-model-routing/
index.html
does-the-june-2026-agent-sdk-change-affect-munder-difflin/
index.html
evaluating-ai-agent-reliability/
index.html
feed.xml
file-based-coordination-vs-message-queues/
index.html
from-one-terminal-to-a-team/
index.html
generative-engine-optimization-techniques/
index.html
github-copilot-cli-vs-claude-code-for-hive-work/
index.html
give-claude-code-long-term-memory/
index.html
hire-manifest-untrusted-input/
index.html
how-agents-remember-semantic-memory/
index.html
how-ai-agents-verify-their-own-work/
index.html
how-ai-answer-engines-choose-sources/
index.html
how-the-god-orchestrator-works/
index.html
how-to-add-a-github-copilot-cli-agent/
index.html
how-to-choose-a-multi-agent-tool/
index.html
how-to-hire-from-the-agent-gallery/
index.html
how-to-install-and-use-munder-difflin/
index.html
how-to-run-multiple-claude-code-agents/
index.html
how-to-talk-to-your-orchestrator/
index.html
how-to-use-the-built-in-monaco-ide/
index.html
human-in-the-loop-ai-agents/
index.html
human-in-the-loop-approving-ai-agents/
index.html
index.html
keep-agent-semantic-memory-clean/
index.html
launching-munder-difflin-v0-2-0/
index.html
launching-munder-difflin-v0-2-4/
index.html
launching-munder-difflin-v0-2-8/
index.html
launching-munder-difflin-v0-3-0/
index.html
launching-munder-difflin-v0-3-2/
index.html
launching-munder-difflin-v0-3-3/
index.html
launching-munder-difflin-v0-3-5/
index.html
local-first-ai-agent-orchestration/
index.html
local-first-vs-cloud-agent-sdks/
index.html
long-running-agents-the-2026-shift/
index.html
loop-engineering-for-ai-agents/
index.html
manage-multiple-claude-code-sessions/
index.html
markdown-first-agent-memory/
index.html
mcp-and-skills-in-a-hive/
index.html
mcp-security-tool-poisoning/
index.html
multi-agent-orchestration-patterns/
index.html
munder-difflin-faq/
index.html
munder-difflin-v0-2-4-feature-walkthrough/
index.html
node-pty-electron-real-terminals/
index.html
observability-for-agent-fleets/
index.html
one-prompt-automated-pr-review/
index.html
open-source-ai-tools-on-purpose/
index.html
orca-vs-munder-difflin/
index.html
overnight-ai-coding-realistic-expectations/
index.html
prompt-caching-for-ai-agents/
index.html
qm-vs-munder-difflin/
index.html
recovering-from-agent-failures/
index.html
rendering-many-live-terminals-performance/
index.html
review-agent-work-where-it-happens/
index.html
run-a-mixed-engine-office/
index.html
run-ai-agent-hive-from-slack-setup/
index.html
run-an-office-of-ai-agents/
index.html
run-munder-difflin-on-a-mac-mini/
index.html
run-munder-difflin-on-open-models/
index.html
scheduling-autonomous-agent-missions/
index.html
security-for-ai-coding-agents/
index.html
semantic-memory-for-ai-agents/
index.html
shareable-agent-roles/
index.html
single-committer-git-pattern/
index.html
small-team-ai-agents-playbook/
index.html
tags/
ade/
index.html
aeo/
index.html
agent-design/
index.html
agentic-ai/
index.html
ai-coding-agents/
index.html
ai-search/
index.html
architecture/
index.html
autogen/
index.html
automation/
index.html
autonomous/
index.html
autonomy/
index.html
brand/
index.html
... 734 moreFAQ
munder-difflin is a Claude Code plugin with 17 hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. It includes capabilities, last30Days, last7Days. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.