CI is talking.
Make it readable.
Exolar reads your Playwright runs the way a senior engineer reads a post-mortem. Clusters failures. Names the flakes. Recommends which suites a PR can't actually break.
01 · the problem
Your CI is talking.
Nobody's reading.
Every red build dumps the same kind of noise: thousands of lines of stack traces, retry counts, screenshots, a tight little Slack ping. Engineers grep, blame, re-run. The signal is buried under the form factor.
Test analytics tools were built to store this output, not to read it.
Error: Timed out 30000ms waiting for expect(locator).toBeVisible() Locator: getByRole('button', { name: 'Apply promo' }) Expected: visible Received: <element(s) not found> at /tests/checkout/promo-code.spec.ts:48:34 at /tests/checkout/promo-code.spec.ts:12:16 Retry 1/3 · failed Retry 2/3 · failed Retry 3/3 · failed Error: Timed out 30000ms waiting for expect(locator).toBeVisible() Locator: getByRole('button', { name: 'Apply promo' }) ...identical stack... (no retries, bailed)Same root cause, surfaced as two separate failures. A human reads this in five seconds. The dashboard doesn't.
How Exolar reads CI
Three passes between push and verdict.
Every run, every retry, every artifact.
One GitHub Action drops Playwright JSON, traces, videos, and screenshots into Exolar. Multi-tenant by default: your org, repo, branch, suite, run. Vector embeddings get computed at ingest, not on read.
Failures group themselves.
Jina-v3 embeddings + Cohere reranking pull together failures that share a root cause, even when stack traces differ. Fifty reds become four clusters. Each cluster carries the smallest spanning example that explains the rest.
A debrief, not a dashboard.
Every run produces a narrative report: what changed, what flaked, what was safely skipped by Smart Selection. The AI triage layer (shipping soon) turns those clusters into a draft post-mortem you can send.
Headline
Checkout promo path broke when the new pricing API rolled out at 18:42 UTC. Smart Selection correctly skipped 11 unaffected suites this PR.
What changed
apps/pricing/v3 shipped; promo-code locator selector drifted.
Recommended action
Update checkout/promo-code.spec.ts:48 locator. → Open PR
05 · Smart selection
Skip the suites your PR can't break.
For each PR, a Gemini-class model reads the diff against your suite catalog and recommends what to actually run. Shadow mode first; auto-skip only after calibration. Tap a scenario.
will run
will skip
observation
Visual-only change. No business logic, no API surfaces, no shared state.
06 · Integrate
Wires into the stuff you already run.
GitHub Actions for the ingest. MCP for Claude / Cursor / any compatible client. YAML for the catalog. No agents to deploy, no SDKs to wrap.
One command. Adds Exolar to Claude Code.
claude mcp add exolar-qa \
--transport http https://exolar.agentical.work/api/mcp/mcp \
-s user
# OAuth opens in your browser. No token copying.AI triage layer is shipping next.
Every failed run lands in your inbox as a draft post-mortem: clusters, suspects, the line of code that's probably wrong.
Now
Cluster & semantic search
Now
Smart selection · shadow
Next
Smart selection · active
Next
AI triage drafts
08 · Join
Stop reading red builds.
Start reading verdicts.
Early access to Exolar is rolling out to platform teams running serious Playwright suites.