Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot official · Anthropic

threat-model · anthropics — Claude Code skill: what it does, how to install

Builds a threat model for a codebase in three modes and writes it to THREAT_MODEL.md. Use it before vulnerability discovery or a security review.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add anthropics/defending-code-reference-harness --skill threat-model -a claude-code
Open on GitHub

What threat-model does

This skill maps what could go wrong in a target codebase, who may cause it, and what controls should address it. interview guides an application owner through four questions. bootstrap derives a draft from the code, Git history, CVEs, and pentest reports. bootstrap-then-interview combines the two paths.

Every mode writes THREAT_MODEL.md using the same schema. The workflow can read files, search the repository, inspect git history, query gh api, ask the owner questions, and delegate research tasks. The bootstrap mode requires a readable local checkout; vulnerability URLs are limited to public advisory sources.

The analysis is static. It reads source, history, and supplied reports, but does not build, execute, fuzz, or modify the target. That matters when you need exploit validation, because this skill does not run exploits against the project.

What it helps with

  • build a threat model for a codebase
  • map an application's attack surface
  • turn past CVEs into threat classes
  • walk an owner through security questions
  • write the result to THREAT_MODEL.md

Example prompts for the agent

  • `/threat-model bootstrap ./app` using Git history and past vulnerability reports
  • `/threat-model interview ./app` and ask me the four questions about the system
  • `/threat-model bootstrap-then-interview ./app --design-doc design.md`

How to install threat-model

1Skills CLI (Vercel)

npx skills add anthropics/defending-code-reference-harness --skill threat-model -a claude-code

2Manually: put the files in place

~/.claude/skills/threat-model/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/threat-model/

From the same set6

The whole set →

Other versions of threat-model

Similar

skill-inspector NVIDIA Reviews a skill for vulnerabilities, excessive permissions, and hidden behavior before you install it. Combines NVIDIA SkillSpector static scanning with semantic source inspection. Claude Code CX Codex Cursor +1 900installs spring-boot-engineer https://github.com/Jeffallan Generates Spring Boot 3.x code, JPA repositories, REST controllers, and Spring Security 6 configurations. Useful when writing Java microservices and reactive endpoints. Claude Code CX Codex Cursor +1 8,400installs case-review zhaoxuya520 Audits a reverse engineering case package for handoff: verifies Evidence to Finding and Path traceability, checks artifact hash integrity, and generates a report without modifying the case. Claude Code CX Codex Cursor +1 926installs block-no-verify-hook cskwork This skill adds a PreToolUse hook that blocks git bypass flags such as --no-verify. Use it when pre-commit checks must run before an agent can execute a command. Claude Code CX Codex Cursor 6,500installs ctf-reverse ljagiello A reverse engineering reference for CTF challenges: guides coding agents through binary inspection, anti-debug bypass, and virtual machine analysis. Claude Code CX Codex Cursor +1 10,100installs gke-workload-identity official google Diagnoses Pod authentication failures in Google Cloud through Workload Identity Federation for GKE. Use it to check KSA, IAM bindings, and the GKE metadata server. Claude Code Gemini CLI CX Codex 2,000installs git-guardrails-claude-code Matt Pocock This skill adds a Claude Code hook that stops risky Git commands before they run. Use it when an agent must not push or discard working-tree changes. Claude Code 499,069installs ponytail-review DietrichGebert ponytail-review reviews a change beyond the diff, checking connected code, bugs, risks, load, tests, speed, and unnecessary code. Use it for PRs and commits. Claude Code CX Codex Cursor +1 56,300installs

Questions about threat-model

How do I install `threat-model` in Claude Code?

Run npx skills add anthropics/defending-code-reference-harness --skill threat-model -a claude-code, then run the same command again: npx skills add anthropics/defending-code-reference-harness --skill threat-model -a claude-code. The skill file is at ~/.claude/skills/threat-model/SKILL.md.

What does `threat-model` do?

It builds a threat model for a target codebase through interview, bootstrap, or bootstrap-then-interview, then writes the result to THREAT_MODEL.md.

Does the skill need a local project?

The bootstrap mode needs a readable local checkout. The interview mode gathers system details from an application owner through questions.

Source text

SKILL.md · Apache-2.0
---
name: threat-model
description: >-
  Build a threat model for a target codebase. Three modes: "interview" walks an
  application owner through the four-question framework and produces a threat
  model from their answers; "bootstrap" derives a threat model from the code
  plus past vulnerabilities (CVEs, git history, pentest reports) when no owner
  is available; "bootstrap-then-interview" chains the two when both owner and
  codebase are present. All write THREAT_MODEL.md in a shared schema. Use
  when asked to "threat
  model", "build a threat model", "map the attack surface", or "what should we
  be worried about in this codebase".
argument-hint: "[bootstrap-then-interview|bootstrap|interview] <target-dir> [--vulns <file>] [--design-doc <file>] [--seed <THREAT_MODEL.md>] [--fresh]"
allowed-tools:
  - Read
  - Glob
  - Bash(python3 .claude/skills/_lib/checkpoint.py:*)
  - Grep
  - Write
  - Bash(git:*)
  - Bash(gh api:*)
  - Bash(find:*)
  - Bash(ls:*)
  - Bash(cat:*)
  - AskUserQuestion
  - Task
---

# threat-model

A threat model answers **"what could go wrong with this system, who would do
it, and what should we do about it?"** independently of whether any specific
bug has been found yet. It is the map; vulnerability discovery is the metal
detector. A good threat model tells the pipeline where to look and tells triage
which findings matter.

**Litmus test:** If patching one line of code makes an entry disappear, it was
a vulnerability, not a threat. A threat ("attacker achieves RCE via untrusted
media parsing") still stands after every known bug is fixed; a vulnerability
("`dr_wav.h:412` doesn't bounds-check `chunk_size`") does not. This skill
produces threats. Vulnerabilities appear only as **evidence** that raises a
threat's likelihood score.

**Invocation:** `/threat-model [bootstrap-then-interview|bootstrap|interview] <target-dir> [flags]`

---

## Step 0 — Safety preamble (always runs first)

This skill performs **static analysis only**. It reads source, git history,
and any vulnerability reports the user supplies, and writes a single output
file (`<target-dir>/THREAT_MODEL.md`). It does not build, execute, fuzz, or
modify the target, and does not make network requests against the target's
infrastructure.

Before proceeding, confirm and state in your first response:

1. The target directory exists and is a local checkout you can read.
2. You will not execute any code from the target directory.
3. If `--vulns` points at a URL or you are asked to "fetch CVEs", you will
   query only public advisory databases (NVD, GitHub Security Advisories, the
   project's own issue tracker) and never the target's live deployment.

If the user asks you to validate a threat by running an exploit, decline and
point them at the `vuln-pipeline` (README Step 2) instead.

---

## Step 1 — Route to a mode

Parse `$ARGUMENTS`:

| First token | Route to |
|---|---|
| `interview` | Read `interview.md` in this directory and follow it. |
| `bootstrap` | Read `bootstrap.md` in this directory and follow it. |
| `bootstrap-then-interview` | Bootstrap first, then interview seeded from the draft. See below. |
| anything else, or empty | Ask the user: **"Is someone who owns or built this system available to answer questions in this session?"** Yes and the codebase is checked out → recommend `bootstrap-then-interview`. Yes but no codebase → `interview.md`. No → `bootstrap.md`. |

All modes write the same artifact (`THREAT_MODEL.md`, schema in `schema.md`)
so downstream consumers (pipeline `recon`/`judge`, verifier agents) do not need
to know which mode produced it.

| | `interview` | `bootstrap` |
|---|---|---|
| **Needs** | An application owner present in the session | A local checkout; optionally past vulns |
| **Method** | Four-question framework: conversational walk through *what are we working on → what can go wrong → what are we going to do about it → did we do a good job* | Five stages: parallel research swarm → synthesize sections 1-3 + vuln table → generalize vulns into threat classes → STRIDE gap-fill → emit |
| **Best for** | New systems, design reviews, systems where the risk lives in business logic the code doesn't show | Inherited systems, third-party code, OSS dependencies, anything with a CVE history |
| **Provenance tag** | `interview` | `bootstrap` |

**Context durability.** Interview mode is multi-turn; tool results from early
reads may be evicted before you need them. To stay resilient:

- Do **not** read `interview.md` or `bootstrap.md` in full up front. Read the
  mode file (or the relevant section of it) **at the point you need it**, one
  question or stage at a time.
- If a re-read via the Read tool is refused as "file unchanged", the prior
  result was evicted; reload with `cat <path>` via Bash instead.

**Interview backbone** (so you can proceed even if `interview.md` is
unavailable mid-session):

| Q | Question | Fills schema sections |
|---|---|---|
| Q1 | What are we working on? | section 1 context, section 2 assets, section 3 entry points |
| Q2 | What can go wrong? | section 4 threat rows (id, threat, actor, surface, asset) |
| Q3 | What are we going to do about it? | section 4 impact/likelihood/status/controls; section 5 deprioritized; section 8 recommended mitigations |
| Q4 | Did we do a good job? | validate ranking, coverage check, section 6 open questions |

### `bootstrap-then-interview` mode

When the owner is available *and* the codebase is checked out, this is the
recommended path: the owner's time goes to refining a code-grounded draft
instead of describing the system from scratch.

1. Tell the owner: "I'll read the code first and come back with a draft
   (about 5-10 min), then we'll walk it together. Want that, or would you
   rather start cold?" Only proceed if they opt in; otherwise fall back to
   `interview.md`.
2. Read `bootstrap.md` and follow it end-to-end. Write
   `<target-dir>/THREAT_MODEL.md`.
3. Immediately continue into interview mode: read `interview.md` and follow
   it with `--seed <target-dir>/THREAT_MODEL.md` in effect. The section 6 open
   questions from bootstrap become your Q1-Q4 prompts; the owner confirms,
   corrects, and adds rather than starting from nothing.
4. Overwrite `<target-dir>/THREAT_MODEL.md` with the refined model. Set
   provenance `mode: bootstrap-then-interview`.

The same flow is available manually: run `bootstrap` first, then
`interview --seed <THREAT_MODEL.md>` in a later session.

---

## Step 2 — Shared output contract

All modes MUST emit `<target-dir>/THREAT_MODEL.md` conforming to `schema.md`
in this directory. **Read `schema.md` immediately before you write the file**,
not at routing time; in interview mode the gap between routing and emit can be
many turns, and an early read will be evicted before it's used.

After writing the file, print to the user:

1. The path to `THREAT_MODEL.md`.
2. The top 5 threats by likelihood × impact (id, one-line description, L×I).
3. For `bootstrap`: any open questions the code could not answer (these seed a
   later `interview` pass).
4. For `interview`: any owner statements that could not be verified in code
   (these seed follow-up code review).

---

## References

- [docs/security.md](../../../docs/security.md) and
  [docs/prompting.md](../../../docs/prompting.md) for the engagement-context
  and authorization framing this skill inherits.

© anthropics · Apache-2.0 · anthropics/defending-code-reference-harness

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor