Turn any web page into a compact semantic snapshot with stable @refs, then click, fill, and read it from your shell. No Playwright, no DOM dumps, minimal context.
$ br open https://yeswehack.com/login opened https://yeswehack.com/login $ br snap --compact Sign in | https://yeswehack.com/login @1 input Email @2 input Password @3 button Sign in @4 link Forgot password? $ br fill @1 "hunter@yeswehack.com" $ br fill @2 "$PASSWORD" $ br click @3 ok navigated #dashboard
Everything in br is this loop. Snapshot, act on refs, snapshot again.
If it renders in a browser, br turns it into commands: for an agent, a human, or a bug hunter.
A browser without the DOM firehose. Compact snapshots, stable handles, deterministic exit codes, --json on everything.
br batch << JSONL
{"command":"open", ...}
{"command":"snapshot", ...}
{"command":"click","target":"@4"}
JSONL
A browser you can pipe. Inspect a page, fill a form, grab a screenshot, or read it inline via Kitty graphics.
br open news.ycombinator.com br snap --compact br view # inline image br live github.com
Scriptable, headful triage: map inputs, read client-side state, run JS in page context, pipeable into recon. Authorized targets only.
br eval 'document.cookie' br attr @5 href br --backend chrome cdp ... br screenshot finding.png
Everything you need to drive a page, nothing you don't.
open <url>navigate to a pagesnap --compactsemantic snapshot + @refsclick <ref>click an elementfill <ref> <text>focus, clear, typefind <text>search the current refseval <js>run JS in page contextviewrender viewport inlinelive [url]terminal browser (humans)batchJSONL, one op per line--backend chromepick the engine (CDP)Needs Zig 0.16+ and Bun 1.4+ (with Bun.WebView).
# with Nix (recommended) nix develop zig build export BR_BUN="$(command -v bun)" ./zig-out/bin/br open https://news.ycombinator.com # then snapshot and act on @refs br snap --compact br click @1