stream ▸ session live0

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

chat A→tab-1live

"Read the latest invoice total."

chat B→tab-2live

"Export this month's orders."

Steer mid-run: send the next turn any time.

why ▸ live · steerable · signed2
Live, not a black boxEvery turn streams as it happens: the page, the action, the result.
Steer it mid-runSend the next instruction any time; the session stays warm between turns.
Signed in as your personaIdentity, fingerprint, and 2FA are applied when the session starts.
vs ▸ cold vs warm5
01
the ledger

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.

CriterionLive sessionCold, per-call
Login / warm-up costPaid once, reusedPaid on every call
Page & session stateKept between turnsLost after each call
VisibilityWatch each turn streamOpaque until it returns
Long, multi-step runsContinuous, steer as it goesStitched across separate runs

Live session compared to cold per-call automation

id ▸ signed as your persona9
02
identity

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.

fn ▸ callable handlers13
03
handlers

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.

call-handler.http
// 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.
oai ▸ openai-compatible17
04
drop-in chat

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
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"
  }'
Python
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.

iso ▸ a tab per conversation21
05
isolation

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.

One live session
↓
tab-1conversation-7
tab-2conversation-8
tab-3conversation-9
  • 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.
mtr ▸ real token accounting25
06
billing

AI usage included. Beyond it, metered per token.

Every plan includes monthly AI usage. 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 beyond the included allowance, the same token usage your provider would report, with the price shown before you run.

How AI is billed

$3.20per million tokens
meteredmanaged token cost
includedmonthly AI usage on every plan

Managed AI is metered purely by tokens used, with no per-call minimum. Local/BYO runs carry no compute charge. See billing & wallet.

ag ▸ built for agents29
07
For AI agents

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.

app ▸ session surface33
tab-1 · conversation-7tab-2 · conversation-8session warm · authenticated
extract_ordersread_invoice_totalexport_csvrefresh_session

The Streaming surface: a live session, callable handlers, and the per-conversation tab strip.

faq ▸ questions logged37
08
faq

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?

Managed cloud AI is metered by tokens used, with the price shown before you run, and every plan includes monthly AI usage. Session compute on your own local agent is never charged.

Does it run on my own accounts?

Yes. The browser acts on your own authenticated accounts, on sites you are authorized to use.

go ▸ open a session41

Open a live session.

Watch AI drive a logged-in browser, and steer it turn by turn.

Writ runs on your own accounts, with your own credentials and data, on sites you are authorized to use.