Munder Difflin v0.4.4
A local hive of Claude Code, Antigravity, Codex, Grok & Copilot agents that run themselves — messaging,
routing, and remembering, coordinated by your clone, Michael, who you talk to. Local-first and open source.
→ munderdiffl.in — see it in action, then grab a build below
What's new in 0.4.4
If you use Windows, this is the release that makes the app work. Agents could never
message each other there — they started, looked completely healthy, and quietly ignored one
another forever. That's fixed.
It's also the release that fixes the first five minutes. Setup could not be finished, and on a
brand-new install the parts that carry messages between agents never started until you quit and
reopened the app.
Windows
- Your agents can talk to each other. This never worked before. If you tried the app on
Windows and your team just sat there, that was this bug — not you. - Setup no longer runs off the edge of the screen.
The first five minutes
- Setup finishes. Accepting the suggested folder used to fail outright, and the folder box
was empty even though the text above promised a suggestion. Both fixed. - It tells you what's missing straight away, instead of walking you through four steps and
then sending you back to the first one. - A fresh install works immediately. Messages between agents, live status on the cards, and
"Restart & Continue" all used to stay dead until you restarted the app. Nothing said so.
New things
- Skills — see every skill your agents can use, browse 227 more, and install or remove them
in a click. - Prerequisites — one page in Settings that says which supporting tools you have, which you
don't, and what each one is for. A button asks Michael to set up whatever is missing. - Release notes you'll actually read — like this one. Updates can now bring a designed page
instead of a version number in the corner. - A card at the top of Settings with your version, plan, and a way to reopen these notes.
Dark mode
Rebuilt. Every button, box and input is drawn with a one-pixel border, and in dark mode
those borders were effectively invisible — so the whole app read as flat grey shapes. The
colours are re-tuned and checked for readability rather than picked by eye. Backgrounds are
softer, text is a warm off-white instead of glaring white, and the selected tab is legible again.
Everything else
Copy from a terminal comes back clean, with accents and dashes intact. Dictation pastes what you Windows: two separate bugs, one symptom. The first fix still missed OpenCode. First-run bootstrap. Onboarding. The folder field read Dark mode. Text always measured fine (11–14:1). Release drops. A release body may carry an authored HTML page between ` Munder Difflin
The release where Windows finally joined the floor — and the first run
stopped quietly failing.
The headline
Roughly half of all downloads run on Windows, where
agent-to-agent messaging had never worked at all.
Every agent booted, rendered, and looked completely healthy.
None of them had been told they had an inbox.
Any CLI that is
not an .exe was launched through cmd.exe, which cuts a multi-line argument at
its first newline — taking the protocol block with it. Spawns now launch the
real interpreter with an argument array, so the whole prompt survives.
The first five minutes
Four separate bugs sat on the very first thing a new user does.
Accepting ~/HarnessAgents stored a literal tilde and died on ENOENT.
It now resolves to a real path — and the field actually suggests it. An empty folder used to walk you through all four steps before bouncing
you back. The panel no longer overflows a short screen either. On a fresh install the message router, hooks and telemetry stayed dead
until you restarted — so mail never moved and agents never reported. The live session id is recorded from a second source, so continuing
works even when a hook never lands. New
What is installed across Claude Code, OpenCode and Codex — and a
browsable catalog of 227 more, with search, filters, install and
uninstall.
MemPalace, uv, git and every agent engine, with live status and where
each one sits on disk. One button asks Michael to fill in the gaps.
Update notes used to be three clipped bullets in the corner. A release
can now carry its own designed page, and you are reading the first one.
Every control border measured under 2:1 against its background, so the
edges defining them were invisible. Re-tuned and measured, not eyeballed.
Everything else
The quote rail is stripped and terminals run in UTF-8, so an em dash
survives the trip to another app. PNG, SVG and embedded screenshots render. The title names the agent. One last thing
Every agent here starts on your
hardware, in your folders, under your keys. Nothing about that changes.
If it has been useful, a star is the entire marketing budget.
The button is just below this page.
The mark is a face now. Munder Difflin has always been an office you watch people work in, [!NOTE] Munder Difflin now sends a small set of anonymous usage events (app opened, agent spawned, Michael is your clone. The website has been describing Munder Difflin as a clone of you that [!NOTE] [!NOTE] Full history in the CHANGELOG.
This release carries community work. Every one of these landed in v0.4.4:
Eight of the fixes above are @gts-47's. Thank you.
Latest builds for every platform. The macOS build is universal — one DMG that runs on both Source code (zip) · Verify your download: The filenames above carry a version number, so they only resolve while this is the Node 18+ and a C/C++ toolchain are required (Xcode CLT on macOS, Build Tools on Windows). Full notes in the CHANGELOG.
Website · MIT-licensed. An affectionate parody — not affiliated with NBC's The Office or Dunder Mifflin.
just said. Images and screenshots open in the IDE. Michael sits first on the dock again and it's
obvious which agent you're looking at. Task cards stop going missing. Idle agents stop being told
to compact every hour. Grok 4.6 is selectable. The office stops drawing itself when nobody's
looking at it.
For the nerds — what actually happened, in detail
The hive protocol reaches an agent as a command-line argument: multi-line, paren-heavy, ~6.1k
characters. A .cmd cannot be handed to CreateProcess, so any non-.exe target was spawned as
cmd.exe /d /s /c "<one pre-escaped string>". cmd.exe treats CR/LF as a statement separator
before quoting is considered, so the argument was truncated at its first newline — taking the
block that names inbox/ and outbox/ with it. Escaping cannot fix this: cmd.exe has no
backslash escape, every " toggles quote state, and no escape exists for a newline. The fix
decodes the npm shim to its interpreter and script and spawns that with an argv array, so
node-pty's MSDN/CRT escaping hands the whole prompt to CreateProcess (ceiling 32767, not 8191).
opencode-ai's bin is ./bin/opencode.exe — a compiled
binary, not a JS script — so npm writes an interpreter-less shim ("%dp0%\..\opencode-ai\bin\opencode.exe" %*).
The resolver only modelled "interpreter + script" and returned null, falling straight back to the
truncating path for every Windows OpenCode install. Diagnosed on macOS by generating the exact
shim with npm's own cmd-shim package; the resolver now handles direct-executable shims, and the
previously silent fallback logs which target it could not decode.
bootstrapHiveServices() runs once at app-ready and opens with
if (!hive.enabled()) return — and a fresh install has harnessHome: null at that moment.
Onboarding then sets it through config:update, which did not re-bootstrap. The message router
(hive.startRouter(), the poll loop draining outbox/ → inbox/), the hook server, the
telemetry collector and the mission scheduler all stayed dead for the entire session. changeHome
had always handled this by relaunching; onboarding does not relaunch. It now bootstraps on the
null → set transition. A second source also records the live session id, so "Restart & Continue"
has a resume key even when a hook never lands.
window.process.env.HOME, which is always undefined
under contextIsolation: true with only cth bridged — so the "suggested" default could never
appear. It now suggests ~/HarnessAgents literally, which normalizeHiveHome/expandTilde
already expand at both the config-write boundary and ensureHarnessHome's mkdir. The overlay
also centres with margin: auto rather than align-items: center, because a centred flex item
that overflows is clipped at the top and unreachable by scrolling.
ink-300 measured 1.73–2.09:1 — and it is
the structural token, used 187 times, 93 of those as inset 0 0 0 1px. Below ~3:1 a one-pixel
line is not perceivable. It is now 3.4–4.0:1, the ground sits at luminance 0.009–0.020 rather than
near-black, and text is 0.71 rather than 0.84. The selected Command Center tab was painting
ink-900 (near-white in dark) on a light accent fill at 1.55–1.87:1; a new --cth-on-accent
token is dark in both themes and takes it to 7.0–8.5:1. The xterm palette re-states these values
because xterm takes literals, so it moved with them.
0.4.4
Agents can talk to each other on Windows.
Setup finishes. The floor wakes up.
Four things that were not here before.
Every skill your agents can use
Whether you actually have the tools
This page
Rebuilt for reading
The rest of the list.
Thank you for running this
on your own machine.
Still new in 0.4.3 — Michael is the logo
and the icon was a pair of script initials on a gradient. It's Michael — your clone — drawn in
the app's own pixel art, on the brand yellow, looking straight back at you.
header, the in-app toolbar, and the README all render the same portrait. No variant is a
redrawing of another.
sprite is a rect, with no fonts, no gradients and no filters — and every raster in build/
and docs/ is generated from it by tools/make-logo.cjs.
The old icon depended on the Lobster webfont being installed to render correctly.
.icns (16→1024, with the macOS
drop shadow) and a .ico carrying six sizes, plus a 32px favicon and a 180px apple-touch-icon,
so nothing is a downscale of a 512px image any more.
accent text, which has to stay dark enough to read on a white page — so on the light theme
it came out brown. Fills now have their own token and start at what used to be the hover colour.
Appearance only. No functional change in this release: the update carries the new icon into
your dock, and nothing else moves.
Still new in 0.4.2 — Anonymous usage stats, done in the open
feature used) so we can tell whether features are actually used. It is built the way an
open-source project should build it:
complete contract. Every event and property is listed there, and the code enforces that list
as a hard allowlist — anything not in the table cannot be sent. No prompts, no transcripts, no
file paths, no repo names, no identifiers. Events are PostHog anonymous events (no person
profile, no identity), keyed by a random UUID you can delete.
usage stats, or set the standard DO_NOT_TRACK env var.
source produces a build where the analytics module is a complete no-op.
Still new in 0.4.1 — The app says what the site says
works around the clock — the app still called it a "GOD agent." Now they match.
and his card on the floor carries a BOSS tag — he's the boss of the agents, you're still
the boss of him.
24/7") instead of a feature list, and the engine card no longer advertises three engines when
ten ship — Claude Code, Codex, Grok, Kimi, Antigravity, Qwen, OpenCode, Crush, pi and Copilot
are all named.
This release changes wording only. The god agent id, the hive folder layout, and message
routing are untouched, so existing hives, memory, and running agents carry over exactly as they
are. Nothing to migrate.
Auto-update carries you here from v0.3.7 or later. If you are still on v0.3.5 or v0.3.6,
those builds shipped the broken updater and need one manual install — grab the download below,
once.
Previously
favicon, and munderdiffl.in; the landing page rebuilt around real screenshots and a live
pixel-floor sim; pricing reframed around Private Cloud and Private Network.
usage-limit guard that never released held agents.
schedule instead of two; a readable commit history.
fired in any packaged build since v0.3.4, and the failure was swallowed by a catch.
(verified against the official SHASUMS256.txt), hooks stopped dying with exit 127, ~/dev/foo
paths resolve, and the office floor rebuilds itself after losing its GPU context.
Center header.
(history + branch compare), redesigned Settings, xAI Grok and Kimi Code, and a single
delivery gate for every automatic writer. Community work by
@gts-47 and @qschmick.
engine (@anxkhn).
Thanks
#129
@gts-47
"Restart & Continue" now works on an agent that already died
#130
@gts-47
one odd message id no longer silences an agent's wake nudge
#131
@gts-47
dictation pastes what you just said, not the clipboard's previous text
#132
@gts-47
a root cwd no longer resolves to the projects directory itself
#133
@gts-47
a frozen context reading no longer re-fires /compact forever
#134
@gts-47
the office floor stops rendering when nobody is looking at it
#143
@gts-47
Grok 4.6 in the model picker
#144
@gts-47
the cost ledger stays out of the hive's git history
#142
@baziyer
renderer task-ledger lost updates — mutations are atomic now
#137
@chaitanyagiri
the CLI's quote rail is stripped from copied selections
⤓ Downloads
Apple Silicon and Intel.
🍎 macOS
Build
File
Universal (Apple Silicon + Intel)
Munder-Difflin-0.4.4-mac-universal.dmg
🪟 Windows
Build
File
Installer (x64) — recommended
Munder-Difflin-0.4.4-win-x64-setup.exe
Portable (x64, no install)
Munder-Difflin-0.4.4-win-x64-portable.exe
🐧 Linux
Build
File
AppImage (x86_64)
Munder-Difflin-0.4.4-linux-x86_64.AppImage
📦 Source
Source code (tar.gz)
SHA256SUMS.txt — then shasum -a 256 -c SHA256SUMS.txt (macOS/Linux) or Get-FileHash (Windows).
latest release. If a link 404s you are reading an old release page — grab the current
build from the releases page,
which is always right.
First launch
still shows an "unidentified developer" warning on first open, right-click the app →
Open → Open once. After that, the first time agents touch a folder you'll get a
single macOS privacy prompt for Documents/Desktop/Downloads — allow it once and the
grant sticks (it covers the claude agents the app spawns), because the grant is bound
to the app's stable signature.
More info → Run anyway.
chmod +x Munder-Difflin-*.AppImage, then run it.
Requirements
PATH (and/or the Antigravity agy or OpenAI codex CLI for those providers)
claude CLI — it doesn't replace it)
🛠 Build from source
git clone https://github.com/chaitanyagiri/munder-difflin.git
cd munder-difflin
npm install # rebuilds node-pty for Electron
npm run dev # launches the app with hot reload
To produce installers yourself: npm run dist (current OS), or dist:mac / dist:win / dist:linux.
What's inside
claude (or agy / codex / local-provider) pseudo-terminal, visualized as an avatar on a watchable office floor (node-pty · xterm.js · Pixi.js).
/remote-control reaches the whole floor from your phone.
Links
Repo ·
Issues ·
Contribute ·
Become a patron