How it works

Follow one real run, artifact by artifact.

Our whole pitch is verifiable proof — so this page shows you the proof. Everything below is pulled straight from a real, already-merged run on an open-source app, not a mock-up. You never have to trust the agent. You only have to check the artifact it leaves behind.

$ npx @omea/cli run booted the app in an isolated VM authored a candidate against an uncovered route kept it — coverage moved (31 strictly-new lines) evidence: .omea/last-run/coverage.md

Why an artifact, not a checkmark

The agent that wrote the change doesn't get to grade it.

"Claude will often just update the tests to no-op so tests passing isn't trustworthy." A green checkmark from the same agent that wrote the code is a self-report. An artifact you can re-open, re-run, and re-hash is not.

So instead of asking you to believe a run happened, Omea hands you the things a run produces — a kept Playwright test, the coverage lines it newly touched, a sealed evidence bundle, and a weekly report where every number points back to one of those files. Walk the chain below; each piece is from the same real run.

Step 1 — the app boots itself

Your repo boots in an isolated microVM, zero config.

A read-only GitHub App connects the repo — you pick which ones, we never push. In the run shown here, boot-engine started vercel/next.js's examples/blog-starter in a KVM microVM from a clean node_24-bookworm snapshot and served it inside the guest, with dependencies and environment wired automatically. Nothing to stand up on your side, and each candidate test runs in its own forked VM, so one test can never leak state into another.

Step 2 — the tests you keep

An agent writes tests, but a test is only kept when it covers new lines.

Coverage is measured by watching the app actually run, never by static analysis. The agent picks an uncovered route, writes a plain @playwright/test file, and the run keeps it only if it moved coverage. This is the exact spec kept from our own run on the Next.js blog-starter example — stock-runnable with npx playwright test, no proprietary runner:

const { test, expect } = require("@playwright/test");

test("omea blog starter visits post and returns home", async ({ page }) => {
  await page.goto(process.env.OMEA_APP_URL || "/");
  await expect(page.getByRole("heading", { name: /Blog\./ })).toBeVisible();
  await page.getByRole("link", { name: /Dynamic Routing and Static Generation/ }).first().click();
  await expect(page).toHaveURL(/dynamic-routing/);
  await expect(page.getByRole("heading", { name: /Dynamic Routing and Static Generation/ })).toBeVisible();
  await expect(page.getByText(/Lorem ipsum dolor sit amet/).first()).toBeVisible();
  await page.getByRole("link", { name: "Blog", exact: true }).click();
  await expect(page.getByRole("heading", { name: /Blog\./ })).toBeVisible();
});

It was kept because it added 31 strictly-new covered lines across 5 files — including the posts/[slug] page chunk and the post document, exactly the surface a "visit a post" test should newly cover. That is not our summary of the run; it is the run's own coverage-delta.json:

{
  "schema_version": 1,
  "strictly_new_covered_lines": 31,
  "files": {
    ".../chunks/node_modules_next_dist_1ybzpk2._.js": [2706, 2710, 2731, 2735, 3100, 3101, 3102, 3103, 3104],
    ".../chunks/node_modules_next_dist_client_0r5nbpw._.js": [8018, 8019, 13421, 13422],
    ".../react-server-dom-turbopack_164kp-6._.js": [1409, 1410, 2438, 2439, 2440, 2441, 2491, 2492, 2493, 2494, 2498, 2499],
    ".../chunks/src_app_posts_%5Bslug%5D_page_tsx_1pwrm9a._.js": [1, 2, 3, 4, 5],
    "http://127.0.0.1:3000/posts/dynamic-routing": [1]
  },
  "before_summary": { "coveredLines": 12952, "fileCount": 25, "testCount": 1 },
  "after_summary":  { "coveredLines": 12983, "fileCount": 27, "testCount": 1 },
  "full_files_sha256": {
    "coverage-before.json": "1a17ee23...",
    "coverage-after.json":  "218d7936..."
  }
}

A candidate that moves no new line is discarded, not kept. "Coverage went up" here means specific, listed lines — you can open the file and count them.

Step 3 — the evidence bundle

Every run seals into one file you can verify offline.

omea report packages a completed run into a single replayable artifact, evidence-<run-id>.tar.zst. It is just a directory you can open:

manifest.json      version, repo, commit, tool versions, a SHA-256 for
                   every payload file, and an honest missing[] list
verdicts.ndjson    the full run output stream, copied byte-for-byte,
                   never re-serialized
coverage/          raw before/after coverage JSON, plus the delta.json above
kept-tests/        the kept Playwright specs, exactly as recorded
artifacts/         traces, screenshots, videos when the run produced them
README.md          offline instructions to verify the bundle and replay

Then anyone can check it, with us nowhere in the loop:

$ omea report evidence-<run-id>.tar.zst

The integrity idea in one sentence: a SHA-256 is a fingerprint of a file — change a single byte and the fingerprint changes completely. The bundle records the fingerprint of the raw before/after coverage (1a17ee23..., 218d7936...), so anyone can re-hash those files and confirm the delta above was not edited after the run.

How to verify a bundle offline and replay it in the dashboard →

Step 4 — the weekly report

Countable deliverables, every number citing a bundle.

The weekly pilot report is deliberately boring: each row is a count, and each count names the exact artifact field it is read from — never an agent's summary of its own work.

Report rowWhat it reportsRead straight from
Tests added this weekCount + the new test titlesreport/coverage.jsontests[].title, set-diffed against last week
Coverage deltaExecutable lines covered, this week vs lastreport/coverage.jsonsummary
FlakinessFlaky (passed on retry) vs failingnpx playwright test --reporter=json, stock Playwright
Behavioral-audit flagsNew flags, each linking its filed issuethe audit pass — "none filed this week" when none
Next week's targetsThe uncovered targets selected nextreport/coverage.md — its !-marked lines

Every artifact link in the report is one click from its evidence, so the buyer verifies the file, not our description of it.

Step 5 — honesty is the feature

We treat fabricated evidence as the one unacceptable outcome.

Absent data is reported absent

If a run produced no coverage, no kept tests, or no traces, the bundle's missing[] list records the path and the honest reason. Week one of a pilot has no prior week to diff against, so the report states the starting baseline — it does not invent a delta.

Failing candidates are discarded

A test is kept only if it actually passes in the guest. In an earlier attempt of this very run, a candidate with a wrong selector failed and produced no kept test — the pipeline rejected it instead of keeping an inflated result.

We label our own limits

The authoring step in this run used a stubbed reply, so its cost is real but meaningless ($0.00006) — and we say so, rather than dressing a plumbing test up as a claim about live-model quality.

Where this fits

Read next.

For coding agents

Why "tests passing" stopped being trustworthy, and what a verdict loop fixes.

Omea vs QA Wolf

Service-wrapped human QA versus an artifact you can re-run yourself.

Omea vs testRigor

Plain-English test authoring versus tests you keep in your own repo.