[]SELECTIVE
Login

CI COST
LOOK LIKE
A HOCKEY
STICK?

Agents love writing tests. You can't prune them all, and you can't afford to keep running every test on every build. Selective is the intelligence layer on top of your existing CI.

Onboarding teams now · works with your existing CI
[ci spend][2021 → 2026]
10×1×coding agentsevery test, every changewith selective
202120222023202420252026
ci spend, every test on every changeci spend with selective
supported runners
✓RSpec· Rubyready
✓Minitest· Rubyready
·ExUnit· Elixircoming soon

RUN THE
TESTS THAT
MATTER.

Selective knows which tests to run. Make a three-line change to one file? Run only the tests that could fail when that code changes, saving on compute and shortening the feedback cycle.

[run.4127 · identity.rb → main][SELECTING]
app/services/billing/identity.rb+ 3 − 0 modified
1 class IdentityResolver
2 def resolve(commit)
3 return by_id(commit.author_id) if commit.author_id
4 by_email(commit.author_email)
5 end
6  
7 def by_email(email)
8+ return nil if email.blank?
9+ Member.find_by("LOWER(email) = ?", email.downcase)
10+ end
11  
12  
FILES · 9 of 1,240 shown
01services/billing/identity_spec.rbTOUCHED
02workers/commit_resolution_worker_spec.rbRelated
03requests/billing/portal_spec.rbRelated
04auth/session_spec.rbskipped
05admin/audit_log_spec.rbskipped
06models/invoice_spec.rbskipped
07lib/cache_spec.rbskipped
08requests/webhooks_spec.rbskipped
09models/pricing_spec.rbskipped
✓ 3 files selected · 1,237 skipped

OPTIMIZE
RUNTIME
WITH QUEUE
DISTRIBUTION

The selected tests are distributed to CI nodes from a central queue. This results in an optimized total runtime where each node completes at the same time.

[without selective][WALL: 1:30]
node-01
node-02
node-03
node-04
node-05
0s1:30
node-04 held the build · 4 nodes idle ~50% of run
[with selective][WALL: 0:50 ✓]
node-01
node-02
node-03
node-04
node-05
0s0:50
All five nodes finished together · suite done at 0:50

DECLARE WAR
ON FLAKES.

When a test fails, Selective immediately retries it on another node. If it passes the second time, it's recorded as a flake. From there it can be quarantined automatically so it doesn't fail the build, and it's indexed so you know when and where it happens.

[flake_dashboard][2 FLAKES]
testruns · oldest → newestratetrend
identity_spec#resolve_when_email············0%——
webhook_spec GET /hooks/github··F··F··F·F·33%↑ 4×◆ FLAKE
invoice_spec#per_committer············0%——
import_worker_spec#imports_batches·····F·····F17%↑ 2×◆ FLAKE
session_spec#refresh_token············0%——

GIVE YOUR
AGENT
SUPERPOWERS

With Selective's CLI, your agent can monitor test results in real time, enabling it to react before the suite is finished. For example, if a failure occurs, the agent can decide whether the build should continue or stop early.

[$ selective tail][STREAMING]
00:01✓identity_spec#resolve_when_github_id
00:01✓commit_resolution_worker_spec#perform
00:02⚠webhook_spec GET /hooks/github· flake
00:03✓portal_spec GET /billing/portal
00:03✓invoice_spec#per_committer
00:04✓team_spec#invite_member
00:05✓pricing_spec#proration
00:05✗billing_dashboard_spec#current_committer_count· failed on retry
00:06✓session_spec#refresh_token
00:06✓plan_spec#upgrade_path
00:07✓audit_log_spec#redact
00:08✓membership_spec#per_committer
[12 of 12 settled]

STOP WAITING
FOR CI.

We're adding teams to Selective a few at a time so we can give each one our attention. We'll help you get it running in your CI and stay close while your team settles in. When something gets in your way, you're talking to the people who can fix it.

made by Ben & Nate
ben
[ben]xgithub
nate
[nate]xgithub
built by ruby engineers who waited too long
[early access]

Early teams have a say in what we build next and in pricing. What you ask for moves up our list, and you'll help us land on a price that's good value for teams like yours.

[]SELECTIVE
© 2026 Selective