Press / to search

All documentation
docs Run it somewhere Writ Desktop

Runs onDesktop

desktop ▸ your machine

The whole engine, on your computer.

Writ runs callable web-action workflows and monitors entirely on your machine. The engine is bundled as a loopback-only sidecar; nothing leaves your computer unless you explicitly link a cloud account.

Local runs are free and unmetered on every plan — including the free one.

install ▸ platforms

Install it.

One app per platform, each carrying the engine inside it. Pick the format your machine expects; the download page offers the right one by default.

PlatformInstallerBuilds
macOS.dmg · .apparm64 · x86_64 — macOS 11.0 or later
Windows.msi · NSIS installerx86_64 — installed per-machine
Linux.deb · AppImagex86_64 · aarch64

Downloads live on the Writ Desktop page — this page never links a build directly, so a stale docs link can never hand you the wrong one.

record ▸ edit ▸ run

Record once, replay forever.

You drive a real browser and the app writes the workflow down as you go. Nothing is inferred from a screenshot after the fact — every action you take lands as a step you can open and edit.

Every action becomes an editable stepClicks, typing, navigation, waits and extractions are captured as an ordered list you can reorder, retime or delete.
The AI assistant sits inside the recorderIt can read the live page and write the extractor for you, so you point at what you want instead of hand-writing a selector.
Assist mode asks firstBefore anything that changes the page — a click, a submit, a purchase step — the assistant stops and waits for you.
Runs, schedules and monitors stay localThe same workflow runs on a schedule or as a monitor without a round trip to anyone else’s server.

A local run carries no compute charge on any plan, however you start it — from the app, from a schedule, from an SDK, or from an MCP client.

mcp ▸ local server

Your workflows as tools, on localhost.

The desktop registers an MCP server named writ. That name is deliberate: a self-hosted coordinator registers as writ-selfhost and Writ Cloud as writ-cloud, so all three can sit in the same client config at once without colliding.

One-click install

The app’s Connect page writes the server into the client’s own config file for claude_code, claude_desktop, codex, cursor, windsurf and vscode. You can also paste the config yourself:

connect.sh

# The app's Connect page prints this with the absolute path to the
# bundled engine already filled in.
claude mcp add writ -- writ-agentd mcp
TransportWhat the client needs
stdio (recommended)The client launches the bundled engine as a child process. No credential goes in the client config at all.
Direct HTTPA client that speaks HTTP instead mints a run-scoped wlk_ key and sends it as a Bearer token.

Three servers, three names

Which one you connect decides where the work runs:

Where it runsMCP server name
Writ Desktop (this page)writ
Self-hosted coordinatorwrit-selfhost
Writ Cloudwrit-cloud

The local server exposes 31 tools. Two of them — writ_search_api and writ_install_api, which reach the marketplace — appear only once you link a cloud account. On top of those you get one run_<name> tool for every workflow you choose to expose.

locks ▸ two different things

App lock is not persona 2FA.

These get confused constantly, so keep them apart: the app lock protects Writ’s own vault on this machine. Persona 2FA is the second factor for the sites you automate. Turning one on does nothing to the other.

App lock — your vault on this machine

A passphrase over the stored secrets, with an idle timeout so walking away re-locks it.

LockSeals the vault immediately.
UnlockYour passphrase, entered in the app.
Idle timeoutRe-locks after a period of no activity, in seconds.
Recovery codesIssued while unlocked — a locked vault yields none.

While the vault is locked, anything that needs a stored secret fails with 423 rather than running without it. Unlock, then run again.

Persona 2FA — the sites you automate

A persona holds one login for one site. When that site asks for a second factor, the persona answers it:

MethodWhat happens at the step
noneThe site asks for no second factor.
totpThe code is minted on-device at the moment the step runs, and is never logged.
email_otpThe emailed code is collected and submitted for you.
smsThe texted code is collected and submitted for you.

You can validate a TOTP secret without storing it — paste it, confirm the code matches, walk away. Importing from an authenticator app works the same way. Secrets you type are never echoed back by the API.

updates ▸ three channels

Updates you can predict.

Every install sits on exactly one channel, and it only ever applies an update built for that same channel. The channel never widens by itself — a stable install does not quietly start pulling beta.

ChannelWho it is for
stableThe default. Released versions only.
betaOpt-in. Pre-release builds, ahead of stable.
managedSet by company policy, pointing at an internal update feed.

What is checked before an update is applied

An update is verified first and applied second. Rollout is staged, so a release reaches machines in waves rather than all at once.

SignatureThe release must be signed by a key this build accepts.
ChannelThe release channel must equal this install’s channel.
ExpiryA stale or replayed release is refused.
Downgrade protectionAn older version cannot be pushed over a newer one.
Minimum supported versionA release can require a floor before it will install.
ChecksumThe downloaded bytes must match the digest the release was approved with.

The same checks run with no network at all, so an update applied from a file on a locked-down or air-gapped machine is verified exactly as strictly. A managed policy can pin the channel or the update feed, and is not user-overridable.

faq

Desktop questions, answered.

Do I need an account to use Writ Desktop?
Not to record and run. The engine is bundled in the app and works on its own. Linking a cloud account is what adds the two marketplace MCP tools and lets cloud-dispatched work reach this machine — until you do that, nothing leaves your computer.
Do local runs cost anything?
No. Local runs are free and unmetered on every plan, including the free one, and it makes no difference whether you started the run by hand, on a schedule, from an SDK or from an MCP client. Only cloud runs are metered.
What is the difference between the app lock and persona 2FA?
The app lock is a passphrase over Writ’s own vault on this machine, with an idle timeout and recovery codes; while it is locked, anything needing a stored secret fails with 423. Persona 2FA is the second factor for the sites you automate — none, totp, email_otp or sms — and TOTP codes are minted on-device at the moment the step runs.
Which MCP server name does the desktop use?
writ. A self-hosted coordinator registers as writ-selfhost and Writ Cloud as writ-cloud, so all three can coexist in one client config. The recommended transport is stdio, which needs no credential in the client config; a direct-HTTP client uses a run-scoped wlk_ key instead.
Will a stable install ever pull a beta build?
No. A client only applies an update whose channel matches its own, and the channel never widens on its own. If your company sets a managed policy, that policy pins the channel or an internal feed and you cannot override it from the app.
Can the app update itself without network access?
The verification does not need a network: signature, channel, expiry, downgrade protection, minimum supported version and checksum are all checked locally, so an update applied from a file on an air-gapped machine gets the same treatment as one fetched online.

end ▸ install

Put the engine on your own machine.

Record a workflow in a real browser, then run it as often as you like for nothing.