OpenMuse 架构深度解析:Expo 客户端、Hono 服务端、任务引擎与浏览器 Worker 如何紧密协作
OpenMuse 架构深度解析Expo 客户端、Hono 服务端、任务引擎与浏览器 Worker 如何紧密协作【免费下载链接】openmuseA personal agent with a browser, terminal, files, and work that keeps going built with CopilotKit and AG-UI.项目地址: https://gitcode.com/gh_mirrors/op/openmuseOpenMuse 是一个自带浏览器、终端和文件能力的个人 AI 代理项目基于 CopilotKit 与 AG-UI 协议构建。这篇文章带你快速读懂它的 OpenMuse 架构Expo 多端客户端、Hono 服务端、持久任务引擎与独立浏览器 Worker 四层如何分工协作让你像搭积木一样理解一个生产级 AI Agent 单仓库Monorepo的设计思路。上图是 OpenMuse 的移动端界面代理在聊天里内嵌浏览器卡片结果直接长在对话中。一、先鸟瞰一个 Monorepo四个应用 三个共享包OpenMuse 采用 pnpm workspace 管理见 pnpm-workspace.yaml核心目录分工非常清晰目录角色一句话说明apps/mobile/Expo 客户端一套 React Native 代码同时跑 iOS、Android 和 Webapps/server/Hono 服务端API、CopilotKit 运行时、任务引擎、文件与持久化apps/worker/浏览器 Worker独立的 Playwright Chromium 服务带持久化配置档apps/computer/Linux 容器可选的 Docker 终端与/workspace文件工作区packages/domain/共享领域模型任务、目标、监控等类型定义与请求校验packages/integrations/集成适配器GoogleGmail/日历、PDF 等协议适配packages/backends/预留后端OpenBot HTTP 适配器的身份边界tests/端到端测试工作流、持久化、权限与浏览器契约测试官方文档入口在 docs/README.md建议对照阅读。二、客户端层Expo 如何让一份代码跑三个平台apps/mobile是一个共享的 React Native 工作区见 apps/mobile/README.md一份源码三种运行形态pnpm --dir apps/mobile ios、android跑原生开发构建web则通过 React Native Web 渲染同一套界面无头 CopilotKit hooks聊天、AG-UI 流式事件、工具卡片渲染全部由src/下的组件驱动如 src/chat.tsx 与 src/agent-workspace.tsx平台差异隔离PDF 阅读、日期输入等组件按.native.tsx/.web.tsx拆成两个文件如 src/PdfReader.native.tsx状态逻辑保持共享客户端只做两件事展示工作流和调认证 API。浏览器预览与控制台只使用服务端签发的短时效 URL代理令牌绝不落到客户端。三、服务端层Hono CopilotKit 运行时的组合拳服务入口只有几行核心逻辑apps/server/src/index.ts读取配置 → 创建 PGlite/PostgreSQL 存储 → 恢复被中断的动作 → 启动任务 Worker → 用 Hono 挂载 HTTP 服务。真正的编排都在 apps/server/src/app.ts上图中代理查到的学校邮件直接以卡片形式嵌入对话这就是内联结果体验的由来。关键设计点单一身份边界所有/api/*路由先经auth中间件解析 ownerapp.ts#L126-L137文件内容与浏览器控制台走签名 URL 验证令牌只存在于服务端内存CopilotKit 运行时挂载/api/copilotkit/*转发给CopilotRuntimeapps/server/src/agent.ts支持三种代理后端内置示例代理、模型直连OpenAI/Anthropic/Google、或外部 AG-UI 端点——兼容任意 agent harness正源于此CORS 与请求体限制白名单 Origin、12MB 请求上限PDF ≤10MB错误统一转成可读 JSONapp.ts#L48-L90四、任务引擎让工作掉不掉线都接着跑这是 OpenMuse 架构里最有意思的部分核心在 apps/server/src/engine/持久任务任务、进度、输入请求、审批全部落库TaskWorker通过SQL 租约lease抢占任务engine/service.ts——进程重启后未完成的租约会被回收并继续执行维护循环每 60 秒对账一次持久记录补发丢失的结果、恢复被接受的 Idea、刷新数据源service.ts#L59-L116可分离部署任务 Worker 默认内嵌在 API 进程里生产环境可设TASK_WORKER_ENABLEDfalse后单独跑pnpm dev:worker多个 Worker 靠 SQL 租约互相协调但只保留一个 API 实例不自动重试危险写操作对结果不确定的外部写入如发邮件OpenMuse 宁可停下让你复核也不盲目重放配合 PGlite本地嵌入式 Postgres数据落在.openmuse/目录或独立 PostgreSQL任务在断电、重启后依然可恢复。五、浏览器 Worker一个只信任服务端的独立进程apps/worker/ 是一个完全独立的 Node/Playwright 服务apps/worker/README.md设计上有几道明显的安全边界令牌隔离只有持有 ≥32 位随机WORKER_TOKEN的服务端能调用它鉴权用 SHA-256 哈希 恒定时间比较apps/worker/src/server.ts令牌永远不会发给浏览器或手机持久化 Chromium 配置档每个会话对应一个 UUID 配置档Cookie 在优雅关闭时保存重启 Worker 后登录态与 PDF 下载都还在资源限额3 个并发会话、30 分钟空闲关闭、20 秒导航超时、每会话最多 20 个 10MiB 的 PDF网络出口管控只允许公网 80/443 端口DNS 结果逐个校验内网回环代理直连解析到的 IP防止 DNS 重绑定绕过容器以无特权用户运行、只读根文件系统、无 Docker socket启动方式二选一本地pnpm dev:browser或docker compose --env-file .env -f infra/compose.yaml up --build -dinfra/compose.yaml。六、协作全貌一次请求如何穿过四层你发出指令Chat → Expo 客户端AG-UI 事件流 认证 API → Hono 服务端身份解析、CopilotKit 运行时 → 任务引擎落库建任务SQL 租约驱动执行 → 浏览器 Worker导航、读取、截图、下载 PDF → Linux 容器可选终端命令、文件读写 → 结果内联回聊天邮件卡片、浏览器卡片、PDF 文档架构全景图可参考 README.md 的 Architecture 章节。当代理正在浏览时你在 App 里点Take control打开的正是 Worker 中同一个 Chromium 会话——这就是可见工作的体验基础。七、本地跑起来三步体验完整架构git clone https://gitcode.com/gh_mirrors/op/openmuse openmuse cd openmuse pnpm install --frozen-lockfile cp .env.example .env npx copilotkitlatest login npx copilotkitlatest project select # 生成 CPK_INTELLIGENCE_API_KEY 后写入 .env pnpm dev另开终端执行pnpm dev:web打开localhost:8081即可体验API 健康检查在localhost:8787/api/health。浏览器 Worker 则需先设置BROWSER_WORKER_URL与WORKER_TOKEN见 apps/worker/README.md。八、小结这套架构最值得借鉴的三件事职责切分到进程级别UI、API、浏览器、终端容器互不侵入浏览器 Worker 只信任服务端令牌天然隔离了最不可信的任意网页把持久化当第一公民SQL 租约 维护循环让 AI 工作不怕进程重启这是 alpha 项目里少见的工程化细节AG-UI 协议解耦代理后端客户端与任务引擎不关心模型是谁换模型、换代理框架都只动服务端一处配置OpenMuse 的架构证明了一件事个人 AI 代理不必是一个黑盒Expo、Hono、任务引擎与浏览器 Worker 各自独立又可组合MIT 协议下源码完全开放值得每一个想搭自己 Agent 的开发者逐层拆解。【免费下载链接】openmuseA personal agent with a browser, terminal, files, and work that keeps going built with CopilotKit and AG-UI.项目地址: https://gitcode.com/gh_mirrors/op/openmuse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

TypeScript 7 Nightly 扩展指南:在 VS Code 中抢先体验 TypeScript 7 原生移植的每日构建

TypeScript 7 Nightly 扩展指南:在 VS Code 中抢先体验 TypeScript 7 原生移植的每日构建

编译器编程语言开发工具 【免费下载链接】typescript-go Staging repo for development of native port of TypeScript 项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-go 点击查看 免费下载 TypeScript 7 Nightly 是随 typescript-go 仓库&#xf…

2026/10/1 1:50:41 阅读更多 →
STM32开发资源导航:从环境搭建到实战项目的避坑指南

STM32开发资源导航:从环境搭建到实战项目的避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:49:41 阅读更多 →
马德拉岛全攻略:大西洋花园的徒步、美食与自驾避坑指南

马德拉岛全攻略:大西洋花园的徒步、美食与自驾避坑指南

单看“Madeira”这个词,可能有点陌生。但如果我换一种说法:大西洋深处有一片常年如春的火山群岛,首府丰沙尔依山而建,岛上既有陡峭的悬崖海岸,又有层层叠叠的灌溉梯田,还是足球巨星C罗的出生地——很多人会…

2026/10/1 1:49:41 阅读更多 →

最新新闻

JMeter压力测试从入门到进阶:安装配置、脚本编写、结果分析与分布式压测

JMeter压力测试从入门到进阶:安装配置、脚本编写、结果分析与分布式压测

1. JMeter压力测试工具的整体定位与选型思路做Java后端的朋友,逃不掉一个环节:接口上线前得压一压,看看服务在高并发下到底撑不撑得住。我最早接触压测是用ab(Apache Bench)跑个简单接口,后来遇到需要登录态…

2026/10/1 2:26:57 阅读更多 →
【风电功率预测】【多变量输入单步预测】基于TCN-BiGRU-Attention的风电功率预测研究(Matlab代码实现)

【风电功率预测】【多变量输入单步预测】基于TCN-BiGRU-Attention的风电功率预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

2026/10/1 2:26:57 阅读更多 →
developer-roadmap 中的 LLM 可观测性(LLM Observability)实战指南:监控 Prompt、响应、延迟与 Token 消耗

developer-roadmap 中的 LLM 可观测性(LLM Observability)实战指南:监控 Prompt、响应、延迟与 Token 消耗

文档教程知识库 【免费下载链接】developer-roadmap Interactive roadmaps, guides and other educational content to help developers grow in their careers. 项目地址: https://gitcode.com/GitHub_Trending/de/developer-roadmap 点击查看 免费下载 LLM 可观测…

2026/10/1 2:26:57 阅读更多 →
90DaysOfDevOps 第 10 天:Go Workspace 与代码编译运行实战

90DaysOfDevOps 第 10 天:Go Workspace 与代码编译运行实战

文档/教程 【免费下载链接】90DaysOfDevOps This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Pri…

2026/10/1 2:26:57 阅读更多 →
STM32CubeMX 6.14图形化配置指南:从时钟树到代码生成

STM32CubeMX 6.14图形化配置指南:从时钟树到代码生成

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 2:26:57 阅读更多 →
C#实现SECS/GEM通信:从HSMS到状态机全解析

C#实现SECS/GEM通信:从HSMS到状态机全解析

几年前我第一次把一台C#写的上位机接到半导体前道设备的SECS/GEM端口时,心里其实没底。对方是日本厂商的薄膜设备,EAP系统要求必须通过SECS/GEM联机才能跑Recipe,而我手里只有几百页英文SEMI规范PDF,和一台连IP都没配好的旧PC。后…

2026/10/1 2:25:56 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →