An agent you can watch, interrupt and correct.
Handoff is a supervised QA engine. It authors end-to-end tests with a model on your key, shows you every step in a live browser, and turns the result into deterministic tests and a traceable record.
Pause, take control, hand back.
The run page streams the browser as it happens. The lease badge always says who has control and for how long. Press Take control and the agent is locked out before your first click lands; hand back and it re-plans from what it now sees.
- Read-only share links for stakeholders who should watch but not drive.
- Reconnecting after a dropped tab keeps your control: the lease is server-side.
- Pause parks the run with no compute held; the browser stays warm.

What you did by hand becomes a step you can re-run.
During a takeover each click is resolved to a locator synchronously, before the page mutates. Keystrokes are attributed to the focused field, with password-shaped fields masked at capture. The before-and-after accessibility diff proposes assertions for what your actions accomplished.
The proposal is a named, parameterised step (“Log in as standard user”) that you confirm on the run page. Only then is it persisted. Re-running the test uses it with no human involvement.

Zero model calls in the CI hot path.
Recorded tests replay with cached locators and web-first assertions. Readiness is the app's own signal, polled by the broker and armed by the navigation request, so a form submit is checked against the next document, never the stale one.
- Animations off, clock pinned, random seeded, reduced motion emulated.
- Fresh browser context per test; sessions never share cookies or storage.
- Console errors, page errors and 5xx responses fail the step on their own.
- A benchmark in our own suite guards the median step time.
// a recorded step, as stored
{
name: "Enter the password secret",
action: { k: "type", v: "{{secret:password}}", submit: true },
locators: {
primary: { strategy: "role", value: "textbox", name: "Password", exact: true },
secondary: { strategy: "testid", value: "password" }
}
}Your key, your provider, your data path.
Three adapters cover the market: native Anthropic, native Google, and one OpenAI-compatible adapter for everything with a base URL. Capabilities such as tool calling, JSON mode and vision are probed when you bind and shown on the Providers page, where you can override them.
- Prompts are laid out for cache hits: static system prompt first, page state last.
- Tokens and cost per call are recorded; usage per month is on the settings page.
- Local models run through an outbound-only edge runner. No tunnel, no open port.
- Evaluation-only endpoints can be marked so they cannot serve CI-triggered cycles.
Provider names are for identification only; Handoff is not affiliated with them.
Requirements, plans, cycles, incidents, RTM, report.
The test design page holds requirements and the traceability matrix. Plans group test cases; running a plan creates a cycle. The report is derived from execution rows on read, so it cannot drift from what actually happened.
- Failed executions open one incident each, exportable to Jira Cloud.
- Cases without recorded steps are reported as inconclusive with the reason.
- Heal audit per window: which locators changed, and why.

Helpful when it is right, loud when it is not.
Locator healing is model-free and guarded: same role, similar accessible name, an unambiguous winner, a diff for approval, and a cap of three heals per test per month before it escalates. It refuses to heal assertions and refuses when a heal would mask a bug that was failing before.
Visual checks compare each replayed step against its baseline with a perceptual hash and a pixel diff. They live in an advisory lane, shown next to the step, and never fail a run on their own.

How it compares
Where Handoff sits against the usual approaches. Read the docs for the details behind each row.
| Hand-written Playwright | Record-and-play tools | AI test generators | Handoff | |
|---|---|---|---|---|
| Authoring from a plain-language goal | No | No | Yes | Yes |
| Live browser view during authoring | Local only | Yes | Usually after the fact | Yes, streamed |
| Human takeover mid-run, actions recorded as steps | No | Recording only | No | Yes |
| Model calls during replay / CI | None | None | Often | None |
| Runs on your own model key | n/a | n/a | Rarely | Always |
| Exports to plain Playwright | Is Playwright | Varies | Varies | Every plan |
| Requirements traceability and cycle reports | Separate tool | Separate tool | Separate tool | Built in |
Run your first supervised test today.
Create an organisation, point Handoff at a staging app, bind your model key, and watch the first run in your browser.