e2e Automates Web and Mobile Testing with Cached Agent Replays
e2e introduces a testing runtime where AI agents execute natural language goals and assertions across web and mobile platforms. Once an action path succeeds, runs are recorded and replayed deterministically without calling LLM APIs until the UI changes.

Why it matters
You can eliminate fragile CSS selector maintenance in CI while preventing runaway inference token bills on regression suites.
TL;DR
- 01Agent actions are recorded on success and replayed without LLM calls until the application UI breaks.
- 02Supports web via Playwright and native mobile via agent-device across iOS simulators and Android emulators.
- 03Offline documentation is bundled in node_modules/e2e/docs for context retrieval by coding assistants.
Key facts
- Supported Web Engines
- Chromium, Firefox, WebKit (Playwright)
- Mobile Runtimes
- iOS simulators, Android emulators (agent-device)
- Offline Docs Path
- node_modules/e2e/docs
- Telemetry Opt-Out Flag
- E2E_TELEMETRY_DISABLED=1
Hybrid Semantic and Deterministic Testing
The e2e framework bridges natural language instructions with strict assertions. Instead of writing brittle XPath queries, developers specify high-level workflows alongside standard assertions. Supported platforms include modern web setups (Vite, Next.js, Astro) and mobile frameworks (Expo, SwiftUI, Jetpack Compose, Kotlin Multiplatform, and Flutter).
test('a member upgrades to Pro', async ({ app, agent, screen }) => {
await app.open('/settings/billing');
await agent.act('upgrade the workspace to the Pro plan');
await agent.assert('the invoice preview shows a prorated amount');
await expect(screen.getByRole('status')).toContainText('Pro');
});Eliminating Token Overhead with Action Replays
The primary friction with agentic testing in continuous integration has always been token costs and inference latency. e2e addresses this by capturing validated action sequences. When a step passes its corresponding assertion, the CLI saves the concrete actions locally. Subsequent CI runs bypass the model entirely, replaying cached interactions until an application update invalidates the sequence.
Runtime Environment and CI Integrations
Under the hood, e2e relies on Playwright for web targets and agent-device for native iOS and Android emulators. For remote pipelines, it integrates with hosted providers including Kernel, Limrun, and EAS Simulators, while branching warm Chromium microVMs via smol machines. Telemetry can be opted out globally using E2E_TELEMETRY_DISABLED=1.
Try it in 2 minutes
test('a member upgrades to Pro', async ({ app, agent, screen }) => {
await app.open('/settings/billing');
await agent.act('upgrade the workspace to the Pro plan');
await agent.assert('the invoice preview shows a prorated amount');
await expect(screen.getByRole('status')).toContainText('Pro');
});typescript
✓ When to use
- When writing integration flows for complex customer journeys without manual locator maintenance.
- When testing across both responsive web and cross-platform native mobile apps from one test runner.
What to do today
- Install the framework locally and initialize test targets with npx e2e.
- Disable anonymous CLI usage tracking in CI by exporting E2E_TELEMETRY_DISABLED=1.
- Provide node_modules/e2e/docs to your IDE coding agent for test syntax generation.