
一个 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',cols: 80,rows: 24,cwd: process.env.HOME,env: process.env});代码给每个 AI 助手分配一个独立的终端环境。为什么要这样做?因为不同的 CLI 工具(Claude Code、Codex、Grok)运行环境不一样,隔离开才能避免冲突。
hive.ts 是整个系统的"大脑"。
// Hive 系统:记忆 + 邮箱 + 黑板interfaceHive {memory: Map<string, Memory>; // 每个智能体的长期记忆mailbox: Map<string, Message[]>; // 原子文件邮箱blackboard: Map<string, any>; // 共享黑板eventLog: Event[]; // 追加式事件日志}每个智能体有自己的记忆和邮箱,但所有智能体都能访问黑板和事件日志。就像真实的办公室:每个人都有自己的办公桌和抽屉,但会议室的白板是共享的。
虚拟形象不是噱头
项目用 Pixi.js 做了个 2D 办公楼层界面。看起来像是游戏,但代码显示这不是纯装饰。
// 智能体走到工作站工作agent.walkTo(workstation);agent.startWorking();// 信封在办公桌间飞舞传递消息envelope.fly(from: deskA, to: deskB);每个智能体的虚拟形象对应一个真实的终端进程。界面上某个智能体"走到工作站",后台的伪终端正在执行任务。信封飞舞代表消息传递。这不是单纯的视觉化,而是把抽象的进程状态变成了可见的动作。
GOD 编排器的设计思路
项目里有个角色叫"Michael"(致敬《The Office》里的 Michael Scott),它扮演 GOD 编排器。
// GOD 编排器:路由任务、裁决流量classGODAgent {routeTask(task: Task): Agent {// 根据任务类型和智能体状态分配returnthis.selectBestAgent(task); }shouldEscalate(event: Event): boolean {// 只将需要人工的事项升级return event.requiresHuman; }}这个设计避免了传统多智能体系统的混乱。所有任务先到 GOD,由它决定分配给谁。智能体之间不直接通信,都通过 GOD 中转。好处是避免了消息风暴,坏处是 GOD 可能成为瓶颈。
项目文档里提到了熔断器机制,应该就是为了处理这个问题。
记忆系统怎么工作的
memory.ts 里实现了语义召回功能。
// Markdown 记忆挖掘为共享记忆宫殿classSemanticMemory {asyncrecall(query: string): 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(action: Action): Promise<boolean> {if (action.isDestructive || action.exceedsBudget) {returnawaitthis.requestHumanApproval(action); }returntrue; }}// 熔断器classCircuitBreaker {asyncexecute(agent: Agent, task: Task): 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 devnpm 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(代码)+ 非商业(资产)
夜雨聆风