Press / to search

All documentation
docs Run it somewhere Your own machines

Runs onWrit CloudSelf-hosted

agents ▸ your machines

Your hardware, on the same account.

An agent is the Writ worker. Link a machine you already own with a single pairing code and it records and replays browser workflows, runs crawl shards and runs monitors — one outbound connection, no inbound ports, no public IP, happily behind NAT.

A local run carries no compute charge on any plan, however it was started.

agent ▸ what it is

One worker, three jobs.

The agent is a single program you run on a machine you control. It dials out to the coordinator and waits for work; nothing dials in to it.

Records and replays workflowsA real browser on your machine, on your own logged-in accounts.
Runs crawl shardsA distributed crawl splits across the machines you have linked.
Runs monitorsScheduled checks execute on your hardware, on your schedule.

It can use your own AI provider key — OpenAI, Anthropic, Gemini, any OpenAI-compatible endpoint, or Ollama. Work done on your key is not billed as managed AI, and the key stays on the machine.

limits ▸ per plan

How many machines, how many doors.

Two different caps, often confused. Linked machines is how many of your own computers can be attached at once. Published endpoints and MCP tools is how many doors you can open onto them.

PlanLinked machinesPublished endpoints · MCP tools
Free12 · 2
Starter15 · 5
Pro115 · 15
Growth540 · 40
Scale20100 · 100
EnterpriseUnlimitedUnlimited

Writ Desktop on your own computer is a different thing again: it is never counted or capped here, and its local runs are free on every plan.

fleet ▸ the surface

See and manage what you linked.

Everything the Fleet page does is available over the API, under /api/user-recorder:

CallWhat it does
GET /agentsList your machines and their live state.
PATCH /agents/{agent_id}Rename one.
DELETE /agents/{agent_id}Disconnect one.
GET /capabilityWhat this plan allows right now (below).
GET /byo-ai · PUT /byo-aiRead or set the AI provider config your agents use.

What the capability call tells you

One call, so a wizard can pick a target and explain a gate instead of failing with a cryptic connection error:

cloud_recording_allowedWhether recording can run in the cloud at all on this plan.
cloud_quota_limit · cloud_quota_used · cloud_quota_remainingThe monthly cloud recording quota and what is left of it.
requires_local_agent_when_exhaustedWhether a linked machine becomes required once that quota is spent.
max_user_recordersThe machine limit for this plan.
online_local_agentsHow many of your machines are online right now.

A machine counts as online when it holds a live connection, or when its last heartbeat arrived inside the last 2 minutes. Each row also carries its name, platform, device name, capabilities, status, active vs maximum sessions, and which AI provider it is using.

dispatch ▸ where work lands

Where the work actually runs.

Two paths, and they are billed differently:

Cloud-dispatchedA run started in the cloud goes out to your fleet and executes on one of your machines.
Locally startedA linked machine can run a marketplace install itself, under an authorize → execute → finalize contract.

In the local path the billing decision always stays server-side — the machine asks, the server decides, and the machine reports back what happened. A local run carries no compute charge on any plan, however it was started.

machine ▸ what it needs

What the machine needs.

A Chromium browser driver, because the agent drives a real browser. On first browser use the agent installs it itself; you can pre-install it instead on a machine with no outbound access to the browser download, or when you would rather do it during imaging.

prepare-browser.sh

patchright install chromium
# or, if you already run Playwright on this machine:
playwright install chromium

Run either patchright install chromium or playwright install chromium — whichever is already on that machine.

faq

Fleet questions, answered.

Do I have to open a port or give the machine a public IP?
No. The agent opens one outbound connection and keeps it. Calls to your published endpoints ride down that existing connection, so there is no inbound port, no firewall exception and no public IP, and it works behind NAT.
How long does a pairing code last, and can I reuse it?
It expires in 15 minutes and is single-use — redeeming it spends it. Redemption is rate-limited to 20 attempts per hour per IP, so a code captured from a shell history or a proxy log is already spent by the time anyone tries it.
What happens if I am already at my machine limit?
Minting a code refuses with 402 and tells you how many machines are connected. Free, Starter and Pro link one machine; Growth five; Scale twenty; Enterprise is unlimited. Disconnect one from the Fleet page, or move up a plan.
Does running on my own machine cost credits?
No. A local run carries no compute charge on any plan, however it was started — cloud-dispatched to your fleet, or started on the machine itself. Only work that runs on Writ-operated compute is metered.
Can the agent use my own AI provider key?
Yes. Point it at OpenAI, Anthropic, Gemini, any OpenAI-compatible endpoint, or Ollama, and set it through the byo-ai call. The key stays on the machine, and work done on your key is not billed as managed AI.
Why does a machine show as offline when it is running?
Online means a live connection or a heartbeat inside the last 2 minutes. A machine that has just woken, lost its network briefly, or been paused shows offline until its next heartbeat lands, then flips back on its own.

end ▸ connect

Link the first machine.

Mint a code, run one line, and the machine is part of your fleet before the code expires.