Skip to content
Development
Skill

/ca-threat-model

Threat-model a sensitive design with STRIDE on request. Read-only analysis of threats, controls, and implementation constraints.

From plugin
codearbiter
15356 skills20 agents38 commands

Claude Code

$ npx -y skills add arbiterForge/codeArbiter --skill ca-threat-model --agent claude-code

SKILL.md

ca-threat-model.SKILL.md
name: ca-threat-model
description: "Threat-model a sensitive design with STRIDE on request. Read-only analysis of threats, controls, and implementation constraints."
argument-hint: "<scope description>"

security-architecture

For every security policy reference below, follow [includes/knowledge.md](../../includes/knowledge.md) ("Read security policy before a security decision"): select the repository's context format, read the complete policy from exact `CTX-SECURITY-CONTROLS` records in HTML mode or the full Markdown controls in Markdown mode, and read operative scope blocks when applicable. Required policy that is missing or unreadable blocks a security decision; scope blocks alone are not full policy.

Optional, lightweight threat-modeling pass over a design before it is built. Selected when the user deliberately requests threat modeling of a sensitive design, with or without `$ca-threat-model`. Never forced on an ordinary change. Reviews architectural intent before code exists; for code already written, dispatch `security-reviewer` instead.

Entry boundaries

Read-only: modify no project file, decision record, control or implementation. Optional reviewers inherit this read-only analysis scope. An explanation-only security question does not start the pass; mentioning authentication in an ordinary change does not opt in. The user need not repeat a slash command to request it. Missing required security-controls input is a prerequisite failure, separate from the severity of a finding. A lesser gap is a constraint, not blanket denied clearance.

Pre-flight

  • Read the complete format-selected `security-controls` policy — approved primitives, declared security boundaries and their permitted crossings, what is and is not allowed. If the required policy cannot be read, STOP and surface the gap; do not guess the boundary model.
  • Establish the scope from the user's request: the feature, component, or design under review.
  • Read relevant security ADRs under `<project-root>/.codearbiter/decisions/`; do not invent decisions or interpret their absence as approval.

Phase 1 — Attack surface · gate: BLOCK

Map what the change exposes. Name, for the scope:

  • New or changed entry points — routes, endpoints, message consumers, CLI surfaces.
  • New egress — outbound calls, external dependencies, new data sinks.
  • Security boundaries crossed, as declared in `security-controls.md` (trust transitions, privilege changes, data leaving a controlled zone).
  • The data handled and its sensitivity.

A boundary crossing not described in `security-controls.md` is a finding, not a silent pass. A finding outside this scope gets one line with an inline `[NEEDS-TRIAGE]` marker.

Gate: the attack surface and every boundary crossing in scope are enumerated.

Phase 2 — STRIDE pass · gate: STOP

Walk the surface from Phase 1 through STRIDE. For each relevant category, name the concrete threat and the control expected to mitigate it:

  • **Spoofing** — identity/authentication of the actor at the boundary.
  • **Tampering** — integrity of data in transit and at rest.
  • **Repudiation** — whether actions are attributable.
  • **Information disclosure** — exposure of sensitive data, including in logs and errors.
  • **Denial of service** — exhaustion or availability impact.
  • **Elevation of privilege** — privilege gained across the boundary.

Mark each threat's mitigation `PRESENT`, `PLANNED`, or `GAP`. Skip a category only with a one-line reason it does not apply.

If the threat depends on auth, crypto, key handling, or secrets, MAY dispatch [agents/auth-crypto-reviewer.md](../../agents/auth-crypto-reviewer.md). For broader boundary or surface concerns, MAY dispatch [agents/security-reviewer.md](../../agents/security-reviewer.md). Both govern by `security-controls.md`.

Gate: STOP only on a genuinely critical unmitigated threat — a `GAP` that is exploitable now with high impact. Lesser gaps are surfaced as constraints, not stops.

Phase 3 — Report · gate: BLOCK

Produce a terse report:

  • **Surface** — entry points, egress, boundaries crossed.
  • **Threats** — the STRIDE findings; lead with `GAP`s, then `PLANNED`, summarize `PRESENT` in one line.
  • **Verdict** — `PROCEED` (no open gap), `PROCEED-WITH-CONSTRAINTS` (gaps listed with owner), or `STOP` (a critical unmitigated threat is present; name it).

A decision-worthy gap is escalated to the user or to `<project-root>/.codearbiter/decisions/` via `/adr` — never authored as an ADR by this skill.

Gate: report delivered with a stated verdict; every STOP-level threat from Phase 2 is reflected in it.

Hard rules

  • MUST NOT force this pass on an ordinary change. It is invoked deliberately for sensitive features only.
  • MUST NOT guess the boundary model — read `security-controls.md` or STOP.
  • MUST NOT silently pass an undeclared boundary crossing — surface it.
  • MUST NOT STOP on anything short of a critical, exploitable, unmitigated threat; lesser gaps are constraints.
  • MUST NOT author an ADR — escalate decision-worthy gaps to the user or `/adr`.
Read more
@arbiterforge
Ships withcodearbiter

Open-source governance and hard gates for AI coding agents across Claude Code, Codex CLI, and Pi.

15356 skills20 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
153
Star history of arbiterForge/codeArbiter on GitHub, a chart by star-history.com

Other skills on codearbiter.

brainstorming

brainstorming

Refine feature and sprint intent into a useful specification. Capture scope, observable criteria and material choices without…

commit-gate

commit-gate

Create a verified local Git commit when committing changes is requested. Not for explaining commit history, drafting a message…

debug

debug

Investigate an unexplained defect or unexpected behavior without changing application code. Use for root-cause diagnosis and an…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills2w309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react5d252k
@facebook@facebookInstall Skill

Questions about ca-threat-model.

Which coding agents can use ca-threat-model?
ca-threat-model installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.