How to use
- Copy the installation command and review the source package before installing it in your own agent environment.
- Check the source document for required tools, credentials and supported hosts.
- Describe your input and desired deliverable; review the output against the source material.
npx skills add https://github.com/fastslack/mtw-e2e-runner --skill e2e-testingBefore you start
- Installation does not include a model subscription, API allowance or permission to access your files.
- Repository stars and installation counts describe activity, not an independent quality or security test.
Rendered from the source repository. Headings, examples, code, tables, links, and referenced images are preserved.
E2E Testing with @matware/e2e-runner
Overview
@matware/e2e-runner is a JSON-driven E2E test runner. Tests are defined as JSON files with sequential browser actions — no JavaScript test code. Tests run in parallel against a Chrome pool (browserless/chrome via Docker) using Puppeteer.
Key capabilities: 17 MCP tools for running tests, creating test files, capturing screenshots, analyzing network traffic, verifying GitHub/GitLab issues, and querying a learning system for stability insights.
Prerequisites
Before running any tests, verify the Chrome pool is available:
e2e_pool_status → check "Available: yes" and session capacityIf the pool is not running, the user must start it via CLI (not available via MCP):
npx e2e-runner pool startCore Workflow
The standard test execution flow:
- Check pool →
e2e_pool_status— confirm Chrome pool is ready - List suites →
e2e_list— discover available test files and modules - Run tests →
e2e_run— execute withall,suite, orfileparameter - Interpret results — check
summary,failures,narratives,networkSummary - View screenshots →
e2e_screenshot— retrieve error/verification screenshots byss:HASH - Drill into network →
e2e_network_logs— userunDbIdto inspect requests/responses - Check learnings →
e2e_learnings— query stability trends, flaky tests, error patterns
Interpreting Run Results
The e2e_run response includes:
- summary: pass/fail counts, duration,
runDbIdfor drill-down - failures: failed test names with error messages and error screenshot hashes
- narratives: step-by-step human-readable story of each test execution
- networkSummary: per-test request stats (status distribution, slow/failed requests)
- verifications: tests with
expectfield — calle2e_screenshotto visually verify - learnings: stability insights from the learning system (new failures, flaky patterns)
Creating Tests
Basic Structure
[
{
"name": "login-flow",
"actions": [
{ "type": "goto", "value": "/login" },
{ "type": "type", "selector": "#email", "value": "user@example.com" },
{ "type": "type", "selector": "#password", "value": "secret" },
{ "type": "click", "text": "Sign In" },
{ "type": "wait", "selector": ".dashboard" },
{ "type": "assert_url", "value": "/dashboard" }
]
}
]Use e2e_create_test to write test files. Use e2e_create_module for reusable action sequences.
Key Action Patterns
- Navigation:
goto(full page load),navigate(SPA-friendly, non-blocking) - Interaction:
click(selector or text; text mode also takesscope:"dialog",visible:true,last:true),type/fill,select,press,hover,scroll - React/MUI:
type_react(controlled inputs; optionalblur,waitAfter),click_option,select_combobox(open+filter+pick MUI Autocomplete/Select in one action),focus_autocomplete,click_chip,click_regex - Waiting: prefer conditions over sleeps —
waittakesselector/text(appear),gone(disappear, e.g. spinner/closing dialog), orvalue(fixed ms, last resort);wait_network_idle - Assertions:
assert_text(page-wide),assert_element_text(scoped),assert_url,assert_visible,assert_not_visible,assert_count,assert_attribute,assert_class,assert_input_value,assert_matches - Extraction:
get_text(non-assertion, returns element text),screenshot - Advanced:
evaluate(run JS in browser),assert_no_network_errors,clear_cookies
Visual Verification
Add an expect field to any test for AI-powered visual verification:
{
"name": "dashboard-loads",
"expect": "Should show data table with at least 3 rows and no error messages",
"actions": [...]
}After running, call e2e_screenshot with each verification hash and judge the screenshot against the description.
Reusable Modules
Create modules with e2e_create_module, reference them in tests:
{ "$use": "auth-jwt", "params": { "email": "admin@test.com" } }For complete action type reference, see action-types.md. For JSON format details (hooks, serial, retries, modules), see test-json-format.md.
Issue Verification
Turn GitHub/GitLab bug reports into executable tests:
Prompt Mode (default, no API key needed)
e2e_issuewith issue URL → returns structured prompt with issue details- Analyze the issue and design test actions
e2e_create_test→ create the test filee2e_run→ execute and verify
Verify Mode (requires ANTHROPICAPIKEY)
e2e_issuewithmode: "verify"→ auto-generates tests via Claude API, runs them, reports result- Test failure = bug confirmed, all pass = not reproducible
Supports both UI tests (testType: "e2e") and API tests (testType: "api").
Debugging & Analysis
Network Inspection
e2e_network_logs(runDbId) → all requests
e2e_network_logs(runDbId, errorsOnly: true) → failed requests only
e2e_network_logs(runDbId, includeBodies: true) → full request/response bodies
e2e_network_logs(runDbId, urlPattern: "/api/") → filter by URL patternLearning System
e2e_learnings("summary") → full project overview
e2e_learnings("flaky") → flaky test analysis
e2e_learnings("selectors") → selector stability
e2e_learnings("errors") → recurring error patterns
e2e_learnings("test:name") → drill into specific test historyOn-Demand Capture
Use e2e_capture to screenshot any URL without running a full test suite. Useful for visual exploration or verifying current state.
Dashboard
Start/stop the web dashboard with e2e_dashboard_start / e2e_dashboard_stop for a visual UI at http://localhost:8484.
Important Rules
- Always pass `cwd` — All MCP tools accept
cwd(the project root). Always pass it so config files and test directories resolve correctly. - `baseUrl` default is `http://host.docker.internal:3000` — Chrome runs inside Docker, so it uses
host.docker.internalto reach the host machine. Override withbaseUrlif the app runs on a different port. - Pool management is CLI-only —
pool startandpool stopare not available via MCP. Onlye2e_pool_statusis an MCP tool. - `evaluate` is strict — Returns starting with
FAIL:/ERROR:or returningfalsewill fail the test. Prefer granular assertion actions overevaluatewith inline JS. - Serial tests — Mark tests with
"serial": trueif they share mutable state. They run after all parallel tests. - Action retries — Use
"retries": Non individual actions for flaky selectors, or globally via config. - Assertion selectors are the contract — when fixing flaky tests, heal interaction selectors freely, but never retarget an
assert_*selector to make a test pass: pin assertion selectors to stabledata-testids.
References
- Action Types Reference — Complete catalog of 28+ action types with fields and examples
- Test JSON Format — JSON structure, hooks, serial, retries, modules, exclude patterns, environment profiles, CI output
- GraphQL Action — GQL action config, variables, inline assertions, __e2eGql helper
- Authentication Strategies — 6 auth methods + auto-login + reusable auth modules
- Network Debugging — Error handling, request logging, drill-down pattern
- Visual Verification — Expect field, double screenshots, strictness levels, verdict format
- Multi-Pool Support — Config, selection algorithm, failover, pool-aware queue
- Variables — SQLite-backed variables, syntax, MCP tool, dashboard UI, REST API
- Issue Verification — GitHub/GitLab, AI modes, test categories, GitLab limitations
- Troubleshooting — Common problems, pre-validation, screenshot hashes, dashboard



