peerd 是首个直接构建于浏览器原生能力之上的通用智能体运行时:Workers、源(origins)、沙箱、OPFS、WASM/WASI、WebRTC、WebAuthn 和 WebExtensions。它完全运行在 Chrome 和 Firefox 内部,使用你的标签页、已登录会话、Web 应用和本地算力。
当其他智能体平台试图将浏览器拉入其框架时,peerd 将框架拉入浏览器。
对于实际推理,你可以选择受支持的托管模型提供商、使用 localhost 的本地模型,或查看对本地 WebGPU 模型的初步支持(我们也在关注 WebNN)。
无需 peerd 账户、托管浏览器或工具服务器连接。当前版本不会向 peerd 发送任何产品遥测数据。
registry.js,包括 BYOK 云适配器和无密钥本地选项。本地智能体可以访问你的整台计算机。远程智能体则存在于他人的计算机中。浏览器是另一种选择:本地能力被置于经过三十多年加固的安全边界之后。
peerd 使用这些边界。页面工作被分配给独立的执行体,仅拥有该标签页或环境所需的工具。凭据、网络规则、确认和审计保留在扩展中。其纵深防御设计假设不安全的内容最终会绕过过滤器。
peerd 支持 Chromium 和 Firefox。Firefox 在专用 worker 中运行执行体,并使用可见的 Notebook 进行 JavaScript 计算。需要 Chrome 离屏文档宿主的功能会在使用前从 Firefox 控件和模型工具中移除。Firefox 预览版构建在 Firefox 拥有 mesh 宿主之前省略 dweb。
Apps 和 WebVM 运行在 Chrome 上。Apps 没有环境网络访问权限。远程资源、fetch、WebRTC、表单和外部文档导航均被阻止。外部 HTTP 和 HTTPS 链接需要用户确认。
具体的浏览器能力差距、其上游问题以及移除每个防护所需的测试,均记录在
docs/BROWSER-COMPATIBILITY.md 中。
代码是当前行为的权威来源。从 CLAUDE.md 开始阅读,然后阅读 extension/ 下的相关模块。
peerd 使用浏览器隔离、狭窄的工具暴露面、service-worker 策略门控和明确的出口控制。主智能体将环境工作委派给无密钥执行体。在 Chrome 和 Firefox 上,非编排器智能体循环运行在独立的专用 worker 堆中。如果浏览器无法证明该边界,执行体请求将不会运行,也不会对其目标执行任何工作。
网络行为取决于操作类型。模型调用、网页读取、运行时资源加载、沙箱流量和预览 dweb 流量使用不同的作用域路径和策略。有关当前边界和已知限制,请参阅 SECURITY.md 和 威胁模型。
chrome://extensions。extension/ 目录。源码更改后,从 chrome://extensions 重新加载扩展。
Firefox 需要特定于 Firefox 的包。不要加载已签入的 Chrome 开发清单。请使用版本不低于 manifests/ 下渠道补丁中声明的最低版本的 Firefox。该下限跟踪浏览器工具使用的文档绑定脚本支持。
bun run package -- --channel=preview --browser=firefox --no-sign
打开 about:debugging#/runtime/this-firefox,选择 临时载入附加组件,然后选择 artifacts/peerd-preview-firefox.xpi。Firefox 重启后必须重新加载临时附加组件。浏览器和渠道转换由打包脚本定义。
有关当前工件,请参阅 GitHub Releases。商店版和预览版构建有所不同。商店版构建省略 dweb。预览版构建包含 dweb,并可能启用额外的自动化功能。打包代码是每个浏览器和渠道的权威依据。
只有保险库机密和受保护的安全记录受保险库加密边界保护。其他本地扩展状态遵循安全文档中的存储规则。
该扩展有五个主要模块。每个模块通过其 index.js 公开其公共 API。
扩展主体位于 background/、offscreen/、sidepanel/、engine-tabs/、permissions/、shared/ 及相关支持目录中。宿主放置和冷 worker 规则记录在 docs/EXTENSION-HOSTS.md 中。
源码扩展是使用 ES 模块的纯 JavaScript,在加载为已解压扩展时直接运行。没有开发打包器、转译器、监视器或生成的运行时树。发布打包仅在一次性暂存副本上使用 Bun,以从静态 service-worker 和 Chrome 离屏冷图中移除作者模块中的空白和注释。它保留模块边界、绑定名称、惰性导入和每个供应商字节。当可读的诊断工件有用时,向 bun run package -- ... 传递 --no-minify。
bun install
bun run gen:dev
bun test ./tests
bun scripts/cdp/run-inbrowser-tests.mjs
bun run typecheck
bun run lint
bun run e2e:verify
bun run preflight
有三个测试面:
此外,tests/red-team/ 中的红队套件驱动威胁模型中的每个对手针对真实防御代码,并记录每个恶意探测是否被阻止。其矩阵位于 docs/security/RED-TEAM-RESULTS.md。
每个通道发布自己的计数作为上面的徽章。badges/ 下的徽章 JSON 由运行该通道的 CI 作业生成,然后进行差异比较,因此此页面上的计数始终是实际运行过的证据,而不是某人输入的数字。使用 bun run gen:badge:functional、bun run gen:badge:red-team、bun run gen:badge:inbrowser、bun run gen:badge:gecko(需要 Firefox 和 geckodriver)或 bun run gen:badge:e2e 重新生成一个,并提交结果。bun run check:badges 验证端点格式正确,而无需启动浏览器。
对于 UI 更改,运行 bun run e2e:verify,检查 scripts/cdp/artifacts/result.json,并检查生成的截图。
生成的文件不得手动编辑。特别是,extension/manifest.json 和 extension/shared/channel-config.js 来自清单和打包源。CI 会检查它们是否有漂移。
在更改代码之前,请阅读 CONTRIBUTING.md。
CLAUDE.md:项目结构、约定和当前状态SECURITY.md:安全策略和报告docs/security/THREAT-MODEL.md:信任边界和残余风险docs/security/LIFECYCLE-CONTRACT.md:中断行为和恢复限制docs/security/RED-TEAM-RESULTS.md:红队覆盖范围docs/APP-ACTORS.md:清单定义的 App 执行体、实时语义适配器和标签页内协同驾驶 UXdocs/DWAPP-BUNDLE.md:压缩的 dwapp 传输、解码的工作树和二进制资产docs/store/:商店打包、权限、隐私和审核员说明发布的扩展没有 npm 运行时依赖。package.json 声明无依赖,打包从不将 node_modules 路径解析到暂存工件中,因此开发工具树无法到达已安装的浏览器。第三方运行时代码改为在 extension/vendor/ 下供应商化。其源码、版本和许可证位于相邻的 SOURCE.txt 文件中,每个供应商字节都通过 SHA-256 固定在 extension/vendor/vendor.lock.json 中,bun run check:vendor 在 CI 和预检中验证该文件。
另外两个供应链位置带有自己的徽章,均由 bun run gen:dev 重新生成并在 CI 中进行漂移检查。每个第三方 GitHub Action 都在完整的提交 SHA 上运行,由 check:actions 门控:主标签是发布者可以移动的可变引用,这意味着持有此检出以及发布工作流中签名密钥的作业中可能包含任意代码。新解析的依赖项在进入锁文件之前还要经过隔离期,由 bunfig.toml 中的 minimumReleaseAge 设置,同时在安装时进行恶意软件扫描。
peerd 根据 Apache License 2.0 许可。供应商组件保留其自己的许可证。CheerpX 是 Leaning Technologies 提供的专有运行时,不受 peerd 的 Apache 许可证覆盖。
| 模块 | 角色 |
|---|
peerd-provider | 模型适配器和响应格式化 |
peerd-egress | 保险库、网络策略、拒绝列表和审计 |
peerd-engine | WebVM、Notebook、App 和无头执行 |
peerd-runtime | 智能体循环、执行体、工具、会话、记忆和权限 |
peerd-distributed | 仅预览版的点对点网络和 dwapps |
scripts/cdp/states.mjs