self-healing e2e smoke tests

Write the test.
Skip the code.
Sleep at night.

Describe what a user does. Testy turns it into a real Playwright test, runs it from your CI, and fixes it when your frontend team ships on a Friday.

No credit card Sign in with GitHub Real, editable Playwright
Password resetpassed
Checkout with couponpassed
test · Add to cart running healing passed · 4.2s
“Log in, add a blue mug to the cart, and check out.”
open home, click Sign in0.4s
fill credentials from {PASSWORD}0.9s
find Blue Mug, add to cart1.7s
checkout — assert order confirmed1.2s
healedButton was renamed to “Add to bag”. Selector updated, assertion untouched.
  • describe
  • generate
  • verify
  • run
  • heal
  • repeat
01 · features

Everything a smoke test needs.
Nothing it doesn’t.

No test-framework wall of text. Just what breaks, what doesn’t, and who fixed it.

A sentence in, a Playwright script out

Describe the journey the way you’d tell a new teammate. An agent opens your site in a real browser, writes real Playwright, and runs it until it passes.

export default async function test(ctx) { await ctx.step('Add a mug', async () => { await page.getByRole('button', { name: 'Add to cart' }).click() await expect(page.getByText('1 item')) .toBeVisible() }) }

Self-healing, with a conscience

Flaky gets made deterministic. Broken selectors get repaired. But if the scenario can’t be done by hand any more, the test stays red and tells you why — we never soften an assertion to get green.

// heal · break_fix · 03:12 page.click('#buy-now')page.getByRole('button', { name: 'Buy now' }) // assertions: unchanged ✓

Secrets stay secret

Write {PASSWORD} once. It’s resolved inside the runner — the model only ever sees the name.

{PASSWORD} ••••••••

CI in one URL

One curl in your pipeline. Results stream as they land, then a clean exit code.

$ curl …/api/v1/run?token=… {"test":"Checkout","status":"passed"} {"test":"Login","status":"passed"}

Login before test

Flip it on, say who signs in, and every run starts from an authenticated session.

Login as {LOGIN_USERNAME}

Asks instead of guessing

Ambiguous prompt? The agent stops and asks you — right in the app.

Which “Save” — header or modal?
The modal one.

30-day history & flakiness radar

Every run, every screenshot, every trace. Plus a flakiness score so you see which tests are wobbling before they fall over.

Checkout with coupon18% flaky
Password reset0%

Every script is a version

Generated, healed, or hand-edited — diff it, restore it, audit exactly what changed.

v3healed3am
v2editedyou
v1generatedagent

Environments

Staging, preview, prod — same test, different base URL, per-environment secret overrides.

productionshop.example
stagingstaging.shop…
previewpr-412.shop…
02 · how it works

A loop, not a pipeline.

Tests don’t stay written. That’s the whole problem — so the last step feeds the first.

1

Describe

A sentence or two about what a user does. Optionally: who logs in.

2

Generate & verify

The agent explores your site in a real browser, writes the script, and runs it until it passes.

3

Run

From the dashboard or with one curl in CI. Results stream in, screenshots and traces attached.

4

Heal

Flaky gets fixed. Broken gets diagnosed. Nothing gets watered down. Back to step 3.

Fewer 2am pages about a login button nobody moved on purpose.

A new teammate ships their first smoke test in minutes, not a sprint.

Cheaper than a QA contractor’s coffee budget. We checked.

03 · pricing

Start free. Pay when it’s earning its keep.

Every plan has every feature. You’re only ever paying for more targets, more tests, more runs — and, on Team, more people.

Free
For side projects and “let’s see if this thing is real”.
$0
No card. No trial clock.
3targets
30tests
300runs/mo
  • Every feature, nothing gated
  • Self-healing included
  • CI endpoint & API token
Start free
Most picked
Plus
For one person who’d like to stop babysitting CI.
$19/month
Billed monthly, cancel any time.
5targets
50tests
1,000runs/mo
  • Everything in Free, bigger limits
  • Same healing, same CI endpoint
  • Cancel any time
Get Plus
Team
For a shared workspace where everyone can add a test.
$19/seat · month
Minimum 3 seats. Limits are per workspace.
10targets
100tests
1,000runs/mo
  • One shared workspace, one bill
  • Invite teammates, add seats as you grow
  • Everything in Plus
Get Team
every plan Self-healing CI endpoint Environments & secrets 30-day history & flakiness score Version history Login before test Ask-me-if-unsure
Have a gift code? Redeem it after signing in. Refunds, no questions asked.
04 · kind words

Extremely real feedback from extremely real people.*

“I used to write Playwright selectors by hand. I now write poems.”

QAA recovering QA engineer*

“It fixed a test at 3am and didn’t even wake me up. Rude, honestly.”

CTCTO, a startup that exists*

“Our flaky tests are now just… tests.”

CISomeone who stopped rerunning CI*

“Testy asked me a clarifying question. My coworkers never do.”

SDSenior developer, 14 open PRs*

“10/10, would {PASSWORD} again.”

??Anonymous, security team unaware*

“Our onboarding doc now just says “ask Testy”.”

EMEngineering manager, mildly concerned*

* Every one of these people was made up by us, with love. Want to be the first real one? We’re listening.

05 · faq

Questions people actually ask.

Grouped so you can skip straight to the part you’re suspicious about.

Getting started
Do I need to know Playwright?

No. You describe what a user does; Testy writes the Playwright. If you do know it, you can open every script, edit it, and save it as a new version.

What’s a target, what’s an environment?

A target is one of your apps: a base URL plus its secrets. Environments are variants of it — staging, preview, production — each with its own URL and secret overrides. Every test runs against any of them.

What if the agent gets it wrong?

It verifies the script against your real site before handing it back, and asks you a question when a prompt is ambiguous instead of guessing. If it still misses, edit the prompt or the code and regenerate.

Healing
What counts as flaky vs. broken?

Flaky: same code, sometimes passes, sometimes fails. We make it deterministic and re-run the fix three times before we trust it. Broken: fails every time. We only repair the test if the scenario still works by hand — otherwise it stays red and we tell you why.

Will it ever weaken a test to make it pass?

No. The break-fix agent is forbidden from loosening assertions. If the only way to green is a weaker check, it gives up and flags the app as broken instead.

How often does healing run?

After every manual or CI run we look at the last ten. If a test qualifies, at most one healing session per test per day is started, and those runs don’t count toward your quota.

Security
Are my secrets safe?

Encrypted at rest with AES-256-GCM. The model only sees placeholder names like {PASSWORD}; values are substituted inside the runner and scrubbed from every log and tool output before anything reaches an LLM.

Where does my code run?

Generated scripts never execute in the app. They run in isolated Chromium runners that hold no database and no keys — only the secrets for the run at hand.

Which browsers?

Chromium today. Firefox and WebKit are on the roadmap.

Billing
What counts as a run?

Any manual or CI-triggered execution of one test against one environment. Retries within a run and healing runs are free.

Which plan should I pick?

Start on Free. Move to Plus when you outgrow 3 targets, 30 tests, or 300 runs a month. Pick Team when more than one person needs the same workspace.

Refunds? Cancelling?

Cancel any time, refund of the current period on request, no questions asked. Gift codes are redeemed after signing in.

Write the test.
Skip the code.

Your first smoke test is a sentence away. The free plan is free forever, not free until Thursday.

300

runs a month on Free. Healing runs don’t count.

Never watered down

Broken app? The test stays red and tells you.

curl …/api/v1/run?token=…

That’s the whole CI integration.

Team ready

One workspace, one bill, everyone adds tests.