AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
針對編碼代理的令牌高效瀏覽器自動化:壓縮可及性快照、uid 操作、字節精確恢復。Playwright MCP 的替代方案。
AI 翻譯
Token-efficient browser automation for coding agents: compressed accessibility snapshots, uid actions, byte-exact recovery. A Playwright MCP alternative.
開發工具Go · JavaScriptGitHub @JuliusBrussee自行安裝營運者未確認
試用過了嗎? 點一下就好,不需要登入。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
安裝型專案無需部署網域也可驗證。個人儲存庫可透過 GitHub 登入驗證,組織儲存庫可使用上方的儲存庫驗證檔案。
正在載入完整 README。 以下為已儲存的摘錄。
A token-efficient alternative to Playwright MCP for coding agents. One Go
binary that attaches to the Chrome you already run, reads the real
accessibility tree, compresses it, and gives your agent four tools that cost
297 tokens of catalog — versus 3,422 for Playwright MCP (0.0.79) and 4,507
for Chrome DevTools MCP (1.7.0), measured live 2026-08-14.檢視完整 README ↗A token-efficient alternative to Playwright MCP for coding agents. One Go binary that attaches to the Chrome you already run, reads the real accessibility tree, compresses it, and gives your agent four tools that cost 297 tokens of catalog — versus 3,422 for Playwright MCP (0.0.79) and 4,507 for Chrome DevTools MCP (1.7.0), measured live 2026-08-14.
| caveman-browse | Playwright MCP | Chrome DevTools MCP | |
|---|---|---|---|
| Tool-definition cost (measured 2026-08-14) | 297 tokens (4 tools) | 3,422 tokens (24 tools) | 4,507 tokens (29 tools) |
| Page representation | compressed a11y tree | aria-YAML (lossy) | a11y snapshot |
| Focused query on a 200-row page | ~98 tokens | ~15.7k (full ARIA) | full snapshot |
| Byte-exact recovery of the original tree | yes (CCR) | no | no |
| Runtime | 1 static Go binary + your Chrome | Node + Chromium | Node + Puppeteer + Chromium |
Numbers are inferred token counts measured with an offline o200k_base
counter on pinned fixtures — see BENCHMARK.md for methodology,
reproduction commands, and the cases where Playwright's bare ARIA text is
smaller (tiny pages; we print those too).
Full-task head-to-head (same headless agent, same task, server swapped; provider-reported session tokens; 2026-08-14 pilot, n=1/cell, all arms passed): finding one row in a 200-row table cost 150k total input tokens through caveman-browse vs 203k (Playwright MCP) / 223k (Chrome DevTools MCP); counting matching rows 168k vs 358k / 223k. On the action-heavy checkout task caveman-browse lost (668k vs 362k / 312k) — its settle-proof loop re-snapshots after every action instead of trusting dispatch. Full tables, causes, and claim boundaries: benchmarks/agentloop/RESULTS.md, benchmarks/toolcatalog/RESULTS.md, benchmarks/snapshot/RESULTS.md.
Claude Code (plugin — server + usage skill):
/plugin marketplace add JuliusBrussee/caveman-browse
/plugin install caveman-browse@caveman-browse
Claude Code (MCP only):
claude mcp add caveman-browse -- npx -y caveman-browse
Cursor / any MCP host (.mcp.json / mcp.json):
{ "mcpServers": { "caveman-browse": { "command": "npx", "args": ["-y", "caveman-browse"] } } }
Gemini CLI:
gemini extensions install https://github.com/JuliusBrussee/caveman-browse
The npm shim downloads a signature-verified prebuilt binary on first run. No Node runtime is involved after launch; no Chromium is bundled — it drives your installed Chrome with a dedicated automation profile.
browser_snapshot(url?, wait?, query?, interactive?) — compact accessibility
tree with [uid] action handles plus one accounting line
(caveman before=… after=… ratio=… basis=inferred handle=ccr_…).
query keeps the ≤12 best-matching nodes plus ancestors — the
token-efficient path on large pages. interactive: true keeps only
actionable nodes.browser_act(action, uid, text?, option?) — click, type, select,
scroll, wait. Returns settled:false until a focused re-snapshot proves
the app updated; the driver never claims success it hasn't seen.browser_eval(expression) — JS escape hatch.browser_recover(recovery_handle, query?) — the byte-exact original
Accessibility.getFullAXTree payload behind any snapshot (CCR-backed), or
BM25-narrowed sections with a query. Compression here is never a one-way
door.npx caveman-browse snapshot http://127.0.0.1:3000
npx caveman-browse snapshot http://127.0.0.1:3000 "save settings" # focused
npx caveman-browse snapshot -i http://127.0.0.1:3000 # actionable only
npx caveman-browse act <uid> click
npx caveman-browse recover <handle>
npx caveman-browse close
Direct commands share one detached, isolated Chrome until close. Navigation
allows http(s), about:blank, and bounded data:text/html; file:,
javascript:, and privileged schemes fail closed with cave_snake_code
errors.
inferred (offline BPE count), never provider
usage, never billing, never re-projected to a period.go build ./cmd/caveman-browse
CAVEMAN_BROWSE_CHROME="/path/to/Chrome" go test -tags=integration ./...
Source and binaries ship under the Apache License 2.0. Third-party notices: NOTICE. Part of the Caveman efficiency stack; the a11y compressor and CCR live in the Caveman engine.