This site is available as Markdown for AI agents. For the full index, see llms.txt.
AI-native · MCP-native · local-first

Your agent writes the E2E tests. You review and commit.

unotest is AI-native end-to-end testing. Your AI agent drives your real app over MCP and writes clean, reviewable tests in your repo — for web and for iOS.

Works with Claude Code · Cursor · Codex

Full control

AI does the work. You keep control.

The whole point: speed from the agent, ownership stays with you.

Plain .js in your repo

Tests are ordinary JavaScript in unotest/e2e/*.js. Git, code review, CI — no proprietary format, no binary blob.

No silent fixes

agent_fix composes context and a suggestion — it never calls an LLM itself and never applies a patch on its own. You read the diff and commit.

Runs locally

Everything runs on your machine. Your app never leaves it. No cloud, no account to start.

Safe to run blindly

Scenarios execute in a sandboxed AST interpreter — no require, no fetch, no filesystem. AI-generated tests can run without surprises.

What's new

unotest 0.53.0

Released 23 October 2026.

Terminal tests with no window

openTerminal() with no app runs your shell on a pseudo-terminal, and openTerminal('ssh', {host}) drives a Linux host over ssh with the same steps. Nothing takes the screen, so terminal tests run in CI and on Linux, check exit codes, and keep registered secrets out of every frame.

Two browsers in one test

newContext({profile}) opens a second context on a profile of its own, so two devices of one app run side by side with their own cookies. newContext({cdpEndpoint}) joins a Chrome that already runs, such as the browser inside a VM, and drives it with the same steps.

Check the response a click caused

networkEntries() returns what the page requested and what came back, so a scenario can check the status and the body of an API response. A test that never opens a page no longer starts a browser at all.

Pick your platform

Same idea, two surfaces — the web and iOS.