/threat-model-discipline
Use when starting an engagement, before exploitation, or whenever the attack surface changes — build/validate the threat model and detect drift (new unreviewed surface) before advancing
$ npx -y skills add hypnguyen1209/offensive-claude --skill threat-model-discipline --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/threat-model-discipline
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use when starting an engagement, before exploitation, or whenever the attack surface changes — build/validate the threat model and detect drift (new unreviewed surface) before advancing
SKILL.md
threat-model-discipline.SKILL.mdname: threat-model-discipline
description: Use when starting an engagement, before exploitation, or whenever the attack surface changes — build/validate the threat model and detect drift (new unreviewed surface) before advancing
scripts:
- scripts/threatmodel_lint.py
Threat-Model Discipline
Overview
**You cannot test what you have not modeled.** A threat model names the assets, entry points, trust boundaries, relevant ATT&CK techniques, and existing mitigations — so coverage is deliberate, not accidental. On a long engagement the surface drifts (a new endpoint, a new dependency); **un-reviewed drift is where bugs hide.** This skill keeps the model complete and re-checks it for drift.
When to Activate
- At engagement start (after recon-osint), before weaponize/exploit.
- Whenever recon is re-run or the target changes — to catch new attack surface.
- At `/engage.gate` — the gate refuses to advance on un-acknowledged drift.
The model (JSON, materialized from recon)
`threat-model.json` (see `templates/threat-model/`): five required lists — `assets`, `entry_points`, `trust_boundaries`, `attck` (technique ids), `mitigations`.
# 1. Lint - every required field present, no placeholders, valid ATT&CK ids
python skills/threat-model-discipline/scripts/threatmodel_lint.py lint .engage/recon/threat-model.json
# 2. Drift - diff a re-run against the reviewed baseline; NEW entry points/assets/boundaries are
# unreviewed surface and BLOCK the gate until re-reviewed or acknowledged
python skills/threat-model-discipline/scripts/threatmodel_lint.py drift \
.engage/recon/threat-model.baseline.json .engage/recon/threat-model.jsonOr use `/engage.threatmodel` (materialize | lint | drift).
Red Flags — STOP
- "We'll model it as we go" — unmodeled surface = untested surface. Model first.
- "Recon changed but the threat model didn't" — re-run drift; new surface must be re-reviewed.
- A threat model full of `TBD`/`[fill in]` — that is not a model; the lint fails it.
- A new `entry_point` appeared and you proceeded anyway — that is the exact gap attackers use.
Rationalizations
| Excuse | Reality | |--------|---------| | "The model is obvious, skip it" | Obvious to you ≠ documented. Coverage you can't diff is coverage you can't trust. | | "Drift is just noise" | A new entry point is new attack surface. Acknowledge it explicitly or re-review. | | "ATT&CK mapping is busywork" | It turns 'we tested stuff' into 'we covered these techniques' — the report's backbone. |
Pairs with `scope-discipline` (what you may touch) and `finding-discipline` (what counts as proven).
Read more
name: threat-model-discipline description: Use when starting an engagement, before exploitation, or whenever the attack surface changes — build/validate the threat model and detect drift (new unreviewed surface) before advancing scripts: - scripts/threatmodel_lint.py
Threat-Model Discipline
Overview
**You cannot test what you have not modeled.** A threat model names the assets, entry points, trust boundaries, relevant ATT&CK techniques, and existing mitigations — so coverage is deliberate, not accidental. On a long engagement the surface drifts (a new endpoint, a new dependency); **un-reviewed drift is where bugs hide.** This skill keeps the model complete and re-checks it for drift.
When to Activate
- At engagement start (after recon-osint), before weaponize/exploit.
- Whenever recon is re-run or the target changes — to catch new attack surface.
- At `/engage.gate` — the gate refuses to advance on un-acknowledged drift.
The model (JSON, materialized from recon)
`threat-model.json` (see `templates/threat-model/`): five required lists — `assets`, `entry_points`, `trust_boundaries`, `attck` (technique ids), `mitigations`.
# 1. Lint - every required field present, no placeholders, valid ATT&CK ids
python skills/threat-model-discipline/scripts/threatmodel_lint.py lint .engage/recon/threat-model.json
# 2. Drift - diff a re-run against the reviewed baseline; NEW entry points/assets/boundaries are
# unreviewed surface and BLOCK the gate until re-reviewed or acknowledged
python skills/threat-model-discipline/scripts/threatmodel_lint.py drift \
.engage/recon/threat-model.baseline.json .engage/recon/threat-model.jsonOr use `/engage.threatmodel` (materialize | lint | drift).
Red Flags — STOP
- "We'll model it as we go" — unmodeled surface = untested surface. Model first.
- "Recon changed but the threat model didn't" — re-run drift; new surface must be re-reviewed.
- A threat model full of `TBD`/`[fill in]` — that is not a model; the lint fails it.
- A new `entry_point` appeared and you proceeded anyway — that is the exact gap attackers use.
Rationalizations
| Excuse | Reality | |--------|---------| | "The model is obvious, skip it" | Obvious to you ≠ documented. Coverage you can't diff is coverage you can't trust. | | "Drift is just noise" | A new entry point is new attack surface. Acknowledge it explicitly or re-review. | | "ATT&CK mapping is busywork" | It turns 'we tested stuff' into 'we covered these techniques' — the report's backbone. |
Pairs with `scope-discipline` (what you may touch) and `finding-discipline` (what counts as proven).
A spec-driven offensive security framework for Claude Code — structured engagement workflows based on the Cyber Kill Chain, 31 kill-chain skills (multi-file progressive-disclosure) plus a discipline layer (a SessionStart dispatcher + 6 process/discipline
Repo: hypnguyen1209/offensive-claude
Other skills on offensive-claude.
- /active-directory-attack
Use when attacking a Windows Active Directory domain — Kerberos roasting/delegation, coercion + NTLM/Kerberos relay (CVE-2025-33073), ADCS ESC1-16 (EKUwu), ticket forgery & DCSync, dMSA BadSuccessor (CVE-2025-53779), BloodHound attack-path enumeration, domain dominance
Open skill - /advanced-redteam
--- name: advanced-redteam-ops description: Use when designing C2 infrastructure or OPSEC for a long-haul red-team op — redirectors, malleable profiles, tiered/segregated infra, living-off-the-land, data exfiltration metadata: type: offensive phase: operations kill_chain: phase:
Open skill - /ai-agent-redteam
Use when red-teaming an agentic AI / LLM application — indirect & zero-click prompt injection, MCP tool poisoning, persistent memory poisoning, excessive-agency tool abuse, multi-turn jailbreaks, PyRIT/Garak/Promptfoo harnesses
Open skill - /ai-security
Use when attacking an AI/ML system or model — prompt injection & jailbreaks (Crescendo, Skeleton Key, Best-of-N), RAG/vector poisoning, agentic/MCP exploitation (CVE-2025-54136), ML supply-chain RCE (pickle CVE-2025-32434), model extraction / membership inference / adversarial
Open skill - /browser-exploitation
Use when building a client-side browser exploit — V8/JSC JIT type confusion to renderer R/W, V8 heap-sandbox escape, renderer-to-browser sandbox escape (Mojo IPC, GPU/Dawn/ANGLE), Electron/webview IPC abuse, 1-click RCE chains
Open skill - /cicd-supply-chain
Use when attacking or auditing a CI/CD pipeline or software supply chain — pwn requests, poisoned pipeline execution, compromised/mutable-tag actions, dependency confusion, registry worms, runner backdoors, OIDC trust abuse, SLSA/provenance
Open skill

