📌 项目地址:chaitanyagiri/munder-difflin | ⭐ 1,874 颗星 | 🔧 TypeScript | 📜 未标注
这个仓库的star数是1874,不算少,但真正让它值得写一篇文章的原因不是数据,是它的设计思路太奇怪了。
Munder Difflin是一个桌面应用(Electron + React + TypeScript),它不自己跑模型,不自己实现agent运行时。它做的就是一件事:把你机器上已经装好的那些终端AI CLI——claude、agy、codex、grok、kimi、qwen、opencode、crush、pi、copilot——包装成一个一个“员工”,然后在一个虚拟办公室里协同工作。项目名来自美剧《办公室》里的纸业公司,里面那个不靠谱的经理Michael就是你的克隆,也是整个agent团队的协调者。
一个agent就是一个真实进程
大多数multi-agent框架会把agent实现在自己的运行环境里,本质上是让模型在同一个进程里往返调用工具。Munder Difflin的做法是反过来的:它通过node-pty启动一个真实的伪终端,跑一个完整的CLI进程,用xterm.js渲染输出。
这意味着每个claude或者codex会话拥有的能力,和你自己手动在终端里敲命令时完全一致。它有它自己的上下文管理、自己的工具调用机制、自己的配置和登录状态。Munder Difflin不试图绕过或者重写这些机制,它只是把一个完整的终端会话当作一个可编排的单元。
“每个终端都是agent”和“每个agent都是真实进程”这两件事,是这个项目和市面上绝大多数agent框架的根本区别。
Michael、邮箱和记忆
README把整个协作机制描述得很具体。
每个agent有长期记忆(markdown文件加语义召回索引)、一个mailbox,以及办公室里的一个工位。agent会读自己的记忆、清空自己的邮箱、处理新消息。负责调度的是router,它在各个inbox之间移动消息。还有一个“GOD agent”,README原话是它负责“adjudicates, assigns, and escalates only when it needs you”——裁决、分配、升级。
这些角色里唯一由用户直接交互的是Michael。你只跟Michael说话,他拆解任务、路由给合适的agent、在需要你来决策的时候把问题升级给你。整个系统是分级协作,不是让用户同时盯十个agent。
记忆层是markdown-first的,这意味着记忆是可读的纯文本文件,不是向量数据库里的黑盒。每个agent的记忆跨会话存在,下次启动时能恢复。README声称这是“the fastest memory layer in the world”,这句话看看就好,但它确实点出了这个设计的目标:避免把全部历史塞进context,用本地可读的记忆文件来节省token。
视觉层不是装饰
办公室地板用Pixi.js渲染,agent是地板上的角色,工作时会走到对应的工作站,互相发消息时会有信封从一张桌子飞到另一张桌子。
这种可视化不是噱头。因为每个agent都是真实进程,所以视觉层反映的是真实的进程状态——谁在工作、谁在等待、谁的消息没有reply,扫一眼地板就知道了。我见过的很多agent可视化面板只是把日志画成节点图,Munder Difflin这种把进程状态映射成角色行为的做法,信息密度其实更高。
成本模型不一样
这个项目的工作方式完全围绕你已有的订阅。README明确说它“works with the subscriptions you already pay for, on their hourly limits”——在你已有的订阅按小时限额内运行。它不提供一个统一的API入口,不做token中转,不引入新的计费层。agent空闲时不烧任何额度,因为CLI进程不工作就不消耗。
这种“bring your own keys”模式的直接结果是:你为这套框架付的钱是零,它消耗的是你已经付费的Claude、Gemini Codex、GitHub Copilot之类的订阅额度。对于手里有几个CLI订阅但经常不在电脑前的人来说,这个成本模型比按API调用计费的多agent框架实用得多。
坦白说
有几个地方是需要你在动手前知道的。
README的“Getting started”部分在这篇文档里被截断了,看不到具体的安装和启动命令。如果你想试,得直接去看仓库源码。我没有实际跑起来过这个项目,所以不能告诉你它开箱后的实际体验,但从代码结构看,它至少需要你先在机器上装好一个受支持的CLI并完成登录。
README里有专门的Telemetry章节,这说明项目有遥测设计。具体上报了什么、能不能关掉,你需要自己去仓库里读那一节,再决定要不要在自己的机器上跑。
还有成本这件事。虽然它不额外收钱,但一个复杂任务拆给多个agent做,每个agent都消耗自己CLI的订阅额度,总消耗可能会比你单独用一次CLI高。另外,如果你想跑10个agent同时协作,机器上会同时运行10个终端进程加一个Electron应用,内存和CPU的开销要考虑。
最后是关于隐私的一个事实:你自己的代码、文件、对话内容,会发给各个CLI背后的服务商。所有agent进程都在本地跑,但agent本身不是本地的。除非你配置的是本地LLM的CLI,否则这些数据是要经过Anthropic、OpenAI、Google这些服务方的。
这个项目和“自己写prompt做角色分工”的区别在于:它把消息传递、记忆存储、任务路由这些基础设施都做成了标准机制,而不是靠prompt约定。它不替代任何CLI,只是给CLI们加了一层组织关系。这个思路是它真正与众不同的地方。