CheckBefore merge
Discount accepted. Full price at checkout.
A shopper applies SPRING20 to a $100 order. “Discount applied” appears, but the total stays at $100 instead of $80.
Impact
Shoppers are asked to pay more than promised.
CLI 0.1.9 is out. Get started →
Zerocheck is an AI QA engineer that tests your app end to end. Verify critical flows and find bugs before you ship.
Arni, the founder, sets up your E2E tests on the call. Free trial, then $500 a month.
zerocheck/tests/checkout.yaml
acme-shop
1version: zerocheck/v12name: Discount code reaches confirmation3blocks_merge: true4steps:5 - Navigate to /cart6 - Enter "SPRING20" in the discount field7 - Click Apply8 - Verify "Discount applied" is shown9 - Pay with the test card ${TEST_CARD}10 - Click Place order11 - Verify "Order confirmed" is shown
app.tryzerocheck.com/runs/run_8f3k2q
Check results
FailedDiscount code reaches confirmation
Environment staging · Browser local · Attempt 1 · Screenshots 7
Acme Shop
Built for teams shipping with
Start with the journey that failed. Turn it into a saved test with an explicit expected outcome and run it before the next relevant change goes live.
See how to prioritize revenue flows →Run the critical browser checks as part of releasing instead of another sign-off: the exit code gates the merge, with the evidence in the pull request.
See browser tests in CI →Describe the intended behavior once; every release is checked against it, with the evidence to show what changed.
See how to test product requirements →Coding agents write more code than your team can check by hand. Selector-based test suites break on the first refactor, and each flaky failure sends an engineer to triage instead of to the next change.
Read how teams test without a QA team and run end-to-end tests without QA.
of testing budget goes to maintaining brittle tests.
World Quality Report
Zerocheck drafts, runs, and heals your end-to-end tests, so your team catches bugs without babysitting a test suite.
01
zerocheck/tests/signup.yaml
version: zerocheck/v1 name: Signup creates a workspace blocks_merge: true steps: - Navigate to /signup - Enter "${EMAIL}" into the Email field - Click Create workspace - Verify "Welcome" is shown
Human-readable tests, kept in the web app or as YAML files in your codebase. No XPath or CSS selectors to maintain.
Learn more →02
.github/workflows/zerocheck.yml
- run: npx zerocheck run --env staging - run: npx zerocheck report --file .zerocheck/latest-run.json if: always() ✓ zerocheck (pull_request) Successful in 1m 21s
Run anywhere with a single CLI command. Integrate with any pipeline that can run Node.js, gate every pull request, or run in a hosted browser from the web app.
Learn more →03
zerocheck import
$ npx zerocheck import release-checklist.md Checklist import 7c1e4b: completed verified passing Signup creates a workspace verified passing Invite a teammate could not run Export invoices as CSV
Paste the checks your team does by hand, in the web app or with one command. Each item becomes a human-readable test with a real browser result. Start here if your checks already live in a document: no frameworks to learn, no scripts to maintain.
Learn more →04

When a target moves, the test re-resolves it from the step's description and records the old target and the new one. A heal is saved only when the whole test passes with independent evidence; otherwise it stays pending. Real regressions remain failures.
Learn more →05

A failed test shows the exact step, its screenshots, console errors and every attempt, in the web app, the CLI and one PR comment. A pass after a transient retry is marked flaky, never hidden.
Learn more →Catch them before they reach production. Nobody writes or maintains a script.
Nothing to script. First tests running in just a couple of minutes. Your current release checklist can become your test suite.
Describe a flow, or paste the release checklist your team clicks through by hand. Each item becomes a test you can read, in the web app or as YAML in your repo. No XPath or CSS selectors.
version: zerocheck/v1
name: Add Buy milk todo
blocks_merge: true
steps:
- Navigate to /todomvc/
- Enter "Buy milk" in the new todo field
- Press Enter
- Verify it appears in the listOne command on your laptop or in GitHub Actions, or run it in a hosted browser from the web app.
npx zerocheck run --env stagingMake the tests a required check: a blocking failure exits non-zero and stops the merge, and the same tests run against staging or production before you deploy.
$ npx zerocheck run --env staging
FAIL Discount code reaches confirmation
exit 1: blocking failure, merge blocked
I spent years watching the same pattern repeat across teams: add Playwright tests → a redesign breaks half of them → nobody fixes the selectors → tests get commented out → production breaks six weeks later. The tests failed because they depended on selectors that changed during redesigns.
Zerocheck starts from the checklist your team already trusts. Each item becomes a plain-English test with a real result. When the UI moves, the test finds the new target and shows you what changed. When the flow breaks, you get the failing step, not a green check.
Book a call and I’ll set up your first tests with you, on your app.
Unit tests catch code issues. They miss a broken checkout, or a CSS change that hides the buy button. The manual click-through your team still does is the QA run Zerocheck automates.
Someone has to wire it into CI, write the selectors, and fix them every time the UI changes.
Navigation, key presses, URL checks, quoted-text checks and targets a passing run already proved run without a model. The AI finds targets that aren’t proven yet and judges plain-English Verify steps; it never clicks. A transient error is retried once in the same browser, and a pass after that is labeled flaky. Assertion failures are never retried.
Playwright MCP gives your coding agent a browser. Zerocheck gives it a test suite: the same MCP server writes and runs tests from coding agents such as Claude Code or Cursor, runs them in CI, and posts results to the PR.