From pattern-matching to provability.
VulnHunter is an open-source, agentic AI security tool that applies proactive, attacker-first analysis directly to source code.
Unlike traditional, passive SAST scanners that flag suspicious patterns and often cause false positives, VulnHunter reasons like an adversary. It identifies which defects are actually exploitable, maps prospective attack paths, and proposes targeted, evidence-backed fixes.
Modern software supply chains are deeply interconnected. A single vulnerability in a widely-used open-source component can ripple across thousands of enterprises simultaneously.
Developed internally at Capital One, VulnHunter is released to the community because no single organization can solve this challenge alone.
[!WARNING] Cyber-safeguard disclaimer VulnHunter performs dual-use cybersecurity work (vulnerability discovery and exploitation). If you run it against an Anthropic account that is not enrolled in Anthropic's Cyber Verification Program, real-time cyber safeguards may block requests and your usage may be flagged for cyber abuse. If you intend to use VulnHunter on Anthropic's first-party platforms (Claude API / Claude Code), we strongly recommend enrolling first via the verification portal.
[!IMPORTANT] Prerequisites & Model Requirements Built and optimized for Claude Opus running in Claude Code. The framework depends on deep, multi-step reasoning and requires frontier Opus-class models. You supply your own model access.
VulnHunter ships as three composable Claude Code skills that form a complete, automated remediation loop:
| Skill | Phase | Core Responsibility |
|---|---|---|
/vulnhunt | Hunt | Maps entry points to dangerous sinks. Filters findings through a multi-stage falsification pipeline (Recon → Parallel Hunt → Adversarial Disprove → Capability Filter). Emits only verified issues with an executable exploit and a proposed fix. |
/vulnhunter-fix | Fix | Developer-led, test-driven remediation. It writes an exploit demo, creates a failing security test (RED), implements the code fix (GREEN), verifies the exploit is blocked without regressions, and cuts a reviewable PR. |
/vulnhunt-fix-verify | Verify | A completely separate, read-only agent that independently validates whether a finding was successfully remediated. It emits a per-finding verdict so fixes are proven, not taken on faith. |
Note: For running this loop unattended at scale,
vulnhunter-agent/wraps the scanner in a headless runtime, whileharness/drives it across multiple repositories in batch.
On the naming: the suite is VulnHunter, but the core scanner command is
/vulnhunt(and the verifier/vulnhunt-fix-verify) — the shorter form is intentional, not a typo. The/vulnhunter-fixremediation skill and thevulnhunter-agent/runtime keep the full spelling.
Each component is organized into a self-contained subtree:
| Path | Description |
|---|---|
vulnhunt/ | The core /vulnhunt scanner skill (Prompt-only: SKILL.md + phases). See vulnhunt/README.md. |
vulnhunter-fix/ | The /vulnhunter-fix skill, its companion Python helper package, and tests. See vulnhunter-fix/README.md. |
vulnhunt-fix-verify/ | The /vulnhunt-fix-verify standalone verification skill (Prompt-only). See vulnhunt-fix-verify/README.md. |
vulnhunter-agent/ | Config-driven headless runtime wrapper that runs scans and files GitHub issues. See vulnhunter-agent/README.md. |
harness/ | Developer tooling for running large batch-scans and benchmarking detection accuracy. See harness/README.md. |
# Clone the repository
git clone https://github.com/capitalone/vulnhunter.git
cd vulnhunter
# Copy skills into ~/.claude/skills/
./install.sh
# (Optional) To clean up or remove installed skills
# ./uninstall.sh
On Windows, use the .cmd equivalents from a cmd.exe or PowerShell prompt:
git clone https://github.com/capitalone/vulnhunter.git
cd vulnhunter
REM Copy skills into %USERPROFILE%\.claude\skills\
.\install.cmd
REM (Optional) To clean up or remove installed skills
REM .\uninstall.cmd
[!NOTE]
install.sh/install.cmdcopy files directly (rather than symlinking) because symlinks can breakfind/globfunctionality inside subagents. Re-run the install script after pulling updates to refresh your local environment.
claude --model opus --add-dir ~/.claude/skills/vulnhunt --add-dir ~/.claude/skills/vulnhunt/phases
# Inside the Claude Code session, invoke:
/vulnhunt
The fixer requires git, the GitHub CLI (gh) authenticated to your target repositories, and its Python helpers installed (pip install -e ".[dev]" inside the vulnhunter-fix/ directory).
claude --model opus --add-dir ~/.claude/skills/vulnhunter-fix
# Inside the Claude Code session, invoke:
/vulnhunter-fix
See vulnhunter-fix/README.md for advanced operational modes and configuration settings.
The verifier runs strictly read-only over trusted roots under a tight tool envelope (Read/Write/Edit/Glob/Grep/Agent—no Bash execution, no network access). The caller must pre-create the output (out) directory.
claude --model opus --add-dir ~/.claude/skills/vulnhunt-fix-verify \
--add-dir ~/.claude/skills/vulnhunt-fix-verify/phases
# Inside the Claude Code session, invoke:
/vulnhunt-fix-verify repo=<abs_path> report=<abs_path> fixed=VULN-001,... out=<abs_path> [comments=<abs_path>] [additional_repos=<path1>,<path2>]
vulnhunter-agent/)For non-interactive or CI/CD pipelines, vulnhunter-agent/ wraps the scanner into a headless workflow. It clones targets, executes /vulnhunt, publishes results, and opens GitHub issues for confirmed bugs. It connects natively via the direct Anthropic API.
Review the vulnhunter-agent/README.md for deployment blueprints.
harness/)The harness/ directory provides workstation-scale developer tooling. To initialize, run cd harness && pip install -e ".[dev]".
Manage your target list in harness/local_harness/batch/REPO_LIST.txt (one GitHub URL per line, lines starting with # are ignored):
cd harness
python -m local_harness.batch.run scan # Clone and scan every repo in the list
python -m local_harness.batch.run scan --resume # Skip repositories already processed
python -m local_harness.batch.run status # Monitor progress across your batch
python -m local_harness.batch.run collect # Gather all findings for centralized review
Evaluate scanner accuracy against a known-vulnerable vulnerability corpus (Clone → Scan → LLM-Judge → Tally Metrics):
python -m local_harness.benchmark.run # Execute full benchmark run
python -m local_harness.benchmark.run --repos "name" # Benchmark a single target repository
python -m local_harness.benchmark.run --tally-only # Re-generate the analytical report only
Bring Your Own Corpus: This repository ships with a minimal synthetic example (
harness/local_harness/benchmark/ground_truth/EXAMPLE.json) mapped to public targets like OWASP NodeGoat, Juice Shop, and WebGoat. Build out your own testing suites insideground_truth/<repo>.json. Define your target scanning/judging engines inharness/local_harness/config.py.
Each Python component maintains its own isolated testing suite. Run them using pytest:
cd harness && pip install -e ".[dev]" && python -m pytest tests/ --cov=local_harness
cd vulnhunter-fix && pip install -e ".[dev]" && python -m pytest -q
cd vulnhunter-agent && pip install -e ".[dev]" && python -m pytest -q
Python
98.5%
Shell
1.1%
From pattern-matching to provability.
VulnHunter is an open-source, agentic AI security tool that applies proactive, attacker-first analysis directly to source code.
Unlike traditional, passive SAST scanners that flag suspicious patterns and often cause false positives, VulnHunter reasons like an adversary. It identifies which defects are actually exploitable, maps prospective attack paths, and proposes targeted, evidence-backed fixes.
Modern software supply chains are deeply interconnected. A single vulnerability in a widely-used open-source component can ripple across thousands of enterprises simultaneously.
Developed internally at Capital One, VulnHunter is released to the community because no single organization can solve this challenge alone.
[!WARNING] Cyber-safeguard disclaimer VulnHunter performs dual-use cybersecurity work (vulnerability discovery and exploitation). If you run it against an Anthropic account that is not enrolled in Anthropic's Cyber Verification Program, real-time cyber safeguards may block requests and your usage may be flagged for cyber abuse. If you intend to use VulnHunter on Anthropic's first-party platforms (Claude API / Claude Code), we strongly recommend enrolling first via the verification portal.
[!IMPORTANT] Prerequisites & Model Requirements Built and optimized for Claude Opus running in Claude Code. The framework depends on deep, multi-step reasoning and requires frontier Opus-class models. You supply your own model access.
VulnHunter ships as three composable Claude Code skills that form a complete, automated remediation loop:
| Skill | Phase | Core Responsibility |
|---|---|---|
/vulnhunt | Hunt | Maps entry points to dangerous sinks. Filters findings through a multi-stage falsification pipeline (Recon → Parallel Hunt → Adversarial Disprove → Capability Filter). Emits only verified issues with an executable exploit and a proposed fix. |
/vulnhunter-fix | Fix | Developer-led, test-driven remediation. It writes an exploit demo, creates a failing security test (RED), implements the code fix (GREEN), verifies the exploit is blocked without regressions, and cuts a reviewable PR. |
/vulnhunt-fix-verify | Verify | A completely separate, read-only agent that independently validates whether a finding was successfully remediated. It emits a per-finding verdict so fixes are proven, not taken on faith. |
Note: For running this loop unattended at scale,
vulnhunter-agent/wraps the scanner in a headless runtime, whileharness/drives it across multiple repositories in batch.
On the naming: the suite is VulnHunter, but the core scanner command is
/vulnhunt(and the verifier/vulnhunt-fix-verify) — the shorter form is intentional, not a typo. The/vulnhunter-fixremediation skill and thevulnhunter-agent/runtime keep the full spelling.
Each component is organized into a self-contained subtree:
| Path | Description |
|---|---|
vulnhunt/ | The core /vulnhunt scanner skill (Prompt-only: SKILL.md + phases). See vulnhunt/README.md. |
vulnhunter-fix/ | The /vulnhunter-fix skill, its companion Python helper package, and tests. See vulnhunter-fix/README.md. |
vulnhunt-fix-verify/ | The /vulnhunt-fix-verify standalone verification skill (Prompt-only). See vulnhunt-fix-verify/README.md. |
vulnhunter-agent/ | Config-driven headless runtime wrapper that runs scans and files GitHub issues. See vulnhunter-agent/README.md. |
harness/ | Developer tooling for running large batch-scans and benchmarking detection accuracy. See harness/README.md. |
# Clone the repository
git clone https://github.com/capitalone/vulnhunter.git
cd vulnhunter
# Copy skills into ~/.claude/skills/
./install.sh
# (Optional) To clean up or remove installed skills
# ./uninstall.sh
On Windows, use the .cmd equivalents from a cmd.exe or PowerShell prompt:
git clone https://github.com/capitalone/vulnhunter.git
cd vulnhunter
REM Copy skills into %USERPROFILE%\.claude\skills\
.\install.cmd
REM (Optional) To clean up or remove installed skills
REM .\uninstall.cmd
[!NOTE]
install.sh/install.cmdcopy files directly (rather than symlinking) because symlinks can breakfind/globfunctionality inside subagents. Re-run the install script after pulling updates to refresh your local environment.
claude --model opus --add-dir ~/.claude/skills/vulnhunt --add-dir ~/.claude/skills/vulnhunt/phases
# Inside the Claude Code session, invoke:
/vulnhunt
The fixer requires git, the GitHub CLI (gh) authenticated to your target repositories, and its Python helpers installed (pip install -e ".[dev]" inside the vulnhunter-fix/ directory).
claude --model opus --add-dir ~/.claude/skills/vulnhunter-fix
# Inside the Claude Code session, invoke:
/vulnhunter-fix
See vulnhunter-fix/README.md for advanced operational modes and configuration settings.
The verifier runs strictly read-only over trusted roots under a tight tool envelope (Read/Write/Edit/Glob/Grep/Agent—no Bash execution, no network access). The caller must pre-create the output (out) directory.
claude --model opus --add-dir ~/.claude/skills/vulnhunt-fix-verify \
--add-dir ~/.claude/skills/vulnhunt-fix-verify/phases
# Inside the Claude Code session, invoke:
/vulnhunt-fix-verify repo=<abs_path> report=<abs_path> fixed=VULN-001,... out=<abs_path> [comments=<abs_path>] [additional_repos=<path1>,<path2>]
vulnhunter-agent/)For non-interactive or CI/CD pipelines, vulnhunter-agent/ wraps the scanner into a headless workflow. It clones targets, executes /vulnhunt, publishes results, and opens GitHub issues for confirmed bugs. It connects natively via the direct Anthropic API.
Review the vulnhunter-agent/README.md for deployment blueprints.
harness/)The harness/ directory provides workstation-scale developer tooling. To initialize, run cd harness && pip install -e ".[dev]".
Manage your target list in harness/local_harness/batch/REPO_LIST.txt (one GitHub URL per line, lines starting with # are ignored):
cd harness
python -m local_harness.batch.run scan # Clone and scan every repo in the list
python -m local_harness.batch.run scan --resume # Skip repositories already processed
python -m local_harness.batch.run status # Monitor progress across your batch
python -m local_harness.batch.run collect # Gather all findings for centralized review
Evaluate scanner accuracy against a known-vulnerable vulnerability corpus (Clone → Scan → LLM-Judge → Tally Metrics):
python -m local_harness.benchmark.run # Execute full benchmark run
python -m local_harness.benchmark.run --repos "name" # Benchmark a single target repository
python -m local_harness.benchmark.run --tally-only # Re-generate the analytical report only
Bring Your Own Corpus: This repository ships with a minimal synthetic example (
harness/local_harness/benchmark/ground_truth/EXAMPLE.json) mapped to public targets like OWASP NodeGoat, Juice Shop, and WebGoat. Build out your own testing suites insideground_truth/<repo>.json. Define your target scanning/judging engines inharness/local_harness/config.py.
Each Python component maintains its own isolated testing suite. Run them using pytest:
cd harness && pip install -e ".[dev]" && python -m pytest tests/ --cov=local_harness
cd vulnhunter-fix && pip install -e ".[dev]" && python -m pytest -q
cd vulnhunter-agent && pip install -e ".[dev]" && python -m pytest -q
Python
98.5%
Shell
1.1%