Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when defining, reviewing, or operating SLOs/SLIs/error budgets. Triggers on "define an SLO", "what should our SLO be", "error budget", "burn rate", "SLI", "service level objective", "Google SRE workbook", "multi-window burn-rate alert", or any reliability-target question. Ships SLO designer, error-budget calculator with multi-window burn-rate thresholds, and SLO reviewer that catches the common bugs (target too aggressive, window too short, conflicting SLOs, no SLI definition). 4 references
.claude/skills/alirezarezvani-slo-architect/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 80% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 145% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 42% | 0% |
Define SLOs that mean something. Most "SLOs" in the wild are arbitrary numbers no one believes — 99.9% on every endpoint, no SLI definition, no error budget, no policy for what happens when budget burns. This skill enforces the discipline from Google's SRE Workbook: pick the right SLI, set a target users actually care about, calculate the error budget, wire multi-window burn-rate alerts, and have a written policy for when budget runs out.
observability-designerperformance-profilerincident-responseSLI ⟶ measurable signal of user-perceived health (e.g., HTTP 2xx rate)
SLO ⟶ target for the SLI over a window (e.g., 99.9% over 30 days)
SLA ⟶ customer-facing commitment with consequences (separate concern)
EB ⟶ error budget: 100% − SLO target = how much "bad" you can spend
BR ⟶ burn rate: how fast you're consuming the error budgetThe four cardinal mistakes:
The 3 tools below catch each of these.
bashSKILL=engineering/slo-architect/skills/slo-architect # 1. Design an SLO python "$SKILL/scripts/slo_designer.py" \ --service checkout-svc \ --sli-type request-success-rate \ --target 99.9 \ --window-days 30 # 2. Compute error budget + multi-window burn-rate alerts python "$SKILL/scripts/error_budget_calculator.py" \ --target 99.9 --window-days 30 # 3. Review existing SLO definitions for common bugs python "$SKILL/scripts/slo_review.py" --slo-doc docs/slos/
All stdlib-only.
slo_designer.pyGenerates a structured SLO definition with required fields. Refuses to render if any required field is missing (exit 1).
bashpython scripts/slo_designer.py \ --service checkout-svc \ --sli-type request-success-rate \ --target 99.9 \ --window-days 30 \ --owner team-checkout
SLI types supported:
request-success-rate — (total_requests - bad_requests) / total_requestsrequest-latency — count(requests < threshold) / total_requestsavailability-time — (window - downtime) / windowdata-freshness — count(data_age < threshold) / total_data_pointscorrectness — count(correct_outputs) / total_outputsOutput is markdown by default with all required fields filled or marked <must define>. JSON output (--format json) is consumed by slo_review.py.
error_budget_calculator.pyGiven target availability + window, computes:
bashpython scripts/error_budget_calculator.py --target 99.9 --window-days 30 python scripts/error_budget_calculator.py --target 99.95 --window-days 7 --format json
slo_review.pyAudits a directory of SLO definitions (markdown or JSON) for the common bugs.
bashpython scripts/slo_review.py --slo-doc docs/slos/
Checks:
target_too_high: target ≥ 99.99% (sustainable only with massive engineering investment)target_too_low: target ≤ 99.0% (probably wrong SLI; users will notice)window_too_short: window < 7 days (statistical noise dominates)window_too_long: window > 90 days (slow feedback)no_sli_definition: SLI section missing or vague ("everything OK")no_error_budget_policy: no documented action when budget burnscpu_as_sli: CPU/memory used as user-experience proxy (wrong signal)| User experience | SLI type | What you measure | |---|---|---| | "Did the request succeed?" | request-success-rate | 2xx / total | | "Was the response fast?" | request-latency | count(p99 < threshold) / total | | "Was the service up?" | availability-time | (window - downtime) / window | | "Is the data current?" | data-freshness | count(data_age < threshold) / total | | "Was the answer correct?" | correctness | count(correct) / total |
See references/sli_design.md for examples and anti-patterns.
For 99.9% SLO over 30 days:
0.1% × 30 × 24 × 60 = 43.2 minutes2% × 43.2 / 60 ≈ 1.44 ratio multiplier10% × 43.2 / 360 ≈ 0.6 ratio multipliererror_budget_calculator.py does this math for you and emits ready-to-paste alert rules.
This skill explicitly composes with three others:
| Skill | Composition | |---|---| | feature-flags-architect | Rollout abort criteria reference SLO burn-rate thresholds | | chaos-engineering | Blast-radius calculator already takes monthly error budget as input — define it here | | kubernetes-operator | Operator capability L4 (Deep Insights) requires SLOs + Prometheus rules |
The error_budget_calculator.py output is in the same shape engineering/skills/chaos-engineering/scripts/blast_radius_calculator.py expects on stdin.
1. Pick the user journey to protect (e.g., "checkout completion").
2. Choose SLI type (request-success-rate, latency, availability, freshness, correctness).
3. Define the SLI precisely: numerator/denominator with concrete labels.
4. Pick a target by measuring 30 days of historical SLI value:
target = floor(p50 of last 30 days × 100) / 100
This avoids targets the system has never sustained.
5. Pick a window (28 days = 4 calendar weeks, recommended).
6. Run slo_designer.py to render the SLO definition.
7. Run error_budget_calculator.py to get burn-rate alerts.
8. Write the error budget policy (what happens when budget burns).
9. Run slo_review.py — must pass before the SLO is "live".1. For every active SLO, run slo_review.py — fix any FAIL findings.
2. Look at last quarter's data:
- Was the SLO too easy (never burned budget)? Tighten target.
- Was it too hard (frequently burned)? Loosen target OR fix the system.
- Did burn-rate alerts fire usefully (not too noisy, not too late)? Adjust thresholds.
3. Audit error budget policies — were they actually followed when budget burned?
4. Commit revised SLOs; archive old versions with date stamps.1. New deploy starts burning error budget faster than baseline.
2. Burn-rate alert fires (from error_budget_calculator.py thresholds).
3. Auto-rollback via feature flag (kill switch from feature-flags-architect).
4. Postmortem feeds into next SLO revision.references/slo_principles.md — SLI vs SLO vs SLA, Google SRE Workbook canonreferences/sli_design.md — picking the right SLI; 5 types with examplesreferences/error_budget.md — error budget math, burn-rate alerts, budget policyreferences/composition.md — how SLOs feed feature flags, chaos, operators/slo-design — interactive SLO design wizard that runs all 3 tools.
assets/slo_template.yaml — fillable SLO YAMLassets/error_budget_policy.md — fillable policy templateA team using this skill should achieve:
slo_review.py with 0 FAIL findings| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 14,581 | 5,357 | -63% | 1 | 1 | 0% | 2,405 | 3,016 | +25% | 0 | 0 | — |
case-02 | fail→pass | 14,597 | 10,329 | -29% | 1 | 1 | 0% | 2,597 | 4,684 | +80% | 0 | 0 | — |
case-03 | fail→pass | 11,257 | 3,329 | -70% | 1 | 1 | 0% | 1,911 | 3,278 | +72% | 0 | 0 | — |
case-04 | fail→pass | 8,915 | 7,339 | -18% | 1 | 1 | 0% | 1,628 | 3,996 | +145% | 0 | 0 | — |
case-05 | pass→pass | 3,850 | 4,422 | +15% | 1 | 1 | 0% | 834 | 3,542 | +325% | 0 | 0 | — |
case-06 | pass→pass | 6,579 | 7,085 | +8% | 1 | 1 | 0% | 1,349 | 4,110 | +205% | 0 | 0 | — |
case-07 | pass→pass | 9,538 | 6,533 | -32% | 1 | 1 | 0% | 1,706 | 3,995 | +134% | 0 | 0 | — |
case-08 | pass→pass | 4,010 | 3,244 | -19% | 1 | 1 | 0% | 747 | 3,294 | +341% | 0 | 0 | — |
case-09 | pass→pass | 4,246 | 3,355 | -21% | 1 | 1 | 0% | 738 | 3,298 | +347% | 0 | 0 | — |
case-10 | pass→pass | 6,380 | 3,661 | -43% | 1 | 1 | 0% | 1,047 | 3,278 | +213% | 0 | 0 | — |
case-11 | fail→pass | 10,813 | 2,843 | -74% | 1 | 1 | 0% | 1,727 | 3,140 | +82% | 0 | 0 | — |
case-12 | fail→pass | 12,997 | 2,987 | -77% | 1 | 1 | 0% | 2,233 | 3,172 | +42% | 0 | 0 | — |
case-13 | fail→pass | 9,674 | 2,236 | -77% | 1 | 1 | 0% | 1,618 | 3,056 | +89% | 0 | 0 | — |
case-14 | fail→pass | 15,579 | 8,256 | -47% | 1 | 1 | 0% | 2,781 | 4,154 | +49% | 0 | 0 | — |
case-15 | pass→pass | 13,636 | 8,936 | -34% | 1 | 1 | 0% | 2,380 | 4,141 | +74% | 0 | 0 | — |
case-16 | pass→pass | 7,164 | 5,480 | -24% | 1 | 1 | 0% | 1,230 | 3,552 | +189% | 0 | 0 | — |
case-17 | fail→pass | 10,776 | 9,964 | -8% | 1 | 1 | 0% | 2,115 | 4,637 | +119% | 0 | 0 | — |
case-18 | fail→pass | 34,722 | 6,915 | -80% | 1 | 1 | 0% | 2,182 | 4,270 | +96% | 0 | 0 | — |
case-19 | fail→pass | 12,776 | 7,131 | -44% | 1 | 1 | 0% | 1,858 | 3,708 | +100% | 0 | 0 | — |
case-20 | pass→pass | 19,303 | 18,533 | -4% | 1 | 1 | 0% | 3,068 | 5,951 | +94% | 0 | 0 | — |
case-21 | fail→fail | 15,642 | 11,711 | -25% | 1 | 1 | 0% | 2,584 | 4,533 | +75% | 0 | 0 | — |
case-22 | fail→pass | 14,222 | 11,790 | -17% | 1 | 1 | 0% | 2,435 | 4,635 | +90% | 0 | 0 | — |
case-23 | fail→fail | 8,711 | 12,352 | +42% | 1 | 1 | 0% | 1,646 | 4,821 | +193% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 21 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +48 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.