peerd: 브라우저 네이티브 AI 에이전트 하네스

peerd는 사용자가 브라우저 내에서 직접 전체 에이전트 루프를 실행할 수 있도록 하는 브라우저 네이티브 AI 에이전트 하네스입니다. 브라우저를 런타임 및 보안 모델로 활용함으로써, peerd는 AI 에이전트가 탭을 제어하고, 샌드박스 환경에서 코드를 실행하며, 빌드를 P2P로 공유하는 동시에, 엄격한 "no backend, no telemetry" 아키텍처를 유지할 수 있게 합니다.

클라이언트 측 아키텍처 및 보안

peerd는 데이터 경로에 클라우드 구성 요소 없이 작동하도록 설계되었으며, 보안 및 격리를 위해 브라우저의 강화된 플랫폼 기능을 활용합니다. API 키를 로컬 암호화 금고(vault)에 저장하는 BYOK(Bring Your Own Key) 모델을 채택하고 있습니다.

신뢰 경계

프롬프트 인젝션 및 무단 액세스를 방지하기 위해, peerd는 서로 다른 액터 간의 엄격한 관심사 분리를 구현합니다:

  • The Vault: API 키와 비밀 정보를 저장하며, Touch ID, passkeys 또는 암호(passphrase)를 통해서만 복호화됩니다. 키는 선택한 모델 제공업체로 전송되는 경우를 제외하고는 장치 외부로 나가지 않습니다.
  • The Main Agent: 대화와 계획을 담당하지만, 원시 페이지 바이트를 읽거나 신뢰할 수 없는 코드를 직접 실행하는 것은 금지됩니다.
  • The Disposable Runner: 페이지를 제어하고 읽는 제한된 액터입니다. 출력값은 메인 에이전트에게 반환되기 전에 "untrusted"로 격리됩니다.
  • The Egress Chokepoint: 모든 외부 HTTP 요청은 safeFetch 또는 webFetch를 통해 라우팅되어 제공업체 허용 목록 및 차단 목록을 적용하고, SSRF(Server-Side Request Forgery)를 방지합니다.
  • The Sandboxes: 코드 실행은 V8 isolates 및 opaque-origin iframes에서 발생하여, 실행된 코드가 확장 프로그램의 내부 상태에 접근할 수 없도록 보장합니다.

샌드박스 실행 환경

peerd는 다양한 계산 요구 사항을 처리하기 위해 네 가지 별도의 실행 인스턴스를 제공하여, 에이전트가 작업에 가장 효율적인 도구를 선택할 수 있도록 합니다:

WebVM

CheerpX를 활용하여, peerd는 샌드박스된 Debian Linux 환경을 제공합니다. 이를 통해 에이전트는 실제 바이너리, 쉘(shell), 다국어 스택을 사용할 수 있습니다. VM에서 발생하는 모든 HTTP egress는 보안 유지를 위해 peerd-egress 모듈을 통해 가로채고 라우팅됩니다.

Notebooks and Headless Workers

Notebooks는 자체 JS realm과 OPFS 파일 트리를 가진 격리된 Web Workers입니다. Notebooks는 브라우저 탭에서 사용자에게 보이지만, Headless Worker (js_run)는 에이전트의 빠르고 일시적인 계산 요구 사항을 위해 오프스크린에서 작동합니다.

Apps

에이전트는 샌드박스된 iframes에서 렌더링되는 작은 저장된 HTML 문서(Apps)를 구축할 수 있습니다. 이러한 앱은 실시간으로 업데이트되어, 에이전트가 사용자의 요청을 실시간으로 반복 수행할 수 있게 합니다.

기술적 구현 및 모듈

이 프로젝트는 워드마크의 각 글자에 해당하는 다섯 가지 최상위 모듈로 구성됩니다:

Module Role
peerd-provider Anthropic, OpenRouter, 그리고 Ollama를 위한 모델 어댑터.
peerd-egress 금고(vault) 및 감사 로그를 포함한 보안 관리.
peerd-engine 샌드박스(WebVM, Notebooks, Apps) 관리.
peerd-runtime 에이전트 루프, 도구, 메모리 및 음성 기능.
peerd-distributed 에이전트 간 통신을 위한 P2P WebRTC 네트워크 (Preview 채널 전용).

설치 및 설정

peerd는 vanilla JS (ES2024+)로 작성된 no-build 프로젝트입니다. Chromium 기반 브라우저 (Chrome, Edge, Brave, Arc) 및 Firefox에서 unpacked extension으로 로드할 수 있습니다.

  1. 저장소(repository)를 클론하고 extension/ 폴더를 chrome://extensions의 개발자 모드에서 로드합니다.
  2. 로컬 금고(vault)를 초기화하기 위해 passkey 또는 복구 암호(passphrase)를 사용합니다.
  3. API 키를 구성하여 Anthropic, OpenRouter 또는 로컬 Ollama 인스턴스를 위한 키를를 설정합니다.

커뮤니티 통찰 및 기술적 토론

프로젝트의 기술적 야심은 찬사를 받고 있지만, some 커뮤니티 멤버들은 보안 모델과 엄격한 격리 필요성에 대해 의문을 제기했습니다.

"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" 에이전트가 소유하는 모델로 이동하고 있다고 명확히 했습니다. 이는 컨텍스트를 더욱 격리하고 오케스트레이터에 필요한 시스템 프롬프트를 줄여 모델 사용을 최적화하고 병렬 작업을 개선합니다.

Sources