CI runs only what hasn't passed yet
With hushrun, a check that already passed on this exact code skips in CI. Tests that already passed on the files they read can be left out, and compiled code can be downloaded instead of rebuilt.
Free to start, with GitHub.
Or run this at your repository's root:
npx hushrun initIt finds your checks, signs you in with GitHub so results are shared with CI and your team, and shows every change before making it.
What CI doesn't do again Checks, tests, compiled code.
hushrun: e2e skipped: this exact code passed 1 min ago (saves 16s) hushrun: unit passed in 3s; reusing 98 tests saved about 1s; it won't run again on this code hushrun: build: 226 of 360 crates reused (226 from the shared store), 134 built, saving about 2m 3s
A check that passed
When a laptop, an agent's sandbox or an earlier run passed this check on the same files, the job skips it and exits 0, as a pass. That covers the push after your agent passed the checks, the run after a merge, and a re-run after a flaky job.
Tests that already passed
When a check's code changed, CI can leave out the tests that already passed on the files they read, and run the rest. It's off until you turn it on, check by check.
Compiled code
On GitHub Actions, a job downloads what the CI of your trusted branches (branches an admin lists) already compiled instead of compiling it again, and a pull request also reuses what its earlier runs built. CI never reuses what a laptop built. The shared store is off until an admin turns it on.
Each line is hushrun's output as its docs print it: an example of what it says, not a measurement.
hushrun's own CI, counted Every run, from public logs.
hushrun/hushrun, every CI run9 to 11 Nov 2026, oldest firsthushrun's own repository, hushrun/hushrun: 290 checks in 26 CI runs, from November 9, 2026 to November 11, 2026. hushrun skipped 171 of them because this exact code had already passed, and ran 119. The skips saved 1 h 55 min.
290checks, in 26 CI runs
171skipped: already passed
1 h 55 minof checks not run again
The figure counts whole checks skipped in hushrun's own repository, not tests left out or compiled code reused, which have no count here yet. One repository is an example, not a promise: to put in your own numbers, use the CI cost calculator.
- ran: no pass yet for this exact code
- skipped: this exact code already passed
Counted from the repository's public job logs. A column is one CI run, and a row is one check.
Set it up in CI One command, then a push.
At the repository's root, npx hushrun init wraps your checks where they are, in a script or in CI's files. The commands stay the same.
On GitHub Actions, commit and push
init gives each job that runs a wrapped check
id-token: write. The job's ID token proves which repository it runs for, so there's no secret to store. CI starts recording.On other CI, store two secrets
GitLab CI, CircleCI, Buildkite, Jenkins and the rest use an agent token and a machine key, stored as masked secrets.
Turn on test reuse where it pays
It's off until you turn it on, check by check. Start by watching: every test runs, and the run says what reuse would have left out.
Ask an admin for the shared store
Reusing compiled code across machines is off for every organization until an admin turns it on, and then it starts by watching. In CI it works on GitHub Actions today.
Matrices, reusable workflows, merge queues and reports a later step reads: Set up CI.
What a skip doesn't save Know these before you count.
The job still starts
A skip saves the check's time, not the job's. The runner still starts, checks out the code and installs dependencies, then the check exits 0 at once. To skip whole jobs: Skip CI when the code hasn't changed.
A pull request checks the merge
GitHub checks a pull request's branch merged into its base. Once something else lands on the base, those are new files, and every check whose files changed runs, whatever passed on the branch.
Jobs with variants
In a job with variants, such as a matrix, each variant skips only on its own CI pass. A pass from a laptop or an agent doesn't skip it.
It saves repeats, not first runs: code nobody checked yet runs every check that covers it. What a skip saves.
Questions about CI
- Does it work with GitHub Actions?
- Yes, with no secret to store: each job that runs a wrapped check gets an ID token from GitHub. Reusing compiled code from the shared store works in CI on GitHub Actions only, for now.
- Does it work with GitLab CI or other CI?
- Checks skip on any CI. GitLab CI, CircleCI, Buildkite, Jenkins and the rest use an agent token and a machine key, stored as secrets. GitLab CI doesn't use the shared store of compiled code yet. Other CI
- How much CI time will it save?
- As much as the checks that come back to the same files take. A skip saves as long as that check's pass took, and the job still starts. Estimate savings, or put your numbers in the calculator.
- Is it safe to skip a check in CI?
- A check skips only for the exact files, command and check name that passed, signed by a member's machine, one of your agent tokens or your repository's CI. An admin can make a repository's CI skip only on CI's own passes. Why a skip is safe
- What does it cost?
- Skips are free. CI needs hushrun's hosted service, free up to 2,000 recorded checks a month: results kept on one machine are off in CI.
Try it on one workflow
Sign up with GitHub, then run one command at your repository's root.
npx hushrun initWant help setting it up?
Leave your work email, and we'll write back.