← All posts
16 Feb 2026Matías Aguirre

@matware/e2e-runner 1.1.0: Real-Time Dashboard, Issue-to-Test, and Screenshot Hashes

The biggest release yet for our JSON-driven E2E test runner. A full web dashboard, automatic bug verification from GitHub issues, screenshot hashes for AI debugging, and much more.

e2e-runnertestingmcpclaude-codedashboardopen-source
E2E Runner 1.1.0 real-time dashboard showing live test execution
E2E Runner 1.1.0 real-time dashboard showing live test execution

Version 1.1.0 of @matware/e2e-runner is out. It’s the biggest update since the initial release — a real-time web dashboard, automatic bug verification from GitHub/GitLab issues, and screenshot hashes that bridge visual output to AI debugging. Everything remains JSON-driven, zero-config by default.

Real-Time Web Dashboard

The headline feature. A complete dark-themed SPA that gives you full visibility and control over your test runs — no extra setup required.

npx @matware/e2e-runner dashboard

Open http://localhost:8484 and you’re in.

Live Execution

Watch tests run in real time. Every action — goto, wait, click, evaluate — streams via WebSocket with individual durations. Pass/fail counters update live.

Live test execution with real-time step updates and pass/fail counters Live view during test execution: steps stream in real time with individual durations, pass/fail counters update instantly.

Test Suites

All your test suites organized by project. Click “Run Suite” on any card or “Run All Tests” to execute everything.

Test suites grid organized by project with Run Suite buttons Suites view: cards organized by project, each with a one-click Run Suite button.

A pass rate trend chart and a detailed table of all runs across projects. Color-coded percentages make it easy to spot regressions.

Run history with pass rate trend chart and detailed execution table Runs view: pass rate trend chart and execution history table across all projects.

Run Detail

Expand any run to see individual tests with pass/fail badges, durations, screenshots with clickable hash badges, and formatted console errors.

Run detail showing test results, screenshot hash badges, and console errors Run detail: expanded test with PASS badge, screenshot thumbnail with clickable hash badge ss:77c28b5a.

A grid gallery of all screenshots captured across test runs, organized by project.

Screenshot gallery with grid of captured test screenshots Screenshots view: visual gallery of all captures for the selected project.

Multi-Project Support

The dashboard handles multiple projects simultaneously. Each project is identified by its working directory (cwd) with a configurable display name.

Multi-project view showing suites from different projects with pool status Multi-project: suites from different projects in separate sections, pool status in the footer.

# Via CLI flag
e2e-runner dashboard --project-name "My App"

# Via environment variable
PROJECT_NAME="My App" e2e-runner dashboard

# Via e2e-runner.config.json
{ "projectName": "My App" }

The dashboard is also available as MCP tools: e2e_dashboard_start and e2e_dashboard_stop.

Issue-to-Test: From Bug Report to E2E Test Automatically

Convert GitHub and GitLab issues into executable E2E tests. Supports github.com and GitLab (including self-hosted), detecting the provider automatically from the URL.

Two modes of operation:

Prompt Mode (default, no API key required)

The MCP tool e2e_issue fetches the issue details (title, body, labels, comments) and returns a structured prompt. Claude Code uses that prompt to create tests with e2e_create_test and run them with e2e_run. The flow is entirely AI-orchestrated.

Verify Mode (requires ANTHROPIC_API_KEY)

Calls the Claude API directly to generate tests, executes them automatically, and reports whether the bug is confirmed or not reproducible. The logic: generated tests verify the correct behavior, so if they fail = bug confirmed, if they pass = not reproducible.

# Show issue details
e2e-runner issue https://github.com/org/repo/issues/42

# Generate test file via Claude API
e2e-runner issue https://github.com/org/repo/issues/42 --generate

# Generate + execute + report bug status
e2e-runner issue https://github.com/org/repo/issues/42 --verify

# Output prompt as JSON (for piping)
e2e-runner issue https://github.com/org/repo/issues/42 --prompt

Authentication: Uses gh CLI for GitHub and glab CLI for GitLab. All external commands use execFileSync (no shell injection). No new dependencies added.

Screenshot Hashes: From Dashboard to Claude Code in One Click

Every screenshot captured during a test run — whether from a screenshot action or an automatic error capture — now gets a short, deterministic hash identifier like ss:a3f2b1c9.

These hashes appear as clickable badges throughout the dashboard. Click the badge, and it copies ss:a3f2b1c9 to your clipboard.

Then paste it into Claude Code. The e2e_screenshot MCP tool resolves the hash, reads the file from disk, and returns the actual image — no file paths, no guessing.

# In Claude Code, just paste the hash
ss:a3f2b1c9
# → Claude sees the screenshot and can reason about it

How it works: The hash is the first 8 hex characters of the SHA-256 of the file’s absolute path. Computed identically on server (Node crypto) and browser (Web Crypto API), so hashes appear in the Live view before the run even finishes writing to SQLite.

When saveRun() writes results to the database, it registers every screenshot hash in the screenshot_hashes table within the same transaction. The run detail API includes a screenshotHashes map per test, and /api/screenshot-hash/:hash serves images by hash.

This closes the loop between visual test output and AI-assisted debugging.

SQLite Persistence

Every test run is persisted to a centralized SQLite database at ~/.e2e-runner/dashboard.db. WAL mode for concurrent access, dual-write to both filesystem (JSON) and SQLite for backwards compatibility.

Tables: projects, runs, test_results, screenshot_hashes with foreign keys and indices.

REST API:

  • GET /api/db/projects — list all registered projects
  • GET /api/db/projects/:id/runs — runs for a specific project
  • GET /api/db/runs/:id — full detail of a single run

Pool-Aware Queue

Before v1.1.0, launching more tests than the Chrome pool could handle caused connections to pile up, leading to memory pressure and SIGKILL’d Chrome processes.

Now, each worker checks the pool’s /pressure endpoint before opening a connection. If the pool is at capacity, the worker waits (polling every 2s, up to 60s) until a slot frees up.

Live Progress Events

Structured events via an onProgress callback system:

EventWhen
run:startRun begins (total tests, concurrency, project)
test:startIndividual test starts
test:actionEach action completes (success/error, duration)
test:retryFailed test is being retried
test:completeTest finishes with final result
run:completeSummary with passed/failed counts

Events power the dashboard’s real-time updates via WebSocket, with a buffer for reconnections.

New navigate Action

For SPAs where client-side routing doesn’t trigger traditional page load events:

{
  "type": "navigate",
  "value": "/dashboard/settings"
}

Uses a race pattern with a 5-second timeout. Supports absolute URLs and relative paths.

MCP Server: 8 Tools via stdio + HTTP

The MCP integration got a significant upgrade. Tool definitions are in a shared module, and the dashboard exposes the same tools via Streamable HTTP at /mcp.

ToolDescription
e2e_runRun tests (all, suite, or file)
e2e_listList available test suites
e2e_create_testCreate a new test file
e2e_pool_statusCheck Chrome pool status
e2e_screenshotRetrieve screenshot by hash
e2e_dashboard_startStart the dashboard
e2e_dashboard_stopStop the dashboard
e2e_issueConvert issue to E2E test

Quick Start

# One-liner: installs, scaffolds, starts pool, runs sample tests
curl -fsSL https://raw.githubusercontent.com/fastslack/mtw-e2e-runner/main/scripts/quickstart.sh | bash

Or step by step:

npm install -g @matware/e2e-runner
e2e-runner run --all
e2e-runner dashboard

Breaking Changes

None. Everything is backwards compatible. The only new runtime dependency is better-sqlite3.


Check the GitHub repo for full documentation and the npm package for installation details.

@matware/e2e-runner remains JSON-driven, zero-config by default, and now gives you a real-time dashboard, automatic bug verification from issues, and AI-powered screenshot debugging — all with first-class Claude Code integration via MCP.

Share
Next step

Ready to Start Your Project?

Let's discuss how technology can transform your organization. We offer technical consultations and custom solutions tailored to institutional requirements. Schedule a complimentary strategic session.

Get in touch
Free consultationNo commitmentFast response