Retracio

AI test automation tool for macOS and Windows

Retracio turns your manual web testing into E2E tests that follow your conventions

For QA engineers and developers who own E2E. Record a manual run in the desktop app and get a plain Playwright spec in TypeScript or JavaScript, written into your repository.

product preview

Why the test automation backlog keeps growing

Manual testing does not scale with the product

Before every release someone walks through the same login, checkout and search scenarios by hand. The scenario count grows with each shipped feature, while the hours in a sprint stay fixed. Scenarios that nobody had time to automate stay manual, and that test automation backlog is where regressions wait until a customer reports them.

Generated tests do not pass code review

Recorded and AI-generated tests arrive with inline CSS paths, hard-coded waits and their own naming, while the repository already has page objects, fixtures and a lint config. A reviewer either rewrites the file to match or merges code the team will not maintain. The generator saved recording time and moved the same work into review.

E2E test maintenance eats the team's time

UI tests break when the UI changes: a renamed button, a moved form or a new loading state fails a locator that pointed at a div path. In a published study of record-and-replay suites, 73% (source) of breakages were caused by locators. A recorded test rots as soon as the screen it captured moves on, and a self-healing run that rewrites the locator without a review leaves nobody sure what the test checks now.

How does AI test generation work here?

Four steps take a scenario you already test by hand and generate E2E tests from that manual testing, ending with a Playwright spec that runs in your pipeline.

Step 1: Run the test by hand

  • You open Retracio, start a session and walk through the scenario in the browser: navigate, click, type, and mark what should be true on each screen.
  • The app records each action with the element it resolved and the checks you marked, preferring role, label and test-id locators over generated CSS paths.
  • Result: a recorded run stored on your machine, with stable locators and explicit expectations.
product preview

Step 2: Point the app at the repository

  • You select the project checkout and the E2E test folder.
  • The app scans the repository for framework, page objects, fixtures, naming and assertion style, then sends the recorded steps, trimmed DOM snapshots and excerpts of that profile to the LLM through your API key; source code never leaves the machine.
  • Result: a draft test in the repository's style, beside similar tests, reusing existing page objects and fixtures.
product preview

Step 3: Review the generated test

  • You read the draft as a diff, adjust a name or an assertion, and run it locally.
  • The app runs the test with Playwright against the same application, shows pass or fail per step, and regenerates only the failing step when asked, leaving the rest untouched.
  • Result: a passing spec file that reads as if the team wrote it and passes code review without a rewrite.
tests/e2e/checkout.spec.ts
import { test, expect } from "../fixtures/test";
import { CartPage } from "../pages/CartPage";

test.describe("checkout", () => {
  test("adds an item and updates the cart total", async ({ page, signedIn }) => {
    const cart = new CartPage(page);

    await page.goto("/catalog");
    await page.getByRole("button", { name: "Add to cart" }).first().click();
    await page.getByRole("link", { name: "Cart" }).click();

    await expect(page.getByRole("heading", { name: "Your cart" })).toBeVisible();
    await expect(cart.row("Standing desk")).toBeVisible();

    await page.getByLabel("Quantity").fill("2");
    await expect(page.getByTestId("cart-total")).toHaveText(await cart.sumOfRows());
  });
});
example output

Step 4: Commit and run in CI

  • You commit the file to a branch and open a pull request as usual.
  • The app stays out of the way: the test is plain Playwright with no Retracio runtime, plugin or dependency. If the repository has no E2E job, it offers a snippet for GitHub Actions or GitLab CI.
  • Result: the test runs in the existing pipeline; the manual scenario now runs on every push.
product preview

How to review AI generated tests without rewriting them

Generated tests usually fail code review for reasons unrelated to whether they pass: selectors inline, no fixtures, wrong folder. Retracio scans the local checkout before it writes anything and builds a conventions profile from what is already there.

Structure. The scan finds where E2E tests live and how files are named. The generated spec goes next to similar tests under the same name pattern.

Locators. Existing tests show which locator style the team accepts: roles, labels, test ids, or a data-testid prefix. Every element from the manual run is resolved to that style, with CSS or XPath only when nothing else matches.

Fixtures. Custom test fixtures for login, seeded data, or an authenticated page are detected and reused, so the generated test starts from the same setup as the rest of the suite.

Page objects. When the repo already has a page object for a screen the tester walked through, the test imports it. A new one appears only for a screen the repo has never covered, in the same shape as the existing ones.

Style. Assertion style, lint and formatter config, and custom helpers are read from the repo. The output passes the same checks as tests the team wrote by hand, and every check the tester marked during the run becomes an explicit expect on an outcome.

Below is the same checkout scenario written without the conventions profile and with it. Both files are illustrations and carry the example output label.

before: tests/generated/checkout.spec.ts
import { test } from '@playwright/test';

test('test 1', async ({ page }) => {
  await page.goto('http://localhost:3000/login');
  await page.fill('#email', 'user@example.com');
  await page.fill('input[type="password"]', 'secret');
  await page.click('#btn-3');
  await page.waitForTimeout(3000);
  await page.click('//div[@class="cart-row"][1]/button');
  await page.waitForTimeout(2000);
  await page.click('.checkout-footer > button.primary');
  await page.waitForTimeout(3000);
  await page.click('#btn-7');
});
example output
after: e2e/checkout/place-order.spec.ts
import { test, expect } from '../fixtures';
import { CartPage } from '../pages/CartPage';
import { CheckoutPage } from '../pages/CheckoutPage';

test.describe('checkout', () => {
  test('places an order from the cart', async ({ authedPage }) => {
    const cart = new CartPage(authedPage);
    await cart.goto();
    await cart.removeItem('Blue hoodie');
    await expect(cart.total).toHaveText('$24.00');

    await cart.proceedToCheckout();
    const checkout = new CheckoutPage(authedPage);
    await checkout.placeOrder();

    await expect(authedPage.getByRole('heading', { name: 'Order confirmed' })).toBeVisible();
    await expect(authedPage.getByTestId('app-order-number')).toBeVisible();
  });
});
example output

What happens between the manual run and the merged test

Eight things the desktop app does so that AI generated Playwright tests arrive in review looking like the rest of the suite.

Follow the repository's conventions

Before writing a line, Retracio reads how existing tests are structured, named, and asserted and builds a conventions profile from them. The generated test lands in the same folder pattern, uses the same fixtures and helpers, and passes the same lint and formatter config.

Reuse the page objects already in the repo

When the repository has a page object or helper for the screen the tester walked through, the generated test imports it instead of duplicating selectors inline. New page objects appear only for screens the repo has never covered, shaped like the existing ones.

Pick locators that survive a redesign

Every element the tester touched is resolved to a role, label, or test-id locator, with CSS or XPath used only when nothing better exists. If the repo has its own locator convention, such as a data-testid prefix, the generated test follows it.

Turn marked checks into assertions

During the manual run the tester marks what should be true on each screen, and each mark becomes an assertion in the generated test. The output verifies outcomes on every screen, so a green run means the scenario worked.

Run everything on your machine

The browser, the recording, the repository scan, and the test execution all happen locally inside the desktop app. Recorded steps, trimmed DOM snapshots, and excerpts of the conventions profile go to the LLM through your own API key; source code, cookies, and credentials stay local.

Keep code you own

The output is a plain Playwright spec with no Retracio import, plugin, or runtime, so it runs in your CI exactly like the tests you wrote by hand. Uninstall the app tomorrow and every generated test keeps working.

Regenerate a single failing step

When a step fails on review, only that step is regenerated and the rest of the file stays untouched, including edits the tester already made. The diff on the review screen shows exactly what changed and nothing else.

Bring your own model key

The LLM is called through an API key you provide, so there is no per-test pricing and no vendor-side store of your sessions. Model cost is visible per generated test on the review screen and stays with the provider you already use.

What it works with

Retracio writes Playwright tests in TypeScript or JavaScript today, with Cypress and WebdriverIO planned. The app runs on macOS and Windows. Generated tests run in GitHub Actions and GitLab CI like any other file in your repository.

FrameworksPlaywright; Cypress (planned), WebdriverIO (planned)
LanguagesTypeScript, JavaScript; Python (planned), Java (planned)
PlatformsmacOS, Windows
CIGitHub Actions, GitLab CI; Jenkins (planned), Azure Pipelines (planned), CircleCI (planned)

Record and playback vs AI test generation

Four approaches produce E2E tests today: record-and-playback recorders, cloud AI platforms, copilots inside the IDE, and a desktop app that reads your repository before writing a test. Retracio is the last one. The table compares them by whether a capability is documented, with each cell linking to the vendor's own page.

CriterionRetracioApplitoolsCloud AI platformAutifyCloud AI platformAutonomaAI test generatorChecksumAI test generatorClaude CodeCopilot in the IDECloudQACloud AI platformCursorCopilot in the IDECypress StudioRecord and playbackFunctionizeCloud AI platformGitHub CopilotCopilot in the IDEKaneAICloud AI platformKatalon StudioRecord and playbackLeapworkmablCloud AI platformMomenticAI test generatorOctomindAI test generatorPlaywright codegenRecord and playbackPlaywright MCPCopilot in the IDEQA.techAI test generatorQureAI test generatorRainforest QACloud AI platformSelenium IDERecord and playbackShiplightAI test generatorTestDinoTestGridCloud AI platformtestRigorCloud AI platformTestsigmaCloud AI platformTestSpriteAI test generatorThundersCloud AI platformTricentis TestimCloud AI platformVirtuoso QACloud AI platformWorkikAI test generator
Follows the conventions of your repositoryYesNoNoNopartial: reads the connected repository and existing tests via repo mirror; generated tests use Checksum fixtures (init() from @checksum-ai/runtime) and .checksum.spec.ts / .checksum.md file pair; custom style guides and integration with existing testing infrastructure listed as Scaling plan features; in IDE integration user points the agent to existing tests as examplesmanual: user writes CLAUDE.md with build and test commands, coding standards and naming conventions; the agent reads it at session start and reads existing test files in the codebasemanual: user writes rules in .cursor/rules or AGENTS.md; existing test files are read as pattern examples for generated testsNoNomanual: user writes .github/copilot-instructions.md (or .instructions.md, AGENTS.md) with build, test and coding conventions; repository is indexed automatically for chat contextno: tests are authored in natural language in the KaneAI web app or via Kane CLI; project-specific instructions are supplied by the user as a .testmuai/context.md file; reading existing test code, locators, fixtures or page objects from the repository is not documentedNono: tests are generated in Momentic YAML format with natural-language locators; repository-specific conventions are supplied by the user as guidance files in .momentic/skills (beta), not read from existing test codeNoNoYesNoYesNoNoreads existing specs and tests before creating; writes tests in Shiplight YAML format under tests/NoNoNopartial: analyzes the codebase for context and accepts a project-level locator attribute priority list (--test-id-attributes); generated tests are Python + Playwright files under testsprite_tests/, not the repository's own test framework, fixtures or styleNoNopartial: user connects GitHub/GitLab/Azure DevOps/Bitbucket and attaches Playwright configs, test folders, existing tests and Page Object Models as context for generation; conventions are supplied as attached context, not detected as a separate step
Where tests runLocal or cloudcloudbothbothboth: test execution locally or in CI via Checksum CLI (also with Playwright directly); detection, generation and healing run as cloud agent sessionsboth: terminal, IDE extension and desktop app run commands on the user's machine; web sessions run on Anthropic-managed cloud infrastructure or a self-hosted environmentbothboth: Agent runs shell commands in the user's local terminal; cloud agents run in isolated VMs in the cloudlocalcloudboth: agent mode in the IDE runs terminal commands on the user's machine; cloud agent runs in a GitHub Actions environmentboth: local Chrome via Kane CLI (npm package @testmuai/kane-cli, login to a TestMu AI account required); cloud on the TestMu AI grid and HyperExecute for KaneAI web app and cloud runsbothbothbothboth: local via the momentic CLI (laptop, CI); hosted browsers on Momentic infrastructure for momentic run; authoring and running in the Momentic cloud web app is deprecatedboth: cloud by default, local via CLI debug and execute-local commandslocallocal (headed or headless browser on the user's machine; standalone HTTP server or Docker image available)cloud: agents run in the vendor cloud; a local dev server is reached through the qatech tunnel CLI command (docs.qa.tech/cli/commands/tunnel)local: desktop app (Windows, macOS, Linux) runs tests in the user's repository; CI failures are picked up by auto-fix (beta)cloudbothbothboth: tests execute in the user's own Playwright locally (npx playwright test) or in CI; TestDino does not execute tests, results stream to the TestDino cloudcloud; on-premise and hybrid deployment of the device lab available; downloaded scriptless-generated Appium code can be executed on a local machinecloud (default); on-premise optionbothcloud: tests execute in TestSprite cloud sandboxes; localhost apps are exposed to the cloud runner via a tunnel (MCP server or CLI --local); code analysis runs locallyboth: Thunders cloud; self-hosted full platform as container images, or hybrid with only the browser engine on the user's sidebothcloudlocal: Workik generates test code; the page names the user's own CI (GitHub Actions, GitLab CI, Docker) as the place where generated suites run and does not describe a Workik-hosted test execution service
Who owns the test codePlain test files in your repositoryvendor format; steps stored as plain-English instructions inside Autonomousvendor format (.autifyscenario); export to Playwright JavaScript file on certain licenses and plansvendor formatopen code in user's repo: Playwright test files delivered as pull requests to the user's repository; tests import Checksum fixtures, replaceable with standard Playwright importsopen code in user's repo: files are edited in the working directory; cloud sessions push a branch and open a pull request in the user's GitHub repositoryvendor format; export to Selenium format from the UI with a list of unsupported step typesopen code in user's repoopen code in user's repovendor format; export to Selenium scripts (Python or Java) without self-healingopen code in user's repoboth: tests are stored as natural-language steps in the KaneAI dashboard or as _test.md files for Kane CLI; export of generated tests to Selenium, Playwright, Cypress and Appium code is documentedvendor format (Katalon project; test steps translated to Groovy or Java script with Katalon built-in keywords)vendor format; Leapwork Flow stores visual flows in the Controller, Leapwork Play generates Playwright code inside the Leapwork workspacevendor format; export to Playwright (TypeScript) and Selenium IDE via CLIvendor format in user's repo: YAML files (fileType momentic/test/v2, momentic/module/v2) under the user's version control; format published; executed by the momentic CLIvendor format: test cases stored on the Octomind platform and as YAML files in a .octomind directory (dev mode); Playwright code generated on the fly, can be written to the local directory with --persistopen code in user's repoopen code in user's repovendor format: test cases are natural-language goals and steps stored on the QA.tech platform; definitions exportable as JSON via API or CLIopen code in user's repovendor format (RFML, Rainforest Markup Language); tests downloadable as .rfml files via rainforest-cliboth: .side project file and exported WebDriver codebothopen code in user's repo: tests remain standard Playwright in the user's repository; TestDino is added as a reporter in playwright.configvendor format; scriptless-generated Appium test cases downloadable as a Java project (TestCases.zip)vendor format (plain English test files, yaml/txt); files can be kept in the user's repo and pushed to a cloud test suite via CLIvendor format (natural-language test steps stored in Testsigma); export to Excel fileboth: tests stored on the TestSprite platform; generated Python + Playwright code can be printed via CLI (test code get), replaced (test code put), or pushed to a connected GitHub repository (Export to Github)vendor format: plain-language test cases stored in the Thunders platform; export of tests declared, export format not documentedvendor format; export to Puppeteer, Selenium, Playwright on Professional planvendor format; goal export as a JSON fileopen code: output is Playwright, Cypress or Selenium source code produced in the Workik workspace; no vendor-specific test format is described
Works offlineNofalse for generation and healing: the agent runs in the cloud; CLI config requires apiKey; local test runs keep reports local unless hostReports is enabledNoNoNoNopartial: Copilot CLI has an offline mode with a user-configured model provider; IDE and GitHub.com surfaces connect to GitHub's servers over HTTPSYesYesNoNono for AI features (outbound connectivity to vendor AI infrastructure required); scriptless on-premise option for environments with restricted outbound AI trafficNoNoNo
Maintenance modelEdit the test like any other fileself-healingself-healing (Fix with AI proposes an alternative locator after a failed run; user confirms)self-healingself-healing: auto-recovery during execution (CLI AI fallback) and auto-healing after CI failures (agent fixes test code and opens a PR for review)manual: user prompts the agent to run tests and fix failures; optional per-PR auto-fix in cloud sessions responds to CI failures and review commentsself-healingmanual: user starts a fix via prompt, a Fix in Cursor link from a Bugbot review, or a `cursor review` comment on a PR; Bugbot Autofix, when enabled, spawns a Cloud Agent after a PR reviewmanualself-healingmanual: user starts a fix via prompt, the Fix with Copilot button on a failing workflow run, or an @copilot comment on a pull requestself-healing: Auto-Heal rebuilds locators at runtime from the original natural-language instruction when scripts run on HyperExecute; changed steps are surfaced as a diff for reviewself-healingself-healingself-healingself-healing: in-run locator auto-healing, transient failure recovery, permanent healing delivered as pull requests, quarantineself-healing: AI auto-fix (beta) proposes fixes for failed steps, user approves or declinesmanualself-healingadaptive at run time: agents work toward a goal instead of fixed steps, so there is no generated script to repairagent fix (beta): on a CI failure the agent investigates, proposes a fix and reruns the suite; no runtime self-healing documentedself-healingmanual (fallback among locators recorded at capture time)self-healingmanual: AI failure classification and fix recommendations; code changes are made by the userself-healingself-healingself-healingself-healing: Auto-Heal (Pro) recovers UI tests on rerun when the page changes; Regenerate recreates tests from scratchself-healingself-healingself-healingmanual: maintenance is done on request through the AI assistant (refactoring, updating selectors, identifying brittle tests); no automatic self-healing at run time is described
Output frameworksPlaywrightplaywright (JavaScript)noneplaywrightnot enumerated by vendor; tests follow the frameworks already present in the repository or named in the promptselenium (export); playwright available as a cloud execution engine, not as exported codeplaywright, cypress, selenium, pytest, jest (any framework named in the prompt)cypressselenium (python, java)playwright, selenium, cypress (any framework named in the prompt)selenium, playwright, cypress, appium (KaneAI web app export, multiple languages); Kane CLI --code-export produces Playwright code in python or javascriptselenium (web), appium (mobile); Groovy or Java scripts inside a Katalon projectplaywright (Leapwork Play); Leapwork Flow uses a visual block canvas without a code frameworkplaywright, selenium-ide, postmannone: output is Momentic YAML run by the momentic CLI; reporters junit, allure, allure-json, playwright-json, buildkite-json; no export to Playwright or Cypress test code documentedplaywrightplaywright (Node.js, Python, Java, .NET)playwrightnone: tests are natural-language definitions executed by vendor agents; no Playwright or Cypress code outputplaywright, cypress, selenium; languages: TypeScript, JavaScript, Python, Java, Kotlin; setup auto-detectedSelenium WebDriver: C# NUnit, C# xUnit, Java JUnit, JavaScript Mocha, Python pytest, Ruby RSpecplaywrightplaywright (JavaScript/TypeScript, reporter and analytics; no test generation documented)appium (java) as downloadable generated code; selenium, appium, cypress, playwright as execution of user-written scripts on the platformtestRigor plain Englishplaywright (Python) for UI tests; Python requests for API testsplaywright (listed on pricing as 'Playwright reversibility'; no documentation of the export format found)playwright, selenium, puppeteer (export from the Editor; manual adjustments may be required)playwright, cypress, selenium (Java, Python, C#, Ruby with JUnit, TestNG, PyTest, Cucumber), jest, junit, pytest, testng, mockito, appium, katalon, cucumber, postman, go test; migration of Selenium/Cypress/Puppeteer tests to Playwright

Alternatives checked on 2026-09-08 against their own websites and documentation. Empty cell: not confirmed.

Full comparisons of Retracio against each alternative, grouped by type, are on the compare page.

What the measurements show

Every number below carries the condition it was measured under, the sample size and the year. Nothing here is a projection.

14

minutes from manual run to a committed testmedian, reference repository, checkout and onboarding scenariosinternal benchmark, 20 runs, 2026

68%

generated tests merged without editsfirst review, reviewer did not generate the testinternal benchmark, 25 runs, 2026

91%

generated files pass the repository's lint and formatter with zero editseslint and prettier configs as found in the repositoryinternal benchmark, 46 runs, 2026

74%

screens covered by an existing page object where the generated test reused itrepositories with a pages/ folderinternal benchmark, 31 runs, 2026

88%

locators in generated tests based on role, label, or test-idall locators across generated files, css and xpath counted as the restinternal benchmark, 58 runs, 2026

5

lines changed when a single step is regeneratedmedian, review screen diffinternal benchmark, 35 runs, 2026

Your repository is not the reference repository. A codebase with competing fixture styles or without page objects gives the conventions and reuse figures less to work with, and the first batch of tests will show it.

What beta users say after the generated tests reached review

These quotes come from beta users of the desktop app, anonymized at their request. Each one describes what happened in their own repository during the beta.

“The first spec Retracio produced imported our existing LoginPage object and the authedPage fixture we wrote two years ago. I opened it expecting to rewrite the whole thing and ended up renaming one variable.”
Senior SDET, e-commerce · Playwright suite of around 600 specs
“Recording the checkout scenario took me twelve minutes, which is about what a manual pass takes anyway. The pull request was open before standup.”
QA Lead, fintech · team of 40 engineers
“The redesign renamed half of our CSS classes. The tests Retracio generated were the only ones in the suite that did not move, because everything in them sits on roles and test ids.”
Frontend engineer, B2B SaaS
“I review every E2E test that lands in our repo. For the first month I could not tell which ones were generated until I looked at the commit message.”
Staff engineer, healthtech
“Security signed off in a week. Nothing but recorded steps and trimmed DOM snippets leave the laptop, and the model calls go through our own API key, so there was no new vendor to assess.”
Engineering manager, insurance
“After the trial I asked what happens if we stop paying. The answer was nothing: the tests are plain Playwright in our repository with no import from Retracio. That is the reason we stayed.”
Head of QA, logistics
“One step broke because the date picker changed. Regenerating that step touched four lines and left the assertions I had edited by hand exactly as they were.”
Test automation engineer, travel
“It is not magic. Our repo had three competing fixture styles, and the first batch of tests picked the wrong one. We cleaned up the fixtures, and the second batch was noticeably better. That is fair: it can only follow conventions that exist.”
QA architect, media
“Two of our manual testers now ship automated tests without writing code, and the developers approve them in review. The checks they mark during the run become real assertions, not a list of clicks.”
QA manager, edtech
“The CI snippet worked on the first push. Our GitLab pipeline picked the test up next to the unit tests, and I had a green check about twenty minutes after I finished recording.”
DevOps engineer, retail

Where the app runs and what leaves your machine

Retracio is a desktop app with a hybrid execution model: the recording, the repository scan, and the file writes happen on your machine, and test generation calls an LLM provider over the network.

What leaves the machine. Recorded steps, trimmed DOM snapshots of the pages under test, and excerpts of the repository's test conventions (page objects, fixtures, naming) are sent to the LLM provider for generation.

What stays on the machine. Source code, generated tests, browser sessions and cookies, screenshots and recordings, and credentials remain local.

How the repository is handled. The app reads the local checkout only. It never clones or uploads the repository. Generated tests are written as files into the folder you choose, and committing stays with you.

LLM provider. Generation runs on Anthropic Claude through your own API key (BYOK). The key stays yours.

Ownership. The output is plain test files in the folder you chose, inside your repository.

Free while the beta runs

Retracio is a desktop app for macOS and Windows, free to use for as long as the beta runs. Builds go out to people on the waitlist rather than from a public download page. Test generation goes through Anthropic Claude with your own API key, so model usage is billed by Anthropic to your account; nothing is billed by us.

Your work email, your framework, the size of your team. The entry reaches us as an email, and what happens to it is written in the privacy policy.

Frequently asked questions

Do AI generated tests follow our team's coding standards?

They do when the generator takes the standards from the repository instead of from a prompt. Before writing a line, the app scans the local checkout and builds a conventions profile: folder structure, file and test naming, assertion style, lint and formatter config, existing fixtures, helpers and page objects. The generated spec is placed next to similar tests, imports the fixtures and page objects that already exist, and passes the same lint and formatter checks as the tests your team wrote by hand.

Do AI generated tests break when the UI changes?

A test breaks when the elements it depends on change, so the choice of locators decides how often that happens. Every element the tester touched during the manual run is resolved to a role, label, or test-id locator, with CSS or XPath as a fallback only when nothing better exists. If the repository has a data-testid prefix convention, the output follows it. When a redesign still breaks a step, you regenerate that step on the review screen and the rest of the file stays as it was.

How does AI testing handle flaky tests?

Flakiness usually comes from timing and from locators tied to markup. During recording the app notes where the page waited on network or animation and stores that with the step. Locators are chosen by role, label, or test id instead of generated CSS paths. Before you commit, the draft executes locally with Playwright against the same application and shows pass or fail per step, so a step that does not hold up is visible before it reaches CI. A failing step can be regenerated on its own.

Who owns AI generated test code?

You do. The output is a plain Playwright spec file written into a folder you choose inside your own repository. It carries no import, plugin, or runtime from Retracio, and no dependency outside the package.json the repository already has. Committing, reviewing and executing the file stay with your team, the same as for a test written by hand. Remove the app tomorrow and every generated test keeps running in CI as before.

Does Retracio work offline?

Partly. Recording the manual run, scanning the repository, writing files, and executing the generated test with Playwright all happen locally inside the desktop app and need no server. Generating the draft test calls Anthropic Claude through your own API key, and that step needs a network connection. There is no vendor server in between: the outbound calls of a session go only to the configured LLM provider endpoint, and the app is free during the beta.

How does AI test generation differ from record and playback?

Record and playback turns clicks into a script. Playwright codegen, for example, writes the recorded actions into a new spec file, picks locators by looking at the page, and its documentation leaves further improvement of that file to the user. (checked 2026-09-08) Generation from a manual run adds two inputs: the checks the tester marked on each screen, which become assertions, and a conventions profile read from the repository, so the file reuses existing fixtures and page objects instead of duplicating selectors inline.

How is an AI testing tool different from a coding copilot in the IDE?

A copilot writes what you describe in a prompt. GitHub Copilot, for example, picks up repository conventions from an instructions file the user writes, and its paid plans are billed per month. (checked 2026-09-08) Retracio starts from a recorded manual run instead of a prompt, so the steps and expected outcomes come from what the tester did and marked. Conventions come from the existing tests without a written instructions file. The app is free during the beta, and generation goes through your own Anthropic API key.

What does Retracio read from my repository?

The app reads the local checkout only. From it, it takes the framework and language, the folder where E2E tests live, file and test naming, existing page objects and fixtures, assertion style, lint and formatter config, and custom helpers. That becomes a conventions profile. Excerpts of that profile go to the LLM together with the recorded steps and trimmed DOM snapshots. The repository is never cloned or uploaded, and the only files the app writes are the generated tests in the folder you choose.

Does my source code leave my machine?

No. What leaves the machine is the recorded steps, trimmed DOM snapshots of the pages under test, and excerpts of the repository's test conventions such as page object names, fixtures and naming patterns, sent to the LLM provider for generation. Source code, generated tests, browser sessions and cookies, screenshots and recordings, and credentials stay local. The LLM provider is Anthropic Claude, called through your own API key, so requests go under your account and there is no vendor-side store of your sessions.

What frameworks and languages are supported?

Today the output is Playwright in TypeScript or JavaScript, and the desktop app runs on macOS and Windows. Cypress and WebdriverIO are planned as output frameworks; Python and Java are planned as languages. Generated tests run in GitHub Actions and GitLab CI, with Jenkins, Azure Pipelines and CircleCI planned. Because the output is a plain spec file, it executes with the Playwright runner already in your repository and needs no extra package.

Can I edit the generated test before committing?

Yes, and the review step is built around it. The draft opens as a diff inside the app, where you rename a step, tighten an assertion, or change anything else in the file. A single click executes the test locally with Playwright and shows pass or fail per step. If a step fails, you can regenerate that step alone; the rest of the file, including edits you already made, stays untouched. Committing happens in your own workflow.

Can AI write Playwright tests?

It can, and the useful question is whether the result looks like your other Playwright tests. A model given only a description produces a spec with inline selectors and its own naming. Given a recorded run plus a conventions profile from the repository, it produces a spec that imports your fixtures and page objects, matches your locator style, and passes your lint config. The test then executes locally with Playwright, so you see a green run before the file reaches review.

Can AI write Cypress tests?

Cypress output is planned and is not part of the current beta, which generates Playwright specs in TypeScript and JavaScript. The recording and the conventions profile do not depend on the framework: the recorded run holds steps, locators and marked expectations, and the profile holds structure, naming and style. Cypress and WebdriverIO output will build on the same inputs. If your suite is on Cypress today, the beta fits only if you also run Playwright in the same repository.

How accurate are AI generated tests?

There is no published accuracy figure yet; internal measurements are still being collected and will appear on this page with the number of runs and the date. What you can verify yourself: every check the tester marked during the run appears as an expect in the output, the locator breakdown by role, label, test id and CSS is shown on the review screen, and the draft executes locally against the same application before commit. A test that passes there and passes code review is the measure that counts.

Do AI generated tests require maintenance?

They do, like any E2E test, and the aim is to keep it at the level of editing instead of rewriting. Because the output is plain Playwright in your repository, you maintain it with the tools you already use. When a step fails after the app under test changes, you regenerate that single step and the diff shows exactly what changed. Locators by role, label and test id outlive markup changes that would break a CSS path. Nothing rewrites a test without your review.

How do AI generated tests integrate with CI/CD?

The generated file is committed to a branch and opened as a pull request like any other test. It runs in the existing pipeline with the Playwright runner, alongside the rest of the suite, and reports on the pull request. No runtime, plugin, or service from the app is needed in CI. If the repository has no E2E job yet, the app offers a ready job snippet for GitHub Actions or GitLab CI, and the manual scenario then runs on every push.

Can I use Playwright without coding?

The manual run needs no code: you walk through the scenario in the browser and mark what should be true on each screen. The output, though, is code, a Playwright spec file in your repository, and it goes through the same review as any other test. Someone on the team reads the diff, executes it, and commits it. The app is meant for teams that already own a test codebase and want manual runs to land in it.

Can AI test generation replace manual test writing?

It removes the part where a tester's run is retyped as code. The run itself, the decisions about what to check, and code review stay with people. A tester walks through the scenario and marks expected outcomes; the generator turns that run into a spec in the repository's style; a reviewer reads the diff and commits. Scenario design and review still take time. What disappears is the gap between a manual test case that exists on paper and an automated test that runs on every push.

What is AI test generation?

It is the use of a language model to produce test code from an input other than hand-written code: a description, a recording, or a walk through the application. Approaches differ in what the input is and where the result lives. In this app the input is a recorded manual run plus a conventions profile read from your repository, and the output is a Playwright spec file placed in that repository, run locally before commit and then by your own CI.

Start with your next manual test run

Leave your email and we write when a build for macOS or Windows is ready. Record one run, get a plain Playwright spec in your own repository.