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,刷新或重新打开后恢复。