[]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.

Free while in open beta · no card · 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.

Selective is free while in open beta. Copy the prompt and let your agent do the setup. We're two engineers building this with our first customers, so early adopters get a real say in the product and the pricing.

made by Ben & Nate
ben
[ben]xgithub
nate
[nate]xgithub
built by ruby engineers who waited too long
[prompt for your agent]
Set up Selective test selection in this repository.

1. Add the gem: run `bundle add selective-ruby-rspec` (or `selective-ruby-minitest` if this repo uses Minitest).
2. In the CI config, replace the test command `bundle exec rspec` with `bundle exec selective rspec` (or `bundle exec selective minitest`).
3. Read the API key from a CI secret named SELECTIVE_API_KEY. Do not commit the key; I will add it to CI myself.
4. Open a pull request with the change and tell me which CI config file you edited.
5. After CI runs, install the Selective CLI (https://selective.ci/docs/cli) and run `selective tail` in this repo to stream the results.

Docs for you: https://selective.ci/llms.txt
[]SELECTIVE
© 2026 Selective