peerd: 一款瀏覽器原生 AI Agent Harness

peerd 是一款瀏覽器原生的 AI agent harness,允許使用者直接在瀏覽器中執行完整的 agent loop。透過將瀏覽器作為其執行環境(runtime)與安全模型,peerd 使 AI agents 能夠驅動分頁、在沙盒環境中執行程式碼,並以點對點(peer-to-peer)方式分享構建內容,同時維持嚴格的「無後端、無遙測」架構。

客戶端架構與安全性

peerd 的設計旨在於數據路徑中不依賴雲端組件,而是依靠瀏覽器強化的平台功能來實現安全性與隔離性。它採用了「自備金鑰」(Bring Your Own Key, BYOK)模型,API keys 會儲存在本地加密金庫(vault)中。

信任邊界

為了防止提示詞注入(prompt injection)與未經授權的存取,peerd 在不同的參與者(actors)之間實施了嚴格的職責分離:

  • The Vault: 儲存 API keys 與 secrets,僅能透過 Touch ID、passkeys 或密碼進行解密。除了發送到所選的模型提供商之外,金鑰絕不會離開裝置。
  • The Main Agent: 處理對話與規劃,但禁止讀取原始頁面位元組(raw page bytes)或直接執行不可信的程式碼。
  • The Disposable Runner: 一個受限的參與者,負責驅動與讀取頁面。其輸出在返回給 main agent 之前會被標記為「不可信」。
  • The Egress Chokepoint: 所有對外的 HTTP 請求都會透過 safeFetchwebFetch 進行路由,以強制執行提供商白名單與黑名單,防止 SSRF(Server-Side Request Forgery)。
  • The Sandboxes: 程式碼執行發生在 V8 isolates 與 opaque-origin iframes 中,確保執行的程式碼無法存取該擴充功能(extension)的內部狀態。

沙盒執行環境

peerd 提供四種不同的執行實例來處理不同的運算需求,允許 agent 選擇最有效的工具來完成任務:

WebVM

利用 CheerpX,peerd 提供了一個沙盒化的 Debian Linux 環境。這讓 agent 可以使用真實的二進位檔(binaries)、shell 以及多語言技術棧(stacks)。所有從 VM 發出的 HTTP egress 都會被攔截並透過 peerd-egress 模組進行路由,以維持安全性。

Notebooks 與 Headless Workers

Notebooks 是封閉的 Web Workers,擁有各自的 JS realm 與 OPFS 檔案樹。雖然 Notebooks 在瀏覽器分頁中對使用者是可見的,但 Headless Worker (js_run) 會在後台(offscreen)運作,以滿足 agent 快速、暫時性的運算需求。

Apps

Agents 可以構建小型且可儲存的 HTML 文件(Apps),並在沙盒化的 iframes 中進行渲染。這些 apps 會即時更新,允許 agent 針對使用者的請求進行即時迭代。

技術實作與模組

該專案組織為五個頂層模組,每個模組對應字標(wordmark)中的一個字母:

| Module | Role | | :--- | :--- | | | peerd-provider | Anthropic, OpenRouter, 與 Ollama 的模型適配器(adapters)。 | | peerd-egress | 安全性管理,包括 vault 與審計日誌(audit logs)。 | | peerd-engine | 沙盒管理(WebVM, Notebooks, Apps)。 | | peerd-runtime | Agent loop, tools, memory, 與 voice 能力。 | | peerd-distributed | 用於 agent-to-agent 通訊的 P2P WebRTC 網路(僅限 Preview channel)。 |

安裝與設定

peerd 是一個使用原生 JS (ES2024+) 編寫的 no-build 專案。它可以作為未解壓縮的擴充功能(unpacked extension)載入至基於 Chromium 的瀏覽器(Chrome, Edge, Brave, Arc)與 Firefox。

  1. Clone 儲存庫並透過 chrome://extensions 在開發者模式下載入 extension/ 資料夾。
  2. 初始化本地金庫,使用 passkey 或恢復密碼(recovery passphrase)。
  3. 設定 API keys,例如 Anthropic, OpenRouter, 或本地的 Ollama 實例。

社群洞察與技術討論

雖然該專案因其技術雄心而受到讚揚,但部分社群成員對其安全性模型與如此嚴格隔離的必要性提出了疑問。

"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) 澄清,該專案正朝向一個「常駐型」(resident)agent 擁有每個分頁的模型邁進,進一步隔離上下文(contexts)並減少 orchestrator 所需的系統提示詞,從而優化模型使用並提升平行操作能力。

Sources