Skip to main content

Mini App 运行时

Mini App 的 Node 代码以你的用户身份在本机运行,和本地插件、MCP 服务器一样,可以读写你有权限访问的文件、启动程序、发起网络请求。请只安装来源可信的 Mini App,安装前先阅读它的 README,确认它会访问哪些数据。宿主没有使用 seccomp、seatbelt 等操作系统沙箱,主要是考虑到跨平台支持、调试和第三方依赖的成本。相应地,宿主严格限制向 Mini App 开放的能力,防止第三方 Mini App 投毒,也防止 Agent 幻觉生成有害代码。

宿主的安全边界

端口与凭据

Mini App 只监听本机地址,但本机的其他进程和浏览器页面仍可能访问它的端口,包括利用 DNS rebinding 的恶意网页。因此,宿主会在端口上校验调用方的身份:
凭据流向

凭据只在宿主、请求守卫和 Agent 的 MCP 客户端之间传递,页面、插件代码和外部调用方都无法获取。

  • 每次运行生成一个凭据。宿主每次启动进程时生成一个 32 字节的随机凭据,交给子进程里的请求守卫、宿主主进程和 Agent 的 MCP 客户端。页面不持有凭据。
  • 守卫在插件代码之前加载。子进程通过 IPC 接收初始化消息,缺少或多出字段都会导致启动失败;随后在 Node 内置 HTTP 服务的请求分发入口装上守卫,最后才加载插件代码。因此,插件创建的任何 node:http 服务收到的请求都已经过守卫检查。
  • 校验 Host 和凭据。Host 必须精确等于 127.0.0.1:端口,用于防范 DNS rebinding;凭据使用常量时间比对。WebSocket 升级和 CONNECT 请求也做同样的检查。验证通过后,凭据会从请求头中移除,不会传给插件的业务代码。
  • 页面请求的凭据由宿主添加。页面发出请求时,宿主主进程先核对请求的真实来源,再添加请求头;页面自行设置的同名请求头会被覆盖。Agent 访问 MCP 端点时,由 MCP 客户端在请求头中携带凭据,凭据不会写入对外可见的配置。
请求守卫和插件代码运行在同一个进程中,只能阻止外部调用方冒充宿主,无法隔离恶意插件。

Agent 接口的限制

  • Mini App 可以新建后台会话、分配任务、处理工具审批和问卷、查询可用的模型和 Agent,但没有读取你聊天记录的接口,也不能向聊天中插入消息。
  • 每个 Mini App 只能续用自己创建的会话,会话归属由宿主记录。
  • 这些限制只作用于宿主接口,Node 进程本身没有操作系统级隔离。

用户确认

  • message.append 每次都需要你确认,并由你自己发送。宿主按 Electron 报告的真实页面核对调用方身份。
  • Agent 审批只有「允许一次」和「拒绝」两个选项,Mini App 不能修改你的全局权限规则;没有人能回答的审批会直接被拒绝,见谁能回答审批。
  • Mini App 不能读取聊天记录,也不能修改已发送的消息。

已知限制

  • 端口鉴权只防范其他本地进程和浏览器标签,不防范恶意插件本身。
  • 宿主只管理入口 Node 进程。插件自己启动的子进程,需要在 dispose 中自行清理。
  • 服务重启后,已打开的标签会收到 401,刷新或重新打开后恢复。