仰不愧天,俯不愧人,内不愧心。——韩愈

一个聊天框装不下一个团队:OpenMausBot 把 agent 摆成了通讯录

先说一个形状问题

你手机上的 AI 助手,几乎都是同一个形状:一个输入框,一个对话框,一条时间线。

你问它答,你追问它再答。所有事情挤在同一个上下文里——今天早上让它改的简历,和下午让它查的机票,住在同一个滚动条里。

这个形状在「问答」时代是合理的。但当你开始让 agent 干活,它就不太对劲了。

因为干活需要分工。一个负责翻你的代码库,一个负责写文案,一个负责盯数据;它们该有不同的记忆、不同的工具、不同的权限。而一个对话框只允许有一种人格和一条历史。

OpenMausBot 的诞生文档,第一句话就冲着这个来的:一个盒子里放一个助手,对 agent 来说是错的形状。

项目地址:https://github.com/milind-soni/OpenMausBot

它的解法很朴素:把 agent 摆成通讯录。

侧边栏里一排名字,每个都是一个真的 agent,点进去像跟人聊天一样。它把这套东西叫「一个聊天应用里的 AI bot 团队」。

每个名字都是真的

它对自己产品的描述里有一句关键的话:

侧边栏里的每一个 bot 都是一个真实的 agent——本机跑着的 Claude 或 Codex——有自己的性格、自己的模型、自己的云电脑、自己接的应用。像联系人一样跟它们说话,看它们干活,在关键的地方点头。

这句话里最要紧的是「本机跑着」。

不是调用某个云端接口,不是包一层代理,是你机器上已经装好的 CLI 在跑。文档把这一点写成了第一条原则:自带 agent。

bot 跑在你本机装的 claude、codex、grok 上,用你已有的登录和订阅,不开新账号,中间没有代理。

对很多人来说,这一条决定了它能不能用。因为「我已经付过钱了」是一个很硬的约束——任何要求你再付一次的工具,在这个阶段都会被直接否掉。

而且它留了一个口子:任何引擎都可以在设置里指向一个自定义的 CLI 二进制,版本化的构建或者一层 wrapper 都行。

为什么偏偏是聊天应用

「把 agent 做成聊天软件」这个选择,容易被当成偷懒——反正大家都会做对话框。

但仔细想,聊天应用恰好是少数几个天生支持多主体的界面。

邮箱不行,它是一条条孤立的信。文档不行,它是一个人的空间。看板不行,它是任务不是人。只有聊天软件,从一开始就假设「这边有我,那边有别人」,而且可以有很多个别人。

于是「一队 agent」这件事,不需要发明新界面,只需要把已有的隐喻用足:每个 bot 有头像、有名字、有一段只属于它的对话历史。你切过去,它就接着上次说;你切走,它不会把你的话记到别人头上。

文档里那句话其实是在描述这套隐喻的边界:像联系人一样说话,看它们干活,在重要的事上点头。

三句话,三个动词:说、看、批准。前两个是聊天软件本来就有的,第三个是新的——批准。

而这第三个动词,才是这套界面真正要解决的问题。

本地优先,具体到路径

第二条原则是本地优先,而它没有停在形容词上:

一个跑在 127.0.0.1 上的小 harness 服务,掌管所有 agent 进程。对话记录、密钥、事件都住在 ~/.openmausbot,不在云上。

一个进程、一个目录、一个回环地址。

这三件事凑在一起,才能叫「本地优先」。少一样都不算:进程在本地但数据上云,不算;数据在本地但必须登录它的服务器才能启动,也不算。

有手的 agent,和一条很讲究的阶梯

第三条原则是我最想展开的:agent 得有手。

能聊天的 agent 满地都是,能动手的 agent 才是分水岭。而 OpenMausBot 在这件事上给的不是一个开关,是一段阶梯:

每个 bot 可以用一台云端 Linux 桌面,可以用一个隔离的本地虚拟机,也可以在平台安全边界目前已被认证的地方,用你自己的电脑。此外还能通过 Composio 接 500 多个应用。

注意这个排序。从最远的沙箱,到最近的实机,一级一级往回走,每一级都需要更多的信任。

然后是那句最见功力的话:主机控制在 macOS 和 Ubuntu Xorg 上,用户显式同意之后才可用。而 Ubuntu Wayland 的主机控制继续保持关闭,直到 issue #345 解决。

这句话值得念两遍。

一个做「让 agent 操作你电脑」的团队,主动在一个主流 Linux 桌面环境上把功能关掉,理由写的是一个 issue 编号,而不是「暂不支持」。

这两种写法的区别很大。「暂不支持」是模糊的,你不知道是没做、做不了、还是不敢做。而「等 #345 解决」是一个可以被追踪的承诺——你可以点进去看它卡在哪,也可以判断它值不值得等。

在 agent 拿到你键盘鼠标这件事上,这种克制比任何性能指标都重要。

扩展性:一个文件,一行注册

贡献那一节写得非常具体。

驱动层的 SPI 在 server/contracts.ts 里,刻意做得很小。加一个 provider,就是 server/drivers/ 下的一个文件,加一行注册。

不写代码也能接自己的引擎:任何说 ACP 的 CLI,或者任何 OpenAI 兼容的端点,通过配置就能插进来。自己的 MCP 工具服务器也能零代码添加。

甚至能跑在 OpenRouter、Fireworks AI、DeepSeek、Cline,或者你自己的 OpenAI / Anthropic 兼容服务上。

这套设计的价值观很明确:扩展的成本应该低到一次 PR 就能完成。

「刻意做得很小」这五个字,是一个接口设计者能给出的最好的自我约束。接口小的意思是,它没有替你决定太多事,所以别人能在上面做你没想过的事。

一个改过两次名字的项目

文档里有一句很轻的自我介绍,信息量却不小:也叫 MausBot,前身是 OpenGrokBot。

两个旧名字,一次改名。

这件事在开源项目里很常见,但它在这个项目里格外合理——因为它一开始的定位就是「某个产品的开源替代」,而替代品的名字往往先跟着被替代者走,等自己长出自己的形状,才换掉。

现在它叫 OpenMausBot,域名和下载页都独立了,于是名字里那个「Open」不再只是前缀,而是它的立场:这类产品里,那个开源的。

顺便说一句,它还专门做了一个「开源 Grok Bot 替代品对比」的页面。一个项目愿意把自己放进一张对比表里让别人挑,说明它对自己的位置很清楚。

隐私:写在可以被核对的地方

隐私那一节也不长,但每一句都能落地。

使用分析是可选的、匿名的:产品事件,加上每天一次的「你配置了什么」的计数;永远不包含密钥、名字、地址或对话内容。

关掉的位置精确到菜单路径:设置 → 通用 → 使用分析。

而事件清单在 docs/analytics.md 里,列出了每一个事件和每一个属性。

这三件事凑齐了才叫透明:默认可选、能一键关、有完整清单。

缺任何一条,所谓「我们很重视隐私」就只是一句话。

装起来:两个平台四种包,或者一行命令

发布页给的东西很齐全:macOS 的 Apple silicon 和 Intel 两个 dmg,签名并公证过;Windows 的 x64 安装包;Ubuntu 24.04 x64 的 deb,以及一个 beta 状态的 AppImage。

也可以完全不用安装包。Node 24 以上,装一次就跑:

1
2
npm install -g openmausbot
openmausbot

不想全局装,就用 npx openmausbot。

第一次启动会用方向键引导你:选 AI 的接入方式、登录或者粘贴一个隐藏输入的 API key、选模型、可选地连上手机。下次同一条命令会复用已保存的配置,直接在这台机器上打开。

还有两个细节写得挺体贴:终端要留着别关,但 Ctrl-C 停下来的是服务,不是你保存的工作;加 --no-open 可以不让它自动开浏览器。

一个在终端里起服务的工具,最怕的就是用户以为关掉窗口等于丢掉数据。它提前把这句话说了。

那段关于代币的警告

文档里有一段用警告符号标出来的话,跟产品功能毫无关系:

OpenMausBot 与任何加密货币无关,没有代币。任何使用 OpenMausBot、Maus 或 SupaMaus 名字的币,都不是这个项目或其维护者创建、背书或关联的。我没有从任何人那里收到过代币、付款或分配,也不会为任何代币背书。

一个开源项目需要在首页放这样一段话,说明它已经被人拿去蹭过了。

这段话读起来有点荒诞,但它是这个时代的真实成本:一个有名气的开源项目,第一件要澄清的事可能不是「我支持什么」,而是「我没发币」。

它想替谁说话

文档里还有一段判断,值得单独拎出来:

2026 年的七周里,有四个闭源的个人 agent 产品发布;而它们每一个,都把模型、电脑和你的数据留在了自己那一侧。

这句话是整份文档的立场所在。它没有说那些产品不好,它说的是:这种形状被验证了,但验证它的人把门关上了。

所以 OpenMausBot 做的事,是把这种形状开源化——同样的通讯录、同样的每人一台电脑、同样的接应用,但跑在你的机器上,Apache 2.0。

这也是为什么它的自我定位里堆了一串「open 某某」:open Muse、open dots、open-source Grok Bot、open Instinct、open Cue。

它不是在跟某一个产品竞争,它在占一个位置:这一类产品里,那个开源的。

最后

回到开头那个形状问题。

一个聊天框装不下一个团队,这不是界面问题,是权限问题。真的团队需要分工、需要各自的记忆、需要有人只能看不能改、需要有人在动手前先问一句。

OpenMausBot 把 agent 摆成通讯录,其实是在把「权限」和「关系」重新塞回界面里:你跟这个 bot 说话,是因为它负责这件事;你批准这个动作,是因为你知道它要动什么。

而它最难得的地方,不在于做成了这个东西,而在于它知道自己在哪一步要停下——Wayland 上不碰你的桌面,等那个 issue 解决再说。

一个能动手的工具,最值钱的部分往往是它拒绝动手的那部分。