
peerd v0.4.0
브라우저에 네이티브로 구현된 최초의 AI 에이전트 하네스. 사용자가 이미 작업하는 브라우저에서 전체 에이전트 루프를 실행하는 브라우저 확장 프로그램으로, 탭을 제어하고 샌드박스 처리된 컴퓨팅 환경(JS 노트북, WASM Linux VM, 클라이언트 측 앱)을 구동하며 빌드한 결과물을 P2P로 공유합니다. BYOK, 백엔드 없음, 텔레메트리 없음.
최초의 웹 네이티브 AI 에이전트 하네스
peerd는 Workers, origins, 샌드박싱, OPFS, WASM/WASI, WebRTC, WebAuthn, WebExtensions 등 브라우저 프리미티브 위에 직접 구축된 최초의 범용 에이전트 런타임입니다. Chrome과 Firefox 내부에서 완전히 실행되며, 사용자의 탭, 로그인된 세션, 웹 앱, 로컬 컴퓨팅을 활용합니다.
에이전트 플랫폼들이 브라우저를 하네스 안으로 끌어들이려 하는 동안, peerd는 하네스를 브라우저 안으로 끌어들입니다.
실제 추론을 위해 지원되는 호스팅 모델 제공업체, localhost를 사용하는 로컬 모델을 선택하거나, 로컬 WebGPU 모델에 대한 예비 지원을 확인할 수 있습니다(WebNN도 주시하고 있습니다).
peerd 계정, 호스팅 브라우저, 또는 툴 서버 연결이 필요하지 않습니다. 현재 빌드는 peerd에 제품 원격 측정(telemetry)을 전송하지 않습니다.
기능
- 이미 사용 중인 브라우저에서 작동합니다. 에이전트는 사용자의 탭, 웹 앱, 로그인된 세션, 페이지 콘텐츠를 읽고 제어할 수 있습니다.
- 재사용 가능한 사이트 클라이언트를 구축합니다. 웹 액터는 사이트를 한 번 학습한 후 이후 작업에서 해당 클라이언트를 다시 사용할 수 있습니다.
- 브라우저 경계 내에서 코드를 실행합니다. 스크립트, 밀봉된 JavaScript Notebook, 컴파일된 WASI 도구, 브라우저 App, Linux WebVM은 호스트 운영 체제에 접근하지 않고 에이전트에 로컬 컴퓨팅을 제공합니다.
- 별도의 액터에 위임합니다. 모든 페이지와 컴퓨팅 환경은 해당 환경에 범위가 지정된 도구를 가진 자체 키리스(keyless) 액터를 얻습니다.
- 유용한 컨텍스트를 유지합니다. 세션, 메모리, 스킬, 목표, 검토, 체크포인트가 확장 프로그램에 저장됩니다.
- 선택한 모델을 사용합니다. 라이브 제공업체 인벤토리는
registry.js에 정의되어 있으며, BYOK 클라우드 어댑터와 키리스 로컬 옵션을 포함합니다. - 브라우저를 직접 연결합니다. 프리뷰 빌드는 서명된 ID, 브라우저 간 검색, dwapp, WebRTC를 통한 에이전트 간 통신을 추가합니다. 스토어 패키지는 이를 완전히 제거합니다.
브라우저를 사용하는 이유
로컬 에이전트는 사용자의 전체 컴퓨터에 접근할 수 있습니다. 원격 에이전트는 다른 사람의 컴퓨터에 존재합니다. 브라우저는 대안입니다: 30년 이상 강화된 보안 경계 뒤의 로컬 기능입니다.
peerd는 이러한 경계를 사용합니다. 페이지 작업은 해당 탭이나 환경에 대한 도구만 가진 별도의 액터로 이동합니다. 자격 증명, 네트워크 규칙, 확인, 감사는 확장 프로그램에 유지됩니다. 그 방어 심층 설계는 안전하지 않은 콘텐츠가 결국 필터를 통과할 것이라고 가정합니다.
브라우저 지원
peerd는 Chromium과 Firefox를 지원합니다. Firefox는 전용 워커에서 액터를 실행하고 JavaScript 컴퓨팅에 가시적인 Notebook을 사용합니다. Chrome의 오프스크린 문서 호스트가 필요한 기능은 사용 전에 Firefox 컨트롤과 모델 도구에서 제거됩니다. Firefox 프리뷰 빌드는 Firefox에 메시 호스트가 생길 때까지 dweb을 생략합니다.
App과 WebVM은 Chrome에서 실행됩니다. App은 주변 네트워크 접근이 없습니다. 원격 리소스, fetch, WebRTC, 양식, 외부 문서 탐색이 차단됩니다. 외부 HTTP 및 HTTPS 링크는 사용자 확인이 필요합니다.
구체적인 브라우저 기능 격차, 관련 업스트림 이슈, 각 가드를 제거하는 데 필요한 테스트는 docs/BROWSER-COMPATIBILITY.md에 추적됩니다.
코드가 현재 동작의 진실의 원천입니다. CLAUDE.md에서 시작한 다음 extension/ 아래의 관련 모듈을 읽으십시오.
보안 모델
peerd는 브라우저 격리, 좁은 도구 노출, 서비스 워커 정책 게이트, 명시적 이그레스(egress) 제어를 사용합니다. 메인 에이전트는 환경 작업을 키리스 액터에 위임합니다. Chrome과 Firefox에서 오케스트레이터가 아닌 에이전트 루프는 별도의 전용 워커 힙에서 실행됩니다. 브라우저가 해당 경계를 증명할 수 없으면 액터 요청은 실행되지 않으며 대상에 대해 어떤 작업도 수행하지 않습니다.
네트워크 동작은 작업에 따라 다릅니다. 모델 호출, 웹 읽기, 런타임 자산 로드, 샌드박스 트래픽, 프리뷰 dweb 트래픽은 서로 다른 범위의 경로와 정책을 사용합니다. 현재 경계와 알려진 제한 사항은 SECURITY.md와 위협 모델을 참조하십시오.
설치
Chrome 소스에서
- 저장소를 클론합니다.
chrome://extensions를 엽니다.- 개발자 모드를 활성화합니다.
- 압축 해제된 확장 프로그램 로드를 선택하고
extension/디렉터리를 선택합니다.
소스 변경 후 chrome://extensions에서 확장 프로그램을 다시 로드합니다.
Firefox 소스에서
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을 생략합니다. 프리뷰 빌드는 이를 포함하며 추가 자동화 기능을 활성화할 수 있습니다. 패키징 코드가 각 브라우저와 채널의 권위자입니다.
첫 실행
- 브라우저 도구 모음에서 peerd를 엽니다.
- 로컬 볼트를 생성하고 잠금 해제합니다. 암호 잠금 해제는 항상 사용할 수 있습니다. 패스키 잠금 해제는 브라우저와 장치의 WebAuthn PRF 지원에 따라 다릅니다.
- 짧은 프로필 온보딩을 완료합니다.
- 설정을 열고 제공업체 키를 추가하거나 지원되는 로컬 제공업체를 선택합니다.
- 모델을 선택하고 채팅을 시작합니다.
볼트 암호화 경계는 볼트 비밀과 보호된 보안 기록만 포함합니다. 다른 로컬 확장 프로그램 상태는 보안 문서의 저장 규칙을 따릅니다.
아키텍처
확장 프로그램에는 다섯 개의 주요 모듈이 있습니다. 각 모듈은 index.js를 통해 공개 API를 노출합니다.
| 모듈 | 역할 |
|---|---|
peerd-provider | 모델 어댑터 및 응답 형식 |
peerd-egress | 볼트, 네트워크 정책, 차단 목록, 감사 |
peerd-engine | WebVM, Notebook, App, 헤드리스 실행 |
peerd-runtime | 에이전트 루프, 액터, 도구, 세션, 메모리, 권한 |
peerd-distributed | 프리뷰 전용 피어 투 피어 네트워크 및 dwapp |
확장 프로그램 섀시는 background/, offscreen/, sidepanel/, engine-tabs/, permissions/, shared/ 및 관련 지원 디렉터리에 있습니다. 호스트 배치와 콜드 워커 규칙은 docs/EXTENSION-HOSTS.md에 문서화되어 있습니다.
개발
소스 확장 프로그램은 ES 모듈을 사용하는 바닐라 JavaScript이며 압축 해제된 상태로 로드될 때 직접 실행됩니다. 개발 번들러, 트랜스파일러, watcher 또는 생성된 런타임 트리가 없습니다. 릴리스 패키징은 정적 서비스 워커와 Chrome 오프스크린 콜드 그래프에서 작성된 모듈의 공백/주석을 제거하기 위해 일회용 스테이징 복사본에서만 Bun을 사용합니다. 모듈 경계, 바인딩 이름, 지연 가져오기, 모든 벤더링된 바이트를 보존합니다. 읽을 수 있는 진단 아티팩트가 유용할 때 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
세 가지 테스트 표면이 있습니다:
- 순수 로직에 대한 Bun 테스트.
- 확장 프로그램 및 브라우저 통합에 대한 브라우저 내 테스트. Chrome에서 헤드리스로 실행되며, Gecko에서는 설치된 Firefox 스토어 패키지에 대해 샤딩되어 실행됩니다. 각 레인은 등록된 모든 테스트를 실행합니다. 일부 테스트는 라이브 서비스 워커가 응답하는 경우에만 등록되므로 총계가 약간 다릅니다.
- 완전한 흐름에 대한 라이브 Chrome E2E 및 시각적 검증.
이와 함께 tests/red-team/의 레드팀 스위트는 위협 모델의 각 적대자를 실제 방어 코드에 대해 구동하고 모든 적대적 프로브가 차단되었는지 기록합니다. 그 매트릭스는 docs/security/RED-TEAM-RESULTS.md입니다.
각 레인은 위의 배지로 자체 수를 게시합니다. badges/ 아래의 배지 JSON은 레인을 실행한 CI 작업에 의해 생성된 후 diff되므로, 이 페이지의 수는 누군가 입력한 숫자가 아니라 실제로 발생한 실행의 증거입니다. 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/: 스토어 패키징, 권한, 개인정보 보호, 검토자 메모scripts/cdp/states.mjs: E2E 및 시각적 상태
종속성 및 라이선스
배포된 확장 프로그램에는 npm 런타임 종속성이 없습니다. package.json은 어떤 것도 선언하지 않으며, 패키징은 스테이징 아티팩트에 node_modules 경로를 해석하지 않으므로 개발 도구 트리가 설치된 브라우저에 도달할 수 없습니다. 대신 타사 런타임 코드는 extension/vendor/ 아래에 벤더링됩니다. 해당 소스, 버전, 라이선스는 인접한 SOURCE.txt 파일에 있으며, 모든 벤더링된 바이트는 extension/vendor/vendor.lock.json에서 SHA-256으로 고정되며, bun run check:vendor가 CI와 preflight에서 확인합니다.
두 개의 추가 공급망 위치는 위에 자체 배지를 가지며, 둘 다 bun run gen:dev로 재생성되고 CI에서 드리프트 확인됩니다. 모든 타사 GitHub Action은 전체 커밋 SHA에서 실행되며 check:actions로 게이트됩니다: 메이저 태그는 게시자가 이동할 수 있는 변경 가능한 참조이며, 이는 이 체크아웃을 보유한 작업과 릴리스 워크플로에서 서명 비밀에 임의 코드가 포함될 수 있음을 의미합니다. 새로 해결된 종속성은 bunfig.toml의 minimumReleaseAge에 의해 설정된 격리 기간을 거친 후에만 잠금에 들어갈 수 있으며, 설치 시 맬웨어 스캔도 함께 수행됩니다.
peerd는 Apache License 2.0에 따라 라이선스가 부여됩니다. 벤더링된 구성 요소는 자체 라이선스를 유지합니다. CheerpX는 Leaning Technologies가 제공하는 독점 런타임이며 peerd의 Apache 라이선스에 포함되지 않습니다.