Single binary · 464 KB · @eN accessibility refs · Auth profiles · Security audits · Zero Node.js
# Start kuri $ kuri # Server running on http://127.0.0.1:8080 # Navigate to a page $ curl "localhost:8080/navigate?url=https://google.com/flights" # Get interactive elements with @eN refs $ curl "localhost:8080/snapshot?filter=interactive" @e0 textbox "Where to?" @e1 button "Search" @e2 link "Explore" # Click by ref $ curl "localhost:8080/action?ref=e0&action=type&text=Tokyo" $ curl "localhost:8080/action?ref=e1&action=click"
Compact, stable element references from the accessibility tree. 66% fewer tokens than full DOM. Interactive filter cuts even further.
40+ endpoints over plain HTTP. Navigate, snapshot, click, type, screenshot, evaluate JS. Any language, any framework.
Save and load authenticated sessions. Cookies + storage backed by macOS Keychain. Log in once, run workflows forever.
Built-in cookie audit, header inspection, IDOR detection, JWT scanning. Security testing without extra tools.
kuri (server), kuri-agent (CLI), kuri-fetch (standalone fetcher), kuri-browse (terminal browser). All from one 464 KB build.
Written in Zig. No Node.js, no Python, no npm. Arena-per-request memory, no GC. 3 ms cold start.
Lower is better
Lower is better
Full interactive loop — lower is better
KB — smaller is better
Experimental — works and tested. 230+ tests passing. API surface may still change.