The project's README from github.com/HarnessMD/munder-difflin. As one markdown file: README.md.
Free, open source and performant — a multi-agent harness that works with the subscriptions you already pay for, on their hourly limits. It turns the terminal coding CLI you already run into a clone of you, one that keeps working while you're away and coordinates a whole office of agents on your own machine.
Wraps Claude Code, Antigravity (Gemini), OpenAI Codex, xAI Grok, Kimi Code, Gemini CLI, Qwen, OpenCode, Crush, pi.dev, GitHub Copilot CLI, and Cursor — with bring-your-own keys and local LLMs. Agents that message, route, and remember, coordinated by your clone (Michael) and visualized as avatars at work on a shared office floor.
Electron · React · TypeScript · Pixi.js · xterm.js · node-pty
⬇ Download for macOS, Windows or Linux
macOS builds are signed and notarized. You do not need to build from source to use it.
[!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,grok,kimi,qwen,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 your clone (Michael) routes work between them while you watch. He's the boss of the floor; you're still the boss of him.
Bring the CLI you already pay for. Every one of these runs as a real process in its own terminal, with your existing subscription and its hourly limits. If it runs in a terminal, it can run here.
Claude Code Codex · GPT Grok · xAI Kimi Code Gemini CLI Antigravity · Gemini Qwen OpenCode Crush · Charm Pi GitHub Copilot Cursor + any custom command
Plus bring your own keys and local models through Ollama, LM Studio or vLLM.
Munder Difflin is a desktop app that wraps real terminal-agent CLIs as fully-capable agents, wires them into a hive mind, and puts your clone in charge — Michael, 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, grok, kimi, qwen, 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.
Talk to one agent, not twelveMichael is your clone and the only agent you brief. He assigns the work, routes the traffic, and escalates the few things that actually need you. |
|
Hire an agent in a few clicksPick the CLI, the model and the autonomy, give it a desk, and it starts working. Import a ready made role from the Agent Gallery if you would rather not start from scratch. |
|
Memory that survives the sessionEvery agent keeps markdown memory that is mined into a shared, searchable palace. Close the app, come back tomorrow, and they still know what they learned. |
|
Autonomy with a leashSet how far each agent may go on its own. Spend, scope and destructive operations come back to you, and a circuit breaker steers, constrains, then stops anything that loops or runs away. |
|
Watch the whole floor workAgents walk to stations as they work and envelopes fly desk to desk when they message each other. Click any desk to read that terminal live, and type straight back into it. |
|
Set up onceThe onboarding wizard checks what you already have, and offers to install what is missing rather than sending you to a docs page. |
|
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.latest once a check confirms you are current. A manual download is the fallback for when the updater cannot fetch the build itself. The first run afterwards opens that release's notes as a designed page rather than a version number.[!NOTE] Status: v0.4.6, the release where the app stops assuming everyone reads English left to right. The interface now runs in Simplified Chinese and Arabic, with right to left support. English stays the default and nothing changes until you pick a language in Settings, under General; the app never reads your operating system locale. All three app fonts now ship inside the bundle instead of loading from Google, which is blocked in mainland China and was breaking the interface for exactly the people the Chinese translation was for. An input method Enter no longer fires a send, a search or a rename while a candidate word is still being composed. Every string is translated, with nothing falling back to English, and the terminals read right to left. Some screens still need their padding and icons mirrored, and that is the next piece of work. No Arabic reader has reviewed the wording yet. Also in this release: the update badge runs the real download and restart instead of handing you a disk image, the update check can no longer spin forever, Settings persists through one Save button, the model lists moved into a checked in catalog, and the ASK ME card renders markdown. On the security side: the name of the CLI an agent launches is validated before it is resolved against your PATH, the OS sandbox stays on in auto mode, and analytics stopped sending IP and derived location. Telemetry now counts the messages you send to an agent, a count and nothing else, with no text, length or hash of the body in any shape. 16 community pull requests from 13 contributors landed in this release, one of them (#213) re-implemented rather than merged. If you're on 0.3.8, update: that build's usage-limit guard never released the agents it held, and it has been removed entirely. macOS (signed & notarized), Windows, and Linux builds are on the releases page.
Most people want this one. Signed and notarized macOS builds, plus Windows and Linux, are on the latest release. Install it, open it, and the wizard takes you the rest of the way. You do not need Node, a toolchain, or this repository.
You do still need at least one agent CLI on your machine, and the app can install missing ones for you from Settings → Prerequisites.
Everything below is for contributors and for people who want to run an unreleased build.
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), Gemini CLI (gemini), Qwen (qwen), OpenCode (opencode),
Crush (crush), pi.dev (pi), GitHub Copilot (copilot), or Cursor (cursor-agent).
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.