peerd: 浏览器原生 AI Agent 框架
peerd 是一个浏览器原生的 AI agent harness,允许用户直接在浏览器中运行完整的 agent loop。通过将浏览器作为其运行时和安全模型,peerd 使 AI agents 能够驱动标签页、在沙箱环境中执行代码,并以点对点方式共享构建内容,同时保持严格的“无后端、无遥测”架构。
客户端架构与安全
peerd 设计为在数据路径中不依赖云组件,依靠浏览器的加固平台特性来实现安全和隔离。它采用“自带密钥”(BYOK)模型,其中 API keys 存储在本地加密库中。
信任边界
为了防止提示词注入(prompt injection)和未经授权的访问,peerd 在不同的参与者之间实施了严格的关注点分离:
- The Vault: 存储 API keys 和 secrets,仅通过 Touch ID、passkeys 或密码进行解密。除了发送给选定的模型提供商外,密钥永远不会离开设备。
- The Main Agent: 处理对话和规划,但被禁止读取原始页面字节或直接运行不受信任的代码。
- The Disposable Runner: 一个受限的参与者,负责驱动和读取页面。其输出在返回给主 agent 之前会被标记为“不可信”。
- The Egress Chokepoint: 所有传出的 HTTP 请求都通过
safeFetch或webFetch进行路由,以强制执行提供商白名单和黑名单,从而防止 SSRF (Server-Side Request Forgery)。 - The Sandboxes: 代码执行发生在 V8 isolates 和 opaque-origin iframes 中,确保执行的代码无法访问扩展程序的内部状态。
沙箱执行环境
peerd 提供四种不同的执行实例来处理不同的计算需求,允许 agent 选择最有效的工具来完成任务:
WebVM
利用 CheerpX,peerd 提供了一个沙箱化的 Debian Linux 环境。这允许 agent 使用真实的二进制文件、shell 和多语言技术栈。从 VM 传出的所有 HTTP egress 都会被拦截并路由通过 peerd-egress 模块以维持安全。
Notebooks and Headless Workers
Notebooks 是密封的 Web Workers,拥有自己的 JS realm 和 OPFS 文件树。虽然 Notebooks 在浏览器标签页中对用户可见,但 Headless Worker (js_run) 为 agent 的快速、临时计算需求在后台运行。
Apps
Agents 可以构建小型、存储的 HTML 文档(Apps),这些文档在沙箱化的 iframes 中渲染。这些 apps 会实时更新,允许 agent 实时迭代用户请求。
技术实现与模块
该项目组织为五个顶层模块,每个模块对应于标识符中的一个字母:
| Module | Role |
| :--- | :--- | |
| peerd-provider | Anthropic, OpenRouter, 和 Ollama 的模型适配器。 |
| peerd-egress | 安全管理,包括 vault 和审计日志。 |
| peerd-engine | 沙箱管理(WebVM, Notebooks, Apps)。 |
| peerd-runtime | Agent loop, tools, memory, 和 voice capabilities。 |
| peerd-distributed | 用于 agent-to-agent 通信的 P2P WebRTC 网络(仅限 Preview 频道)。 |
安装与设置
peerd 是一个使用原生 JS (ES2024+) 编写的无构建项目。它可以作为解压后的扩展程序加载到基于 Chromium 的浏览器(Chrome, Edge, Brave, Arc)和 Firefox 中。
- Clone the repository 并通过
chrome://extensions在开发者模式下加载extension/文件夹。 - Initialize the local vault 使用 passkey 或恢复密码进行初始化。
- Configure API keys 为 Anthropic, OpenRouter, 或本地 Ollama 实例配置 API keys。
社区见解与技术讨论
虽然该项目因其技术雄心而受到称赞,但一些社区成员对其安全模型和如此严格隔离的必要性提出了疑问。
"What's the point of all this security though? You don't want it to access your files, just give it its own Linux user."
针对这些担忧,作者 (@NotASithLord) 澄清说,该项目正朝着一种“常驻” agent 拥有每个标签页的模型迈进,从而进一步隔离上下文并减少编排器所需的系统提示词,从而优化模型使用并提高并行操作能力。