Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Review trust boundaries, auth/authz, injection, secrets, filesystem/network exposure, dependencies, and exploitability without pretending a shallow lint is an audit.
.claude/skills/hmbown-security-review/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-14 | ✓→✗ | ▼ Worse | 109% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 8% | 0% |
| case-07 | ✓→✓ | = Same ✓ | 60% | 0% |
| case-08 | ✓→✓ | = Same ✓ | 49% | 0% |
Produce findings a reviewer can verify, not a vibes pass. Every finding names the file, the reachable path that makes it real, and the fix.
surface. Say the boundary out loud before reading.
tool args, file parsers, CLI flags, env vars, rendered content) and where authority is exercised (fs writes, network egress, process spawn, credential reads, signing).
Ask for credentials only if a live path genuinely needs them; never read secrets from the environment or keychain yourself.
rg for the handlers, deserializers,and exec/fs/net calls in scope. Follow data from entry to sink before judging it.
object-level authorization. Look for checks that exist on one path but not its sibling, and for checks done on the client only.
path joins under user influence, and markup that will render later — including generated HTML/markdown that carries repo content into a browser surface.
rg for token/key/secret patterns and git log -p thediff for credentials. Also check what gets logged or embedded in receipts, exports, or error messages.
(cargo audit, npm audit, osv-scanner) — report versions and CVEs, not "deps look old".
timeouts on network calls, resource leaks in error paths, retry storms.
write a minimal proof. A finding that "looks suspicious" but has no reachable path is a note, not a finding.
For each: severity (exploitability × impact), file:line, the reachable path, a one-paragraph explanation, and the fix. Order by severity. Then a short "checked and clean" list naming what was audited and cleared — the scope statement means something only if the clear list is honest.
evidence is missing.
vulnerabilities. This review finds defects; it does not prove none exist.
code — report it first.
was actually checked.
code smells.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,917 | 25,299 | +50% | 1 | 1 | 0% | 1,097 | 2,729 | +149% | 0 | 0 | — |
case-02 | fail→fail | 17,470 | 29,530 | +69% | 1 | 1 | 0% | 1,393 | 1,784 | +28% | 0 | 0 | — |
case-03 | fail→fail | 22,750 | 22,166 | -3% | 1 | 1 | 0% | 1,238 | 2,252 | +82% | 0 | 0 | — |
case-04 | fail→fail | 10,227 | 10,202 | -0% | 1 | 1 | 0% | 1,240 | 1,789 | +44% | 0 | 0 | — |
case-05 | pass→pass | 18,596 | 26,635 | +43% | 1 | 1 | 0% | 1,950 | 2,111 | +8% | 0 | 0 | — |
case-06 | fail→pass | 20,501 | 9,226 | -55% | 1 | 1 | 0% | 2,394 | 2,038 | -15% | 0 | 0 | — |
case-07 | pass→pass | 15,844 | 24,012 | +52% | 1 | 1 | 0% | 1,540 | 2,457 | +60% | 0 | 0 | — |
case-08 | pass→pass | 8,370 | 9,258 | +11% | 1 | 1 | 0% | 900 | 1,339 | +49% | 0 | 0 | — |
case-09 | pass→pass | 19,096 | 12,484 | -35% | 1 | 1 | 0% | 1,786 | 1,683 | -6% | 0 | 0 | — |
case-10 | pass→pass | 17,366 | 15,894 | -8% | 1 | 1 | 0% | 1,904 | 2,187 | +15% | 0 | 0 | — |
case-11 | pass→pass | 16,282 | 10,869 | -33% | 1 | 1 | 0% | 1,443 | 1,409 | -2% | 0 | 0 | — |
case-12 | pass→pass | 12,589 | 15,196 | +21% | 1 | 1 | 0% | 1,785 | 1,651 | -8% | 0 | 0 | — |
case-13 | pass→pass | 14,875 | 12,424 | -16% | 1 | 1 | 0% | 1,757 | 2,610 | +49% | 0 | 0 | — |
case-14 | pass→fail | 18,193 | 32,397 | +78% | 1 | 1 | 0% | 1,206 | 2,515 | +109% | 0 | 0 | — |
case-15 | pass→pass | 13,955 | 14,428 | +3% | 1 | 1 | 0% | 2,183 | 2,597 | +19% | 0 | 0 | — |
case-16 | pass→pass | 16,609 | 18,679 | +12% | 1 | 1 | 0% | 1,800 | 2,901 | +61% | 0 | 0 | — |
case-17 | pass→pass | 12,604 | 5,460 | -57% | 1 | 1 | 0% | 1,088 | 1,382 | +27% | 0 | 0 | — |
case-18 | pass→pass | 12,878 | 15,772 | +22% | 1 | 1 | 0% | 1,949 | 2,250 | +15% | 0 | 0 | — |
case-19 | pass→pass | 15,633 | 7,594 | -51% | 1 | 1 | 0% | 1,522 | 1,628 | +7% | 0 | 0 | — |
case-20 | pass→pass | 17,058 | 12,829 | -25% | 1 | 1 | 0% | 1,822 | 2,689 | +48% | 0 | 0 | — |
case-21 | pass→pass | 16,172 | 12,663 | -22% | 1 | 1 | 0% | 1,056 | 1,603 | +52% | 0 | 0 | — |
case-22 | pass→pass | 14,413 | 16,977 | +18% | 1 | 1 | 0% | 530 | 1,230 | +132% | 0 | 0 | — |
case-23 | fail→fail | 21,740 | 18,716 | -14% | 1 | 1 | 0% | 3,237 | 3,168 | -2% | 0 | 0 | — |
case-24 | fail→fail | 19,239 | 16,988 | -12% | 1 | 1 | 0% | 2,574 | 2,033 | -21% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of 0 percentage points is the difference between those two pass rates over the 24 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/7/2026 | +9% |
Other measured skills in the registry, with their headline benchmark lift.