The AI-native E2E test runner that writes, runs, and debugs tests for you.
English · Español
@matware/e2e-runner
The AI-native E2E test runner that writes, runs, and debugs tests for you.
E2E Runner is a zero-code browser testing framework where tests are plain JSON files — no Playwright scripts, no Cypress boilerplate, no test framework to learn. Define what to click, type, and assert, and the runner executes it in parallel against a shared Chrome pool.
But what makes it truly different is its deep AI integration. With a built-in MCP server, Claude Code can create tests from a conversation, run them, read the results, capture screenshots, and even visually verify that pages look correct — all without leaving the chat. Paste a GitHub issue URL and get a runnable test back. That's the workflow.
This is a test
[
{
"name": "login-flow",
"actions": [
{ "type": "goto", "value": "/login" },
{ "type": "type", "selector": "#email", "value": "user@test.com" },
{ "type": "type", "selector": "#password", "value": "secret" },
{ "type": "click", "text": "Sign In" },
{ "type": "assert_text", "text": "Welcome back" },
{ "type": "screenshot", "value": "logged-in.png" }
]
}
]
No imports. No describe/it. No compilation step. Just a JSON file that describes what a user does — and the runner makes it happen.
Agent Skills
Install E2E testing skills for any coding agent (Claude Code, Cursor, Codex, Copilot, and 40+ more):
npx skills add fastslack/mtw-e2e-runner
This gives your agent the knowledge to create, run, and debug JSON-driven E2E tests — no documentation reading required.
Browse all available skills at skills.sh
Getting Started
Prerequisites: Node.js >= 20, Docker running, your app on a known port.
Quickstart
npm install --save-dev @matware/e2e-runner
npx e2e-runner init # creates e2e/tests/ with a sample test
npx e2e-runner pool start # starts Chrome in Docker
npx e2e-runner run --all # runs the sample test
Or do it all in one command:
curl -fsSL https://raw.githubusercontent.com/fastslack/mtw-e2e-runner/main/scripts/quickstart.sh | bash
After setup, edit e2e.config.js to set your app's port:
export default {
baseUrl: 'http://host.docker.internal:3000', // change 3000 to your port
};
Why
host.docker.internal? Chrome runs inside Docker and can't reachlocalhoston your machine. This hostname bridges the gap. On Linux (Docker Engine, not Desktop), you may need--add-host=host.docker.internal:host-gatewayor use your LAN IP directly.
Add Claude Code (optional)
claude plugin marketplace add fastslack/mtw-e2e-runner
claude plugin install e2e-runner@matware
This gives Claude 13 MCP tools, slash commands, and specialized agents. Just say "Run all E2E tests" or "Create a test for the login flow".
Add OpenCode (optional)
cp node_modules/@matware/e2e-runner/opencode.json ./
mkdir -p .opencode && cp -r node_modules/@matware/e2e-runner/.opencode/* .opencode/
See OPENCODE.md for details.
What's next?
- Test Format — learn the full action vocabulary
- Claude Code Integration — set up AI-powered testing
- Visual Verification — describe expected pages in plain English
- Issue-to-Test — turn bug reports into executable tests
- Web Dashboard — monitor tests in real time
What you get
🧪 Zero-code tests — JSON files that anyone on your team can read and write. No JavaScript, no compilation, no framework lock-in.
🤖 AI-powered testing — Claude Code creates, executes, and debugs tests natively through 13 MCP tools. Ask it to "test the checkout flow" and it builds the JSON, runs it, and reports back.
Tools (3)
run_testExecutes a specified JSON-defined E2E test file.create_testGenerates a new JSON test file based on user requirements.debug_testRuns a test and provides diagnostic information for failures.Configuration
{ "mcpServers": { "e2e-runner": { "command": "npx", "args": [ "-y", "@matware/e2e-runner", "mcp" ] } } }