docs.

Get a browser running in about a minute. If you would rather use plain HTTP, see the api reference.

1. install the cli

# install the cli
$ curl -fsSL guise.sh/install | sh
$ guise auth <key> && guise new

2. authenticate

# stores the key in ~/.config/guise
$ guise auth <your-api-key>

No key yet? Get one at guise.sh/keys.

3. create a browser

# ready in about 180ms · the exit is chosen on the first request, so it reads '-' here
$ guise new --ttl 300
id          0d66042b-e723-4fa7-9d7d-c7ef61317bd8
connectUrl  https://api.guise.sh/v1/sessions/0d66042b-…/cdp
egress      residential (exit -)
expires     4m (pooled)

4. point your agent at it

connectUrl is the second line above. To get it on its own — for a script, or once you have lost the scrollback:

# an id prefix is enough
$ guise connect 0d66042b
https://api.guise.sh/v1/sessions/0d66042b-…/cdp
# playwright; puppeteer and plain CDP work the same way
const b = await chromium.connectOverCDP(connectUrl);
const page = await b.contexts()[0].newPage();
await page.goto("https://example.com");

5. let a person take over

Create a link that lets someone drive the browser themselves. Useful for a login, a captcha, or just watching what the agent is doing.

# --ttl 30–600, default 300 · --open launches it
$ guise takeover 0d66042b --ttl 300
https://api.guise.sh/takeover#<sessionId>.<token>

Open the link in any browser. The token sits after the #, so it is never sent in the request and never reaches a server log. It does stay in that browser's history, so revoke the link when you are done. There is one link per session and it cannot outlast the session, so give the session a longer ttlSec up front if a person might be needed. Revoke with DELETE /v1/sessions/:id/takeover.

6. clean up (or don't)

$ guise rm 0d66042b            # kill now (an id prefix is enough)
$ guise rm --all              # kill everything

You can skip this and the browser deletes itself when ttlSec runs out — you are never billed past that. But you are billed up to it: a browser you walk away from runs the full timer and costs the full timer. Disconnecting does not count; the session has no idea your client went away. Delete when you are done, or set a ttlSec close to how long you actually need.

────────────────────────────────────────────────────────────────

## cli reference

Add --json to any command for machine-readable output. You can also set GUISE_API_KEY instead of running guise auth.

────────────────────────────────────────────────────────────────

## worth knowing