audit-deep — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited audit-deep (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
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.
Run a comprehensive three-pillar audit of the entire codebase. Launches three parallel agents and aggregates findings.
$ARGUMENTS — optional flags:--fix — automatically fix issues after audit (default: report only)--scope=<path> — limit audit to specific directory (default: entire project)--security-only — run only the security audit (Agent 2)--quality-only — run only the code quality/simplify audit (Agent 1)--injection-only — run only the hallucination/injection audit (Agent 3)--report — save full report (see report location logic below)--report=<path> — save report to a specific file pathIf no flags are provided, all three audits run in parallel (report only, no auto-fix).
Only ONE --*-only flag is allowed. If multiple are passed, use this priority: --security-only > --quality-only > --injection-only. Log which was selected.
When --report is used without a path:
_local/reports/ exists → save there_local/ exists → create _local/reports/ and save there.gitignore contains _local → create _local/reports/ and save theredeep-audit-<YYYY-MM-DD>.md (warn user it's tracked by git)Filename format: deep-audit-<YYYY-MM-DD>.md
Before launching agents:
--scope given:src/, app/, lib/, pages/, components/ — use whatever existsnode_modules/, .next/, dist/, build/, vendor/, __pycache__/)package.json scripts, or check for Makefile, pyproject.toml, Cargo.toml. Record the exact commands for the fix phase. If none found, note "no build/lint configured."package.json (or equivalent) to identify: framework, language, CSS approach. Pass this to each agent so they tailor their search patterns.Every agent MUST report findings in this format (one per finding):
### [SEVERITY] Category — Short description
- **File:** path/to/file.ts:42
- **Evidence:** <the problematic code or pattern found>
- **Impact:** <what could go wrong>
- **Fix:** <concrete remediation>Severity values: CRITICAL, HIGH, MEDIUM, LOW
If an agent returns findings in a different format, reformat them into this structure during aggregation.
Unless a --*-only flag narrows scope, launch ALL three agents concurrently in a single message using the Agent tool. Each agent runs in its own context and returns findings.
Agent tool prompt:
Audit code quality in the project at [cwd]. Scope: [scope path]. Tech stack: [detected stack].
>
Use Grep and Glob to search for these specific patterns. For each finding, report the file path, line number, severity, and suggested fix using the format: ### [SEVERITY] Category — description with File, Evidence, Impact, Fix fields.>
1. Dead code: - Grep forimport .* fromin [scope], then check if imported names are used in the file - Grep for//followed by code patterns (commented-out code, not comments) - Look for functions/variables defined but never referenced
>
2. Redundant state (React/Vue projects only): - Grep foruseStatewhere the value is derived from another state or props - Grep foruseEffectthat could be replaced with direct computation - Grep for inline array/object literals in JSX (e.g.,style={{ }},options={[...]}recreated every render)
>
3. Copy-paste patterns: - Look for near-identical code blocks (same structure, different variable names) within and across files
>
4. Over-engineering: - Find abstractions used in only one place (wrapper components, utility functions called once) - Grep for process.env.NODE_ENV checks shipping dev tools to production>
5. Type issues (TypeScript projects only): - Grep for: anyandas any(exclude test files and type declaration files) - Grep for@ts-ignoreand@ts-expect-error- IMPORTANT: use pattern\bany\bto avoid matching words like "company" or "many"
>
6. CSS conflicts: - Grep forstyle={{in the same component that usesclassName=(inline overriding classes) - Look for duplicate CSS class definitions across stylesheets
>
7. Unnecessary re-renders (React projects only): - Grep for inline object/array creation in JSX props:prop={{ }},prop={[ ]}- Look for expensive computations without useMemo on frequently-rendered components
>
8. Memory leaks: - Grep forsetTimeout|setInterval|addEventListenerinsideuseEffectand check for cleanup return - Pattern:useEffectcontainingsetTimeoutoraddEventListenerwithout a correspondingclearTimeout,removeEventListener, orreturn () =>cleanup
>
End your response with: `` ---FINDINGS-SUMMARY--- critical: N high: N medium: N low: N ---END-SUMMARY--- ``Agent tool prompt:
Audit security in the project at [cwd]. Scope: [scope path]. Tech stack: [detected stack].
>
Use Grep and Glob to search for these OWASP Top 10 and web security issues. For each finding, include file:line evidence using the format: ### [SEVERITY] Category — description with File, Evidence, Impact, Fix fields.>
1. XSS: - Grep fordangerouslySetInnerHTML— for each instance, trace the data source. Static content = LOW, external/user content = CRITICAL. - Grep forinnerHTML\s*=(vanilla JS) - Grep forv-html(Vue) - Check CSP headers: searchnext.config, middleware, or server config for Content-Security-Policy. Flagunsafe-inlineorunsafe-eval.
>
2. Authentication: - Grep for cookie-setting code:cookies.set,Set-Cookie,setCookie. Check forhttpOnly,secure,sameSiteflags. - Grep for===comparisons on secrets/tokens (should usetimingSafeEqual) - Grep forMath.randomin security contexts (should usecrypto.randomBytesorcrypto.getRandomValues)
>
3. CSRF: - Find all POST/PUT/DELETE endpoints. For each, check if it validates Origin/Referer headers or uses CSRF tokens. - Check for sameSite cookie attribute.>
4. Injection: - Grep for raw SQL: string concatenation or template literals nearquery(,.raw(,execute(. Parameterized queries are PASS. - Grep forchild_process,exec(,spawn(,execSync— check if user input flows into commands. - Grep foreval(,new Function(,setTimeout(string)— dynamic code execution.
>
5. Information disclosure: - Grep forstackormessagein catch blocks sent to response (leaking stack traces) - Grep forNEXT_PUBLIC_orVITE_env vars that might contain secrets (API keys, DB URLs) - Grep for hardcoded strings matching secret patterns: API keys (length 20+), tokens, passwords
>
6. Dependencies: - Ifpackage.jsonexists, note thatnpm auditshould be run (do NOT run it yourself — just flag it as a recommendation) - Check ifpackage-lock.jsonoryarn.lockorpnpm-lock.yamlexists and is committed
>
7. Security headers: - Search config files for: Strict-Transport-Security, X-Frame-Options, X-Content-Type-Options, Content-Security-Policy, Referrer-Policy, Permissions-Policy - Flag any that are missing entirely
>
8. Open redirects: - Grep forredirect(,location.href =,window.location =,res.redirect(where the URL comes from user input (query params, request body)
>
9. External resources: - Grep for<script src=,<link href=pointing to external CDNs. Check forintegrity=attribute (SRI). Dynamic CDNs like Google Fonts are exempt.
>
10. Secrets: - Grep for patterns:sk-,pk_,AKIA,ghp_,Bearer,password = ",secret = ",apiKey = "- Check.env.exampleor.env.localfor names that suggest secrets, then search codebase for those names hardcoded
>
IMPORTANT: Only report findings with concrete file:line evidence. Do NOT speculate about what "might" exist. If a search returns no results, report it as "PASS — no instances found."
>
End your response with the findings summary block.
Agent tool prompt:
Map the injection/content attack surface in the project at [cwd]. Scope: [scope path]. Tech stack: [detected stack].
>
Use Grep and Glob to find every path where external or dynamic content enters the rendering pipeline. For each finding, include file:line evidence using the format: ### [SEVERITY] Category — description with File, Evidence, Impact, Fix fields.>
1. dangerouslySetInnerHTML inventory: - Grep for dangerouslySetInnerHTML — for EVERY instance, report: file, line, what data it renders, whether that data is sanitized (DOMPurify, sanitize-html, etc.), and the data's origin (static file, API, user input, CMS) - Static/developer-controlled content = LOW. External/dynamic content without sanitization = CRITICAL.>
2. Content injection vectors: - Grep for URL param reading:searchParams,useSearchParams,req.query,URLSearchParams,location.search- For each: trace if the value is rendered in HTML. If rendered without escaping = HIGH. - Grep forlocalStorage.getItem,sessionStorage.getItem,document.cookie— trace into rendering.
>
3. Template literal HTML: - Grep for backtick strings containing<followed by${— template literals building HTML with interpolation - This is HIGH if the interpolated value comes from user input.
>
4. Client-side state injection: - Grep forwindow.location,document.referrer,navigator.userAgentused in rendered output - These are LOW (not easily exploitable) unless combined withinnerHTMLordangerouslySetInnerHTML.
>
5. External content rendering: - Grep forfetch(oraxiosresponses that are rendered in the UI. Check if the response is validated/typed before rendering. - Grep for<iframewith dynamicsrcattribute — check if the URL is validated.
>
6. Form value reflection: - Find form inputs whose values are displayed back in the UI (e.g., search results showing "You searched for: X"). Check for HTML escaping.
>
IMPORTANT: Do NOT include a "future risk assessment" section. Only report findings with concrete evidence that exists NOW. Speculation about what might become dangerous "if content moves to a CMS" is not a finding — it's noise.
>
End your response with the findings summary block.
After all agents return (or fail):
dangerouslySetInnerHTML or XSS patterns. Merge overlapping findings (same file:line) — keep the more detailed entry, add a note "(also flagged by [other agent])".# Deep Audit Report — [Project Name]
**Date:** YYYY-MM-DD | **Scope:** [path] | **Stack:** [detected]
## Summary
| Pillar | Critical | High | Medium | Low | Status |
|--------|----------|------|--------|-----|--------|
| Code Quality | X | X | X | X | [OK/FAILED] |
| Security | X | X | X | X | [OK/FAILED] |
| Injection Surface | X | X | X | X | [OK/FAILED] |
| **Total (deduplicated)** | **X** | **X** | **X** | **X** | |
## Findings
### Critical
[findings...]
### High
[findings...]
### Medium
[findings...]
### Low
[findings...]
## Priority Actions
1. [top 5-10 most impactful findings with file:line]--report flag is set, using the report location logic.If --fix is passed:
If --fix is NOT passed: print the summary and say "Run /audit:deep --fix to fix critical and high issues."
Do NOT ask "Want me to fix?" and wait — the user will invoke --fix explicitly if they want fixes.
useDragReorder), component names (AboutModal), variable names, or file names that weren't found via Grep/Glob/Read. If you found duplicated drag-and-drop logic, say "drag-and-drop logic duplicated in src/A.tsx:40, src/B.tsx:55, src/C.tsx:120" — do NOT say "extract useDragReorder hook."AboutModal, VERSION, or any identifier unless Grep confirmed it exists in the codebase.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.