
kuri v0.4.14
브라우저 자동화, 웹 크롤링, AI 에이전트를 위한 iOS 및 Android 기기 제어. Zig 네이티브, 토큰 효율적인 CDP 스냅샷, HAR 기록, 네이티브 adb 와이어 프로토콜 클라이언트, 그리고 독립형 페처.
Kuri 🌰
설치
curl -fsSL https://kuri.trilok.ai/download | sh
macOS arm64/x86_64 및 Linux x86_64/arm64. 단일 바이너리, 런타임 의존성 없음.
직접 다운로드: macOS arm64 · macOS x86_64 · Linux x86_64 · Linux arm64
AI 에이전트를 위한 브라우저 자동화 및 웹 크롤링. Zig로 작성됨. Node.js 제로.
CDP 자동화 · A11y 스냅샷 · HAR 녹화 · 독립형 페처 · 대화형 터미널 브라우저 · 에이전틱 CLI · 보안 테스트 · iOS + Android 기기 제어
빠른 시작 · 벤치마크 · kuri-agent · 보안 테스트 · API · 스킬 · 변경 로그
팀들이 Kuri로 전환하는 이유: 현재 Apple Silicon
ReleaseFast빌드는 바이너리당 2 MB 미만을 유지하며, 2026-04-23에 새로 실행한 Google Flights 재실행에서 전체kuri-agent루프(go→snap→click→snap→eval)에 대해 3,392 토큰이 측정되었습니다. 백분율을 인용하기 전에 도구 간 차이는 동일한 환경에서 다시 실행해야 합니다.
에이전트에게 Kuri가 뛰어난 이유
대부분의 브라우저 도구는 QA 엔지니어를 위해 만들어졌습니다. Kuri는 에이전트 루프를 위해 만들어졌습니다: 페이지를 읽고, 토큰 비용을 낮게 유지하고, 안정적인 ref에 대해 동작하고, 다음으로 넘어갑니다.
- 135개의 HTTP 엔드포인트 — React 검사부터 Core Web Vitals까지 agent-browser 및 browser-use와 완전한 동등성.
- 실제 페이지에서 agent-browser보다 7-12% 더 적은 토큰 —
@eNref 형식과 제로 프리픽스 렌더링 덕분. - 동일한 Google Flights 페이지에 대해 전체 스냅샷(2,124 토큰) 대비
/page/state(48 토큰)로 44배 더 가벼운 관찰. - 배치 실행 —
POST /batch는 하나의 HTTP 호출로 N개의 명령을 보내 N-1번의 왕복과 N-1번의 LLM 턴을 제거합니다. - React 호환 — 신뢰할 수 있는 CDP 마우스 이벤트와 문자별 키 이벤트가 React 18/19의
onClick과onChange를 발생시킵니다.
스냅샷 토큰: Google Flights SIN → TPE
이 워크스페이스에서 2026-05-24에 새로 재실행하여 wc -c와 chars/4 근사치로 측정.
| 도구 / 모드 | 문자 수 | ~토큰 | 비고 |
|---|---|---|---|
kuri snap (전체) | 8,499 | 2,124 | 모든 노드 + 대화형 ref |
kuri snap (대화형만) | ~3,000 | ~750 | 에이전트 루프에 최적 |
kuri /page/state | 190 | 48 | 경량 관찰 (url, title, scroll%, counts) |
| agent-browser snap (추정) | ~9,183 | ~2,295 | [ref=e0] 형식 오버헤드 |
토큰 효율성: kuri vs agent-browser
| 페이지 | kuri 토큰 | agent-browser 토큰 | 절감 |
|---|---|---|---|
| example.com | 40 | 35 | -13% (사소한 페이지, agent-browser는 루트를 건너뜀) |
| Hacker News | 386 | ~440 | 12% 더 적음 |
| Google Flights SIN→TPE | 2,124 | ~2,295 | 7% 더 적음 |
절감은 kuri의 간결한 형식에서 비롯됩니다:
@e0ref (3자) vs[ref=e0](9자)- 줄당
-프리픽스 없음 (줄 수 × 2자 절약) - 동일한 들여쓰기, 동일한 노드 필터링
전체 워크플로 비용: go → snap → click → snap → eval
| 도구 | 사이클당 토큰 |
|---|---|
| kuri-agent | ~3,400 |
두 번째 snap 대신 /page/state 사용 | ~1,700 |
POST /batch 사용 (모두 한 번의 호출로) | ~1,700 (동일한 토큰, 5번 대신 1번의 HTTP 호출) |
kuri vs libretto
libretto (Playwright + Node)는 단계별 토큰 비용에서 가장 가까운 경쟁자입니다. 2026-07-04에 직접 비교 측정 — 동일한 Chrome, 동일한 탭, 실제 tiktoken o200k_base 카운트 (전체 방법론 및 재현: benchmarks/libretto_comparison.md). 솔직한 비교:
| 축 | 승자 | 세부 사항 |
|---|---|---|
| 호출당 지연 시간 | kuri | 4–117 ms vs 1,344–1,500 ms (13–376배 빠름 — 영구 서버 vs 명령당 Node) |
| 스냅샷 토큰, 일반 페이지 | kuri | 단순 61 vs 151 (2.5배), 기사 265 vs 363 (1.37배) — 더 간결한 문법 |
| 스냅샷 토큰, 대형 목록 | 분할 | kuri 기본 4,424 vs 813 — kuri는 259개 ref를 모두 출력, libretto는 기본적으로 잘라냄. limit=5로 kuri는 555 토큰 렌더링 (libretto보다 1.46배 적음), 34개 ref + … +45 more 마커 |
| 궤적 (피드, 9회 클릭) | kuri, 근소하게 | 898 vs 939 토큰 (limit=5 기반 + diff 루프 vs exec 루프) — 동등하거나 약간 우세; 아침의 5.1배 손실은 잘리지 않은 기반이었음 |
| 반복 실행 | libretto | 궤적을 Playwright 스크립트로 컴파일 → 0-토큰 재생; kuri는 매 실행마다 루프 비용을 다시 지불 |
kuri가 libretto를 연구하며 얻은 것 (이번 릴리스에 모두 포함): diff 우선 루프 (take_snapshot_diff, 단계당 ~38 토큰); 탐색 시 ! page replaced 헤더와 함께 전체 스냅샷으로 폴백하는 적응형 diff; 아이덴티티 전용 제거 줄; 디스크에 기록되는 스크린샷 (경로 반환, 바이트는 컨텍스트에 들어가지 않음); MCP를 통한 get_page_state; 그리고 parseA11yNodes를 실제 DFS 트리 순회로 재작성한 후 — 선택적 목록 자르기 (/snapshot?limit=N, 잘린 실행당 하나의 … +K more 줄), 범위 지정 재캡처 (scope=@ref), 계층 들여쓰기, MCP take_snapshot의 uid/limit으로도 노출됨. 순진한 전체 재스냅샷으로 44,285 토큰이 들었던 9회 클릭 피드 궤적은 잘린 기반 + diff로 898이 듦 — 49배 저렴하며, libretto의 939를 넘어섰음.
위의 이전 표는
chars/4토큰 근사치를 사용하며, libretto 비교는 실제tiktoken카운트를 사용합니다. 백분율을 인용하기 전에 자신의 환경에서 도구 간 수치를 다시 실행하세요.
바이너리 크기 및 메모리
Apple M4 Pro, macOS 26.4.1에서 측정. 현재 바이너리는 -Doptimize=ReleaseFast로 빌드되었습니다.
| 바이너리 | 현재 크기 |
|---|---|
kuri | 1,093,840 B (1.04 MiB) |
kuri-agent | 629,904 B (615 KiB) |
kuri-browse | 1,089,120 B (1.04 MiB) |
kuri-fetch | 2,063,488 B (1.97 MiB) |
Zig 0.16 마이그레이션 전반에 걸쳐 RSS는 평탄하게 유지됨
현재 v0.4.3 ReleaseFast 빌드에 대해 /usr/bin/time -l로 측정.
| 명령 | v0.4.3 평균 최대 RSS |
|---|---|
kuri-fetch --version | ~2.45 MiB |
kuri-browse --version | ~2.45 MiB |
kuri-fetch --quiet --dump markdown http://example.com/ | ~9.17 MiB |
문제
모든 브라우저 자동화 도구는 Playwright(~300 MB), Node.js 런타임, 그리고 수많은 npm 의존성을 끌어들입니다. 당신의 AI 에이전트는 그저 페이지를 읽고, 버튼을 클릭하고, 다음으로 넘어가길 원할 뿐입니다. Kuri는 단일 Zig 바이너리입니다. 네 가지 모드, 런타임 제로:
kuri → CDP server (Chrome automation, a11y snapshots, HAR)
kuri-fetch → standalone fetcher (no Chrome, QuickJS for JS, ~2 MB)
kuri-browse → interactive terminal browser (navigate, follow links, search)
kuri-agent → agentic CLI (scriptable Chrome automation + security testing)
📦 설치
원라인 설치 (macOS / Linux)
curl -fsSL https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/install.sh | sh
플랫폼을 감지하고, 올바른 바이너리를 다운로드하여 ~/.local/bin에 설치합니다.
다운로드는 Kuri가 자체 관리하는 release-channel 브랜치에서 이루어집니다. macOS 바이너리는 Developer ID 인증서로 로컬 서명됩니다. GitHub Release 에셋은 이와 동일한 tarball을 미러링합니다.
bun / npm
bun install -g kuri-agent
# or: npm install -g kuri-agent
설치 시 플랫폼에 맞는 네이티브 바이너리를 다운로드합니다.
릴리스 채널
Kuri의 안정 바이너리는 release-channel 브랜치에 있으며 GitHub raw URL에서 직접 제공됩니다.
- 안정 설치 프로그램:
https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/install.sh - 안정 매니페스트:
https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/latest.json - 브랜치 보기:
https://github.com/justrach/kuri/tree/release-channel/stable - 직접 다운로드 패턴:
https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/<version>/kuri-<version>-<target>.tar.gz
수동 설치
안정 릴리스 매니페스트 또는 GitHub Releases 페이지에서 플랫폼에 맞는 tarball을 다운로드한 후 $PATH에 압축을 풀어주세요.
안정 설치 URL:
curl -fsSL https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/install.sh | sh
매니페스트에는 aarch64-linux, x86_64-linux, aarch64-macos, x86_64-macos에 대한 정확한 에셋 URL과 SHA-256 체크섬이 포함되어 있습니다.