9lives / Open-source Playwright tools

Agent fixes.
9l checks the change.

Your agent proposes a fix. Run the test, compare the results, and check what its assertions catch. Keep your Playwright suite and inspect the evidence locally.

Watch the 60-second launch film

No account needed · Apache-2.0 · macOS, Linux & Windows

Recorded experiment 13 Oct 2026
Same test. Two app revisions.

The test tells the
revisions apart.

Before the fixAssertion failed0636853e13
After the fixTest passed6e5f24ccd2

9l MCPconfirm_findingconfirmed

9l prove500 · 401 · malformed JSON3 faults caught

Seven Chromium executions on a synthetic profile app. Saved results; opening the demo does not run an agent.

Inspect the patch, logs, and receipts
Ordinary Playwright specsExplicit assertionsBounded local executionAttributable receipts

Start with the evidence

Five ways to look past a green test.

Follow a locator repair, find a missing assertion, or inspect a real agent run and checked application fix. Choose where to begin.

01

A renamed button

Repair a broken locator while keeping the original assertions.

02

A missing check

See how a green test can miss the outcome that matters.

03

Behind the agent

Follow observed controls, bounded actions, and execution receipts.

04

A real agent run

Inspect saved provider decisions and browser execution logs.

05

Prove the fix

Compare the same test before and after a fix. Then challenge it with faults.

The first three tabs explain the workflow. The last two show recorded execution. Full traces scroll, highlights stay easy to find, and evidence extracts are downloadable.

From a failure to a checked fix

Make each step earn its result.

9lives gives a coding agent execution tools. Your reviewed tests decide which behavior matters.

01

Reproduce the failure

Start with a reviewed Playwright spec and an assertion that fails on the broken application.

run_test
02

Review the change

Inspect the proposed application patch or locator repair. Keep the test’s intended behavior and assertions.

Your coding agent
03

Confirm the fix

Run the same reproduction on each Git revision in isolation. Inspect the failing result before and the passing result after.

confirm_finding · experimental
04

Challenge the test

Inject supported fetch/XHR faults and rerun. See which faults caused an assertion failure and which survived.

9l prove · experimental
A pass has a precise meaning.

A passing receipt means the test’s assertions passed and the execution report was validated. Confirmation shows the test distinguishes two revisions. A caught fault means an assertion failed under that fault. None establishes full requirement coverage.

Read the contracts and limits →

Use your own project

Keep your tests.
Add execution evidence.

The Go runner uses your project’s installed Playwright and configuration. The SDK is optional. You can run ordinary specs without an AI model or QualityMax account.

Native CLI v0.4.7 · x64 & ARM64 · Chromium qualified

01 / Install the CLI on macOS or Linux
curl -fsSL https://9lives.run/install.sh | sh
02 / Add the binary to PATH
export PATH="$HOME/.local/share/9lives-runner/bin:$PATH"
03 / Run one existing Playwright spec
9l run tests/checkout.spec.ts --timeout 2m --attempts 1 --format json

Replace the spec path with your own. Your project needs Playwright dependencies and browsers. Windows ZIP installation · Quickstart · Runnable example

Inside your coding agent

Connect the tools through MCP.

Native MCP exposes run, assess, heal, confirm, page inspection, and reproduction tools. Start a page check with scan_url. Use the QA skill for requirements and source provenance. Codex and Claude setup live in the agent guide.

Set up your agent →
Example / Claude Code
claude mcp add 9lives -- 9l mcp

Optional SDK: named steps and bounded goals. Goals still need explicit assertions; goal completion is unverified.

Read goal contracts →

Before the reproduction

Inspect the page. Find the next test.

One Chromium load gives nine categories of observations. inspect_page ranks controls and locators; generate_playwright_repro writes a reviewable spec for a finding.

console

JavaScript errors, warnings, and failed requests

links

Broken and redirecting links

accessibility

Alt text, control names, and heading structure

performance

LCP, CLS, TTFB, and FCP from one cold page load

seo

Page title and meta description

security_headers

CSP, HSTS, and browser security headers

cookies

Cookie flags, trackers, and tracking before consent

mixed_content

HTTP resources and forms on HTTPS pages

weight

Transfer bytes, requests, and oversized assets

Scan a public page
9l scan https://your-app.dev --format markdown

Scans are observations, not test results. Load timings are from one cold visit; INP is not measured. Authenticated pages need explicit consent, and loopback targets need --allow-private-network. Page-check guide →

What you can rely on

Working tools. Stated boundaries.

Available

Local execution & assessment

Plans, bounded runs, cancellation, terminal receipts, advisory static assessment, page checks, and native MCP. Existing Playwright specs stay usable.

Experimental

Healing, confirmation & fault testing

Supported locator repairs are verified in isolation. Confirmation compares revisions. Fault testing challenges fetch/XHR paths. The demo qualifies one synthetic app in Chromium.

Planned

Broader behavioral verification

Independent behavioral verification, verified replay, and native mobile qualification remain subsequent milestones. Other browser engines are unqualified.

Using the original Python package?

Python remains in maintenance mode for existing workflows, with no removal date set. Use Go for new Playwright projects. Check 9l --version when both distributions are installed.

uv tool install 9lives

Read the migration guide · Python source

Built by QualityMax

Local tools, connected to a wider workflow.

9lives is the open-source execution tool. Choose the other QualityMax tools when you need hosted management, a coding agent, or a separate quality review.

Featured in AI in QA — Issue #18. The original Python package is listed in awesome-python-testing.

See what the test actually caught

Follow the failure.
Inspect the fix.