security-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited security-review (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Use this skill when a bounded chunk of code is being checked systematically for security and a report is the deliverable. It is the workflow; the patterns themselves live in secure-coding, where phase 4 hands off.
Activates on:
security-gate (command). That's a blocker with a policy. This skill is the substantive review behind it.threat-modeler (agent). STRIDE, attack trees, and trust-boundary diagrams belong there.web-exploit-triage, recon-agent, payload-crafter). This skill flags; it does not exploit.django-security, spring-security, rails-security, nextjs-security, api-security), then come back here for the umbrella report.secure-coding. This skill is the process around the patterns, not the patterns themselves.cve-triage. It weighs exploitability (reachable path, EPSS) more finely than this skill.secrets-scanner. This skill calls it, not the other way around.This skill calls secrets-scanner, sast-orchestrator, cve-triage in phase 3, and verification-loop as the final step before the report ships.
Seven phases. Don't skip them. Phases that "don't seem to apply" are often exactly where issues stay invisible. For a very small PR scope phase 2 may be brief and phase 5 limited, but the phase structure stays.
Before opening a single file: know what you're reviewing and why.
If scope after this phase doesn't summarize in one line, it's too broad. Narrow it or split it.
A review without a mental model of the system is symptom-hunting. Build the model first.
grep on route decorators, middleware chain), CLI handlers, message consumers, webhooks, scheduled jobs, event triggers. List them — these are your trust boundaries.eval, exec, subprocess.*shell=True, pickle.loads, yaml.load without SafeLoader, ObjectInputStream, innerHTML, dangerouslySetInnerHTML, verify=False, disable-ssl, hardcoded AWS/GitHub token formats. They are not necessarily wrong, but each warrants attention.Output of this phase: a bullet list of entry points, trust boundaries, sensitive call-sites, and an auth-model summary. That's your map for phases 4–5.
Let the machine catch the flat patterns before you read by hand. Handoffs:
secrets-scanner (gitleaks, trufflehog, detect-secrets). Scan both working tree and git history. Every match is serious until proven otherwise — a key from git history stays leaked even when it's gone now.sast-orchestrator (Semgrep with community + language-specific rulesets, CodeQL for depth, SonarQube for trend). Run Semgrep at minimum; CodeQL on deep-mode reviews.cve-triage (osv-scanner, grype, Dependabot/Renovate alerts). Filter for reachable path and EPSS before raising as a finding.iac-security, container-hardening, k8s-security.Triage the raw tool output immediately: false positives written off with a reason; real findings forwarded to phase 6. Don't paste full tool dumps in the report — that's lazy and unreadable.
Walk the call-sites you marked in phase 2 through the six-phase walk from secure-coding: trust boundaries → input/output → identity → secrets/crypto → robustness → dependencies. For each finding note file, line, classification, and a short description.
What this phase adds on top of phase 3: context. SAST doesn't know that get_document(id) is called from an admin endpoint without an ownership check. You do, because phase 2 worked out the auth model.
Things SAST rarely catches:
/api/<resource>/<id> routes.check and act, login side-channels (timing, error difference between "user doesn't exist" and "wrong password"), password-reset flow that allows account enumeration.alg: none accepted, algorithm confusion (HS256 with RSA pubkey as secret), expiry infinite, no kid rotation.Issues that only become visible with system-level thinking. Not every review reaches this phase. Light/medium scope may skip it as long as phase 1 records the choice.
If design depth is genuinely needed (e.g. new architecture, new external integration): hand off to threat-modeler for a STRIDE pass. This skill then notes in the report "threat model recommended for X, performed by <agent/person>".
Severity is impact × likelihood × compensating controls. CVSS v3.1 is the formal system, but a blocker/high/medium/low label is often faster for dev teams. Use both when the report goes to engineering and to compliance.
Severity matrix:
Exploitability weights in: a blocker behind a non-routable internal network can drop to high; a medium that's publicly reachable and unauthenticated can rise to high. Document the weighting — otherwise it's indefensible.
CVE-ID or CWE-ID always present where you can. See verification-loop Layer 2 for CVE/CVSS verification — no fabricated IDs.
Build the draft report in the structure below. Then run verification-loop over it:
Adjust. Deliver only when verdict is pass (or revise with fixes applied).
Report template:
Security review — <scope>
Date: YYYY-MM-DD | Reviewer: <name/tool> | Depth: <light|medium|deep>
Scope:
In: <files, ranges, flow>
Out: <explicitly out-of-scope>
Trigger: <pre-merge | periodic | post-incident | compliance>
Executive summary (3–5 lines):
<status in one sentence>
Blockers: N | High: N | Medium: N | Low: N
Recommendation: <merge | merge-after-fixes | don't merge | wider scope needed>
Automated scan (summary, no dumps):
Secrets (secrets-scanner): <N findings, X confirmed>
SAST (sast-orchestrator): <N findings after triage>
SCA (cve-triage): <N reachable, EPSS-weighted>
IaC/container/k8s (if applicable): <N findings>
Findings (severity-sorted, blockers first):
## [BLOCKER] <short title>
Location: <file:line[–line]>
Classification: CWE-<N> | OWASP A0<x> | CVSS v3.1 <score> (<vector>)
Pattern: <name, e.g. "pickle.loads on user-body">
Impact: <what can the attacker do?>
Reproduction: <steps or curl example; no version-specific exploit>
Fix: <concrete patch direction, ideally with code alternative>
Compensating: <existing controls limiting impact, where applicable>
Handoff: <if specialist needed: threat-modeler, sast-orchestrator, etc.>
## [HIGH] ...
## [MEDIUM] ...
## [LOW] ...
Open questions for submitter:
- <intent/context question>
- <verification request the reviewer can't perform alone>
Non-findings explicitly:
- <pattern that stood out but is not a finding, with reason — saves the
next reviewer the same time>
Verification-loop:
Verdict: <pass | revise | rewrite>
Security verdict: <no red flags | red flag — solvable | red flag — blocking>Guidance for the report itself:
verification-loop Layer 2.The report goes to the PR author or service owner, not to "stakeholders in general". Write for them.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.