Zig 기반 AI 에이전트용 브라우저 자동화 도구 'Kuri'
Node.js 의존성 없이 Zig 언어로 작성된 초경량 브라우저 자동화 및 웹 크롤링 도구인 Kuri가 소개되었습니다. AI 에이전트 루프에 최적화되어 기존 도구(agent-browser) 대비 토큰 사용량을 16% 줄이고, 464KB 크기의 단일 바이너리로 3ms의 매우 빠른 콜드 스타트를 자랑합니다. 복잡한 자바스크립트(JS) 렌더링이 필요 없는 독립 실행형 페처(Fetcher) 및 대화형 터미널 브라우저 모드도 내장하고 있습니다.
Kuri 🌰: AI 에이전트를 위한 브라우저 자동화 및 웹 크롤링 도구입니다. Zig로 작성되었으며 Node.js 의존성이 전혀(Zero) 없습니다.
주요 기능: CDP 자동화 · A11y(접근성) 스냅샷 · HAR 녹화 · 독립 실행형 페처 · 대화형 터미널 브라우저 · 에이전트 CLI · 보안 테스트
팀들이 Kuri로 전환하는 이유: 464 KB 크기의 바이너리 파일과 약 3ms의 콜드 스타트를 제공합니다. Google Flights에서 전체 에이전트 루프(go→snap→click→snap→eval)를 실행할 때 agent-browser 대비 16% 적은 4,110개의 토큰이 소요되며, 이는 다단계 작업에서 비용을 크게 절감해 줍니다.
에이전트에 최적화된 Kuri의 장점: 대부분의 브라우저 자동화 도구는 QA 엔지니어링을 위해 만들어졌습니다. Kuri는 에이전트 루프, 즉 페이지 읽기, 토큰 비용 최소화, 안정적인 참조(Refs) 기반 동작 및 이동에 최적화되어 있습니다. 이 제품의 핵심은 '많은 명령어 제공'이 아니라 '최소한의 모델 비용으로 실제 페이지에서 유용한 상태 가져오기'입니다. 작은 출력 크기는 페이지가 실제로 렌더링되었을 때만 의미가 있습니다. 빈 껍데기 상태로 출력하는 것은 효율이 아니라 실패입니다.
동일한 페이지, 세션, 토크나이저를 사용한 비교를 통해 이를 증명합니다. 스냅샷 토큰 수 비교: Google Flights SIN → TPE (동일 Chrome 세션, tiktoken cl100k_base로 측정)
- kuri snap (compact): 13,479 바이트 / 4,328 토큰 (기준점)
- kuri snap --interactive: 7,024 바이트 / 1,927 토큰 (0.4배, 에이전트 루프에 가장 적합)
- kuri snap --json: 102,124 바이트 / 31,280 토큰 (7.2배, 이전 기본값)
- agent-browser snapshot: 17,103 바이트 / 4,641 토큰 (1.1배)
- agent-browser snapshot -i: 8,704 바이트 / 2,425 토큰 (0.6배)
- lightpanda semantic_tree: 67,830 바이트 / 26,244 토큰 (6.1배, JS 없음 - raw DOM)
- lightpanda semantic_tree_text: 1,909 바이트 / 507 토큰 (0.1배, JS 없음 - 빈 껍데기)
전체 워크플로우 비용: go → snap → click → snap → eval
- kuri-agent: 사이클당 4,110 토큰
- agent-browser: 사이클당 4,880 토큰 Kuri는 워크플로우 사이클당 16%의 토큰을 절약하며, 다단계 작업에서 그 효과가 누적됩니다. 액션 응답은 복잡한 CDP 구조 대신 단순한 JSON(예: {"ok":true})으로 제공되어 토큰을 크게 줄여줍니다: click = 9 토큰, back = 5 토큰, scroll = 5 토큰.
lightpanda 점수가 낮은 이유: lightpanda는 JS가 많이 사용되는 SPA(단일 페이지 애플리케이션)를 실행할 수 없습니다. Google Flights는 클라이언트 측 fetch()를 통해 렌더링되는데, lightpanda는 항공편 데이터가 전혀 없는 507 토큰짜리 빈 탐색 레이아웃만 반환합니다. 이 낮은 토큰 수는 효율성이 아니라 렌더링 실패를 의미합니다.
작은 바이너리, 빠른 시작 (Apple M3 Pro, macOS 15.3에서 측정, kuri는 -Doptimize=ReleaseFast로 빌드):
- CLI 바이너리: agent-browser 6.0 MB vs kuri 464 KB (13배 작음)
- 콜드 스타트(--version): agent-browser 3.4ms vs kuri 3.0ms (비슷함)
- 설치 용량(npm): agent-browser 33 MB vs kuri 3.3 MB (3개 바이너리 포함, 10배 작음)
- 명령어 수: agent-browser 140개 이상 vs kuri 40개 이상 (엔드포인트, 목적이 다름)
- 독립 실행형 페처(Chrome 불필요): agent-browser ❌ vs kuri ✅ (kuri-fetch)
- 터미널 브라우저(대화형 REPL): agent-browser ❌ vs kuri ✅ (kuri-browse)
- JS 엔진(Chrome 없음): agent-browser ❌ vs kuri ✅ (QuickJS SSR 스타일 DOM)
- HTTP API 서버: agent-browser ❌ (CLI 전용) vs kuri ✅ (스레드 기반 연결)
agent-browser는 더 넓은 범위의 브라우저 제어 기능을 제공합니다. 반면 Kuri는 에이전트 통합, 토큰 경제성 및 배포 단순성에 맞춰 의도적으로 기능을 좁히고 가벼운 HTTP API와 CLI 스택을 최적화했습니다.
해결하는 문제: 기존 브라우저 자동화 도구는 Playwright(약 300MB), Node.js 런타임 및 수많은 npm 종속성을 필요로 합니다. AI 에이전트가 원하는 것은 단순히 페이지를 읽고, 버튼을 클릭한 뒤 넘어가는 것뿐입니다. Kuri는 단일 Zig 바이너리로 구성된 4가지 모드를 통해 런타임 없이 이를 해결합니다:
- kuri → CDP 서버 (Chrome 자동화, a11y 스냅샷, HAR)
- kuri-fetch → 독립 실행형 페처 (Chrome 없음, QuickJS 사용, 약 2MB)
- kuri-browse → 대화형 터미널 브라우저 (탐색, 링크 이동, 검색)
- kuri-agent → 에이전트 CLI (스크립트 가능한 Chrome 자동화 + 보안 테스트)
설치 방법: 한 줄 설치 (macOS / Linux): curl -fsSL https://raw.githubusercontent.com/justrach/kuri/main/install.sh | sh 플랫폼을 자동으로 감지하여 적절한 바이너리를 다운로드하고 ~/.local/bin에 설치합니다. macOS 바이너리는 공증(notarized)되어 있어 보안 경고창이 뜨지 않습니다.
bun / npm: bun install -g kuri-agent (또는 npm install -g kuri-agent) 설치 시 플랫폼에 맞는 네이티브 바이너리를 자동으로 다운로드합니다.
수동 설치: GitHub Releases에서 플랫폼에 맞는 tarball을 다운로드하여 $PATH에 압축을 풉니다.
소스에서 빌드: Zig ≥ 0.15.0이 필요합니다. git clone https://github.com...