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.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.

Pick your platform

Same idea, two surfaces — the web and iOS.