Audit before you trust.
A methodology-driven security-audit skill for Claude. Structure first, findings second, false-positive verification before every conclusion. 283 lenses across 27 domains. No hand-waving, no slop.
Most audits ship with a 40 % false-positive rate.
The industry has accepted that security scanners flag noise. Developers have learned to ignore half of what they see. Auditors stamp "LGTM" on findings they can't verify. The signal-to-noise ratio got so bad that security teams measure success by ticket closure, not by what actually broke in production.
Conventional audit output
"SQL injection possible in line 42" — no data flow.
"Weak crypto detected" — no exploit path.
"Authentication bypass risk" — no attacker model.
"Review required" — nothing you can act on.
breachguard output
HIGH / HIGH / TRUE_POSITIVE — Cloudflare tunnel exposes localhost MCP server publicly.
Attacker model: unauthenticated-remote / network-only / public-api.
Evidence: DIRECT — cp.spawn('cloudflared', ...) at McpBridge.ts:249.
Fix: Warning dialog, token rotation, crypto.timingSafeEqual(). ~4h.
Five phases. Six gates. No shortcuts.
Each audit follows the same protocol. Skip a phase, you lose calibration. Skip a gate, you ship a false positive. The structure is the deliverable.
A catalog, not a checklist.
A finding without an attacker model is a vibe, not a vulnerability.
Every finding, the same scaffold.
Severity is calibrated against confidence. Gates are visible. Evidence is classified (direct / inference / heuristic). A reviewer can see, from the structure alone, whether to act, investigate further, or ignore.
The MCP server has token auth and a 1 MB body limit — adequate for
localhost. The moment startTunnel() runs, trycloudflare.com
exposes the endpoint over HTTPS with Bearer-token as the only gate.
CORS restrictions protect browsers; curl and Python ignore CORS entirely.
UI warning on tunnel start, token rotation on enable/disable,
crypto.timingSafeEqual() instead of string compare,
absolute-path config for cloudflared binary. Estimated ~4h.
Six questions. Fail-closed on any maybe.
A finding that can't answer all six passes through the report as UNCERTAIN with the specific gate(s) that failed. This is calibration made legible. Nothing is silently promoted to TRUE_POSITIVE.
What it is. What it isn't.
breachguard is
- A Claude skill — a
.skillarchive you load once - A methodology framework with enforceable gates
- A first-pass audit that surfaces hot-spots and attacker paths
- Useful for security, performance, architecture, compliance review
- Honest about its own scope limits in every report
- Apache-2.0 licensed, inspected source
breachguard is not
- A replacement for a professional security firm or pentest
- A CVE scanner — use Semgrep / Snyk / Dependabot for that
- A mobile-app-specific tool — see OWASP MAS skill
- An LLM prompt-injection scanner — see dedicated skill
- A certification of absence — only a structured surfacing
- A silver bullet. There are none in this field.
Load it. Use it.
Settings → Skills → Upload → breachguard.skill
Enable the skill in your workspace. Auto-activates on security-audit intent.
unzip breachguard.skill \ -d ~/.claude/skills/
Copies the skill into your user skills directory. Restart Claude Code to pick up.
mv breachguard.skill \ <project>/.claude/skills/
Scopes the skill to a single project. Useful when auditing a repo locally.