11 steps saved as a draft scenario, failing request and screenshot attached.
POST /api/cart/promo code: SPRING20 (expired 2026-03-31) expected total $84.00 · got $67.20
Describe the flow in a sentence. Qodex drives the real app, brings back a screenshot of what broke, and saves the run as Playwright you own.
We now detect issues in staging instead of finding them after deployment.
Chat is the authoring surface. You say what to try, the agent drives a real browser against your app, and everything it did comes back as steps, screenshots and a test file. Replays are code, not model calls.
Go break my checkout flow. Try it as a logged-out user too.
Crawled 34 pages, 61 endpoints, logged in as a buyer and worked the promo path. One assertion failed. Here is what I found.
11 steps saved as a draft scenario, failing request and screenshot attached.
No recorder, no locators, no script. One line in chat is the whole brief.
A deterministic crawl finds every page. A real browser clicks through the flow, and every step is logged with a screenshot.
A real bug arrives with the failing step, the request that failed and a screenshot, so nobody has to reproduce it by hand.
Standard Playwright, parameterized per environment, synced to git and exportable. If you leave, the tests leave with you.
When the UI changes, Qodex proposes the updated scenario as a diff you approve. It never rewrites your test behind your back.
Every pull request runs the suite against its preview. Replays are generated code with no model in the loop, so the bill does not grow with the suite.
Every failure is classified before it reaches you. A real bug comes with a screenshot and the failing step. A stale test comes with a proposed fix as a diff. An environment issue (a preview that did not boot, a third party that timed out) is flagged and not counted as a failure.
One sentence in, seven tool calls, one failed assertion, and a finding with the screenshot and the failing request attached.
Go break my checkout flow. Try it as a logged-out user too.
11 steps saved as a draft scenario, failing request and screenshot attached.
POST /api/cart/promo code: SPRING20 (expired 2026-03-31) expected total $84.00 · got $67.20
Example run. Real findings from your own app replace these.
A stale test becomes a proposed diff, not a silent rewrite and not a red build.
Every page the crawl found, marked tested, untested or failing.
Screenshots at desktop, tablet and phone widths on every run.
One scenario, run against preview, staging or production by variable.
Every pull request, on demand, on a schedule, from CI, a deploy hook or a webhook.
Your app, your repo, your chat. Nothing to install in the app and no runner in CI.
The same agent that drives your UI reviews the pull request that changed it: static analyzers, a full read of every changed file, two frontier models, and live probes against the preview. A UI finding lands on the pull request with its screenshot, and the Check Run can hold the merge.
See AI code reviewqodex / ui 1 of 12 failed checkout-promo.spec.ts assert total recalculated · failed
Screenshot attached · cart-total-mismatch.png
Example finding. Real ones link to the pull request.
No SDK in your app, no runner in your CI. Qodex needs a URL and read access to the app under test.
Runs, screenshots and scenarios are encrypted in transit and at rest, and isolated per project.
Your screens, flows and findings are never used to train models.
Use your own model key if you prefer. Every token is logged, and replays use none.
“We now detect issues in staging instead of finding them after deployment.”
Anshuk K.
AI & Data Engineer
Verified G2 review“The no-code interface helps our whole integration team write and manage test cases, and drastically reduces the time spent on QA.”
Rishabh V.
AI Engineer
Verified G2 review“It lets our small team stay confident in releases without needing a dedicated QA resource.”
Sameer C.
Software Engineer
Verified G2 reviewBy not running a model at replay time. A saved scenario is plain Playwright: the same steps, the same assertions, no model in the loop, so the same input gives the same result every run. When a run does fail, it is classified before you see it: a real bug, a stale test, or an environment issue such as a preview that did not boot. Only the first counts as a failure.
The test does not just go red. Qodex re-drives the flow, works out what moved, and proposes the updated scenario as a diff. You approve it or reject it. Nothing is rewritten behind your back, and the approved version is what runs next time.
Runs use Playwright browsers, Chromium first. Every run captures screenshots at desktop, tablet and phone widths, so a layout that breaks only on a phone shows up next to the desktop shot, not in a bug report a week later.
Everything the agent wrote. Each scenario is a standard Playwright spec, parameterized by environment variables, synced to your git repository and exportable at any time. There is no proprietary runtime and no recording blob. The tests run anywhere Playwright runs.
Authoring a scenario uses a model once. Replaying it uses none, so a replay costs $0 in model spend whether it runs on every pull request, on a schedule, or from a webhook. If you bring your own model key, every token spent on authoring is logged against it.
A recorder captures the clicks you made and replays them against selectors that break when the page changes. Qodex starts from a sentence, finds every page with a deterministic crawl, drives the flow in a real browser, and saves the result as Playwright you can read and edit. When the page changes it proposes the fix as a diff instead of failing, and every failure arrives with the screenshot and the step that failed.
Something else? Get in touch
Install the GitHub app, point Qodex at your staging URL, and the next pull request gets tested before it merges.
UI run against the preview: 1 of 12 scenarios failed. Checkout applies an expired promo code. Failing step, request and screenshot attached below.