docs.
Zero to a browser your agent can drive, in about two minutes. If you'd rather skip the CLI and speak raw HTTP, go straight to 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
# live in ~150ms
$ guise new --ttl 1800
s_01J9K7Q8ZV3M
wss://api.guise.sh/v1/sessions/s_01J9K7Q8ZV3M/cdp?token=…4. point your agent at it
# playwright — puppeteer and raw 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. clean up (or don't)
$ guise rm s_01J9K7Q8ZV3M # kill now
$ guise rm --all # kill everythingSkipping this is fine — ttlSec destroys the browser on schedule either way. You are never billed for a browser that outlived its timer.
────────────────────────────────────────────────────────────────
## cli reference
guise auth <key>save your api key locallyguise new [--ttl sec]create a session, print id + connectUrlguise lslive sessions: id, tier, time leftguise rm <id> | --alldestroy one session, or all of them
────────────────────────────────────────────────────────────────
## good to know
- ▸ One session = one browser. Want 30 browsers? Make 30 POSTs.
- ▸ Sessions are destroyed, never recycled. Cookies, cache, and disk die with the session.
- ▸ The egress exit is picked at create time and stays put for the life of the session.
- ▸ connectUrl embeds its own auth token. Treat it like a secret.