Product

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.

Live view and takeover

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.
A run page with the live browser, the step list and the accessibility snapshot.
Takeover to test steps

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.

A finished run with a takeover compiled into an accepted test step.
Deterministic replay

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" }
  }
}
Bring your own model

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.
AnthropicGoogle GeminiOpenAIAzure OpenAIGroqTogetherFireworksDeepSeekMistralOpenRouterNVIDIA NIM1min.aivLLMLM StudioOllama (local)any OpenAI-compatible endpoint

Provider names are for identification only; Handoff is not affiliated with them.

STLC artifacts

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.
A cycle report page with verdict, executions and covered requirements.
Self-healing and visual checks

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.

The heals page listing locator heal proposals with the recorded locator, the locator the replay ran with, and the reason.

How it compares

Where Handoff sits against the usual approaches. Read the docs for the details behind each row.

Hand-written PlaywrightRecord-and-play toolsAI test generatorsHandoff
Authoring from a plain-language goalNoNoYesYes
Live browser view during authoringLocal onlyYesUsually after the factYes, streamed
Human takeover mid-run, actions recorded as stepsNoRecording onlyNoYes
Model calls during replay / CINoneNoneOftenNone
Runs on your own model keyn/an/aRarelyAlways
Exports to plain PlaywrightIs PlaywrightVariesVariesEvery plan
Requirements traceability and cycle reportsSeparate toolSeparate toolSeparate toolBuilt 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.

Product · Handoff