# for non-javascript agents and crawlers
# this page is plain html. the product is an api.
# create a browser: POST /v1/sessions {"proxy":"dc"|"residential","ttlSec":N}
# response: {"id", "connectUrl"} → connectUrl is a CDP websocket
# kill it: DELETE /v1/sessions/:id (or let ttlSec reap it)
# works with: playwright, puppeteer, raw CDP
# cli: curl -fsSL guise.sh/install | sh → guise new · ls · rm
# windows: irm guise.sh/install.ps1 | iex (powershell)
# docs: guise.sh/docs · guise.sh/api · guise.sh/pricing██████╗ ██╗ ██╗██╗███████╗███████╗ ██╔════╝ ██║ ██║██║██╔════╝██╔════╝ ██║ ███╗██║ ██║██║███████╗█████╗ ██║ ██║██║ ██║██║╚════██║██╔══╝ ╚██████╔╝╚██████╔╝██║███████║███████╗ ╚═════╝ ╚═════╝ ╚═╝╚══════╝╚══════╝
browsers for agents.
API-driven Chrome, fully isolated. One POST, one WebSocket, full CDP. Every session is its own machine with its own egress — residential or datacenter — live in ~150ms.
https://example.com● cdp
sign in↖ your agent, mid-click
residential egress · playwright connected · created in 158ms
# install the cli
$ curl -fsSL guise.sh/install | sh
$ guise auth <key> && guise new
# or straight from playwright
const b = await chromium.connectOverCDP(session.connectUrl);
const page = await b.contexts()[0].newPage();
await page.goto("https://example.com");
────────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────┐
│ $ curl -s -X POST https://api.guise.sh/v1/sessions \ │
│ -H "x-api-key: $GUISE_KEY" \ │
│ -d '{"proxy":"residential","ttlSec":1800}' │
│ │
│ {"id":"s_01J9K7…","connectUrl":"wss://…/cdp"} │
│ │
│ $ node agent.js │
│ > chromium.connectOverCDP(session.connectUrl) │
│ > page.goto("https://example.com") ✓ 841ms │
│ > agent: 30 browsers, zero baby-sitting │
└──────────────────────────────────────────────────────────┘────────────────────────────────────────────────────────────────
▸ built for agents
No SDK to learn, no protocol shim. You get a raw CDP websocket; playwright and puppeteer connect in one line. The browser is the tool — we just hand it over.
▸ isolated by default
One machine per session, isolated at the hardware line. Dedicated compute, destroyed — not recycled — when you're done. Nothing survives, nothing is shared.
▸ egress that looks human
Sticky residential or datacenter exit per session, wired in below the browser. Fingerprints survive the usual checks because the machine underneath is real.
────────────────────────────────────────────────────────────────
## simple api
POST /v1/sessionsnew browser: proxy tier, ttlSecGET /v1/sessions/:idstatus, connectUrl, time leftDELETE /v1/sessions/:idkill now — VM destroyedttlSecself-destruct timer, 30–3600sconnectUrlCDP websocket — your agent's steering wheel
────────────────────────────────────────────────────────────────
## faq
- What exactly is a session?
- One isolated machine running Chrome, yours alone. You drive it over CDP. When you delete it — or its TTL fires — the machine is destroyed, disk and all.
- How fast is cold start?
- ~150ms from POST to CDP. Browsers are ready before you ask; how is our problem, not yours.
- How is it metered?
- Per session-second, by tier. Every session lands in a usage ledger with its owner, tier, and lifetime.
- Concurrency limits?
- No per-key cap today. Fair use; the fleet grows with you.
────────────────────────────────────────────────────────────────
start now.
One POST. One WebSocket. Your agent has a browser.