Your tests tell a story.
Now your CI can read it.

razo gives every Playwright control a human name and narrates every action twice: a readable report, and a structured artifact an AI can analyze. When a test fails, you get the business story — not a stack trace.

Start free with GitHubFree · no card required

Playwright says

Error: locator('[data-testid="status"]')
timed out after 30000ms

The same failure, narrated by razo

  1. Type "mi-llavero" into field "Filename"
  2. Choose "3MF" in select "Format"
  3. Click button "Export"
  4. Assert label "Export status" has text "Exported mi-llavero.3mf (Standard)"
expected: Exported mi-llavero.3mf (Standard)
actual:   Error: missing fields

AI analysis

The export never happened: a filename was typed and a format chosen, but no step ever selected a quality — the app correctly rejected the export. Fix: add quality.select('Standard') before clicking Export.

How it works

Three steps to narrated CI

1

Install razo

Name your controls, wire the reporter in your Playwright config.

npm i -D @razohq/razo
2

Upload from CI

One project token, two lines in your workflow.

npx razo-upload
3

Read the story

Failures get an AI analysis and a browsable narrated history, per project.

The artifact

Every failure is structured

{
  "action": "assert-text",
  "name": "Export status",
  "expected": "Exported mi-llavero.3mf (Standard)",
  "actual": "Error: missing fields",
  "status": "failed"
}

The payoff

The AI reads the story

The export never happened: a filename was typed and a format chosen, but no step ever selected a quality — the app correctly rejected the export. Fix: add quality.select('Standard') before clicking Export.

Pricing

Start free, upgrade when it earns it

Free

Unlimited projects and runs · 30-day narrated history · 3 trial AI analyses · unlimited BYO-key analyses via the OSS CLI.

Start free