Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add OutlineDriven/outline-driven-development --skill confirmed-security-reviewgit clone --depth 1 https://github.com/OutlineDriven/outline-driven-developmentWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/outlinedriven/outline-driven-development/confirmed-security-review)<a href="https://agentmods.dev/skills/outlinedriven/outline-driven-development/confirmed-security-review"><img src="https://agentmods.dev/badge/skills/outlinedriven/outline-driven-development/confirmed-security-review/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/outlinedriven/outline-driven-development/confirmed-security-review"><img src="https://agentmods.dev/badge/skills/outlinedriven/outline-driven-development/confirmed-security-review.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to high
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- high Output Handling · line 33 Model output is used without validation or sanitization. Unvalidated output injected into downstream contexts (SQL, shell, HTML) enables injection attacks and arbitrary code execution.Fix: Validate and sanitize all model output before using it in downstream contexts. Use parameterized queries for SQL, shell quoting for commands, and HTML encoding for web output.
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00047 | $0.01481 |
| Opus 5 | $0.00023 | $0.00740 |
| Sonnet 5 | $0.00009 | $0.00296 |
| Haiku 4.5 | $0.00005 | $0.00148 |
Grade A, and why
confirmed-security-review scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Runs shell commandslowCapability
Expected in a hook, worth knowing in a rule or an instructions file.
9. Always flag unconditionally when present: `eval`/`exec` on user input, unsafe deserialization (`pickle.loads`, `yaml.load` without `safe_load`, PHP `unserialize`, Java `ObjectInputStream`), `shell=True` with user inpu How it starts
The opening of the file, as written. The whole thing — 48 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Confirmed security review
Contract
| Field | Bound contract |
|---|---|
| Trigger | User asks for a security review, vulnerability audit, OWASP review, or review of injection, XSS, authentication, authorization, or cryptography issues. |
| Authority | Read-only. No file, VCS, credential, paid, published, deployed, or remote mutation. Reports findings in chat only. |
| Side effect | Chat output reporting high-confidence security vulnerabilities. |
| Done | Report with HIGH-confidence findings only, each with attacker-controlled input confirmed, or a cleared report stating no high-confidence vulnerabilities were identified. |
Inputs
The user must supply the file, diff, or code component to review. A specific concern area (injection, XSS, auth, crypto, etc.) is optional and narrows the review focus. The entire reachable codebase is in research scope to establish confidence; reporting scope is limited to the supplied target.
Procedure
- Bound scope: report only on the specific file, diff, or code the user supplied. Use the entire reachable codebase as research scope to build confidence before flagging anything. Done when: reporting scope is bounded to the supplied target and research scope is the reachable codebase.
- Detect context from the supplied target: code type (API routes, frontend/templates, file handling, crypto/secrets, serialization, external requests, business workflows, config/headers/CORS, CI/CD dependencies, error handling, logging) and language/framework from file extensions and imports. Done when: code type and language/framework are detected.
- For each potential issue, research the data flow before flagging: where the input actually comes from; whether it is configured at deployment (server-controlled) or arrives from user input (attacker-controlled); whether validation, sanitization, or allowlisting exists upstream; and what framework protections apply. Done when: the data flow is traced for each candidate before flagging.
- Classify confidence for each candidate:
- HIGH: vulnerable pattern plus attacker-controlled input confirmed; report with severity.
- MEDIUM: vulnerable pattern, input source unclear, note as "Needs verification", do not report as a finding.
- LOW: theoretical, best-practice, or defense-in-depth; do not report. Done when: every candidate is classified HIGH, MEDIUM, or LOW.
- Do not flag: test files (unless explicitly reviewing test security), dead or commented code, documentation strings, patterns using constants or server-controlled configuration, and code paths that require prior authentication to reach (note the auth requirement instead of flagging). Done when: every non-flaggable pattern is excluded with its reason.
- Treat as server-controlled and safe unless user input reaches them: framework settings (
django.conf.settings.*), environment variables (os.environ), config files, framework constants, and hardcoded internal values. A URL, path, or redirect target sourced from settings or config is not an SSRF, path-traversal, or open-redirect finding. Done when: every server-controlled pattern is classified safe. - Do not flag framework-mitigated patterns unless the unsafe variant is present: auto-escaped template output (Django
{{ variable }}, React{variable}, Vue{{ variable }}) and ORM parameterized queries (cursor.execute("...%s", (input,)),Model.objects.filter(id=input)) are safe. Flag only|safe,{% autoescape off %},mark_safe(user_input),dangerouslySetInnerHTML={{__html: userInput}},v-html="userInput",.raw(),.extra(), orRawSQL()with string interpolation or user input. Done when: every framework-mitigated pattern is checked for its unsafe variant. - Confirm exploitability for each candidate before reporting. Attacker-controlled sources include request params/body/headers, unsigned cookies, URL path segments, file upload content and names, database content from other users, and WebSocket messages. Confirm the framework does not mitigate it and that no upstream validation or sanitization library (DOMPurify, bleach, etc.) neutralizes the input. Done when: exploitability is confirmed or refuted for each candidate.
- Always flag unconditionally when present:
eval/execon user input, unsafe deserialization (pickle.loads,yaml.loadwithoutsafe_load, PHPunserialize, JavaObjectInputStream),shell=Truewith user input,child_process.execwith user input,innerHTML/dangerouslySetInnerHTML/v-htmlwith user input, SQL built by string interpolation or template literals with user input,os.systemwith user input, and hardcoded secrets, API keys, AWS secret keys, or private keys. Done when: every unconditional-flag pattern is checked and flagged if present. - Assign severity to each HIGH-confidence finding: Critical (direct exploit, severe impact, no auth required: RCE, SQL injection to data, auth bypass, hardcoded secrets); High (exploitable with conditions, significant impact: stored XSS, SSRF to metadata, IDOR to sensitive data); Medium (specific conditions required, moderate impact: reflected XSS, CSRF on state-changing actions, path traversal); Low (defense-in-depth, minimal direct impact: missing headers, verbose errors, weak algorithms in non-critical context). Done when: every HIGH-confidence finding has an assigned severity.
- Report HIGH-confidence findings only. Skip theoretical issues and anything that cannot be confirmed exploitable after research. Done when: only HIGH-confidence findings are reported and all others are excluded.
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago Changed · -11 tokens per session 9045e2c83174
- 4d ago First seen · 48 lines · 58 tokens per session scan A 6f0f3e2b9150
confirmed-security-review is a skill published in the GitHub repository OutlineDriven/outline-driven-development (52 stars, last pushed 2d ago), licensed Apache-2.0. It adds 47 tokens to every session and 1,481 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 1 finding (runs shell commands). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
audit-project
Run an iterative multi-agent code audit until critical and high findings are resolved. Use when the user says "audit my code", "find all the bugs", "deep code audit", "iterative review", or "review until clean".
duet
Use when the user invokes /duet, says "pair with me", or faces aesthetic, architectural, or irreversible decisions.
goal-prompt-drafting
Use when asked to draft copy-ready /goal objectives for long-running agents; returns one normalized one-line objective with measurable end state, grounded proof, easy-out invariants, a stop clause, and a Missing list. Not for source or remote-system changes.
handoff-prompt
Use when the user asks for a handoff, delegation, or clipboard-ready prompt for another agent: a standalone path-free prompt copied to the clipboard, confirmed by title. Not for session-snapshot briefs — use handoff; never remote, credential, publish, deploy, or irreversible.
publish-branch
Use when asked to publish the checked-out branch: commit and push it on whatever branch it is, the default branch included. Not for creating branches, PRs, force pushes, or pushing any other branch; when the request excludes the default branch, use commit-push-current.
drill
Use when a concept needs practising rather than explaining: run a scaffolded exercise from worked example to independent problem, quiz the learner, run spaced recall over what they cleared, or probe for the gaps blocking what they want next. For explanation, use explain-concept; for an end-to-end build, use capstone.