karnstack

reins

2026 · MIT

[ new ]reins do hands a whole browsing task to Jev, TypeSafe's action model: one command instead of a click-by-click session. On our benchmark it was 4.6x faster at the median and about 100x cheaper. How it works · the benchmark

Drive the browser you are already signed in to

reins is a CLI that hands your coding agent the real Chromium browser you already use. Claude Code, Cursor, Codex, anything with a shell. The logins, the cookies and the sessions are already there, because it is your browser. No debug profile, no launch flags, no MCP server to register.

Install

Three steps. Do not skip the second: without it your agent never learns the commands.

  1. The CLI. The daemon rides inside it and starts on demand.
    npm i -g @karnstack/reins
  2. The skill, so your agent knows the commands. No skill support? It can read reins help.
    npx skills add karnstack/reins
  3. The extension, in each browser you want agents to reach. Its icon turns green once connected.

    Add reins from the Chrome Web Store

Then reins status shows what is connected.

app.acme.com/checkout
reins is controlling this browser

Sign in to Dashboard

Welcome back.

Email

e3you@work.dev

Password

••••••••••
e7Sign in
$ reins snapshot  e3: input "Email"  e7: button "Sign in"$ reins click --ref e7  ✓ clicked e7

What it does

  • Tabs in every connected browser: list, open, focus, close.
  • Click, type, fill, select, hover, scroll, press keys, upload files, answer dialogs.
  • reins snapshot lists what you can click, with short refs to act on. CSS selectors work too.
  • Read the page as text or a screenshot.
  • Console messages and network requests, without opening DevTools.
  • reins eval for JavaScript, reins cdp for any raw DevTools Protocol call.
  • reins do hands a whole task to Jev, TypeSafe's action model, instead of going click by click.

The loop

Look, act, check.

$ reins snapshot  e3: input "Email"  e7: button "Sign in"$ reins type --ref e3 --text "you@work.dev"$ reins click --ref e7$ reins text  Signed in as you@work.dev

Full command reference

How it works

Three pieces, all on your machine. The daemon ships inside the CLI and starts on its own. Chrome shows its "is being debugged" banner while reins is attached to a tab.

How the three pieces fit together

Site permissions

Every site gets one of three tiers, checked inside the extension where an agent cannot skip it.

denyNothing. Commands fail, and the site's tabs are redacted from reins tabs.
readReading only. snapshot, text, screenshot, console, network and wait. Anything that acts on the page is blocked.
fullEverything, including navigation, interaction, eval and raw CDP.

Only a click in the extension popup grants more access. From the shell, reins policy can tighten, never loosen.

How site permissions work

Facts

LicenseMIT
BrowsersChrome, Brave, Edge, Arc, Dia. Any Chromium that takes MV3 extensions.
AgentsClaude Code, Cursor, Codex, Copilot, Gemini CLI. Anything with a shell.
NetworkBinds 127.0.0.1. No account, no hosted service, no telemetry.

Limits

BrowsersChromium only. No Firefox, no WebKit.
HeadlessNot supported. reins drives a browser you already have open.
CINot the target. Use Playwright or agent-browser there.
Releases0.x. Commands, flags and output can still change.

More

No Chrome Web Store access? reins extension stages the bundled copy for Chrome's Load unpacked, with no reins allow step.

Press ⌘K anywhere on this site to search the docs.

Setup guide

Source