Your AI writes the code. RuyQA checks that it works.
Every pull request, and every edit your AI coding agent makes, gets a verdict: Verified, Needs attention, Unverified or Pending. It is worked out from your real test results and the code they cover. No model decides it.
1 test failed. 1 changed file has no test evidence.
All 18 tests that ran passed and every code change has test evidence.
All 9 tests that ran passed and every code change has test evidence.
Waiting for test results.
No tests are linked to this change yet.
Works with GitHub Actions, GitLab CI and Jenkins, with AI coding agents through MCP, and with Jira and Slack.
AI can write code faster than your team can check it.
A coding agent can open a pull request in a few minutes. Someone still has to decide whether it works, and that decision often comes down to skimming the diff and seeing that CI is green.
Green CI only means the tests that exist passed. It doesn't tell you whether any test touches the code that changed, whether a flaky test failed for no reason, or whether anything ran at all. Changes that shouldn't merge get through in that gap.
Every change gets one of four verdicts.
The name RuyQA comes from the chess opening, and the verdicts follow chess. A change starts as a pawn. Evidence is what gets it promoted.
Pending
The change is recorded and the test results haven't arrived yet.
Unverified
Nothing RuyQA has can prove or disprove the change. Usually no test is linked to the code that changed.
Needs attention
A test failed, a test that covers the change didn't run, or changed code has no test evidence.
Verified
Results came in, nothing failed, every linked test ran, and every changed code file has a test behind it.
What it takes to be Verified
- Test results were uploaded for the change.
- Nothing failed.
- Every test linked to the changed code ran.
- Every changed code file has a linked test, or coverage showing it ran.
- Docs, images and lockfiles are ignored, because they can't change behaviour.
- Failures from tests you've quarantined as flaky don't count against the change, but the verdict always lists them.
The first run isn't empty
A change can only be Verified if RuyQA knows which tests cover the code. If your tests aren't linked to code yet, RuyQA reads your repository's file list and suggests links by matching test names to file names. It points at the most specific file, marks weak matches as low confidence, and applies nothing until you or your coding agent approves it.
Add one step to your pipeline.
The GitHub Action uploads your test results and posts the verdict as a comment on the pull request. It updates the same comment on every push, and it can fail the job when a change needs attention. The CLI does the same upload from any other CI.
The comment lists the failing tests, the changed files that nothing covers, and existing tests that look related but aren't linked yet.
For AI coding agents
The MCP server lets Claude Code, Cursor and other MCP clients ask RuyQA whether their own change works. The agent reads which tests failed and which files nothing covers, fixes its work, and asks again before it tells you it's done. Anything it writes is saved as a draft for a person to approve.
claude mcp add ruyqa --env RUYQA_API_KEY=<key> -- npx -y @ruyqa/mcppermissions:contents: readpull-requests: writesteps:- uses: actions/checkout@v4with: { fetch-depth: 0 }# run your tests and write junit.xml- uses: ruyqa/ruyqa-run-action@v1with:file: test-results/junit.xmlgithub-token: ${{ secrets.GITHUB_TOKEN }}env:RUYQA_API_KEY: ${{ secrets.RUYQA_API_KEY }}
1 test failed. 1 changed file has no test evidence.
Failing tests
Login works: expected 200, got 500
No test evidencesrc/pay/charge.ts
Ten agents, each working from real data.
Each agent does one job, and each starts from something real: a live browser, or results you've already recorded. When there isn't enough data to say anything, the agent tells you that and doesn't guess.
Explorer
Opens your app in a real browser, clicks through it, signs in with a test account if you set one up, and drafts test cases from what it saw.
Drift Detector
Takes a snapshot of a page in a real browser and lists exactly what changed since the last one.
Flaky Manager
Counts how often each test flips between pass and fail. The same commit passing and failing is the clearest sign. Can quarantine flaky tests.
Bug Reporter
Files bugs from failing tests, with how often they fail and the first commit that broke them. Skips duplicates and flaky failures. Creates Jira issues.
Strategist
Reads your test and run data and shows where coverage and testing effort are lopsided.
Execution Optimizer
Chooses which tests to run for a code change, based on risk.
Perf Analyst
Reads your recorded performance metrics and flags drift against their history.
Data Synthesizer
Generates realistic test data from a schema you describe.
Visual Analyst
Judges whether differences between two descriptions of a screenshot are intended or regressions. It reads descriptions and doesn't look at images.
CrossBrowser
Compares the recorded results of the same test in different browsers and points out the differences.
The Explorer stays on the site you point it at and never goes near private networks. It is never offered controls like delete, pay, checkout or log out, and it never types a password you didn't give it. It stops at 30 steps or 5 minutes at the latest. The tests it writes are drafts that wait for a person to approve them.
A full test management tool underneath.
If your team already works with test cases, plans and releases, all of that is here.
Test management
Organise cases in suites, share steps between them, and keep every version of a case so you can restore an old one. Cases move from draft through review to approved.
Running tests
Run tests by hand with keyboard shortcuts, or automate them with Playwright. Upload results from CI with the GitHub Action or CLI, or start runs from GitHub, GitLab and Jenkins webhooks. Schedules run on cron with time zones.
Defects and releases
Track a bug from new to closed. Set quality gates on a release, such as a minimum pass rate and a limit on critical bugs, and see whether it is ready.
Requirements and coverage
Link test cases to requirements and see which requirements have no tests. Record coverage percentages from your CI and follow the trend.
Reports
Pass rate over time, how much is automated, results by module and by person, and a 30-day CSV export.
Working as a team
Comment on a test case or a single step and mention people. Edit locks stop two people overwriting each other, and you can see who is viewing a case. Four roles control access, and an audit log records key actions.
When an automated test fails with what looks like a timing or locator error, RuyQA suggests a rewrite of the test and runs it once. If the rewrite passes, the test is flagged for you to review. It is never counted as a pass, because a rewrite can loosen a test enough to hide a real bug.
Priced per seat, paid in your currency.
Pay in US dollars, naira, cedis, Kenyan shillings or rand, through Paystack or Kora. You pick the currency at checkout. A payment covers one month, and we email you a week and a day before it ends. Nothing renews on its own.
Free
forever
50 AI credits a month
- 2 seats, 1 project, 100 test cases
- Pull request verdicts with the GitHub Action and CLI
- The ten agents, within your credits
Pro
per seat a month
500 AI credits a month
- Everything in Free
- Unlimited seats and test cases, 10 projects
- Visual regression results and advanced analytics
- Custom fields and test case versioning
Team
per seat a month
500 AI credits a month
- Everything in Pro
- 25 projects
- Roles and test case locking
- Import and export
Business
per seat a month
1,500 AI credits a month
- Everything in Team
- Unlimited projects
- Audit log, IP allowlist, natural-language analytics
- Up to 10 viewer licenses
Enterprise
per seat a month
5,000 AI credits a month
- Everything in Business
- Unlimited viewer licenses
- Custom SLA by agreement
- Minimum 25 seats
AI credits cover the agents and AI test generation. Viewer licenses give people read-only access to results. Teams of up to 5 people with under $1M in revenue can apply to the Startup Program, which is free. Full plan details
Works with the tools you already use.
GitHub, GitLab and Jenkins can start runs through webhooks. Jira receives bugs, and Slack gets run results. You can import cases from TestRail, Zephyr or a CSV file.
Try it on one pull request.
Make a free account, add the GitHub Action to one repository, and open a pull request. You don't need a credit card.