Watch the AI drive a live browser.
Open a live session and watch AI operate a real, logged-in browser turn by turn: read a page, fill a form, pull the result. Long-running runs you can watch and steer, with a separate tab per conversation.
A live session, watched turn by turn
"Read the latest invoice total."
"Export this month's orders."
Steer mid-run: send the next turn any time.
Cold automation vs. a live session
A cold, per-call browser pays the login and warm-up tax on every request and loses its state. A live session authenticates once, stays logged in, and lets you watch and drive it turn by turn. Long, multi-step runs feel continuous.
| Criterion | Live session | Cold, per-call |
|---|---|---|
| Login / warm-up cost | Paid once, reused | Paid on every call |
| Page & session state | Kept between turns | Lost after each call |
| Visibility | Watch each turn stream | Opaque until it returns |
| Long, multi-step runs | Continuous, steer as it goes | Stitched across separate runs |
Live session compared to cold per-call automation
Signed in as your persona, before the first turn
Link a persona to a session and Writ applies it at start: the account identity, a consistent browser profile, and stored session state. Email and SMS one-time codes and TOTP are handled up front, so the AI lands on a page already logged in as you.
- Identity and a consistent browser profile resolved from the persona at session start.
- TOTP and mailbox / SMS one-time codes cleared before the run begins.
- On your own authorized accounts: authorized-access automation, not circumvention.
Applied at session start
- Persona identity + browser profile
- TOTP · email / SMS OTP
- Stored session state
The AI takes its first turn already logged in as you.
Callable handlers
Define handlers on a live session and call them by name. Each handler is a unit of browser work you control (navigate, fill, extract, click through a multi-step flow), invoked on the warm, logged-in session. Handlers are deterministic: they do exactly what you defined, on the page state that's already there.
// Invoke a named handler on a warm, logged-in session.
POST /v1/streaming/{session}/handlers/extract_orders
Authorization: Bearer wt_...
{
"since": "2026-06-01",
"status": "shipped"
} - Invoke by name on a live session.
- Operate on existing page state, with no re-login per call.
- Compose handlers into longer flows.
OpenAI-compatible chat API
Point any OpenAI-compatible client at a Writ streaming session and chat with it like a model, except the "model" is a real browser acting on a real site. Each message lands in your own handler script — a JS handler you write — which drives the page and streams the reply. No AI model receives anything unless you put one in your handler. Use the SDKs and tools you already have; swap the base URL.
curl https://api.usewrit.app/v1/streaming/{session}/chat/completions \
-H "Authorization: Bearer wt_..." \
-H "Content-Type: application/json" \
-d '{
"messages": [
{ "role": "user", "content": "Open the latest invoice and read the total." }
],
"user": "conversation-7"
}'from openai import OpenAI
# Drop-in: bring your existing OpenAI client, swap the base URL.
client = OpenAI(
base_url="https://api.usewrit.app/v1/streaming/{session}",
api_key="wt_...",
)
resp = client.chat.completions.create(
model="writ-browser",
messages=[{"role": "user", "content": "Open the latest invoice and read the total."}],
user="conversation-7", # routes to its own browser tab
)
print(resp.choices[0].message.content)Drop-in compatible: bring your existing OpenAI client and change the base URL. The browser acts on your own authenticated accounts; this is authorized-access automation, not circumvention.
A tab per conversation
Run several conversations against one session and each gets its own browser tab. Conversation state stays isolated; one chat's navigation and page context never bleed into another's. A stuck turn in one conversation can't wedge the others; turns are bounded and recoverable per tab.
- routingPer-conversation tab routing, so chats don't collide.
- timeoutsPer-turn timeouts so one slow turn can't block the rest.
- recoveryTab reload and recovery built in.
BYO-AI is unbilled. Managed AI is metered.
Bring your own AI keys on a local/BYO agent and that AI is unbilled by Writ: you pay your provider directly, or run a local model for zero per-token cost. When a session uses managed cloud AI, you see real token usage per turn, the same numbers your provider would bill.
Managed AI is billed by tokens, metered from your wallet, the same token usage your provider would report, with the price shown before you run. BYO-AI on a local/BYO agent is the unbilled path; managed cloud AI is the metered path.
How AI is billed
Managed AI is metered purely by tokens used, with no per-call minimum. Local/BYO runs carry no compute charge. See billing & wallet.
Built for agents
Streaming is how an AI agent operates a website as a living tool: keep a session warm, send it turns, watch each one, get structured results, hand it the next instruction. Combined with managed endpoints and MCP, your agent can call a Writ workflow as a tool and drive a live browser as a conversation, on sites that never shipped an API.
The Streaming surface: a live session, callable handlers, and the per-conversation tab strip.
Questions, answered
Can I really watch the AI work?
Yes. A streaming session logs each turn as it happens: the page it is on, the handler it called, and the result. You can send the next instruction while it runs.
How does the session sign in as me?
Link a persona and Writ applies it at session start: a stable, consistent browser identity and stored session state, with TOTP and email / SMS one-time codes handled up front. The first turn happens already logged in.
Is the chat API really OpenAI-compatible?
Yes. It exposes an OpenAI-compatible chat surface, so you can point an existing OpenAI client at a Writ streaming session by changing the base URL.
Do multiple conversations interfere with each other?
No. Each conversation runs in its own tab with isolated state, per-turn timeouts, and tab recovery.
How is AI billed in a streaming session?
Bring your own AI keys on a local/BYO agent and that AI is unbilled by Writ. Managed cloud AI is metered by tokens used, with the price shown before you run.
Does it run on my own accounts?
Yes. The browser acts on your own authenticated accounts, on sites you are authorized to use.
Open a live session.
Watch AI drive a logged-in browser, and steer it turn by turn.