Everything you need to trust your test suite
A comprehensive observability layer that sits above your existing test infrastructure.
Three-Tier Classification Pipeline
CoreThe three heads of Cerberus: rules → cache → AI. Each tier is progressively more expensive. The rule-based pre-filter resolves ~40% of failures with zero API cost. The verdict cache prevents re-classifying the same recurring failure shape. Only genuinely new error signatures reach the AI provider.
| 1 | "comment"># The classifier "keyword">runs automatically |
| 2 | "function">cerberus "keyword">classify --"keyword">run-id $CI_RUN_ID |
| 3 | |
| 4 | "comment"># Verdicts stored: flaky | regression | unknown |
| 5 | "comment"># Each classified_by: rules | cache | ai | mock |
Deterministic Gate
The gate NEVER calls an AI provider. It reads stored verdicts and applies deterministic rules. This ensures gate behavior is 100% reproducible — the same code change always produces the same outcome, regardless of AI provider availability or latency.
| 1 | gate: |
| 2 | fail_on_regression: true |
| 3 | fail_on_unknown: false |
| 4 | fail_on_perf_regression: true |
| 5 | max_new_flaky_tests: 3 |
Performance Regression Detection
NewStatistical comparison against branch baselines. Uses rolling median (robust to outliers) computed from the target branch's history. Supports manual baselines from known-good runs. Cold start is handled gracefully — insufficient history warns but doesn't fail.
| 1 | "comment"># Set a known-good "keyword">baseline |
| 2 | "function">cerberus "keyword">baseline "keyword">set --"keyword">run-id $GOOD_RUN --label "v1.0 release" |
| 3 | |
| 4 | "comment"># Check performance |
| 5 | "function">cerberus "keyword">gate --"keyword">run-id $CI_RUN_ID |
| 6 | |
| 7 | "comment"># page_load_ms: 800ms → 1100ms (+37.5%) |
| 8 | "comment"># ❌ Regression flagged (>20% threshold) |
Provider-Agnostic AI
Two adapters cover the entire market. ClaudeProvider (native SDK) and OpenAICompatibleProvider (raw fetch, covers OpenAI, Groq, Ollama, and 20+ others). Switch with a config change — no code changes needed.
| 1 | # Switch from Claude to Ollama |
| 2 | ai: |
| 3 | provider: openai-compatible |
| 4 | base_url: http://localhost:11434/v1 |
| 5 | model: llama3 |
| 6 | api_key_env: null |
GitHub Action
One line to add to your workflow. Cerberus handles the full pipeline: ingest, classify, gate, report. Works with any test framework that outputs JUnit XML or Playwright JSON.
| 1 | - uses: EvertonSt/cerberus-ci-action@v1 |
| 2 | with: |
| 3 | ai-provider: claude |
| 4 | ai-api-key: ${{ secrets.ANTHROPIC_API_KEY }} |
| 5 | github-token: ${{ secrets.GITHUB_TOKEN }} |
| 6 | test-results-path: ./test-results/results.json |
| 7 | annotations: true |
PR Comments
Plain-English quality reports posted on every pull request. Deduplicated (updates existing comment, no spam). Includes gate status, flaky count, regression count, performance deltas, and AI-generated analysis.
Run Comparison
Diff two CI runs side-by-side. See new failures, resolved issues, status changes, and performance deltas at a glance. Auto-selects the previous run on the same branch.
| 1 | "function">cerberus "keyword">compare --"keyword">run-id $RUN_B |
| 2 | "comment"># BEFORE: "keyword">run-A (aaa111) @ 2026-01-10 |
| 3 | "comment"># AFTER: "keyword">run-B (bbb222) @ 2026-01-11 |
| 4 | "comment"># 🔴 New failures: 1 |
| 5 | "comment"># 🟢 Resolved: 1 |
| 6 | "comment"># 📈 page_load_ms: 800ms → 1100ms (+37.5%) |
Trends Analysis
Analyze flaky test patterns across multiple runs. Detect worsening, improving, and stable tests. See the worst offenders by fail rate and get actionable recommendations.
| 1 | "function">cerberus "keyword">trends --branch main |
| 2 | "comment"># Total "keyword">runs analyzed: 50 |
| 3 | "comment"># Overall fail rate: 12% |
| 4 | "comment"># 📈 checkout.spec.ts:42 — 40% fail rate (worsening) |
Zero-Cost Mock Mode
Every feature works without any API key. MockProvider uses deterministic local heuristics to classify failures. Full pipeline is testable and demoable in CI with zero external API cost.