Features Roadmap GitHub ↗
Sponsor ↓ Download
v1.2 Lab Test is here — reproduce CI flakiness locally
macOS & Linux Developer Tool

Tired of babysitting
your pipelines?

Paste a PR or workflow URL. Tell SubCat how many times to run it. Go back to work. You'll be notified when you have an answer.

Open Source Signed & notarized · Apple Silicon & Intel · Free
SubCat app — dashboard
The problem

Your local runs are green.
Your pipelines aren't.

🎲

Non-deterministic failures

Passes locally, passes in review, then fails in main. Nobody can reproduce it.

Manual retry loops

Engineers watching CI, clicking Re-run. Repeat. Repeat. Repeat. Hours lost every week.

💸

Today's solutions cost a bunch of money

BuildPulse requires cloud hooks, org admin access, and a budget approval and $299/month.

🔎

No isolation

Most tools only say "it failed", they don't say which test, not how often, not why.

Features

Built for one thing.
Done right.

New in v1.2 — Core differentiator

Lab Test.
Reproduce CI flakiness locally.

Point it at your repo. Pick a test command. SubCat runs it in a Docker container with CI-matched CPU and memory, repeated N times, streaming live output. Pass/fail/flaky counts with the failing test names — no CI round-trip, no 40-minute feedback loop.

Playwright · Jest · Vitest · Nx. Stress factors (network latency, packet loss, CPU contention, stale reads) optional. Env file injection and custom install commands supported.

🧪 $npx playwright test
MEDIUM
CI-matched cpu4 cores · ram14 GB · osubuntu-22.04
Stress factors
Latency 150ms Packet loss CPU contention Stale reads
Iteration 7 of 10 4 pass·2 fail·1 flaky
FAIL checkout.spec.ts › applies coupon code
🧪

Stress Factors

Simulate CI conditions that don't show up on your laptop. Network latency, packet loss, CPU contention, file descriptor limits, timezone, stale reads. One toggle each, or Light / Medium / Heavy presets.

Works with your stack

Playwright uses --repeat-each. Jest, Vitest, and Nx fall back to a shell loop with iteration sentinels so progress tracking works for every test runner, not just one.

🔁

Repeat Mode

Set any GitHub Actions run to execute N times automatically. Each iteration is tracked, logged, and compared. Flaky tests expose themselves when you run them enough.

🔔

Watch Mode

Paste a GitHub Actions run URL. Get a native macOS notification when it finishes. No tab watching, no refresh loops.

Rerun Failed Only

When a run fails, re-trigger only the failed jobs — not the full workflow. Faster flake confirmation, less CI spend.

📋

Run History

Every run, every iteration — logged with status, duration, and failed test names. Persists across app restarts.

🔗

PR Integration

Paste a PR URL and SubCat resolves the workflows automatically. SubCat auto-detects your open PRs — no URL needed.

📌

Pinned Workflows

Pin a workflow URL and SubCat tracks the latest run automatically — always up to date without re-pasting on every push.

Cancel Runs

Cancel an in-progress run directly from SubCat — no need to open GitHub. Full run lifecycle control from your menu bar.

Report Generation

Markdown reports.
Built-in.

After every repeat run, SubCat exports a structured .md report with a table of results, clickable run links, and per-iteration failed test names. Drop it in a PR comment or your team's wiki.

New in v1.2: root-cause hints and artifact links for every failed iteration, straight from the drill-down viewer.

No extra tooling. No parsing. One click.

subcat-report-12847301.md
# CI / test (ubuntu-latest)
**Runs:** 5 · **Passed:** 3 · **Failed:** 2
| Run # | Result | Duration | Failed Tests |
[1]✅ pass2m 14s
[2]❌ fail1m 58s2 tests
[3]✅ pass2m 07s
[4]❌ fail2m 01s2 tests
[5]✅ pass2m 11s
UserAuthTest::testSessionExpiry
SessionTokenTest::testRefresh

Fully open source. No strings attached.

SubCat is MIT licensed and built in the open. No tracking, no telemetry, no accounts. Your GitHub token never leaves your machine — it's encrypted with macOS safeStorage. Read the code, fork it, improve it.

How it works

Three steps.
Zero friction.

1

Connect GitHub

Sign in via OAuth Device Flow — no config files. Token encrypted with macOS safeStorage.

2

Paste & set

Paste a GitHub Actions run or PR URL. Set a repeat count — ×1 to watch, ×10 to hunt flakes.

3

Read the pattern

SubCat polls every 15s, triggers reruns, and surfaces which tests failed. Native notification when done.

The alternative
$299
per month, billed annually
Flaky test detection
Requires org admin & webhooks
Cloud SaaS — your data leaves
Needs budget approval
Closed source
SubCat
Free
forever · MIT licensed · macOS & Linux
Flaky test detection
No webhooks, no org access needed
Runs locally — nothing leaves your machine
Download and run in 60 seconds
Open source — read & fork the code
Roadmap

What's next.

SubCat ships fast. Here's what's coming.

Watch without limit

Next

Continuous watch mode — keep re-running a workflow until you manually stop it. Essential for overnight flake hunts.

Pin a workflow

Shipped

Paste a workflow URL (not a run) and SubCat tracks the latest run automatically — always up to date, no re-pasting on every push.

GitHub App migration

Planned

Move from OAuth App (full repo scope) to GitHub App for granular, minimal permissions.

Linux

Shipped

SubCat runs on Linux. Windows is possible — investigating demand before committing to distribution.

Rerun failed only

Shipped

Re-trigger only the failed jobs instead of the full workflow. Faster flake confirmation, less CI spend.

Auto-detect PRs

Shipped

SubCat automatically detects your open PRs and surfaces their latest runs without any URL pasting.

SubCat

Polling every 15 seconds.
So you don't have to.

SubCat runs quietly, watching your CI runs in real time. No browser tabs, no constant refreshing. Get a native macOS notification the moment something needs your attention.

Get started

Stop guessing.
Start knowing.

Signed · Notarized · Auto-updating · macOS & Linux