From checkout to reviewable draft.
Use the skills interactively, or run the same generation and validation loop non-interactively.
1. Install the skills
Claude Code
/plugin marketplace add alpha-omega-security/threat-model
/plugin install threat-model@threat-model
Then open the target checkout and invoke:
/threat-model:threat-model
GitHub Copilot and other compatible agents
Clone this repository and make the sibling directories under skills/
available to your agent. GitHub Copilot discovers project skills under
.github/skills/; other Agent Skills
clients may use a different skill path.
Keep the skill directories together. The specialists share references owned by
the threat-model orchestrator.
2. Ask for the model
From the target repository:
Produce a threat model for this project.
The first pass is intentionally a draft. Claims are tagged as documented, maintainer-confirmed, inferred, or assumed, and unresolved decisions become proposed questions in §1.18.
3. Review the three artifacts
| Artifact | Role |
|---|---|
threat-model.md |
Canonical, human-readable model |
threat-model.yaml |
Near-lossless structured sidecar used by triage |
threat-model.json |
Conservative schema-backed export for external consumers |
Always review the prose first. Authority flows prose → YAML → JSON.
4. Generate non-interactively
The standard-library runner clones the target, installs the skills, invokes Copilot or Claude, validates the result, and feeds validation failures back for repair:
python new_threat_model.py \
--repo https://github.com/madler/zlib \
--out ./out/zlib
Choose the agent or scope a monorepo:
python new_threat_model.py \
--agent claude \
--repo https://github.com/owner/repo \
--subdir packages/parser \
--out ./out/parser
Run python new_threat_model.py --help for corpus, security-context, build,
and triage-policy options.
5. Keep it version-bound
Re-run when public APIs, input formats, deployment assumptions, defaults, dependencies, or supported components change. Re-bind the model to each release; a finding against version N should be evaluated against the model as it stood at N.