From clover
Silently threat-model the work in flight, fold mitigations into the implementation plan, and keep going. Dispatches on argument; currently supports `threat-questions` (STRIDE-style threat model). Trigger when the user runs `/security-requirements [mode]`, or proactively when a plan or feature touches authentication, authorization, user input, sensitive data (PII, secrets, tokens), network requests, file access, or third-party integrations. Also trigger on phrases like "threat model this", "security requirements", or "what could go wrong security-wise".
How this skill is triggered — by the user, by Claude, or both
Slash command
/clover:security-requirementsbash ${CLAUDE_PLUGIN_ROOT}/scripts/run-hook.sh log-skill security-requirementsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Surface security thinking *without interrupting the developer*. Claude does the threat model itself, records the result inline, and continues coding.
Surface security thinking without interrupting the developer. Claude does the threat model itself, records the result inline, and continues coding.
Hard rule: never ask the user threat-modeling questions. If something is genuinely unknowable from context, pick the safer default and note the assumption in the output. The developer's time is more valuable than perfect threat coverage.
Read the argument that follows /security-requirements:
| Argument | Mode |
|---|---|
threat-questions (default if omitted) | STRIDE-style threat model — see Mode: threat-questions |
If the argument is unrecognized, list the supported modes once and default to threat-questions. Do not invent new modes.
When triggered proactively (no slash command — Claude noticed a sensitive area in the plan), use threat-questions.
## Threats considered block (format below). This is the only user-visible artifact.Emit exactly this block, then continue with implementation:
## Threats considered
- **<threat>** → <concrete mitigation tied to a file, config, or step>
- **<threat>** → <mitigation> _(assumption: <what was inferred>)_
Keep it to 2–5 bullets. If a threat is real but explicitly out of scope, mark it _(out of scope — owner: <team or follow-up ticket>)_ instead of inventing a fix.
User: "Add an endpoint that lets users export their data as a CSV."
Claude (after writing the implementation plan, before the first code change):
Threats considered
- Authorization (E) → scope the export query to
request.user.id; add a unit test for cross-tenant access returning 404.- Information disclosure (I) → strip
internal_id,deleted_at, and any joined columns from other tenants in the serializer.- DoS (D) → cap rows at 100k per export; stream the response instead of buffering.
- CSV injection (T) → prefix any cell starting with
=,+,-,@with a single quote when writing rows.- Audit (R) (assumption: compliance is in scope based on PII handling) → log
user_id, row count, and timestamp to the existing audit pipeline.
…then proceeds to implement, with each bullet appearing as a step in the plan.
Provides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.
npx claudepluginhub clover-security-public/clover-claude-plugin --plugin clover