Munder Difflin(chaitanyagiri/munder-difflin)は、手元にすでに入っている claude・codex・gemini といったターミナル型のコーディングCLIを「社員」として雇い、Michael という1人の統括エージェントに話しかけるだけで複数のエージェントを回す、MITライセンスのデスクトップ・ハーネスだ。GitHubスターは7.2k、最新リリースはv0.5.2(2026-09-09)。本記事ではリポジトリを clone して依存の導入と型検査まで走らせ、自動モードが各CLIに渡す権限フラグ、hive と呼ぶ共有メモリの実体、テレメトリの送信内容をソースと一次ドキュメントで確認した。
- ・正体:Electron製のローカル・マルチエージェント・ハーネス。Claude Code・Codex・Gemini CLI など12種+カスタムのCLIをそれぞれ疑似端末(node-pty)で起動し、ピクセルアートのオフィスに座らせる。
- ・何ができる:ユーザーが話す相手は統括エージェント Michael 1人。Michael が仕事を割り振り、エージェント同士は git 管理の hive(inbox/outbox/board/memory)で連絡と記憶を共有する。
- ・実測:Linux x86_64 で
git clone→npm installを実行。依存601パッケージの取得は完了したが、後処理のelectron-rebuildがプロキシ遮断で失敗。npm run typecheckは通過。Electron GUIの起動は未検証。 - ・注意:自動モードは Claude Code に
--permission-mode bypassPermissionsを渡す(ソース確認)。ステータスは pre-release(package.json は 0.4.6 のまま、配布タグは v0.5.2)。匿名テレメトリは既定オンで PostHog(米国)へ送る。
Munder Difflin は、LangGraph や CrewAI のような「コードで組むフレームワーク」ではなく、既存CLIを束ねる「運用側のハーネス」に位置づけられる。フレームワーク側の選択肢はAIエージェントフレームワーク比較2026|LangGraph・CrewAI・Dify等9種をStar数・実コードで検証にまとめている。
Munder Difflinとは——契約済みのCLIを「社員」にするハーネス
README冒頭の自己紹介は次の一文だ(原文)。
Free, open source and performant — a multi-agent harness that works with the subscriptions you already pay for, on their hourly limits.
ポイントは「すでに払っているサブスクリプションの時間制限の範囲で動く」という部分にある。多くのマルチエージェント基盤はAPIキーを前提に従量課金でLLMを呼ぶが、Munder Difflin は claude や codex といったインストール済みのCLIをそのまま子プロセスとして起動する。認証もモデル選択もCLI側に委ねるので、アプリ自体はAPIキーを持たなくてよい。API利用が必要なら、プロバイダごとのBYOKと Ollama・LM Studio・vLLM のベースURL指定にも対応する(README「BYOK keys + local LLMs」)。
読者の3問に答えると次のようになる。
・何ができる:CLIを「雇う」(プロバイダ・モデル・自律度を選び席を与える)と、そのCLIがオフィスの1席として起動する。指示は Michael に出し、Michael が部下へ振り分けて結果を集約する
・何を解決する:ターミナルを何枚も開いて自分がルーティング係になる状態と、セッションを閉じると文脈が消える問題。エージェントは markdown の長期メモリを持ち、意味検索で横断できる
・何を代替する:手動の並列 Claude Code 運用、あるいは Paperclip・Auto Company のような「AI会社」型オーケストレータの一部。ただし LLM を直接呼ぶ SDK ではないので、LangGraph 等の代替にはならない
対応CLIは12種+カスタム
README(2026-09-16時点の main)が列挙する対応エージェントは次の通りだ。
| CLI | コマンド | 自動モードでアプリが付けるフラグ(src/shared/agentProvider.ts) |
|---|---|---|
| Claude Code | claude |
--permission-mode bypassPermissions |
| OpenAI Codex | codex |
-a never -s workspace-write |
| Gemini CLI | gemini |
--approval-mode=yolo |
| Antigravity(Gemini) | agy |
--dangerously-skip-permissions |
| xAI Grok | grok |
--permission-mode bypassPermissions |
| Kimi Code | kimi |
--auto |
| Qwen | qwen |
--yolo |
| OpenCode | opencode |
(フラグなし) |
| Crush | crush |
--yolo |
| pi.dev | pi |
--approve |
| GitHub Copilot CLI | copilot |
-s --allow-all-tools --no-ask-user |
| Cursor | cursor-agent |
--force --trust |
右列は本記事がソースから拾った値で、READMEには書かれていない。同じ「自動モード」でも、Codex のようにサンドボックス+ワークスペース内書き込みに留めるものと、Claude Code のように権限確認を丸ごと外すものが混在することがわかる。READMEの v0.4.6 リリースノートにある「the OS sandbox stays on in auto mode」は Codex の -s workspace-write を指す表現で、Claude Code 側にはOSサンドボックスは掛からない。
モデル一覧は docs/model-catalog.json を起動時に取得して6時間キャッシュする方式に変わっており(CHANGELOG Unreleased)、Claude Code 向けには claude-fable-5-1・claude-fable-5・claude-opus-5・claude-opus-4-8・claude-sonnet-5 が並ぶ。Codex の gpt-6-astra は「Codex 0.153.1 以上が必要」と注記がある。
仕組み:GODエージェント Michael と git 管理の hive
Munder Difflin の設計は HIVE.md と SPEC.md に文書化されている。中核は3つだ。
・GODエージェント(Michael):ユーザーが話す唯一の相手。ロスター(registry.json)・ルーティング・裁定・タスク台帳を持ち、日常的な依頼は自分で捌き、支出・破壊的操作・スコープ変更だけを承認キューへ上げる
・hive:<harnessHome>/hive/ にある git リポジトリ。エージェントごとに identity.md・memory.md・inbox/・outbox/ を持ち、共有の board.md(ブラックボード)・tasks.json・log.jsonl(追記専用のイベントログ)が並ぶ
・2つのデータプレーン:ターミナルプレーン(node-pty → xterm.js、バイト単位でそのまま表示)と、イベントプレーン(Claude Code の hooks → IPC)。アバターの動きや「封筒が飛ぶ」演出は後者のイベントで駆動する
registry・routing・tasks"] M -->|"assign"| A["agent A
claude"] M -->|"assign"| B["agent B
codex"] M -->|"assign"| C["agent C
gemini"] A -->|"outbox → router → inbox"| B B -->|"outbox → router → inbox"| C subgraph H["hive(git・単一コミッター=mainプロセス)"] R["registry.json"] BD["board.md"] T["tasks.json"] L["log.jsonl"] MEM["agents/<id>/memory.md"] end A -.-> H B -.-> H C -.-> H M -->|"支出・破壊的操作・scope変更だけ"| Q["承認キュー(人が判断)"]
設計上の要点は「エージェントは git に触らない」ことだ。各エージェントは自分の outbox/ に1メッセージ1JSONファイルを一時ファイル+原子的 rename で書き、ハーネスのルーターが宛先の inbox/ に配送する。コミットするのはメインプロセスだけなので、複数プロセスが同じ .git/index.lock を奪い合う事故を構造的に避けている。メッセージ形式は FIPA-ACL の「発話行為(speech act)」だけを借りた軽量版で、act フィールドに request / inform / propose / query / agree / refuse / done のいずれかを持ち、hops を返信ごとに増やして上限で打ち切ることで、エージェント同士の無限ピンポンを止める(HIVE.md §4)。
board.md だけは唯一の共同編集ファイルで、これは Michael が「単一の書記」として書く。共有メモリの意味検索は MemPalace CLI に依存し(HIVE.md は Letta・Mem0 を選ばなかった理由も書いている)、Apple Silicon で動くようになったのは v0.4.5 からだ。
実測:ソースからの導入と型検査(Linux x86_64)
READMEは「ほとんどの人はビルド不要」として、署名・公証済みの macOS dmg(universal)、Windows exe、Linux AppImage を releases から取る手順を第一に置く。本記事はソースを読む目的もあるので、README「Build from source」の手順をそのまま実行した。
git clone https://github.com/chaitanyagiri/munder-difflin.git
cd munder-difflin
npm install # postinstall で node-pty を Electron の ABI 向けに再ビルドする
npm run typecheck # tsconfig.node.json と tsconfig.web.json の2本を tsc --noEmit で検査
結果は次の通りだった。
| 工程 | 結果 | 備考 |
|---|---|---|
git clone(完全履歴) |
成功 | 1,210コミット・初コミット 2026-05-31 |
npm install の依存取得 |
成功 | node_modules 直下 601 ディレクトリ |
postinstall electron-rebuild -f |
失敗 | node-gyp が Electron 32.2.0 のヘッダを artifacts.electronjs.org から取得できず(プロキシが CONNECT を 403 で拒否) |
npm run typecheck |
成功 | node/web の両 tsconfig でエラー0 |
npm run dev(Electron 起動) |
未検証 | 再ビルドが通らないため GUI は起動していない |
検証環境:Linux x86_64/Node.js v22.22.2/npm 10.9.7/2026-09-16。外部HTTPSがプロキシ経由の環境のため、Electron ヘッダの取得だけが遮断された。ヘッダ取得が通る通常環境では同じ手順で再ビルドが走るはずだが、本記事ではそこから先(GUI起動・エージェント雇用・Michael への指示)を実測していない。README の主張であってこちらで確かめた挙動ではない部分は、本文でその旨を書き分けている。
前提条件は README の記載どおり Node.js 18 以上、npm、C/C++ ツールチェーン(macOS は Xcode Command Line Tools)、それに PATH 上の対応CLIが1つ以上。package.json を見ると、実体は Electron 32.2.0 + electron-vite 2.3 + React 18.3 で、オフィスの描画に Pixi.js 8.5、端末に xterm 5.5(WebGL アドオン)、PTY に node-pty 1.0、メモリの全文検索に better-sqlite3、IDE に Monaco、更新に electron-updater、テレメトリに posthog-node を使う。メインプロセスのソース src/main/ は 53 ファイルで、hive.ts・breaker.ts(サーキットブレーカー)・integrationBroker.ts(シークレットブローカー)・hooks.ts(Claude Code hooks の受け口)といった名前が README の機能と一対一で対応している。
リリースとメンテナンスの実測
| 項目 | 実測値(2026-09-16) |
|---|---|
| GitHub star / fork | 7.2k / 947(GitHubページ) |
| Open issues(PR含む) | 88 |
コミット貢献者(git shortlog --no-merges) |
57人。上位は作者 Chaitanya Giri(573+69)、Gulum(56)、Vyapak Goyal(46) |
| 月別コミット(main) | 6月 523/7月 33/8月 530/9月(15日まで)121 |
| 最新タグ | v0.5.2(2026-09-09)。main はそこから 49 コミット先 |
| package.json の version | 0.4.6 のまま(README の Status 節も 0.4.6) |
| CHANGELOG | 0.4.6(2026-08-27)までと Unreleased のみ。v0.5.x の記述は GitHub Releases 側にしかない |
タグとバージョン表記の食い違いは、clone 直後に次の3行で再現できる(本記事の実行結果を右に付記)。
git describe --tags --abbrev=0 main # → v0.5.2
git log --oneline v0.5.2..main | wc -l # → 49(タグの後に積まれたコミット数)
grep -n '"version"' package.json # → 3: "version": "0.4.6",
7月にコミットが 33 まで落ちてから8月に 530 へ戻る山型で、8月13日から27日にかけて 0.4.3〜0.4.6 を2週間で4本出している。バス係数は作者1人に大きく寄るが、v0.4.6 だけで 13 人から 16 本のPRが入っている(README)。一方でバージョン表記は配布タグ(v0.5.2)と package.json(0.4.6)で食い違っており、アプリ内の表示や自動更新の挙動を確認するときはこの差を頭に置いておく必要がある。
自律性と承認:どこまで任せてよいか
READMEの「Autonomy with a leash」は、エージェントごとにどこまで自走させるかを設定し、支出・スコープ・破壊的操作は人に戻す、と説明する。加えてサーキットブレーカーが「steer → constrain → stop」の3段で、ループする・エラーを撒く・予算を超えるエージェントを止める(src/main/breaker.ts)。
ここで先の表に戻ると、アプリの「auto mode」は各CLIの確認スキップ用フラグに翻訳されて渡される。自分の手元で確かめるなら、プロバイダ定義を1行の grep で並べればよい。
grep -n -E "^\s+id: '|autoModeFlag: '" src/shared/agentProvider.ts
# 172: id: 'claude',
# 176: autoModeFlag: '--permission-mode bypassPermissions',
# 197: id: 'codex',
# 210: autoModeFlag: '-a never -s workspace-write',
# (以下、grok・kimi・gemini・antigravity…と続く)
つまり Claude Code を自動モードで雇うと、その端末は --permission-mode bypassPermissions で立ち上がり、ファイル編集やシェル実行の確認は Claude Code 側では一切出ない。冒頭のフロア実スクショの右下に「bypass permissions on」と表示されているのがそれだ。安全側の仕組みはアプリのレイヤー、つまり Michael の裁定・承認キュー・サーキットブレーカー・per-agent の git worktree 分離に集約される。
このため運用上の注意は次の3点になる。
・作業ディレクトリを絞る:エージェントの cwd は雇用時に指定する。ホームディレクトリ直下で雇わない
・worktree 分離を使う:README の「Per-agent git worktrees」はオプション扱い。並列で同じブランチを触らせない
・CLI側の規約を読む:READMEは「サブスクの時間制限内で動く」と書くが、自動運転が各プランの想定内かはベンダーの利用規約の問題で、本記事では判断していない
SECURITY.md は「ローカルファースト・ネットワークリスナーなし(Unix ドメインソケットのみ)・認証なし」と範囲を切っており、renderer と main は contextBridge 経由の型付きIPCだけで通信し、nodeIntegration: false・contextIsolation: true を明記する。サポート対象は main ブランチのみで、過去タグにセキュリティ修正は出ない方針だ。
メモリ・Command Center・テレメトリ
Command Center は README の記載では、依存関係付きの Kanban、スケジュール実行とハートビート、フリート監視、メモリ検索、アクティビティログ、CI ウォッチャーを1画面に持つ。Slack のチャンネルや Webhook から Michael が一時的なワーカーを雇ってスレッドに返信し、終わったら解雇する「Getting work in and out」の流れも README にある。munderdifflin://hire リンクで役割定義を配布する Agent Gallery は、インポートしてもフォームが埋まるだけで雇うのは人がクリックする設計だ。スキルカタログは 227 件(README・2026-09-16 時点の main に記載あり)。UI は英語・簡体字中国語・アラビア語(RTL)で、日本語UIは無い。
テレメトリは既定でオンで、TELEMETRY.md が送るものと送らないものを列挙している。
| 送るもの | 送らないもの |
|---|---|
app_version・os・arch(全イベント共通) |
プロンプト本文・トランスクリプト |
first_run/app_launched/update_applied |
ファイルパス・リポジトリ名・ホスト名 |
agent_spawned(CLI名)・agent_spawn_failed(cli_missing 等の理由) |
メールアドレス・APIキー |
message_sent(送信回数と送信元の画面だけ。v0.4.6で追加) |
本文の長さやハッシュを含む任意テキスト |
session_ended(<5m〜8h+ のバケット) |
IP・派生位置情報(v0.4.6 で送信停止) |
送信先は PostHog(米国)で、$process_person_profile: false の匿名イベントとして扱う。オプトアウトは3通りで、Settings → General の「Anonymous usage stats」をオフにする、環境変数 DO_NOT_TRACK に非0値を入れる、あるいはソースからビルドする(PostHog のキーは本番CIだけが注入する)。本記事の検証は GUI を起動していないため、実際の送信有無は未検証である。
類似ツールとの比較:Paperclip・Auto Company・Agent Orchestrator
同じ「AIエージェントを組織として動かす」系統で当サイトが実測した3本と並べる。数値はそれぞれの記事執筆時点の値で、本記事で再取得はしていない。
| 観点 | Munder Difflin | Paperclip | Auto Company | Agent Orchestrator(AO) |
|---|---|---|---|---|
| 形態 | Electron デスクトップ(macOS/Windows/Linux) | Web ダッシュボード+サーバー | CLI 主体・自宅PC常駐 | Agent IDE(同梱ビルド) |
| LLM の呼び方 | 既存CLI(claude/codex 等12種)を子プロセスで起動 | プロバイダAPI | 既存CLI | 既存コーディングエージェント |
| 組織モデル | GODエージェント Michael+席(アバター) | 役職・予算・承認つきの「会社」 | 固定14人の社員が24時間ループ | 1タスク1 worktree+常駐の計画エージェント |
| 予算・承認 | 支出/破壊的操作/scope 変更を承認キューへ・サーキットブレーカー | 予算ハードストップ・月次ウィンドウ | 毎サイクル権限確認 | worktree 分離 |
| 記憶 | markdown メモリ+意味検索(MemPalace) | DB | ファイル | セッション |
| ライセンス | MIT(同梱タイルセットは別ライセンス) | MIT | 記事参照 | Apache-2.0 |
Paperclip は予算とロックの厳密さ、Auto Company は「実LLMなしでループを測れる」軽さ、Agent Orchestrator は worktree 単位のコーディング特化が特徴で、Munder Difflin は「手元のCLIのサブスクをそのまま使う」点と「フロアを眺めて任意の端末に直接タイプできる」可視性で差別化している。逆に、Paperclip のような予算のハードストップは README に見当たらず、per-agent のトークン予算と実コストのレジャー(「Budgets & telemetry」)が近い機能になる。
ライセンスと採用判断
LICENSE ファイルの実体は MIT License(Copyright (c) 2026 Chaitanya Giri)で、README のバッジと一致する。ただし同梱のピクセルアート(LimeZu の Modern Interiors タイルセット)は LICENSE-ASSETS で別扱いになっており、商用利用は可だが LimeZu のクレジット表記が要る。フォークして再配布する場合はこの2層を分けて扱う。
採用判断の材料を整理する。
・向いている:Claude Code や Codex のサブスクをすでに持ち、複数エージェントを並列で回しつつ、指示の出口を1つ(Michael)にまとめたい個人・小規模チーム
・待った方がよい:本番の自動運転で予算のハードストップが必要な組織、日本語UIが必須な現場、main 以外へのセキュリティ修正が要る運用(サポートは main のみ)
・確認してから:自動モードのフラグ(特に Claude Code の bypassPermissions)が自分のポリシーで許容できるか、各CLIプランの規約が自動運転を許すか
まとめ
参照ソース
・chaitanyagiri/munder-difflin(公式リポジトリ) — README・LICENSE・LICENSE-ASSETS・package.json・src/shared/agentProvider.ts(2026-09-16 時点の main)
・HIVE.md — hive のディレクトリ構成・FIPA-lite メッセージ仕様・単一コミッター設計
・TELEMETRY.md — 送信イベント一覧とオプトアウト手順
・SECURITY.md — スコープ・サポート対象ブランチ・IPC の分離
・Releases v0.5.2 — 配布物(dmg/exe/AppImage/SHA256SUMS)