Glossary
By Arni Mittal, Founder of Zerocheck
A QA agent is software that tests a running application the way a person would. It reads a plain-English step, looks at the live page, chooses an action, performs it in a real browser and checks the outcome, recording evidence for every step. It performs testing work; it does not own quality.
Coding agents now write more code than a team can check by hand, and selector-based suites break on the first refactor. A QA agent absorbs the two costs that stall end-to-end testing: writing the automation and keeping it working. The useful buying question is which work the agent performs and what evidence it produces. Requirements, fixtures and release decisions stay with people.
Teams evaluate a QA agent on one real flow with an explicit expected outcome. They read the generated test, run it twice, introduce a deliberate failure and check that the result explains what happened. They also ask what the agent needs from them: a URL and a test account, or repository access and preview deployments.
Zerocheck is a QA agent for web apps. You describe a flow or import your release checklist; it drafts one test per item, runs it in Chromium and records the evidence. A model proposes one action at a time from a screenshot and the accessibility tree, and a controller checks the target and permissions before the browser executes it. Expected outcomes stay fixed. Healing re-identifies an equivalent target and is saved only after the whole test passes again; it never changes an assertion to make a test pass.
Start in the web app with a hosted browser, or use the CLI on your machine, in GitHub Actions or through MCP from Claude Code or Cursor. Tests are plain YAML you own.
A QA agent does four things on every step, and a good one shows its work for each of them:
It does not decide what to test, invent expected outcomes, create test accounts, seed data, or judge whether a failure is a bug or a bad requirement. When a product page promises "no tests to write or maintain", ask which of those jobs moved to the agent and which quietly moved to you.
| You supply | The agent produces |
|---|---|
| A reachable URL: localhost, staging or production | One test per flow or checklist item, as readable steps |
| A flow in plain English, or a release checklist | A run with a verdict per step: passed, failed, flaky or incomplete |
| A test account and any test data, such as a Stripe test card | A screenshot for every step, and a recording when no credentials are involved |
| The origins it may interact with, such as an embedded payment frame | A heal record with the old target, the new target and its validation state |
| An expected outcome for each flow | A pull request comment or a CLI exit code your merge policy can gate on |
Nothing on the left is optional. A QA agent that starts without an expected outcome is exploring, not testing.
Vendors describe very different products with the same two words. This ladder sorts them by what the agent decides on its own.
| Level | What the agent does | Who owns the outcome | Examples, 21 September 2026 |
|---|---|---|---|
| Assist | Drafts steps or code from a description or a recording; a person runs them | The person | Recorders, code generation in an IDE |
| Run | Executes readable steps in a real browser and records evidence per step | The test author | Zerocheck, Momentic tests |
| Heal | Re-identifies a moved target and keeps the test passing without changing its assertions | The test author, with the heal recorded | Zerocheck, Momentic auto-heal |
| Explore | Picks its own flows from a brief or from the codebase and reports the bugs it found | The agent proposes, a person confirms | Momentic's Mo, Autonoma's generated suites |
Zerocheck sits at run and heal. Exploration is useful for bug bashes. It does not replace the release checklist your team already trusts, because it cannot know what the product is supposed to do.
A leading Australian telehealth company sells medical certificates through a multi-step form: leave type, symptoms, patient details, address, review, then payment in an embedded Stripe checkout. The release checklist item reads "a new patient can request a certificate and pay". This is the test Zerocheck is running for it, with Stripe's public test card and a fresh identity on every run; the final step names the app's own confirmation label. The environment names the app URL; the embedded payment frame needs no origin configuration.
# zerocheck.yaml
environments:
staging:
url: https://staging.example.com/request/medical-certificate
# checks/certificate-purchase.yaml
version: zerocheck/v1
name: New patient requests a certificate and pays
description: Staging only. Public Stripe test card. Fresh identity on every run.
steps:
- Navigate to {{app_url}}
- Verify text "Medical Certificate Request" is visible
- Click "Sick Leave"
- Click "Work"
- Click "Continue"
- Click "Common cold or flu"
- Click "Continue"
- Verify text "Leave Details" is visible
- Click "Continue"
- Enter "Automated test request with fictional data." into "Share a few details"
- Click "Continue"
- Enter "{{unique_email}}" into "Email"
- Enter "Zerocheck" into "First Name"
- Enter "Test" into "Last Name"
- Enter "01/01/1990" into "Date of Birth"
- Enter "0491570006" into "Mobile Number"
- Click "Continue"
- Enter "1" into "Street Number"
- Enter "Test Street" into "Street Name"
- Enter "Sydney" into "City/Suburb"
- Select "New South Wales" from "State/Territory"
- Enter "2000" into "Postal Code"
- Click "Continue"
- Verify text "Review Your Details" is visible
- Click "Continue"
- Verify text "Payment" is visible
- Verify text "Test Mode" is visible
- Enter "4242424242424242" into "Card number"
- Enter "12 / 34" into "Expiration"
- Enter "123" into "CVC"
- Enter "Zerocheck Test" into "Cardholder name"
- Click "Subscribe"
- Verify text "Request submitted" is visibleEvery step gets a screenshot, and the test finishes passed, failed, flaky (passed after a transient retry) or incomplete. If a control on the app's own pages moves, the heal is recorded with its old and new target and stays pending until the whole test passes again; targets inside the payment frame are re-identified on every run instead. If the provider's bot protection blocks the frame, the run does not pass, and the step's screenshot and recorded error show why instead of a silent timeout. A pass after a transient retry is labeled flaky, never hidden. The run verdict is what the merge policy gates on: the CLI exits non-zero and one pull request comment is updated.
As of 22 September 2026 the card step of this flow is being verified against the provider's embedded frame; the recorded run will be published here when it passes. Third-party payment processing, 3D Secure challenges and webhooks stay outside the browser test. Read how to test Stripe checkout before release for the full checklist.
| Test framework (Playwright, Cypress) | Managed service (QA Wolf) | Coding agent with Playwright MCP | Generated suite (Autonoma) | QA agent (Zerocheck) | |
|---|---|---|---|---|---|
| Who writes the test | Your engineers, in code | Their engineers on the managed service; your team from prompts on the Platform | The agent, ad hoc, in a chat | Their planner, from your repository | You, in plain English or from a checklist |
| Who maintains it | Your engineers | Their engineers | Nobody; each session starts over | Their agents | The agent heals targets; you own outcomes |
| Evidence per step | Screenshots on failure by default; traces if you configure them | Reports and videos | Whatever the chat kept | Videos and screenshots in the pull request | Screenshot, verdict and heal record per step |
| Repeatable in CI | Yes | Yes, on their runners | Not without export | Yes, per pull request | Yes: locally, in GitHub Actions or hosted |
| Needs from you | Framework skills and CI time | Specs and access | An MCP setup and supervision | Repository access, a GitHub App, preview deploys and a data-seeding endpoint | A URL, a test account and the flows |
| Cost basis, sources read 16 to 21 September 2026 | Engineering time | Platform at 1¢ per AI credit and 15¢ per runner minute; Coverage as a Service custom-priced | Model tokens and your time | 100K free credits, then US$100 per 150K credits; self-hosted free | Free tier with onboarding, then US$500 a month |
The rows buyers ask about first are the last three. If you cannot grant repository access or do not have preview deployments, a codebase-driven suite is not available to you yet. If you need a pass you can replay next week, a chat session with a browser is not a test.
No. AI test automation covers any use of a model in testing, including generating code for a framework. A QA agent acts in the browser itself, step by step, and records evidence. The difference shows up in maintenance: generated Playwright code still breaks on selectors.
It replaces the clicking-through and the selector maintenance. Someone still decides what the product must do, prepares test accounts and data, and reads failures. Teams without a QA function get a repeatable release check; teams with one get their time back for exploratory work.
Yes on the app's own pages, using Stripe test mode and public test cards; interaction inside the embedded card frame, with its origin allowed, is being verified. Provider processing, 3D Secure challenges, webhooks and settlement need separate checks.
Zerocheck needs a URL it can reach, a test account and the flows to check. It does not read your repository. Products that generate tests from code need repository access and usually a preview deployment per pull request.
Look at the step evidence: each step's screenshot and the action taken, plus any retry or heal. Zerocheck labels a pass after a transient retry as flaky and saves a heal only after the whole test passes again with the new target.
A QA agent re-identifies the target from the step's description rather than a selector. Zerocheck records the old and new target and keeps the heal pending until the complete test passes again. If the expected outcome itself changed, that is a one-line edit you review.