"I've tested all the changes!"
Sure you have, Claude.

We found Claude stops at 75% branch coverage when making changes. Verify your human and AI-written PRs with structure-aware coverage checks, and catch untested changes before you ship.

๐ŸŽฏ Ship every PR knowing what's tested
๐Ÿ› ๏ธ Works with all Ruby testing frameworks
๐Ÿ”“ Free forever for open source

Sign Up with GitHub

14-day free trial for private repos. No seat-based pricing. Supports Ruby and GitHub.

Leading Ruby engineering teams review test coverage with undercover

Ship on green

No untested changes in your pull request? Merge with confidence. All code, whether written by humans or AI, is verified.

If there are gaps, you control the rules: require the check to pass before merging, or use SimpleCov's :nocov: comments to explicitly allow exceptions. You can also configure the check to be neutral and fail on specific hot code paths. Either way, you're verifying coverage as you change code, not adding it retroactively or chasing vanity metrics.

Add subscription renewal logic ยท PR #847
CI / rspec All tests passed
Passing
UndercoverCI / coverage All changed methods are covered
Passing
All checks passed. Ready to merge.

It's always been great as a pre-release gut-check but lately it's become absolutely essential for ensuring our AI agent-written PRs have the coverage we require.

Jay Tennier Jay Tennier Engineering Manager at Rainforest QA

How it works

Detect when changed code is untested before it's deployed.
Stop chasing 100% and focus on what you're actually shipping.

01

Find untested code blocks

Perfect for auto-generated code that often miss critical paths. Built on SimpleCov and code structure analysis, Undercover checks guide the programmer to test adequately.

Worried about too many comments? You won't receive more than one comment per method, because Undercover understands code structure and only works with the current diff. Annotations are reported on changed classes, methods or blocks where line coverage or branch coverage was missing.

app/models/subscription.rb
32+def renew!(months:)
33+ update!(ends_at: ends_at + months.months)
34+end
UndercoverCI / coverage
Untested instance method
Subscription#renew!, branch coverage: 0%
02

Monitor your test suite health

Lists file names, class/method names and coverage information for a commit or pull request. Methods that cause the check to fail are flagged: one or more line or branch appears in the PR diff and has to be fixed.

All others provide a refactoring opportunity for you to improve the test coverage if it's low somewhere outside of the diff.

Coverage breakdown: PR #847
Order#calculate_tax100%
โš ๏ธ Subscription#renew!0%
Invoice#line_items67%
Account#deactivate!100%
03

Track coverage over time

View your recent commits and see how coverage evolves across your project. Filter by repository, branch and time.

The dashboard provides a clear timeline of your pull requests, making it easy to find changes that could be worth revisiting and improving.

Recent commits โ€” main
a3f1c0d Add subscription renewal logic 2 warnings
7b29e44 Refactor invoice line items 0 warnings
e80a112 Tax calculation for EU orders 0 warnings
c14d9af Account deactivation flow 0 warnings
04

Shift left: catch gaps before you push

Run the undercover gem against your diff locally, the same check that runs in CI. Wire it into your editor or coding agent so coverage gaps get fixed before the pull request, not in review.

Pairs with undercover-claude to give your coding agent precise, per-method targets.

zsh โ€” ~/app
$ bundle exec undercover --compare HEAD~1
app/models/subscription.rb:32
Subscription#renew!
branch coverage: 0% ยท 1 warning
Resolve or add :nocov: before pushing.

Choose your setup

Install the Undercover GitHub App or explore the Ruby gems family

Open Source Public repos & OSS maintainers Free forever Get started Essentials Small to mid-size engineering teams $69/mo per GitHub org Start free trial Pro Large organizations $279/mo per GitHub org Start free trial
Coverage
GitHub Check annotations โœ“ โœ“ โœ“
Branch coverage โœ“ โœ“ โœ“
ERB view coverage new โœ“ โœ“ โœ“
Coverage dashboards โœ“ โœ“ โœ“
Scale
Public repositories โœ“ โœ“ โœ“
Private repositories โ€” โœ“ โœ“
Unlimited team size โœ“ โœ“ โœ“
Monthly check builds โ€” 1,000 Unlimited
Concurrent builds โ€” 3 Unlimited
Support
API access โ€” โ€” โœ“
Email support โ€” โœ“ 24h SLA
Free trial โ€” 14 days 14 days

Pricing is per GitHub organization, not per seat. VAT not included. Yearly discounts available by default. Get in touch for custom solutions or self-hosted setups.

From the Ruby community

Verify your next pull request

Catch untested changes before you ship, human or AI written.

Sign Up with GitHub

14-day free trial for private repos. No seat-based pricing. Supports Ruby and GitHub.