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.42.0
Released 24 September 2026.
Test a browser extension
A new launch block in the config starts the browser with extra arguments and a profile of its own: load an unpacked extension, keep what it installed between runs. On a profile the scenarios share one browser context, and each run says so in its log. Bundled headless Chromium ignores extensions without a word, so that combination is refused instead of silently testing nothing. In CI, set the new chromium channel, whose headless mode loads them. Locally, run headed.
Your box moves to a new version when you say so
A box no longer installs a new release on its own. Box status shows the version the box runs, the one its channel offers and where the box is between the two. Pressing Update in the dashboard takes effect within minutes once your box checks for a new target every five minutes; a box still on the hourly check takes up to an hour and a half, and only until that check reaches it. The box then reports how the update ended: applied, rolled back, refused or failed, and why. An update that failed is not retried by the box itself. It runs again when you press Update again.
See how your box installed the suite
The environments list and a run's details now say how long the box took to install your suite, and whether the packages came from the registry or from the box's own cache. The box measures this itself: before an install it checks what the lockfile names against what its cache already holds, and prints the counts so the word can be checked. A box older than this release prints exactly what it printed before.