OpenMuse 深度评测:6.3k Star 的个人 Agent 应用,520 个测试全绿却 0 个正式版本,官方正把用户让给 OpenBot

你想给 AI 配一台自己的电脑:能开浏览器、能敲命令、能读写文件,关机之后活儿还在跑。这类项目今年多得数不清,但真把代码拉下来跑一遍,十有八九卡在第一步——装不上、起不来、文档说的和代码里的对不上。CopilotKit 开源的 OpenMuse 是少数反过来的:我把仓库整个拷进沙箱,装依赖、跑检查、跑测试、起服务,520 个测试用例一个不挂,0 个失败。但同一份代码里,官方自己开了两个待合并的改动请求,要把读者劝去另一个项目。测试越绿,这件事越难看懂。

一、它是什么:一个自己带服务器的「个人 Agent 应用」

先说人话。OpenMuse(取名自「缪斯」)是一个开箱即用的个人助理应用,2026 年 9 月 15 日开源,MIT 协议,6,361 个星标。它不是你手机里那种只会聊天的助手,而是给助手配了一套「手和眼」:

  • 一个浏览器,可以持久登录、读公开网页、截图,还能让你接管正在跑的那个页面;
  • 一个可选的 Linux 终端,跑在独立容器里,能建文件、改文件、导入导出 PDF,但断网;
  • 一套后台任务,任务有计划、有检查点、可暂停、可取消,进程重启用数据库租约(也就是给任务发一张带过期时间的「占位凭证」,谁先抢到谁干活)把中断的活儿捡回来。

界面上是 iOS、Android、网页三端共用一套代码,底层用 CopilotKit 与 AG-UI(一套让前端和后端 Agent 说同一种话的协议)对接模型。

拆开看,仓库是 231 个受版本控制的文件、38,356 行 TypeScript。重心分布很诚实:

目录 位置与规模 干什么
apps/server 9,307 行 接口层、Agent 运行时、任务引擎、动作审计、存储
apps/mobile 10,281 行 iOS / Android / 网页三端界面
apps/worker 1,518 行 独立的浏览器服务,带持久化登录配置
apps/computer 371 行 非 root 的 Linux 容器镜像与文件助手
tests 52 个文件、14,733 行 行为测试,行数与核心代码几乎一比一

一个细节值得停一下:packages 目录下的三个文件夹(共享类型、集成适配、外部后端),看着像三个公共包,实际一个包声明文件都没有,也不在工作区清单里。服务端是靠相对路径直接引到对方源码的,比如从 apps/server 往上三层跳进 packages/domain/src。好处是不用给每个包配构建流程,改一行立刻生效;代价是 README 目录表里那句「共享类型包」听着像个能单独安装的东西,其实不能。

二、怎么做到的:把「AI 干活」拆成可审计的零件

这个项目的设计取舍,读代码比读文档清楚。有三处我认为是真功夫:

第一,外部动作和模型推理是分开的。发邮件、改日历这类真会碰到外部世界的操作,不走模型直接调用,而是先存成一条「动作提案」,带归属人、内容哈希、版本号,等你点确认才发。代码注释里写明「外部写操作绝不在这里重试」,因为重试一次就等于多发一封邮件。

第二,模型供应商是可换的零件。一个模型字符串、三家供应商(OpenAI、Anthropic、Google)各一套适配,还能切到兼容接口。上游明确写了哪些情况会重试、哪些 4xx 一次就失败——这类边界写在代码里而不是藏起来,是可维护的表现。

第三,后台任务有真正的失败语义。任务引擎里有一个专门的「租约丢失」错误类型,任务被暂停、取消或被别的进程抢走时会抛出来,让执行体干净退出,而不是写一半留下垃圾。它甚至有专门的测试文件去压这条路径。

三、实证:我跑出来的数字(一台受限沙箱,2026-11-09)

全部命令都在一次性沙箱里跑,没有碰生产目录,测试数据一条没编。先说结论:这个仓库的工程质量,是我今年跑的同类项目里最整齐的一档。

我跑的命令 结果 这个数字意味着什么
装依赖(按锁定文件严格安装) 1,410 个包,9.8 秒 依赖树干净,没有版本漂移
代码风格与静态检查 177 个文件,0 报错 只有一条提示:检查器配置版本比工具落后一个小版本
类型检查(服务端 + 移动端) 通过 严格模式下无类型错误
类型检查(浏览器服务) 通过 独立子目录也守住了
构建服务端 通过,产物 1.1 MB 能出可部署的 JS
60 个测试文件逐个跑 520 通过 / 0 失败 / 0 跳过 覆盖接口、任务引擎、集成、容器、浏览器、财务
一条命令跑全量测试 崩了 见下段,原因不在代码

最后两行必须放在一起看,否则会得出错误结论。仓库的测试脚本把 60 个文件一次全交给测试器并行跑;在我这台内存与进程数都受限的机器上,每个文件都要拉起一个编译子进程,跑到第八个左右就开始报「工作线程初始化失败」「线程创建:资源暂时不可用」——资源不够,不是测试写坏了。我把文件拆成一个一个串行跑,520 个用例全绿、零失败、零跳过,最慢的一个文件 14 秒。所以我给的口径是:逐文件跑全绿,一条命令跑需要一台不被限流的机器。这一点值得记住,它的持续集成配置跑在标准运行器上,那边没这个问题。

再往下是起服务,这里撞上了一个真实门槛。照文档把示例配置复制成正式配置,直接启动,进程立刻退出,报错只有一句:缺少 CopilotKit 的对话存储密钥。

这是 CopilotKit 自家托管对话存储(名叫 Intelligence)的密钥,要先登录它的命令行工具、选一个项目才发得出来。我塞了一个假密钥再启动,服务正常拉起,健康检查返回 {"ok":true,"mode":"sample","agentConfigured":true},未登录取接口返回 401——鉴权边界是真的,不是摆设。

问题在文档这层。README 开头写「兼容任何 Agent 编排外壳」(原文 Compatible with any agent harness,harness 也就是跑 Agent 的那层外壳),后面又有一处说这套托管存储「需要自己配置」。而代码里这个密钥是无条件必填的:读取配置的函数直接调必填校验,没有分支。这不是我一个人的发现,仓库里有个 2026-09-26 的 issue 就是提这个,标题直白——「让对话存储对自托管部署变成可选」,正文还贴了改动历史:先是一次提交把它设成线上必填,再一次把要求扩展到所有模式,并删掉了跳过它的分支。另有一位开发者干脆自己分叉了一个「不需要密钥」的版本发出来。

四、坐标:它站在哪,官方又想让它去哪

放进同类里看。CowAgent 那类国产 Agent 编排框架(也就是把多个步骤串起来调度的那层),考的是「能不能把复杂任务串起来」,我上次实测它 421 个测试文件跑两遍数字不同;OpenMuse 反过来,520 个用例逐个跑完全一致,但它考的不是编排能力,是「一个人用」的完整度——登录、邮件、日历、文档、财务、浏览记录,全在一个应用里。hermes-jev-skills 那篇测的是决策引擎,重点是「模型怎么选」,OpenMuse 的重点是「选了之后谁来兜底」:动作审计、租约、断点恢复。三个项目其实回答三个不同问题。

真正的反差在官方态度。仓库现在有 42 个分支、32 位贡献者,零个正式版本、零个版本标签,更新日志只有一条「0.1.0-alpha」。而 11 月 2 日和 11 月 4 日连开两个待合并的改动请求,说得很清楚:OpenMuse 现在是另一个项目 OpenBot 的一个「皮肤」,那个项目才是 CopilotKit 持续维护、带登录、带每个机器人权限、带审计轨迹的版本;这个仓库转为社区维护的起点模板。

这解释了我实测到的很多东西:为什么星数六千多却一个版本都不发,为什么 61 个待处理里 46 个是改动请求、真正的问题只有 15 个,为什么 README 里「可选」和代码里「必填」能同时存在——它正在从「产品」变成「样板间」。

五、结论:值得拷,别指望拿来就用

值得拷: 如果你想要一个「个人 Agent 应用」的完整参考实现,这是目前最整齐的开源样本之一。三个应用分工清楚,测试与代码接近一比一,动作审计、任务租约、容器隔离这些容易糊弄的地方它都写了专门的测试。拿它当骨架改,比自己从零搭省几周。

别指望: 一是别指望装完就跑。没有 CopilotKit 的密钥,服务连启动都做不到,这一点文档说得比代码含糊。二是别指望拿到稳定版本或升级路径,一个版本标签都没有。三是别按开头那句「兼容任何 Agent 编排外壳」去理解——它确实能接外部 Agent 端点,但主路径绑定的是自家运行时。

如果只想体验:等 OpenBot 那条路更省事,官方改动请求里写的迁移表就是给这个用的。如果想改代码:现在就拷这个仓库,趁它还是「纯应用」而不是「皮肤」,改动半径最小。

局限说明:本次实测在一台内存与进程数受限的沙箱里完成,全量测试的并行方式没跑通,只拿到逐文件串行结果;浏览器与 Docker 容器的两个真机冒烟测试需要 Chromium 与 Docker 守护进程,我没跑,它们在持续集成里是独立任务;模型侧只用了假密钥验证启动与鉴权,没有接真实模型跑对话。数据取自 2026-11-09 的仓库快照,主分支最后一次提交是 2026-10-26。

相关阅读:hermes-jev-skills 深度评测:823 Star 的 Jev 决策引擎,1020 个测试全绿、6 个基准我复现 5 个;CowAgent 深度评测:4.7 万 Star 的国产 Agent Harness,421 个测试文件我跑两遍数字不同

关注 AI商业快讯,每天一篇 AI 热点深度解读。

发表评论