Take the reins of your real browser

reins lets coding agents — Claude Code, Cursor, Codex, anything with a shell — drive the logged-in browser you already use. No debug profile, no launch flags, no MCP server to register.

npm i -g @karnstack/reins

agent session

$ reins tabs
b1 chrome tab 12 * Dashboard — localhost:3000
$ reins snapshot
e3: input "Email" e7: button "Sign in"
$ reins type --ref e3 --text "you@work.dev"
$ reins click --ref e7
$ reins screenshot
~/.reins/shots/tab-12.png

How it works

Install once, drive everything

Three pieces, all yours: a CLI your agent calls, a daemon it auto-spawns, and an extension that dials in. Nothing to keep running, nothing to register per agent.

  1. 01

    Install the CLI

    The daemon ships inside and starts on demand — any command spawns it.

    npm i -g @karnstack/reins

  2. 02

    Add the extension

    It discovers the daemon on its own and the toolbar icon turns green when connected.

    reins status

  3. 03

    Teach your agent

    The skill teaches any coding agent the command loop. From here, the agent drives.

    npx skills add karnstack/reins

Everything an agent needs to work a page

A small, curated command set covers the whole loop: look at the page, act on it, verify the result.

Every tab, every browser
List, open, focus, and close tabs across Chrome, Brave, Edge, Arc, and Dia — one daemon serves every connected browser.
Real interaction
Click, type, fill, select, hover, scroll, press keys, and upload files — addressed by stable element refs, not brittle selectors.
See the page
Snapshot interactive elements, read visible text, and capture screenshots your agent can open and reason about.
Debug signals
Read a tab's recent console messages and network requests without ever opening DevTools.
An escape hatch
Evaluate JavaScript in the page, or issue raw Chrome DevTools Protocol commands when the curated set isn't enough.
Your sessions intact
It is your real profile — logins, cookies, and state included. No separate automation browser to babysit.

Local by design

reins has no cloud half. The extension talks to one thing — your own daemon on 127.0.0.1 — and collects nothing, for anyone. The whole stack is open source and auditable.

Read the security model

  • Everything binds 127.0.0.1 — nothing is reachable from the network.

  • Host-header validation blocks DNS rebinding, so web pages can't reach the daemon.

  • Only allowlisted chrome-extension:// origins may connect — an identity pages can't forge.

  • Chrome shows its native debugging banner whenever the extension is attached.

  • The popup's Disconnect toggle severs the connection instantly.

Hand your agent the reins

Two installs and a skill — your agent is driving your browser in under a minute.

npm i -g @karnstack/reins