乐于分享
好东西不私藏

Munder Difflin:让 10 个 AI 编程助手在一个办公室里协同工作

Munder Difflin:让 10 个 AI 编程助手在一个办公室里协同工作

一个 2.5k star 的项目,名字来自美剧《The Office》,核心功能却让人意外——它把那些孤零零的 AI 编程助手,变成了一个会协作的团队。

从一个问题开始

AI 编程工具现在有很多:Claude Code、OpenAI Codex、GitHub Copilot。每个都能用,但都是单打独斗。让它们一起干活?没门。更麻烦的是,每个工具都有自己的记忆,互相不知道对方干了什么。

Munder Difflin 想解决的就是这个问题。它不是新的 AI 模型,而是一个"办公室"——让不同的 AI 编程助手在里面协同工作,共享记忆,分配任务。

代码里的"办公室"长什么样

项目用 Electron 搭了个桌面应用,核心部分在 src/main/ 目录下。pty.ts 文件用 node-pty 创建伪终端。

// 每个 AI 助手都跑在独立的伪终端里const ptyProcess = pty.spawn('claude', [], {name'xterm-256color',cols80,rows24,cwd: process.env.HOME,env: process.env});

代码给每个 AI 助手分配一个独立的终端环境。为什么要这样做?因为不同的 CLI 工具(Claude Code、Codex、Grok)运行环境不一样,隔离开才能避免冲突。

hive.ts 是整个系统的"大脑"。

// Hive 系统:记忆 + 邮箱 + 黑板interfaceHive {memoryMap<stringMemory>;      // 每个智能体的长期记忆mailboxMap<stringMessage[]>;  // 原子文件邮箱blackboardMap<stringany>;     // 共享黑板eventLogEvent[];                // 追加式事件日志}

每个智能体有自己的记忆和邮箱,但所有智能体都能访问黑板和事件日志。就像真实的办公室:每个人都有自己的办公桌和抽屉,但会议室的白板是共享的。

虚拟形象不是噱头

项目用 Pixi.js 做了个 2D 办公楼层界面。看起来像是游戏,但代码显示这不是纯装饰。

// 智能体走到工作站工作agent.walkTo(workstation);agent.startWorking();// 信封在办公桌间飞舞传递消息envelope.fly(from: deskA, to: deskB);

每个智能体的虚拟形象对应一个真实的终端进程。界面上某个智能体"走到工作站",后台的伪终端正在执行任务。信封飞舞代表消息传递。这不是单纯的视觉化,而是把抽象的进程状态变成了可见的动作。

GOD 编排器的设计思路

项目里有个角色叫"Michael"(致敬《The Office》里的 Michael Scott),它扮演 GOD 编排器。

// GOD 编排器:路由任务、裁决流量classGODAgent {routeTask(taskTask): Agent {// 根据任务类型和智能体状态分配returnthis.selectBestAgent(task);  }shouldEscalate(eventEvent): boolean {// 只将需要人工的事项升级return event.requiresHuman;  }}

这个设计避免了传统多智能体系统的混乱。所有任务先到 GOD,由它决定分配给谁。智能体之间不直接通信,都通过 GOD 中转。好处是避免了消息风暴,坏处是 GOD 可能成为瓶颈。

项目文档里提到了熔断器机制,应该就是为了处理这个问题。

记忆系统怎么工作的

memory.ts 里实现了语义召回功能。

// Markdown 记忆挖掘为共享记忆宫殿classSemanticMemory {asyncrecall(querystring): Memory[] {// 毫秒级检索const embeddings = awaitthis.embed(query);returnthis.vectorSearch(embeddings);  }}

所有智能体的记忆都以 Markdown 格式存储,然后通过向量检索实现快速查找。这意味着智能体 A 解决过的问题,智能体 B 可以直接查到,不用重新来一遍。

支持哪些 AI 引擎

项目列出了 10 个支持的 CLI 工具:

  • • Claude Code(Anthropic)
  • • Antigravity(Google Gemini)
  • • OpenAI Codex
  • • xAI Grok
  • • Kimi Code(Moonshot)
  • • Qwen(阿里巴巴)
  • • OpenCode(开源)
  • • Crush
  • • pi.dev(Inflection)
  • • GitHub Copilot

重点是:这些工具不需要修改,Munder Difflin 直接调用它们的 CLI 命令。只需要把这些工具装好,配置好 API 密钥,剩下的交给这个"办公室"。

安全机制:人工关卡和熔断器

代码里有几个安全设计值得关注。

// 人工关卡classHumanGate {asyncapprove(actionAction): Promise<boolean> {if (action.isDestructive || action.exceedsBudget) {returnawaitthis.requestHumanApproval(action);    }returntrue;  }}// 熔断器classCircuitBreaker {asyncexecute(agentAgenttaskTask): Promise<Result> {if (agent.errorCount > threshold) {this.trip(agent); // 引导→约束→停止    }// ...  }}

花费超过预算、破坏性操作,都需要人工确认。智能体陷入循环或错误风暴时,熔断器会介入。这些设计说明项目不是玩具,而是考虑了生产环境的实际风险。

技术栈的选择

  • • Electron:跨平台桌面应用
  • • React + TypeScript:前端
  • • Pixi.js:2D 渲染(办公楼层)
  • • xterm.js:终端渲染
  • • node-pty:伪终端
  • • Monaco / CodeMirror:内置 IDE

Electron 虽然重,但跨平台方便。Pixi.js 做 2D 渲染性能好,xterm.js 是终端模拟的标准选择。Monaco 编辑器就是 VS Code 的那套,开发者熟悉。

安装和运行

前置要求:

  • • Node.js 18+
  • • C/C++ 工具链(编译 node-pty 用)
  • • 至少一个支持的 AI CLI 工具
git clone https://github.com/chaitanyagiri/munder-difflin.gitcd munder-difflinnpm installnpm run dev

npm install 会自动针对 Electron ABI 重建 node-pty。macOS 需要先运行 xcode-select --install

许可证的问题

源代码是 MIT 许可,但像素艺术资产来自 LimeZu 的免费版,只能非商业使用。想商业化的话,要么替换资产,要么购买付费许可证。

这个项目适合谁

手里已经有几个 AI 编程工具,但觉得它们各干各的效率低,Munder Difflin 值得试试。它解决的是协调问题,不是提供新的 AI 能力。

项目目前 2.5k star,还在快速迭代。路线图里提到了更多聊天集成(Telegram 等)、更多引擎模板、更完整的虚拟形象覆盖。研究多智能体系统的话,这个项目的代码结构值得参考。

最后

Munder Difflin 的核心价值不在虚拟形象,而在它提出的"办公室"模型。每个智能体有自己的记忆、邮箱、办公桌,但又共享黑板和事件日志。GOD 编排器统一调度,熔断器和人工关卡保证安全。

这个设计是不是最优解?不确定。但它至少提供了一个可行的方案,让多个 AI 编程助手真正协同起来,而不是各自为战。


项目地址

https://github.com/chaitanyagiri/munder-difflin

Stars: 2.5k

许可证: MIT(代码)+ 非商业(资产)