Failed tests get a proposed fix. As a PR.
QualityPilot watches your CI runs, infers the production code under test, and opens a GitHub PR with the fix + reasoning + confidence score. You merge — or you don't. No auto-merge, no fluff.
Watch it fix a test in 30 seconds
From red CI to merged PR. No code, no signup, no demo call.
- 1Test fails$ npm testRUNS auth.test.tsFAIL auth.test.ts✗ rejects expired tokensTests: 1 failed, 24 passed
- 2CI sends to QualityPilotGitHub ActionsQualityPilot
- 3AI analyzesThinking…
- • Reading test src/lib/auth.test.ts
- • Reading production src/lib/auth.ts
- • Drafting minimal patch
- • Opening pull request
- 4PR opensfix(auth): reject expired tokensconfidence 92%auth.ts+ if (token.exp < Date.now()) {+ return null;+ }
- 5You mergeMergedvia squashCI passing — 25 of 25 testsYou saved ~30 minutes of debugging.
Everything you need to fix your test suite
Scan any public repo for free. Connect a CI reporter for the AI Bug Detective + trends.
AI Bug Detective
Failed test → LLM proposes a fix → opens a GitHub PR with reasoning + confidence score. Within an hour. You review and merge — or close. Never auto-merges.
Health Score A-F
Weighted scoring across pass rate, stability, speed, and coverage. Instant grade for your test suite.
Flaky Detection
11 risk patterns scored 1-10: timing bombs, external dependencies, animation waits, concurrency issues.
Failure Triage
Auto-categorize failures by root cause: timeouts, assertions, connections, permissions, resources.
CI Ingest Reporters
Drop-in npm/PyPI packages for Jest, Playwright, pytest. Three lines of CI config and your test runs flow into the dashboard automatically.
Slack Notifications
Per-repo incoming webhook. Every new auto-fix PR pings your channel with confidence + reasoning + Review button. Optional notification on merge.
Scan History + Trends
Every scan and CI run is saved. Track test health over time, compare scores, measure improvement.
See it in action
Pick a failing test below and watch the AI propose a fix — exactly what QualityPilot does on every red CI run.
Subtraction operator used where addition was intended.
1test("adds two numbers", () => {2 expect(add(2, 3)).toBe(5);3});1function add(a, b) {2 return a - b;3}1function add(a, b) {2 return a + b;3}Reasoning
The test asserts add(2, 3) === 5, but the function subtracts. The fix swaps the - operator for +. No callers in the repo rely on the broken behavior.
fix: off-by-one in add()
Auto-generated by QualityPilot · review before merging
This demo uses pre-computed fixes for instant playback. Real fixes are generated by GPT-4o-mini against your actual source — usually within an hour of the failed run.
Free, no sign-up · same model, your snippet
How it works
Three steps to understand your test suite health
Connect GitHub
Sign in with your GitHub account. We only request read access to your repositories.
Select Repository
Pick any repository from your account. We search for test files (*.test.ts, *.spec.js, etc.).
Get Health Score
Receive an A-F grade with factors breakdown, flaky test detection, and improvement recommendations.
Why QualityPilot exists
Hi — I'm Ihor. I'm a senior QA automation engineer (C# + Playwright + NUnit daily). I built QualityPilot because every team I've worked on hit the same wall: tests fail, the CI report is unhelpful, finding the actual bug eats a developer's afternoon, and the fix is usually a 2-line change.
The AI Bug Detective is what I wished existed: it watches your CI runs, infers the production code under test, and opens a PR with a proposed fix + reasoning + a confidence score. You spend 30 seconds reviewing instead of 30 minutes investigating.
No auto-merge. No fluff. You merge it — or you don't. That's the deal.
— Ihor