The product

Hand your agent the whole web.

You decide what it may touch. Agents reason brilliantly but stall the moment they must act on a live site — Twin Browser is the engine they call to reach any page, pull any data, and sign into the accounts you connect, while you set the guardrails and approve what matters.

billing.acme.com
  1. Open billing.acme.comdone
  2. Read DOM → indexed state (42 elements, ~3k tokens)done
  3. Plan: log in → open invoices → pick latestdone
  4. Act: fill #user · fill #pass · click “Sign in”running
  5. Compile run into a deterministic skillqueued

One run: open the page, read it as indexed state, plan, act, and compile the path into a skill the next run replays with no model call — 1 instead of 10.

The loop

Observe, plan, compile, replay.

Four stages turn one LLM-driven browse into a skill the next run executes with no model in the loop. Only the second stage needs a model at all.

COMPILEdiscovery runretries · dead ends · backtracksminimisecompiled skill1open(url)2fill[3] {{email}}3click[7]4extract([…])book-slot@v3 · replayableone discovery run · a program that replays the same way every time
  1. 01

    DOM → indexed state

    A compiler turns the live page into a compact, numerically-indexed map of interactive elements under a token budget — not raw HTML. The model spends tokens on the decision, not the markup.

  2. 02

    Plan → act

    The planner picks actions against the indexed state — click element 14, type into element 7, submit — and drives the browser until your structured success condition is met. This is the only stage that needs an LLM.

  3. 03

    Compile → skill

    A successful run is minimized into a reusable, deterministic skill: the essential steps, no exploration noise, keyed to the page’s structure and stored in your skill library.

  4. 04

    Dispatch → replay

    Re-runs hit the semantic dispatch cache and replay deterministically with zero LLM calls — or compile fresh and cache for next time. Blocked steps hand off to a human, then resume.

Want the full eight-stage mechanism, end to end? Read how it works.

The cost wedge

The second run is nearly free.

Most browser infra re-runs the LLM on every execution, so the bill climbs with usage. Twin compiles a task once, matches re-phrased requests with a semantic cache, and replays deterministically — three rungs down, not up.

COST OF THE SAME GOAL, N TIMES0306090120036912creditsrunsbreaks even at run 6re-reason every run · 10 cr eachcompile once · 50 cr, then 1 cr a replayrates from the published card — GET /api/v1/pricing

Cold compile

LLM cost

The first time a goal is seen, the planner discovers a path and minimizes it into a deterministic skill. You pay the model once.

Semantic cache hit

~0.2×LLM cost

A re-phrased request is vector-matched to a compiled skill for that host and adapted — far cheaper than recompiling.

Deterministic replay

~0×LLM cost

Call a skill by name and it blind-replays with no model in the loop. The most-repeated workflows trend toward zero marginal LLM cost.

In code

Two calls, one skill

The first call discovers a path and compiles a skill. The next similar call — even re-worded — replays it deterministically. Same key, same audit log, same vault; the only difference is the token count in the response.

A cross-tenant skill corpus compounds it further: a skill compiled once can be safely reused across tenants. See how the cache and corpus fit together on the why-Twin page and the skills page.

run-then-dispatch.shbash
# 1 — cold run: the planner compiles a reusable skill
curl -X POST https://twin-browser.com/api/v1/run \
  -H "Authorization: Bearer $TWIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "goal": "Log in and download this month'\''s invoice",
    "url": "https://billing.acme.com"
  }'
# -> { "result": {...}, "skill_id": "sk_9f2c", "llm_tokens": 3120 }

# 2 — dispatch a re-phrased request: semantic cache HIT -> replay
curl -X POST https://twin-browser.com/api/v1/dispatch \
  -H "Authorization: Bearer $TWIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "goal": "Grab the latest invoice PDF", "url": "https://billing.acme.com" }'
# -> { "result": {...}, "replayed": true, "llm_tokens": 0 }
ONE LAYER · THREE SURFACESREST APIHTTP · Bearer keyMCP server35 tools over stdioDashboardrun it and watchTwin Browserexecution layera real browserone compiled skill — replayable from any of them

Native to your stack

One engine, three ways in

  • REST API

    Bearer-authenticated endpoints under /api/v1/* — run a goal, dispatch to the cache, or replay a compiled skill.

    API reference
  • MCP server

    Tools run, compile_skill and run_skill for Cursor, Claude Desktop, Claude Code and Cline.

    MCP server
  • LangChain & AutoGen

    One-line tool adapters drop the same engine into your existing agent framework — no replay logic to reimplement.

    Adapters in the docs

Capabilities

Everything an authenticated task needs

Not a screenshot tool — a full execution engine, with the security, control, and observability real workflows demand. Every capability below is shipped; open one for the deep dive.

Semantic dispatch cache

A re-phrased request is embedded, vector-matched against the skills you have already compiled, and replayed deterministically — so the second ask and every one after it skips the planner.

Deterministic replay

A successful run is minimized into a named, versioned skill — an ordered action path with its variable parts lifted out — and replaying it is a program, not a prompt.

Cross-tenant skill corpus

Compiled paths are sanitized down to their action structure and pooled, so a first run on a widely-automated surface can start from a shared scaffold instead of a cold compile.

Skill library & catalog

Every compiled skill is stored per tenant with a version and a run contract — the params it takes, the secrets it fills, and whether your stored auth is ready for its host.

Token-efficient DOM state

The live page is serialized into a numerically-indexed list of its interactive elements under a token budget, so the planner reasons over signal instead of markup.

Structured extraction

Ask for fields or a JSON schema and get typed data back — or match a per-host template, expand a row selector, or capture the page's own XHR, and pay no model cost at all.

Site mapping & crawl

Discover a site's URLs from its sitemap, robots and a shallow link scan for a flat fee — then run a bounded, resumable, robots-respecting crawl that can extract per page.

Web search & deep search

One search call blends web, discussion, news and FAQ clusters with Hacker News, deduped and source-tagged — then optionally fetches and cleans the top results, or scrapes them as a background job.

ETL & semantic query

Extract, clean, chunk, embed and load any source — URL, HTML or raw text — into a queryable store, then search it with a natural-language query for a flat credit.

Human-in-the-loop handoff

A 2FA prompt, an approval push or a CAPTCHA the agent cannot clear returns status "paused" with a live session — resolve it automatically from a connected inbox, hand back a code, or drive the page yourself.

Live view & session video

POST /api/v1/live streams the browser back as Server-Sent Events while the agent works, and an opted-in run keeps a durable video you can fetch long afterwards.

Async jobs & webhooks

Submit a run as a background job and get an id immediately — then poll it, stream its status, or receive an HMAC-signed webhook when it completes.

Change monitoring

A monitor reads a value on a cadence, hashes it, compares it to last time, and posts an HMAC-signed webhook only when it actually moved.

Credential vault

A write-only per-tenant vault: a stored secret is referenced in a goal as {{secret:NAME}}, resolved inside the browser at fill time, and redacted from every step, frame and log.

Connected accounts & handoff

Mint a single-use link, your end user completes the sign-in in a hosted browser, and the captured session makes every later run already logged in — with no password anywhere.

Egress, geo & locale

A single `country` field sets the residential exit AND the browser locale and timezone, so a site cannot serve a different language than the exit you asked for — or bring your own proxy and keep both.

Stealth tier

A full desktop browser profile — real Chrome, human-calibrated timing, residential egress — behind a plan gate and an explicit authorization attestation, billed per success.

Account cadence governor

A per-account, per-host governor caps how fast one identity may be re-poked and puts it on cooldown after a ban signal — answering 429 with Retry-After instead of burning the account.

Sub-tenants & reseller billing

One scoped call creates a sub-tenant under your account and returns its API key — billing either to its own balance or to your pool, with every charge attributed.

At a glance

A plain headless browser, plus a skill layer

Same browser underneath. The layer above it is what makes the second run nearly free, observable, and safe to run at volume.

A plain headless browser compared with Twin Browser, row by row.
AspectPlain headless browserTwin Browser
Cost of the next identical runFull LLM cost again~0 LLM — deterministic replay
Page representationRaw HTML / pixelsIndexed-state map under a token budget
Re-phrased requestCold startSemantic cache hit, adapted
Reuse across teamsNoneCross-tenant skill corpus (sanitized)
2FA / blocked stepRun failsAuto-fill code, else HITL handoff
ObservabilityLogs, if anyLive view + durable session video + audit log
BillingOpaqueUsage credits; higher of the flat action price or metered run cost

Illustrative engine behavior, not a benchmark. See the line-by-line breakdown on the compare pages.

Authorization

You delegate the work. You keep the authority.

Twin runs first-party sites, operator-approved automation, internal RPA, accessibility, and authorized testing. The run’s target URL is the authorization signal — and auth, billing, and audit logging run on every call.

DELEGATE · ACT · APPROVEYougoal + target URLReal browser runobserve · plan · actControl gateneeds a person?Work donevideo · audit logauthorizeactclearYou decidecode · approval · stopresume in placepauseyou authorize · it does the work · you approve what matters

Per-tenant API keys

Every call is authenticated with your own key, and the key is stored only as a hash — never in plaintext, never shared across tenants.

Default-deny row-level security

Tenancy is enforced in Postgres, not only in the application: every row on the multi-tenant Supabase backend is isolated by tenant with RLS on by default.

Audit log and credential vault

Every run records its goal, its path and the target it acted on, and every secret it used is filled at run time from the vault and redacted from the log.

It is not a CAPTCHA-bypass-for-hire or anti-bot evasion service. Read the full disclosure on the security page.

FAQ

The product, answered

What is Twin Browser?
The browser layer for AI agents. You hand your agent a goal and a target; it drives a live browser to reach any site, pull any data, and sign into the accounts you connect — while you set per-host policy, approve blocked steps, and read the full audit log. Repeated workflows also compile into deterministic skills that replay at near-zero cost, so running the same work at volume gets cheaper over time.
How is this different from a headless-browser API?
A plain headless browser re-runs the LLM on every execution, so cost climbs with usage. Twin adds a skill layer: a DOM→indexed-state compiler, compiled skills, a semantic dispatch cache, and deterministic replay — plus a cross-tenant corpus that compounds the savings. Cost falls as usage grows instead of rising.
What does the indexed-DOM compiler actually do?
It serializes a live page into a compact, numerically-indexed map of interactive elements (roles, text, positions) under a token budget, instead of raw HTML. The planner reasons over that compact state, and the indices stay stable enough to replay deterministically later.
Where is Twin authorized to automate?
Twin automates the web where you are authorized — first-party sites, operator-approved automation, internal RPA, accessibility, and authorized testing. The run’s target URL is the authorization signal; auth, billing, and audit logging run on every call. It is not a CAPTCHA-bypass-for-hire or anti-bot evasion service.
How do I call it?
A REST API under /api/v1/* with Bearer-key auth, an MCP server (tools: run, compile_skill, run_skill) for Cursor, Claude Desktop, Claude Code and Cline, and one-line LangChain and AutoGen tool adapters.
What does it cost?
Free to start, then usage-based credits from $29/mo. A read is roughly 1 credit and a solved goal roughly 10; once you compile a skill, every later run drops back toward ~1. A model-heavy run is billed the higher of its flat price and its metered cost — see the live rate card at /api/v1/pricing.

Delegate the busywork — keep the control.

Put your agent to work across the web while you set the guardrails and approve what matters. Free to start; usage-based credits from $29/mo.