Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Before building on assumptions, validates them first. Prevents assumption cascades where one wrong guess leads to a completely wrong solution. Use when making claims about how code works, what exists, or diagnosing bugs without evidence.
.claude/skills/adityapeshave-sophos-sanity-check/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 20% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -18% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 82% | 0% |
Confidently building on assumptions that turn out to be wrong is a common failure mode. "The auth middleware probably checks X" becomes a 50-line solution for a problem that doesn't exist. This skill forces verification of key assumptions before building on them.
Before proposing a solution, list what you're assuming:
markdown## Assumptions 1. [The function X exists and does Y] 2. [The error is caused by Z] 3. [This file is imported by W] 4. [The config value is set to V]
For each assumption, verify it:
| Assumption | Verification | Status | |------------|--------------|--------| | Function X does Y | Read the function | Verified / Wrong | | Error caused by Z | Check error logs | Verified / Wrong | | File imported by W | Grep for imports | Verified / Wrong |
Stop if any key assumption is wrong. Don't patch - reassess.
Existence assumptions:
find, grep, lsBehavior assumptions:
Causation assumptions:
State assumptions:
Wrong assumption: "Auth is handled by middleware"
|
Build solution: "Just call the protected endpoint"
|
Solution fails: "Auth not working"
|
Wrong diagnosis: "Middleware must be misconfigured"
|
Deeper hole: "Let me fix the middleware..."
|
Reality: Auth was in the route handler all alongBreak the cascade early. Verify before building.
When working on non-trivial problems:
markdown## Sanity Check **Key assumptions:** 1. [assumption] - Verified by [how] 2. [assumption] - Verified by [how] 3. [assumption] - NOT verified, checking... **Proceeding with:** [list verified assumptions]
User: "The user signup isn't sending confirmation emails"
Bad approach (assumption cascade): > "The email service probably isn't configured correctly. Let me check > the SMTP settings... Actually, the email template might be wrong... > Let me also check if the queue is processing..."
Good approach (sanity check):
markdown## Sanity Check **Assumptions to verify:** 1. Signup actually triggers email sending 2. Email sending code exists and is called 3. Email service is configured 4. No errors in logs **Verifying #1:** Reading signup handler... Found: `sendConfirmationEmail(user)` on line 45. Verified: signup does call email function. **Verifying #2:** Reading sendConfirmationEmail... Found: it calls `emailService.send()`. But wait - there's a `if (config.emailEnabled)` check on line 12. **Verifying #3:** Checking config... `emailEnabled: false` in development. **Root cause found:** Emails disabled in config, not a bug.
No assumption cascade. Verified each step. Found real cause.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 12,034 | 8,340 | -31% | 1 | 1 | 0% | 2,015 | 2,418 | +20% | 0 | 0 | — |
case-02 | fail→fail | 12,428 | 8,863 | -29% | 1 | 1 | 0% | 1,921 | 2,527 | +32% | 0 | 0 | — |
case-03 | fail→fail | 18,148 | 9,632 | -47% | 1 | 1 | 0% | 1,885 | 2,616 | +39% | 0 | 0 | — |
case-04 | fail→pass | 9,214 | 5,516 | -40% | 1 | 1 | 0% | 1,508 | 1,867 | +24% | 0 | 0 | — |
case-05 | fail→fail | 5,622 | 7,984 | +42% | 1 | 1 | 0% | 1,028 | 2,428 | +136% | 0 | 0 | — |
case-06 | fail→pass | 17,251 | 8,722 | -49% | 1 | 1 | 0% | 3,004 | 2,470 | -18% | 0 | 0 | — |
case-07 | fail→fail | 7,109 | 8,828 | +24% | 1 | 1 | 0% | 1,344 | 2,606 | +94% | 0 | 0 | — |
case-08 | fail→fail | 14,730 | 10,593 | -28% | 1 | 1 | 0% | 2,527 | 2,729 | +8% | 0 | 0 | — |
case-09 | fail→pass | 7,973 | 6,158 | -23% | 1 | 1 | 0% | 1,647 | 1,995 | +21% | 0 | 0 | — |
case-10 | fail→pass | 9,281 | 9,074 | -2% | 1 | 1 | 0% | 1,436 | 2,612 | +82% | 0 | 0 | — |
case-11 | fail→pass | 12,132 | 9,969 | -18% | 1 | 1 | 0% | 2,396 | 2,751 | +15% | 0 | 0 | — |
case-12 | fail→fail | 7,379 | 7,452 | +1% | 1 | 1 | 0% | 1,352 | 2,287 | +69% | 0 | 0 | — |
case-13 | fail→pass | 11,107 | 8,182 | -26% | 1 | 1 | 0% | 2,059 | 2,258 | +10% | 0 | 0 | — |
case-14 | fail→fail | 8,120 | 8,951 | +10% | 1 | 1 | 0% | 1,455 | 2,590 | +78% | 0 | 0 | — |
case-15 | fail→fail | 5,318 | 6,777 | +27% | 1 | 1 | 0% | 1,160 | 2,150 | +85% | 0 | 0 | — |
case-16 | fail→pass | 5,765 | 6,821 | +18% | 1 | 1 | 0% | 1,143 | 2,222 | +94% | 0 | 0 | — |
case-17 | fail→fail | 10,029 | 7,390 | -26% | 1 | 1 | 0% | 1,980 | 2,303 | +16% | 0 | 0 | — |
case-18 | fail→fail | 10,983 | 9,980 | -9% | 1 | 1 | 0% | 2,159 | 2,545 | +18% | 0 | 0 | — |
case-23 | fail→fail | 6,316 | 10,348 | +64% | 1 | 1 | 0% | 1,082 | 2,865 | +165% | 0 | 0 | — |
case-19 | fail→pass | 11,453 | 6,349 | -45% | 1 | 1 | 0% | 1,425 | 2,128 | +49% | 0 | 0 | — |
case-20 | pass→pass | 4,231 | 3,254 | -23% | 1 | 1 | 0% | 737 | 1,593 | +116% | 0 | 0 | — |
case-21 | pass→pass | 1,948 | 2,075 | +7% | 1 | 1 | 0% | 386 | 1,353 | +251% | 0 | 0 | — |
case-22 | pass→pass | 3,642 | 4,000 | +10% | 1 | 1 | 0% | 581 | 1,612 | +177% | 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. The headline lift of +39 percentage points is the difference between those two pass rates over the 23 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.