Alpha · GitHub Actions

Find the commit that made your test flaky.

Culprit watches your CI, tells genuine flakes from real failures, and bisects your history to the commit that introduced the flake.

Free during the alpha · read-only CI access

Culprit watching CI
test_user_auth_timeoutflaky

fails 1 in 7 runs · 128 commits bisected

128 commits searched1 culprit
a1b3f9cDKculprit

auth: make timeout non-blocking

No rewrites, no new framework — just the guilty commit.

By hand
git bisect start
git bisect bad HEAD
git bisect good v2.9
# check out, re-run the suite, mark
# repeat — 7 rounds, flaky each time
~2 hrsper flake
With Culprit
culprit watches CI

test_user_auth_timeout
  → a1b3f9c  @dkovac
  fails 1 in 7 runs
~2 min0 manual re-runs

Runs on GitHub Actions today · illustrative, not an adoption claim

Everyone knows the test is flaky. Nobody knows when it broke.

So it gets skipped, and stays skipped, forever.

@pytest.mark.skip(reason="flaky, will fix later")

Put a number on your flaky tests.

Re-runs waste CI time. Manual bisects waste engineer hours. Most calculators only count the first.

12
500
2%
5 min
CI runs / engineer / day
3
Working days / month
22
Bisect time / flake
2 hrs
Avg engineer rate
$75/hr
Re-run waste
660 hrs/mo
Manual bisectnot in other tools
22 hrs/mo
Estimated monthly cost
$51,150
10 flaky tests · 75/hr

Culprit eliminates the bisect line entirely. Join the alpha

Watch runs, tell flakes from failures, blame the PR.

01

Connect CI

Point Culprit at your GitHub Actions runs. It reads results you already produce.

02

Detect

It scores tests by pass/fail instability and surfaces the genuine flakes, not the real breaks.

03

Blame

It bisects the suspect range to one commit and posts a linkable report on the PR.

A linkable blame report, right on the PR.

Which test, which commit, which author, how often it fails.

github.com/acme/payments-api/pull/482
auth: make timeout non-blocking#482 Open
dkovac wants to merge 1 commit into main from auth-timeout
culpritbotcommented 2 hours ago

Flaky test introduced in this pull request.

test_user_auth_timeout started failing intermittently after this change. I bisected 128 commits down to the one that first introduced the flake:

$ culprit bisect test_user_auth_timeout
bisecting 128 commits · 7 steps · out of band
culprita1b3f9cauth: make timeout non-blocking
author   @dkovac · 4 days ago
fails    1 in 7 runs · confirmed on 7 re-runs
recent runs
reproduced on 7 out-of-band re-runs 4 2view bisect log

Wedge on GitHub Actions now.

Buildkite, CircleCI, and GitLab CI are on the roadmap.

GitHub Actionssupported today
BuildkiteCircleCIGitLab CIon the roadmap

Free while we prove it works.

A planned $15–25 per committer per month when it does.

Alpha
Freeduring the alpha

Free while we prove Culprit can attribute a fixed test to its bisect output.

  • Flake vs. real-failure detection
  • Automatic commit bisect
  • Linkable PR blame report
  • No card required
Claim an alpha seat

Planned $15–25 / committer / month at launch

Questions an engineer asks before trusting an auto-bisect tool.

How do you tell a flake from a real failure?

A test that fails, then passes on a plain re-run with no code change, is treated as a flake. A test that fails consistently is a real failure, and Culprit leaves it alone.

Does it slow down my CI?

Which CI systems do you support?

What access do you need?

Stop re-running. Start fixing.

The alpha is free and read-only. We only ask for one thing back: tell us the fixed test you attribute to a Culprit bisect.

GitHub Actions today · Buildkite, CircleCI, GitLab CI on the roadmap