Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when the workflow lacks error handling, has been failing in production, or needs retry logic, fallback strategies, and circuit breakers.
.claude/skills/sharpdeveye-fortify/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 137% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -14% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 10% | 0% |
| case-18 | ✗→✓ | ▲ Improved | -31% | 0% |
| case-19 | ✗→✓ | ▲ Improved | -18% | 0% |
Invoke /agent-workflow — it contains workflow principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding — if no workflow context exists yet, you MUST run /teach-maestro first. Consult the guardrails-safety reference in the agent-workflow skill for defense-in-depth patterns and error boundary design.
Make the workflow resilient. Every external call will fail eventually — model APIs, tools, databases, third-party services. Fortify ensures the workflow handles failure gracefully.
Layer 1: Input Validation
Layer 2: Retry with Backoff For transient failures (network errors, rate limits, timeouts):
yamlRetry strategy: max_retries: 3 initial_delay: 1s backoff_multiplier: 2 max_delay: 30s retryable_errors: [429, 500, 502, 503, 504, TIMEOUT, CONNECTION_ERROR] non_retryable_errors: [400, 401, 403, 404]
Layer 3: Fallback Responses When retries are exhausted:
Layer 4: Circuit Breakers When a service is consistently failing:
yamlCircuit breaker: failure_threshold: 5 consecutive failures state: CLOSED → OPEN (after threshold) → HALF_OPEN (after cooldown) cooldown: 60 seconds half_open_max_requests: 1
Layer 5: Timeout Controls Every external call needs a timeout:
For each component, verify:
After fortification, run /evaluate to verify error handling works under realistic failure scenarios.
NEVER:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | pass→pass | 16,863 | 17,079 | +1% | 1 | 1 | 0% | 2,795 | 2,869 | +3% | 0 | 0 | — |
case-01 | fail→fail | 56,635 | 35,841 | -37% | 1 | 1 | 0% | 5,915 | 6,006 | +2% | 0 | 0 | — |
case-02 | fail→fail | 21,563 | 31,020 | +44% | 1 | 1 | 0% | 3,520 | 6,255 | +78% | 0 | 0 | — |
case-03 | fail→fail | 33,711 | 34,477 | +2% | 1 | 1 | 0% | 6,214 | 6,880 | +11% | 0 | 0 | — |
case-04 | fail→fail | 16,764 | 18,528 | +11% | 1 | 1 | 0% | 2,866 | 4,104 | +43% | 0 | 0 | — |
case-06 | pass→pass | 14,148 | 11,964 | -15% | 1 | 1 | 0% | 2,314 | 2,778 | +20% | 0 | 0 | — |
case-07 | fail→fail | 18,286 | 26,336 | +44% | 1 | 1 | 0% | 2,900 | 4,944 | +70% | 0 | 0 | — |
case-08 | pass→pass | 14,517 | 12,440 | -14% | 1 | 1 | 0% | 2,244 | 2,672 | +19% | 0 | 0 | — |
case-09 | fail→pass | 30,156 | 12,469 | -59% | 1 | 1 | 0% | 1,121 | 2,657 | +137% | 0 | 0 | — |
case-10 | fail→pass | 8,556 | 2,738 | -68% | 1 | 1 | 0% | 1,195 | 1,028 | -14% | 0 | 0 | — |
case-11 | pass→pass | 10,819 | 4,226 | -61% | 1 | 1 | 0% | 1,690 | 1,256 | -26% | 0 | 0 | — |
case-12 | pass→pass | 13,775 | 4,142 | -70% | 1 | 1 | 0% | 2,014 | 1,321 | -34% | 0 | 0 | — |
case-13 | pass→pass | 22,867 | 16,121 | -30% | 1 | 1 | 0% | 2,185 | 2,711 | +24% | 0 | 0 | — |
case-14 | fail→pass | 13,180 | 9,556 | -27% | 1 | 1 | 0% | 2,016 | 2,210 | +10% | 0 | 0 | — |
case-15 | pass→pass | 14,389 | 15,053 | +5% | 1 | 1 | 0% | 2,191 | 2,850 | +30% | 0 | 0 | — |
case-16 | pass→pass | 12,866 | 10,775 | -16% | 1 | 1 | 0% | 1,985 | 2,329 | +17% | 0 | 0 | — |
case-17 | pass→pass | 14,121 | 14,428 | +2% | 1 | 1 | 0% | 2,337 | 3,259 | +39% | 0 | 0 | — |
case-18 | fail→pass | 10,266 | 3,093 | -70% | 1 | 1 | 0% | 1,692 | 1,171 | -31% | 0 | 0 | — |
case-19 | fail→pass | 8,363 | 2,466 | -71% | 1 | 1 | 0% | 1,200 | 985 | -18% | 0 | 0 | — |
case-20 | pass→pass | 14,747 | 19,388 | +31% | 1 | 1 | 0% | 3,205 | 4,745 | +48% | 0 | 0 | — |
case-21 | pass→pass | 9,859 | 19,461 | +97% | 1 | 1 | 0% | 1,997 | 4,240 | +112% | 0 | 0 | — |
case-22 | pass→pass | 19,387 | 24,127 | +24% | 1 | 1 | 0% | 3,443 | 4,851 | +41% | 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. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 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 +23 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.