Run a single-session security audit on the codebase
/audit-security| Condition | Mode | Time |
|---|---|---|
| Task tool available + no context pressure | Parallel | ~15 min |
| Task tool unavailable | Sequential | ~60 min |
| Context running low (<20% remaining) | Sequential | ~60 min |
| User requests sequential | Sequential | ~60 min |
When to use: Task tool available, sufficient context budget, no S0/S1 in scope
Focus Areas:
Files:
app/api/**/*.ts (API routes)middleware.tslib/auth*.tsFocus Areas:
Files:
package.json, package-lock.jsonfunctions/package.jsonFocus Areas:
Files:
firestore.rules, storage.rulesfirebase.jsonfunctions/src/**/*.tsnext.config.mjsFocus Areas:
Files:
.claude/ configscrypto, random, hash patternsInvoke all 4 agents in a SINGLE Task message:
Task 1: vulnerability-scanner agent - audit auth, input validation, OWASP Task
2: supply-chain-auditor agent - audit dependencies, npm packages Task 3:
framework-security-auditor agent - audit Firebase, Next.js, headers Task 4:
ai-code-security-auditor agent - audit AI patterns, crypto, files
Each agent prompt MUST end with:
CRITICAL RETURN PROTOCOL:
- Write findings to the specified output file using Write tool or Bash
- Return ONLY: `COMPLETE: [agent-id] wrote N findings to [output-path]`
- Do NOT return full findings content — orchestrator checks completion via file
Dependency constraints: All 4 agents are independent -- no ordering required. Each writes to a separate JSONL section. S0/S1 findings trigger immediate notification but do not block other agents.
When to use: Task tool unavailable, context limits, or user preference
Execution Order (priority-first):
Total: ~60 min (vs ~15 min parallel)
Checkpointing: After each category, write intermediate findings to file before continuing. This protects against context loss.
{
"started_at": "ISO timestamp",
"categories_completed": ["Auth", "Input"],
"current_category": "DataProtection",
"findings_count": 24,
"last_file_written": "stage-2-findings.jsonl"
}
${AUDIT_DIR}/checkpoint.json.jsonl file (not overwrite)Step 0: Episodic Memory Search (Session #128)
Before running security audit, search for context from past security sessions:
// Search for past security audit findings
mcp__plugin_episodic -
memory_episodic -
memory__search({
query: ["security audit", "S0", "vulnerability"],
limit: 5,
});
// Search for specific vulnerability patterns addressed before
mcp__plugin_episodic -
memory_episodic -
memory__search({
query: ["OWASP", "injection", "auth bypass"],
limit: 5,
});
Why this matters:
Step 1: Check Thresholds
Run npm run review:check and report results. Check for security-sensitive file
changes.
Step 2: Gather Current Baselines
Collect these metrics by running commands:
# Dependency vulnerabilities (extract summary without truncating JSON)
npm audit --json 2>/dev/null | node -e '
try {
const d = JSON.parse(require("fs").readFileSync(0,"utf8"));
console.log(JSON.stringify(d.metadata?.vulnerabilities ?? d.vulnerabilities ?? {}, null, 2));
} catch (e) {
console.log("{\"error\": \"Invalid JSON from npm audit\"}");
}
'
# Security lint warnings
npm run lint 2>&1 | grep -i "security" | head -10
# Pattern compliance (security patterns)
npm run patterns:check 2>&1
# Check for .env files (existence only - no permission/owner metadata needed)
ls .env* 2>/dev/null || echo "No .env files found"
Step 2b: Query SonarCloud Security (if MCP available)
If mcp__sonarcloud__get_security_hotspots is available:
status: "TO_REVIEW" to get unresolved security hotspotsIf mcp__sonarcloud__get_issues is available:
types: "VULNERABILITY" to get security-specific issuesThis provides real-time security issue data from static analysis.
Step 3: Load False Positives Database
Read docs/technical-debt/FALSE_POSITIVES.jsonl and filter findings matching:
securityexpires date passed)Note patterns to exclude from final findings.
Step 4: Check Template Currency
Read docs/audits/multi-ai/templates/SECURITY_AUDIT_PLAN.md and verify:
If outdated, note discrepancies but proceed with current values.
Focus Areas (12 Categories):
Authentication & Authorization (auth checks, role validation, IDOR, privilege escalation)
Input Validation & Injection Prevention:
Data Protection (encryption, PII handling, secrets, overly verbose errors)
Firebase/Firestore Security (rules, Cloud Functions, rate limiting, replay protection)
Dependency Security & Supply Chain:
OWASP Top 10 Coverage
Hosting & Headers Security:
Next.js/Framework-Specific:
File Handling Security:
Crypto & Randomness:
Product/UX Security Risks:
AI-Generated Code & Agent Security:
AI Security Patterns (AI-Codebase Specific):
.claude/ configs, agent prompts, LLM
integrations with user input (S0)any types, * CORS, overly
permissive rules (S1)For each category:
Security-Sensitive Files to Check:
firestore.rules, storage.rulesfunctions/src/**/*.tslib/firebase*.ts, lib/auth*.tsmiddleware.ts, next.config.mjsfirebase.json (hosting headers, rewrites).env* files (environment variables)package.json, package-lock.json (supply chain).claude/ configs (agent security)Additional Checks for Vibe-Coded Apps:
eval(, new Function(, Function( - dynamic code executiondangerouslySetInnerHTML - XSS vectorsNEXT_PUBLIC_ env vars - ensure no secrets leakedprocess.env in client components - boundary leakspostinstall, preinstall in package.json - supply chain.claude/ that could be prompt injectionScope:
app/, components/, lib/, functions/, firestore.rules,
firebase.json, .claude/node_modules/, .next/, docs/, tests/1. Markdown Summary (display to user):
## Security Audit - [DATE]
### Baselines
- npm audit: X vulnerabilities (Y critical, Z high)
- Security patterns: X violations
- Security-sensitive files: X changed since last audit
### Findings Summary
| Severity | Count | OWASP Category | Confidence |
| -------- | ----- | -------------- | ----------- |
| S0 | X | ... | HIGH/MEDIUM |
| S1 | X | ... | HIGH/MEDIUM |
| S2 | X | ... | ... |
| S3 | X | ... | ... |
### Critical/High Findings (Immediate Action)
1. [file:line] - Description (S0/OWASP-A01) - DUAL_PASS_CONFIRMED
2. ...
### False Positives Filtered
- X findings excluded (matched FALSE_POSITIVES.jsonl patterns)
### Dependency Vulnerabilities
- ...
### Recommendations
- ...
2. JSONL Findings (save to file):
Create file: docs/audits/single-session/security/audit-[YYYY-MM-DD].jsonl
Category field: category MUST be security. Also include owasp_category
and cvss_estimate fields.
3. Markdown Report (save to file):
Create file: docs/audits/single-session/security/audit-[YYYY-MM-DD].md
Full markdown report with all findings, baselines, and remediation plan.
Read
.claude/skills/_shared/AUDIT_TEMPLATE.mdfor: Evidence Requirements, Dual-Pass Verification, Cross-Reference Validation, JSONL Output Format, Context Recovery, Post-Audit Validation, MASTER_DEBT Cross-Reference, Interactive Review, TDMS Intake & Commit, Documentation References, Agent Return Protocol, and Honesty Guardrails.
Skill-specific TDMS intake:
node scripts/debt/intake-audit.js <output.jsonl> --source "audit-security-<date>"
Security audit triggers (check AUDIT_TRACKER.md):
| Version | Date | Description |
|---|---|---|
| 1.0 | 2026-02-25 | Initial implementation |