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
unotest web
E2E for web apps. Playwright-vocabulary DSL on a sandboxed engine, driven by your agent over MCP.
unotest mobile
E2E for iOS apps (React Native + native Swift). The agent drives the Simulator through the accessibility tree.
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.52.0
Released 17 October 2026.
Scenarios run on V8, as real JavaScript
The engine of Node and Chrome runs every scenario now: classes, getters, generators, Date, Symbol and the built-in objects behave as the language says. One lint --fix migrates a suite, and the upgrade guide lists every case.
Lint type-checks what you wrote
npx @unotest/web lint checks each scenario as JavaScript, with your helpers and the DSL declarations: a name nothing declares, a member a value does not have, an argument of the wrong type. async and await, which would let a check run after the test ended, are refused with a fix.
Debugging that keeps its word
Time held on a breakpoint no longer eats the test's budget, Continue on a failure ends the test with its teardown, and a test that never ends is cut by its time budget, naming the line it was on. The runner's own keys stay out of the scenario's environment.