Migrating from Octomind

Octomind announced it was shutting down in April 2026 and ended its service at the end of May. Its tests exported as standard Playwright code, so your suite still runs: nothing is urgent.

Sources (third-party coverage; Octomind's own site no longer resolves):rywalker.com analysis,rfp.wiki vendor profile (checked 9 October 2026). More: Octomind alternative.

The plan

  1. Keep the export running with npx playwright test. It needs nothing from Octomind.
  2. Pick the tests you'll keep maintaining, usually the ones that broke most often.
  3. Rewrite each as a plain-English test (the table below), record it once, and delete the old spec when the new test passes.
npx playwright test            # 1. your exported suite still runs as it is
npx optestra init                  # 2. a project next to it (your specs are left alone)
npx optestra author tests/login.test.md   # 3. each rewritten test, recorded once
npx optestra run --replay-only     # 4. replays with no AI; then retire the old spec

Coming There is no importer for Octomind exports yet: automatic import is planned. The rewrite is by hand, with the same mapping as migrating from Playwright.

What maps to what

Octomind's exported Playwright and the test-file equivalent
Exported PlaywrightIn a test file
test("Checkout works", …)name: Checkout works in the frontmatter; one test per .test.md file
page.goto("/pricing")start: /pricing, or a step Go to /pricing
getByRole("button", { name: "Save" }).click()Click "Save", or exactly: Exact: click role=button[name="Save"]
getByLabel("Email").fill(email)Fill "Email" with {{data.email}}, or Exact: fill label="Email" with {{data.email}}
selectOption("Europe/London")Select "Europe/London" in "Time zone"
keyboard.press("Enter")Exact: press Enter
expect(heading).toHaveText(…)Expect: the page heading is "Welcome"
expect(page).toHaveURL(/dashboard/)Expect: the URL contains /dashboard
expect(locator).toBeVisible()Expect: "Saved" is visible
expect(rows).toHaveCount(5)Expect: the orders table shows 5 orders, or Exact: expect css=.order-row count 5
test.step / helper functionsa flow (kind: flow) included with Use: flows/login.test.md
storageState / global setup loginan auth profile: auth: admin logs in once and reuses the saved session
process.env.PASSWORD{{secret.PASSWORD}}, declared with the domains it may be typed into
test data, fakerdata: and {{unique.email}}, {{faker.name}}
page.route() mocksComing Network mocking isn't available yet
anything elsea ```ts code step, kept verbatim (runs through the generated spec, not healed)

So it doesn't happen again

With Optestra, the tests are files in your repository, the engine that runs them is open source, and every recorded website test is also a Playwright spec. If we disappear too, nothing breaks:here's exactly why.