auto-fix
[experimental] Auto-remediate verified findings by generating patches and optionally creating a PR
[beta] Run quick, deep, or audit scan profiles and emit a shared findings artifact
> /plugin marketplace add allsmog/vuln-scout > /plugin install vuln-scout@vuln-scout
How it fires
How this command gets triggered: by you, by Claude, or both.
/scanContext preview
What this command does when you run it.
[beta] Run quick, deep, or audit scan profiles and emit a shared findings artifact
name: scan description: "[beta] Run quick, deep, or audit scan profiles and emit a shared findings artifact" argument-hint: "[path] [--profile quick|deep|audit] [--tools api-spec,semgrep,codeql,joern] [--rules ruleset] [--workspace name] [--since-commit sha] [--diff-base ref] [--exclude patterns] [--suppressions path] [--format json|sarif|md|html|pr-comment|badge] [--fail-on severity] [--output file] [--json] [--secrets] [--require-tools] [--custom-rules] [--extended-detectors] [--incremental] [--generate-pocs] [--no-filter] [--no-semantic-analysis]" allowed-tools: - Bash - Glob - Read - Write - TodoWrite
Run automated static analysis and write the results to `.claude/findings.json`.
| Flag | Effect | |------|--------| | `--profile` | Use `quick` (local deterministic rules), `deep` (installed analyzers), or `audit` (deterministic baseline for Claude-driven review) | | `--tools` | Run `api-spec`, `semgrep`, `codeql`, `joern`, or a comma-separated combination | | `--rules` | Semgrep ruleset override | | `--workspace` | Resolve a monorepo workspace before scanning | | `--since-commit` | Scan files changed since a commit SHA | | `--diff-base` | Backward-compatible alias for diff scans against a git ref | | `--exclude` | Extra exclusions | | `--suppressions` | Apply `.vuln-scout-ignore` after aggregation | | `--format` | Emit `json`, `sarif`, `md`, `html`, `pr-comment`, or `badge` at the end | | `--fail-on` | Exit `2` when unsuppressed `finding` entries exist at or above the severity | | `--output` | Save the final emitted artifact to a file. In Claude plugin workflows, resolve relative output paths under the target workspace when the scan target is not the current directory. | | `--json` | Shortcut for `--format json` | | `--secrets` | Run secret scanning (gitleaks/truffleHog) alongside static analysis | | `--require-tools` | Fail if any requested tool is unavailable | | `--custom-rules` | Generate target-specific Semgrep rules in addition to profile rules | | `--extended-detectors` | Run regex-based VulnScout detectors in addition to scanner tools | | `--incremental` | Use file-hash cache to skip unchanged files | | `--generate-pocs` | Generate proof-of-concept scripts for verified findings | | `--no-filter` | Keep low-confidence Semgrep audit results as hotspots instead of dropping them | | `--no-semantic-analysis` | Compatibility flag for callers that share `/full-audit` options; the standalone CLI does not run a Claude semantic analysis phase |
The `audit` profile does not invoke Claude during the scan phase; semantic review is performed afterward by `/vuln-scout:verify` or `/vuln-scout:full-audit`.
All tool branches must write the same artifact shape to `.claude/findings.json`.
Source of truth:
Required top-level fields:
Required finding fields:
If a scan branch only proves that a dangerous pattern exists, record a `hotspot`.
Default target is the current directory.
Static scans always run against a **source directory**. Saved `.claude/scope-*.md` snapshots are useful context for Claude-side review and threat modeling, but they are not direct input to Semgrep, Joern, or CodeQL.
When invoking `scripts/scan_orchestrator.py` from this command and the user supplies a scan target other than `.`, convert relative `--output` paths to live under that target. For example:
python3 /path/to/vuln-scout/scripts/scan_orchestrator.py /tmp/app \ --profile quick \ --output /tmp/app/.claude/plugin-findings.json
Do not write relative output artifacts into the plugin repository unless the plugin repository is the explicit scan target.
If `--since-commit <sha>` is passed:
CHANGED_FILES=$(git diff --name-only <sha>...HEAD -- [path]) printf '%s\n' "$CHANGED_FILES" > /tmp/vuln-scout-targets.txt
If `--diff-base <ref>` is passed:
Always exclude:
node_modules vendor dist build coverage __pycache__ *.min.js *.map
semgrep --config "${RULESET:-vuln-scout/rules/vuln-scout-local.yml}" --json [targets...]Classify:
Create a database for each detected language, then analyze it explicitly.
codeql database create .codeql-db --language=<language> --source-root [path] codeql database analyze .codeql-db \ <language>-security-and-quality.qls \ --format=sarif-latest \ --output /tmp/codeql-results.sarif
Map CodeQL results into the shared findings artifact:
Joern is verification-oriented, so its standalone scan branch should be conservative.
1. Generate or reuse a cached CPG keyed by target hash plus detected language. 2. Run language-aware hotspot queries or batch verification.
TARGET_HASH=$(git ls-files -z [path] | xargs -0 shasum | shasum | awk '{print $1}')
LANGUAGE=<detected-language>
CPG_FILE=".joern/${TARGET_HASH}-${LANGUAGE}.cpg"
if [ ! -f "$CPG_FILE" ]; then
joern-parse [path] --output "$CPG_FILE"
fi
joern --script "${CLAUDE_PLUGIN_ROOT}/scripts/joern/batch-verify.sc" \
--params cpgFile="$CPG_FILE",findingsFile=".claude/findings.json"Classification
AI-powered whitebox penetration testing plugin for Claude Code. 9 languages, 22 skills, 7 autonomous agents. STRIDE threat modeling, OWASP 2025 coverage, polyglot monorepo support.
Repo: allsmog/vuln-scout
[experimental] Auto-remediate verified findings by generating patches and optionally creating a PR
[experimental] Create a custom Semgrep detection rule from a confirmed vulnerability pattern
[stable] Compare security posture between two git refs to find new/fixed vulnerabilities and track regression
[stable] End-to-end security audit with hotspot-aware framework pivots, shared findings.json schema, and CI-friendly workflow flags
[beta] Audit a decompiled Android target — scans jadx_out/sources + apktool_out together and merges findings