munder-difflin:基于多AI模型的本地多智能体协作平台项目

A local multi-agent harness that works with your existing Claude Code, Codex subscriptions, allows you to run an office of agents

分支65Tags39
文件最后提交记录最后更新时间
18 天前
10 天前
10 天前
10 天前
10 天前
2 个月前
3 个月前
2 个月前
2 个月前
10 天前
3 个月前
10 天前
10 天前
19 天前
18 天前
10 天前
3 个月前
15 天前
1 个月前
3 个月前
17 天前
3 个月前
10 天前
10 天前
10 天前
3 个月前
3 个月前
10 天前
10 天前
24 天前
15 天前
10 天前
10 天前
3 个月前
2 个月前
2 个月前
Munder Difflin — 用于运营你的克隆智能体办公室的智能体运行框架

Munder Difflin

用于运营你的克隆智能体办公室的智能体运行框架

GitHub Trending 第一仓库 Munder Difflin — Product Hunt 当日产品第五名

Munder Difflin 办公室:智能体在工位上并行工作,右侧有指挥中心和实时智能体终端

免费、开源且高效 — 一款多智能体运行框架,可基于你已付费的订阅, 按小时额度运行。它把你已经在运行的终端编码 CLI 变成你的克隆体;它会在你离开时继续工作, 并协调你本机上一整间智能体办公室。

封装 Claude Code、Antigravity (Gemini)、OpenAI Codex、 xAI GrokKimi CodeGemini CLIQwenOpenCodeCrushpi.devGitHub Copilot CLICursor — 支持自带密钥与本地 LLM。 这些智能体能够通信、路由任务并拥有记忆,由你的克隆体(Michael) 统一协调,并以共享办公区中正在工作的头像形式呈现。

Electron · React · TypeScript · Pixi.js · xterm.js · node-pty

许可证:MIT 版本:0.4.6 状态:预发布 平台:macOS | Windows | Linux 欢迎 PR 博客 Discord


▶ 查看办公室 — Munder Difflin 正在协调一群 Claude Code 智能体

Note

全球最顶尖的智能体,全球最离谱的皮包公司。 Munder Difflin 把你已经在运行的终端智能体 CLI — claudeagycodexgrokkimiqwenopencodecrushpicopilot — 转化为 一支自我协调的团队:每个智能体都会获得长期记忆、一个信箱,以及 2D 办公区中的一张工位 — 而你的克隆体(Michael)会在你旁观时,在它们之间分派任务。他是 整个办公室的主管;而你仍然是他的老板。

目录

它是什么

Munder Difflin 是一款桌面应用,它将真实终端智能体 CLI 封装为功能完整的智能体, 将它们接入蜂群心智,并让你的克隆体负责统筹——Michael 是唯一一个 只需与之对话、就能完成事务的智能体。其底层运行着世界上最快的记忆层, 让每个智能体都能记住所学,并即时召回。

  • 每个终端都是一个智能体。 每个 claudeagycodexgrokkimiqwenopencodecrushpicopilot 或自定义会话都会作为一个真实进程运行在伪终端(node-pty)中,逐字节保真,并通过 xterm.js 渲染。
  • 每个智能体都是一个化身。 会话会以角色形式出现在 Pixi.js 办公区中——它们工作时走到各自工位,彼此发送消息时,信封会在不同工位间穿梭。
  • 蜂群让它们协同工作。 智能体读取自己的记忆并清空邮箱;路由器在各收件箱之间传递消息;GOD 智能体负责裁决、分配任务,并只在需要你时才升级处理。
  • 即时记忆。 以 Markdown 为核心的记忆层配合语义召回索引,让智能体能够跨会话记住内容,并在毫秒级完成召回。

工作原理

            you ── talk to ──►  ┌─────────────┐
                                │  GOD agent  │  orchestrator / supervisor
                                │ (Michael's  │  roster · routing · adjudication
                                │   office)   │  blackboard · task ledger
                                └──────┬──────┘
                                       │ assigns · routes · escalates
              ┌────────────────────────┼────────────────────────┐
              ▼                         ▼                         ▼
        ┌───────────┐            ┌───────────┐            ┌───────────┐
        │  agent A  │  message   │  agent B  │  message   │  agent C  │
        │ provider  │ ─────────► │ provider  │ ─────────► │ provider  │
        │  + memory │            │  + memory │            │  + memory │
        └───────────┘            └───────────┘            └───────────┘
              └──────── shared hive: memory · mailbox · blackboard · log ───────┘
  1. 你启动智能体——每个都是普通终端进程(claudeagycodex 或自定义), 拥有自己的工作目录、身份,以及提供商专属的生命周期。
  2. 智能体通过蜂巢协作——一个由纯文件构成的本地 git 仓库。它们写入自己的 outbox/;框架的路由器将消息投递到接收方的 inbox/。智能体从不直接操作 git (单一提交者设计可避免 index.lock 损坏)。
  3. GOD 智能体统筹现场——它会读取每个请求,自行处理常规请求(保持 系统完全自主),并将只有 关键 事项(支出、破坏性操作、范围变更)上报到一个 供你处理的审批队列。
  4. 一切可见——你可以观看化身移动、信封传递以及实时终端流; 你可以向任意会话输入回复,浏览它的文件,并读取它的 git 历史。

完整多智能体设计见 HIVE.md,终端/事件平面见 SPEC.md, 视觉系统见 DESIGN.md

Features

现场

  • 每个终端都是真实智能体。 Claude Code、Antigravity (Gemini)、OpenAI Codex、xAI Grok、Kimi Code、Gemini CLI、Qwen、OpenCode、Crush、pi.dev、GitHub Copilot CLI、Cursor 或自定义命令——每个都运行在独立的 node-pty PTY 中,并由 xterm.js 渲染。
  • 每个智能体都是一个化身。 在 Pixi.js 办公室场景中,智能体走向工位,信封在办公桌之间传递,化身状态反映真实工作情况。
  • 可对话的 GOD 编排器。 它路由任务、仲裁流量,并只将需要人工介入的事项上报。或点击 Talk,用语音统筹现场。
  • 按智能体划分的 git 工作树。 可选隔离,确保并行智能体不会在分支上发生冲突。

记忆与协同

  • 蜂巢——按智能体划分的记忆、原子文件邮箱、共享黑板、仅追加事件日志、单一提交者 git。
  • 语义召回——将 Markdown 记忆提炼到共享记忆宫殿中,可在界面里搜索,并通过浓缩避免它无限膨胀。
  • 企业知识图谱——你自有的文档与策略,可供任意智能体查询。

控制与安全

  • 人工闸门——支出、范围和破坏性操作都会上报给你。可在运行中途转向,或优雅停止。
  • 熔断器——为陷入循环、发生错误风暴或超出预算的智能体提供 转向 → 约束 → 停止 的处置阶梯。
  • 预算与遥测——按智能体划分的 token 预算、来自会话记录的真实成本、持久账本、OTel span,以及工具瀑布图。

指挥中心

  • 带依赖关系的看板任务、计划任务 + 心跳、实时机群监控、记忆搜索、活动日志,以及 CI 监视器。
  • 技能——每个智能体在 Claude Code、OpenCode 和 Codex 中已具备的能力,外加一个包含 227 项更多技能的可浏览目录,支持搜索、筛选、安装和卸载。
  • 内置 Monaco IDE——文件树、编辑器选项卡、保存,以及 CHANGES · HISTORY · COMPARE git 面板,包含提交图、差异、分支比较和受保护的 checkout。所有 fs/git 访问都通过 main 代理。

工作输入与输出

  • Slack 与 Webhook——向频道发送消息或 POST 一个 Webhook;Michael 可以生成一个临时工作者、在线程内回复并销毁它。
  • 可共享的招聘 + Agent Gallery——从 munderdifflin://hire 链接导入角色;导入仅会预填表单,仍需人工启动它。可在 Agent Gallery 浏览角色。
  • 自带密钥 + 本地 LLM——按提供商的密钥存储在只写密钥代理中,以及 Ollama / LM Studio / vLLM 的基础 URL。指南:开放模型 · Mac Mini
  • 一键更新:标题栏徽章执行真实更新。它会下载适用于你机器的构建,然后重启并安装;并在检查确认你已是最新版本后读取 latest。如果更新器无法自行获取构建,可手动下载作为后备。之后的首次启动会打开该版本的发布说明,并以设计好的页面展示,而非只显示版本号。
  • 你的语言:英语、简体中文和阿拉伯语,阿拉伯语支持从右到左布局。英语为默认语言,直到你在设置中选择其他语言,界面才会变化。应用不会读取你的操作系统区域设置。三种应用字体均内置于程序包中,因此启动时不会获取任何资源。
  • 先决条件——一个设置页面,显示你拥有哪些支持工具(uv、git、Node、MemPalace、每个智能体 CLI),每个工具的用途,以及一个按钮,请求 Michael 安装缺失项。

Note

状态:v0.4.6,本次发布让应用不再假设所有人都从左到右阅读英语。 界面现在可运行在简体中文和阿拉伯语中,并支持从右到左。英语 仍是默认语言,直到你在“设置”的“常规”中选择一个语言,界面才会变化; 应用从不读取你的操作系统区域设置。三种应用字体现在都内置于 程序包中,而不再从 Google 加载;Google 在中国大陆被屏蔽,此前 恰恰破坏了界面,而该界面正是中文译本所服务的对象。输入法在 候选词仍在组词时按 Enter 不再触发发送、搜索或重命名。 所有字符串均已翻译,没有任何内容回退到英语,并且终端支持从右到 左阅读。部分界面仍需镜像内边距和图标,这是下一步工 作。目前尚无阿拉伯语读者审阅措辞。 本次发布还包括:更新徽章执行真实的下载和重启,而不是交给你 一个磁盘镜像;更新检查不再无限循环;设置通过一个“保存”按钮持久 化;模型列表已移入已签入目录;ASK ME 卡片可渲染 Markdown。 安全方面:智能体启动的 CLI 名称会先在针对你的 PATH 解析前进行 验证;自动模式下系统沙箱保持开启;分析已停止发送 IP 及派 生位置。遥测现在只统计你发送给智能体的消息数量,仅计数, 不包含正文的文本、长度或任何形式的哈希。 来自 13 位贡献者的 16 个社区拉取请求合入本次发布,其中一个(#213) 经过重新实现而非直接合并。 **如果你仍在使用 0.3.8,请更新:**该版本的用量限制保护机制从未释放 它所挂起的智能体,现已完全移除。 macOS(已签名并公证)、Windows 和 Linux 构建已发布在 版本发布页

快速开始

先决条件

  • macOS、Windows 或 Linux
  • Node.js 18+ 和 npm。
  • 用于 node-pty 原生插件的 C/C++ 工具链 — 在 macOS 上,请安装 Xcode 命令行工具:
    xcode-select --install
    
  • 你的 PATH 中至少有一个受支持的代理 CLI — Claude Codeclaude,默认)、Antigravityagy)、OpenAI Codexcodex)、xAI Grokgrok)、 Kimi Codekimi)、Gemini CLIgemini)、Qwenqwen)、OpenCodeopencode)、 Crushcrush)、pi.devpi)、GitHub Copilotcopilot)或 Cursorcursor-agent)。 大多数缺失的 CLI 可自动修复:harness 会在终端中运行安装器, 并继续使用新的可执行文件。
  • 可选:设置 → AI 引擎 中配置 你自带的 API 密钥和本地 LLM(Ollama / LM Studio / vLLM)。
  • 可选: 用于即时跨会话召回的语义记忆索引 — 没有它时,markdown 记忆仍可正常工作。

安装并运行

git clone https://github.com/chaitanyagiri/munder-difflin.git
cd munder-difflin
npm install        # postinstall rebuilds node-pty against Electron's ABI
npm run dev        # launches the Electron app with hot reload

首次启动时,你会经过引导向导,随后进入 floor。使用 Add agent 创建你的首个会话 — GOD agent 会自动在 Michael's office 就座。

Other scripts

npm run build      # production build via electron-vite
npm run preview    # preview the production build
npm run typecheck  # type-check the node (main/preload) and web (renderer) projects

如果在 Electron 升级后 node-pty 无法加载,请重新运行 npm installpostinstall 钩子 会针对当前 Electron ABI 运行 electron-rebuild)。

架构

两个数据平面为同一个 renderer 提供数据:

┌───────────────────────────────────────────────────────────────┐
│                     Electron Renderer (React)                  │
│   ┌──────────────────┐    ┌──────────────────────────────┐    │
│   │ Office Floor      │    │ Terminal + Command Bar       │    │
│   │ (Pixi.js)        │    │ Files + Git tabs (xterm.js)  │    │
│   └─────────▲────────┘    └────────────▲─────────────────┘    │
│             │ avatar state             │ pty bytes / fs / git  │
└─────────────┼──────────────────────────┼───────────────────────┘
              │ IPC (contextBridge: window.cth)
       ┌──────┴──────────┐        ┌──────┴─────────────┐
       │  Event Plane    │        │  Terminal Plane    │
       │  hooks / hive   │        │  node-pty PTYs     │
       │  router + GOD   │        │  + fs + git        │
       └────────▲────────┘        └──────▲─────────────┘
                │ hook payloads          │ stdin / stdout
                └─────────┬──────────────┘
                   ┌──────┴──────────────┐
                   │ claude / agy / codex│
                   └─────────────────────┘
  • 终端层。 主进程持有一个 PtyManager,并以 node-pty 进程启动每个智能体,同时通过按 id 区分的 IPC(pty:data:<id>)流式传输输出。渲染进程仅通过 类型化的 window.cth 桥接通信(src/preload/index.ts),该桥接还暴露 沙箱化的文件系统与 git 辅助函数。
  • 蜂巢 / 事件层。 hive.ts 是磁盘端的多智能体层;hooks.ts 运行钩子 服务器,提供方桥接会向该服务器 POST 生命周期载荷(Claude Code 为 cth-hook, Antigravity 为 agy-hook)。memory.ts 封装语义记忆 CLI。路由器负责投递消息、清空 提供方发件箱,GOD agent 进行裁决,空闲/收件箱唤醒则让工作进程持续清空邮件。

项目结构

src/
  main/                      Electron main process (Node)
    index.ts                 window, IPC handlers, quit guard
    pty.ts                   node-pty manager (spawn/write/resize/kill/stream)
    hive.ts                  on-disk multi-agent layer (memory, mailboxes, router)
    hooks.ts                 hook server + provider hook shims (`cth-hook`, `agy-hook`)
    memory.ts                semantic memory layer (CLI wrapper, degrade-to-noop)
    config.ts                harness config persistence + home setup
    transcript.ts            reads ~/.claude/projects/ JSONL transcripts for real token/cost telemetry
    telemetry.ts             live OTel collector + usage/cost feed for observability
    usage.ts / pricing.ts    UsageProvider seam + per-model cost attribution
    breaker.ts / control.ts  cost/runaway circuit breaker (steer/constrain/stop) + HITL gate / steer / stop
    reflect.ts               MemoryReflector — memory condensation
    db.ts                    SQLite durable store (window bounds + history) + durable cost ledger
    github.ts                GitHub issue + CI run ingestion via the gh CLI
    shellEnv.ts              resolve PATH and shell env for child processes
    fs.ts / git.ts           sandboxed filesystem + git bridges
  preload/                   contextBridge → typed window.cth API
  renderer/src/
    App.tsx                  top-level layout + wiring
    design/                  tokens.css / tokens.ts / global.css (design source of truth)
    components/              PixelPanel, AgentDetailPanel, CommandBar, ApprovalsPanel, MemoryPanel, …
    CommandCenterPanel,      Michael's control surface (Terminal/Floor/Memory/Activity/Tasks/Triggers/Handbook tabs)
    ToolWaterfall,           per-agent tool-span waterfall for the observability view
    TasksKanban,             dependency-aware kanban board (Tasks tab)
    ThreadsPanel,            hive message conversation viewer (Messages tab)
    MessageQueueComposer,    park messages for a busy agent
    scene/office/            Pixi office floor: OfficeFloor, Character, Camera, cast, pathfinding, …
    store/ · hooks/          zustand store, event loop, PTY parser, typewriter
    assets/                  tilesets, maps, character sheets (see ATTRIBUTION.md)
docs/                        `logo.png`, `banner.png`, landing page (GitHub Pages → munderdiffl.in)
docs/media/                  `og.png` (social previews) + rendered Remotion clips
landing-remotion/            Remotion project that renders the landing page's "how it works" clips
HIVE.md · SPEC.md · DESIGN.md   multi-agent · terminal/event · visual design
docs/message-queue.md        who may type into an agent's terminal, and when

设计系统

整体美学是 Animal Crossing × Earthbound × SNES 菜单界面 —— 像素对齐、粗颗粒、亲和友好。 DESIGN.md 是唯一准绳;每个组件都从其设计令牌派生。Munder Difflin 品牌在标识与界面外壳上叠加了 Dunder-Mifflin 酒红色#6E1423)和 金色#F4D35E)。15 个头像取材于 The Office 的角色阵容,并通过发型/肤色/衬衫配方加以区分。

路线图

截至 v0.4.6 已交付:简体中文与阿拉伯语界面,支持从右向左排版和自托管字体;12 个智能体引擎,支持 BYOK 密钥与本地 LLM;语音编排;蜂巢(记忆 · 邮箱 · 黑板 · 事件日志);带有看板和工作日日程的指挥中心;内置 Monaco IDE 与 git 轨道;集成注册表 + 机密代理;由 Slack 生成的工作代理;可分享的录用智能体与智能体画廊;可观测性与断路器;可靠持久化;会话恢复;多窗口楼层;一键更新;Skills 浏览器;实时前置条件检查;由账本汇总而成的成本报告;可在 Apple Silicon 上运行的语义记忆;以及一个会直接安装构建产物、而不是仅提供指向的更新器。 完整历史见 CHANGELOG.md

接下来:

参与贡献

欢迎贡献——这是预发布软件,涉及面很广。请从 CONTRIBUTING.md 开始。简而言之:fork 仓库,运行 npm install && npm run dev,保持 npm run typecheck 通过,并让任何新 UI 都从 DESIGN.md 的设计令牌派生。适合 优先入手的方向:接入真实 hook 事件、新增智能体流程、配置抽屉,以及跨平台工作。

Important

每个 PR 都必须提供修改前与修改后的证据 —— 截图,或在内容动态变化时提供录屏 —— 放在 PR 模板的 ### Before### After 标题下。系统会自动检查,缺少证据的 PR 不会合并。“我的改动不涉及 UI”不构成豁免;它 只是改变证据的形式。见 证据是必需的

有问题、遇到 bug,或想展示你的办公室?加入 Discord:https://discord.gg/SEDzP5ZPk5。在 PR 中添加你的 Discord 昵称,合并后你会获得 employee of the month 角色。

遥测

官方构建会发送少量匿名使用事件(应用打开、代理生成、功能 使用)——绝不会发送提示词、代码、文件路径或代理输出。完整事件列表、匿名性 保证,以及三种关闭方式(设置中的开关、DO_NOT_TRACK,或从源码 构建——分叉项目无需密钥即可编译,且不会发送任何内容)均已记录在 TELEMETRY.md 中。

许可证

Important

素材许可。 内置像素画(瓦片集与地图)为 Modern Interiors - RPG Tileset [16X16],由 LimeZu 创作,在 Complete Version 许可证 下使用,允许编辑,并可用于商业与非商业项目。该许可证要求保留对 LimeZu 的署名,且不得移除。办公室角色群像并非 LimeZu 的艺术作品,而 在 portraitArt.ts 中通过程序化方式绘制。参见 src/renderer/src/assets/ATTRIBUTION.md

源代码基于 MIT License 发布——见 LICENSE。MIT 授权仅 覆盖代码;内置像素画由 LimeZu 单独授权,并在 LICENSE 的范围说明中予以 排除。Munder Difflin 是一部善意的戏仿作品,与 NBC 的 The Office 或 Dunder Mifflin 无任何关联。

致谢

  • 感谢 LimeZu 提供 Modern Interiors 像素画瓦片集(Complete Version 许可证)。
  • 感谢 shahar061/the-office 用于办公室瓦片集/地图的引入。
  • 感谢 Pixi.js · xterm.js · node-pty · electron-vite · CodeMirror 为本项目提供底层库支持。
  • 感谢 Remotion 为落地页的动画“工作原理”片段(landing-remotion/)提供支持。
  • 感谢 The Office(美版)为 Munder Difflin, Inc. 提供原型。