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.