Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Threat-model a system or feature to find where it could be attacked, before you build it. Use when asked to threat-model, do a security design review, identify attack surface, or apply STRIDE to a design. Produces a structured threat model: assets, trust boundaries and data flows, threats enumerated by category (STRIDE), and prioritized mitigations. Defensive security for systems you own or are authorized to assess.
.claude/skills/mohitagw15856-threat-model/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 3% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -46% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 104% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 147% | 0% |
| case-12 | ✓→✓ | = Same ✓ | -9% | 0% |
Security bugs are cheapest to fix at design time. Threat modeling asks, systematically, "what can go wrong here?" — before code exists. This skill runs a structured pass: map what you're protecting and the trust boundaries, enumerate threats with STRIDE, and prioritize mitigations by risk. It's for systems you own or are authorized to assess.
Ask for these only if they aren't already provided:
1. Scope & assets — what's in scope, and the assets ranked by what their compromise would cost.
2. Architecture & trust boundaries — the components, data flows, and where trust boundaries sit. (A Mermaid diagram helps — the playground renders it.)
mermaidflowchart LR User -->|HTTPS| API API --> DB[(Data)] API -.->|boundary| ThirdParty[/3rd party/]
3. Threats (STRIDE) — walk each boundary/data-flow and enumerate threats by category:
| # | STRIDE category | Threat (how the attack works) | Asset at risk | Likelihood × Impact | Priority | |---|---|---|---|---|---|
Cover Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation of privilege — skip a category only with a reason.
4. Mitigations (prioritized) — for the top threats, the concrete control (authn/authz, validation, encryption, rate-limiting, logging, least privilege) and where it goes. Note residual risk you're accepting.
5. Assumptions & out-of-scope — trust assumptions and what this model deliberately doesn't cover.
Threat-modeling practice (STRIDE, trust boundaries, data-flow diagrams, risk-ranked mitigations).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | pass→pass | 36,862 | 32,585 | -12% | 1 | 1 | 0% | 4,991 | 4,522 | -9% | 0 | 0 | — |
case-01 | fail→pass | 34,306 | 33,831 | -1% | 1 | 1 | 0% | 4,758 | 4,913 | +3% | 0 | 0 | — |
case-02 | fail→pass | 54,933 | 30,344 | -45% | 1 | 1 | 0% | 8,302 | 4,450 | -46% | 0 | 0 | — |
case-03 | fail→fail | 47,089 | 32,059 | -32% | 1 | 1 | 0% | 5,743 | 5,342 | -7% | 0 | 0 | — |
case-04 | fail→pass | 26,970 | 30,544 | +13% | 1 | 1 | 0% | 2,092 | 4,260 | +104% | 0 | 0 | — |
case-05 | pass→pass | 16,749 | 21,078 | +26% | 1 | 1 | 0% | 2,105 | 3,692 | +75% | 0 | 0 | — |
case-06 | pass→pass | 34,177 | 36,040 | +5% | 1 | 1 | 0% | 3,954 | 5,364 | +36% | 0 | 0 | — |
case-07 | pass→pass | 45,167 | 33,321 | -26% | 1 | 1 | 0% | 8,258 | 5,353 | -35% | 0 | 0 | — |
case-08 | pass→pass | 51,796 | 27,298 | -47% | 1 | 1 | 0% | 7,169 | 5,066 | -29% | 0 | 0 | — |
case-09 | pass→pass | 44,135 | 30,028 | -32% | 1 | 1 | 0% | 6,604 | 4,735 | -28% | 0 | 0 | — |
case-10 | pass→pass | 23,520 | 25,918 | +10% | 1 | 1 | 0% | 2,699 | 4,080 | +51% | 0 | 0 | — |
case-11 | pass→pass | 11,432 | 26,195 | +129% | 1 | 1 | 0% | 1,961 | 4,144 | +111% | 0 | 0 | — |
case-13 | pass→pass | 28,160 | 33,609 | +19% | 1 | 1 | 0% | 3,418 | 4,948 | +45% | 0 | 0 | — |
case-14 | pass→pass | 19,902 | 63,259 | +218% | 1 | 1 | 0% | 3,292 | 4,536 | +38% | 0 | 0 | — |
case-15 | pass→pass | 29,394 | 23,239 | -21% | 1 | 1 | 0% | 3,758 | 4,790 | +27% | 0 | 0 | — |
case-16 | pass→pass | 20,632 | 21,230 | +3% | 1 | 1 | 0% | 2,600 | 3,387 | +30% | 0 | 0 | — |
case-17 | pass→pass | 20,508 | 18,562 | -9% | 1 | 1 | 0% | 2,315 | 3,660 | +58% | 0 | 0 | — |
case-18 | pass→pass | 16,985 | 23,280 | +37% | 1 | 1 | 0% | 1,935 | 3,736 | +93% | 0 | 0 | — |
case-19 | pass→pass | 22,025 | 29,288 | +33% | 1 | 1 | 0% | 2,236 | 3,904 | +75% | 0 | 0 | — |
case-20 | pass→pass | 31,396 | 36,999 | +18% | 1 | 1 | 0% | 4,289 | 5,147 | +20% | 0 | 0 | — |
case-21 | pass→pass | 50,162 | 25,189 | -50% | 1 | 1 | 0% | 7,756 | 4,174 | -46% | 0 | 0 | — |
case-22 | fail→pass | 10,308 | 28,863 | +180% | 1 | 1 | 0% | 1,552 | 3,828 | +147% | 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. The headline lift of +18 percentage points is the difference between those two pass rates over the 22 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.