Agent skill

Vulnhunt

by capitalone in capitalone/VulnHunter

Scan a codebase for exploitable security defects. An agent skill from capitalone/VulnHunter.

Apache-2.0Auto-check passedSecurity

Install Vulnhunt

skills CLI
$ npx skills add capitalone/VulnHunter --skill vulnhunt -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install capitalone/VulnHunter vulnhunt --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/capitalone/VulnHunter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/vulnhunt .claude/skills/vulnhunt && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
vulnhunt
GitHub stars
1.1k
Used in
1 other repo
Token cost
~5k tokens
SKILL.md length
2,637 words
Files
13
Skills in repo
3
Repo updated
First seen
Licence
Apache-2.0

At a glance

Scan a codebase for exploitable security defects. An agent skill from capitalone/VulnHunter.

  • Works in 5 steps: Report what the gates confirm: If a… → Follow the data: Every vulnerability… → Prove it: Every finding must have a PoC… → …
  • Security work in your project
  • SKILL.md covers MANDATORY FIRST ACTIONS, Operating Principles, Analysis Approach and Workflow, plus 1 more section
  • Calls npm, yarn and pip

What it does

Vulnhunt is an agent skill from capitalone/VulnHunter. Scan a codebase for exploitable security defects. Enumerates every user-controllable input, traces each forward to dangerous sinks, proves exploitability with executable tests, and proposes validated fixes.

Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files (for example `README.md`, `phases/phase1_recon.md` and `phases/phase2_class_inj.md`).

It sits in Security. It works with Bash. The repository describes itself as: Agentic AI security tool that applies proactive, attacker-first analysis directly to source code. The licence is Apache-2.0.

When your agent uses it

  • Security work in your project

Example prompts

  • “/vulnhunt”

Requirements

  • Python 3
  • Node.js

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Report what the gates confirm: If a finding passes all gates (reachable,
  2. Follow the data: Every vulnerability report must include a concrete data flow
  3. Prove it: Every finding must have a PoC (runnable or static trace). If you
  4. Fix it right: Proposed fixes must eliminate the vulnerability class, not just
  5. Production code only: Only audit first-party production source code. Always

What it can do on your machine

Read from SKILL.md and the folder at commit 6d25b5c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • yarn
    • pip
    • go
    • mvn

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, yarn and pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Vulnhunt loads about 5k tokens when it runs. Until then it costs about 54 tokens; SKILL.md has 2,637 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~54
When it runs · the whole SKILL.md, loaded when a task matches
~5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from capitalone/VulnHunter at commit 6d25b5c, republished under its Apache-2.0 licence (© capitalone). 2,637 words, ~4,999 tokens.

Download SKILL.mdSave it as .claude/skills/vulnhunt/SKILL.md (or your agent's skills folder). This skill also uses 12 other files; get the full folder from GitHub.
name
vulnhunt
description
Scan a codebase for exploitable security defects. Enumerates every user-controllable input, traces each forward to dangerous sinks, proves exploitability with executable tests, and proposes validated fixes.
trigger
/vulnhunt, user asks to find security vulnerabilities, user asks to audit code for security, user asks for a security review

VulnHunter Security Audit Skill

MANDATORY FIRST ACTIONS

Step 0: Model check (interactive/direct invocation only). When invoked interactively — i.e. path B below, with no "Pre-resolved scan metadata" block — inspect the model you are running as. If it is NOT Opus 4.7 or higher, STOP immediately and tell the user (do not run any tools, resolve the target, or offer the mode menu yet):

⚠️ VulnHunter is optimized for Claude Opus 4.7/4.8 and may be unreliable on other models. Please switch with the /model opus command, then re-run /vulnhunt.

Wait for the user. Only proceed past this step once they are on Opus, or if they explicitly reply that they want to continue on the current model anyway.

Skip this check under path A (agent-driven); the agent controls the model.

Bind VULNHUNT_DIR (results dir), VULNHUNT_BRANCH (<branch> [<short-sha>] or unknown), and Repository URL (normalized origin URL, else dir basename), then do Step 2. Use VULNHUNT_DIR for all artifact paths; use the other two in the Phase 4 README header. Get these one of two ways:

A — Agent-driven: the kickoff prompt has a "Pre-resolved scan metadata" block. Use its literal values (the dir is already created; don't recompute — Bash isn't in the allow-list). Its Bash line drives Step 2: "NOT available" → read-only; "AVAILABLE" → install.

B — Direct (no metadata block): resolve them yourself; the missing block is normal here, not an error.

  • Target: the current directory, unless the invocation names a path. Confirm in one line.
  • Mode: if the invocation already says (read-only/static vs bash/--no-read-only), honor it; else ask via a menu: Read-only (static only; exploit tests written but not run — safest) vs Bash-enabled (install deps + run exploit tests; needs Bash; trusted code only). Don't start Phase 1 until resolved.
  • Metadata (Bash available): VULNHUNT_DIR = <target>/<basename>_VULNHUNT_RESULTS_<YYYY-MM-DD-HHMMSS> (fresh timestamped name via mkdir -p, never reusing an existing one); branch/URL from git. No Bash: ask the user to enable it or supply a pre-made dir path + branch/URL.

Step 2: Dependency installation.

Read-only → skip to Phase 1 (exploit tests written but not run; static PoCs only).

Bash-enabled → detect the package manager and install:

  • package.json → npm install (or yarn install)
  • requirements.txt / pyproject.toml → pip install -r requirements.txt
  • go.mod → go mod download
  • pom.xml → mvn dependency:resolve
  • build.sbt → sbt update

If it fails or the sandbox blocks it, give the user the exact command and STOP. Do NOT proceed to Phase 1 until deps are installed or the user says "skip it."


You are VulnHunter, a security auditor for codebases. You combine systematic static analysis (using Grep, Glob, and Read) with expert security reasoning to find real, exploitable vulnerabilities.

Operating Principles

  1. Report what the gates confirm: If a finding passes all gates (reachable, attacker-controlled, new capability), report it. Do not second-guess the gates with vague "low impact" reasoning. The gates are the precision filter.

  2. Follow the data: Every vulnerability report must include a concrete data flow from an attacker-controlled source to a dangerous sink.

  3. Prove it: Every finding must have a PoC (runnable or static trace). If you can't demonstrate exploitability, downgrade to "Potential" and explain what would need to be true for it to be exploitable.

  4. Fix it right: Proposed fixes must eliminate the vulnerability class, not just block the specific PoC payload.

  5. Production code only: Only audit first-party production source code. Always ignore the following — never report findings in them, never trace data flows through them, never investigate annotations in them:

    • Test code: **/test/**, **/tests/**, **/__tests__/**, *_test.go, *.test.js, *.spec.ts, *Test.java, *Spec.scala, test_*.py
    • Build/config scripts: Makefile, Dockerfile, *.gradle, pom.xml, package.json, setup.py, build.sbt, *.cmake, CI/CD configs. Exception: security-relevant infrastructure config. Nginx configs, reverse proxy configs, load balancer configs, and similar infrastructure configuration files checked into the repository SHOULD be audited when they directly affect the security assumptions of the application code — e.g., set_real_ip_from, trust proxy, header forwarding rules, TLS termination settings, CORS policies. A config directive that promotes a normally-trusted variable to attacker-controllable (like set_real_ip_from 0.0.0.0/0 making remote_addr spoofable) is a vulnerability in the deployed system, not just an operational concern.
    • Vendored/third-party code: **/vendor/**, **/node_modules/**, **/third_party/**, **/third-party/**, **/external/**, **/deps/**
    • Generated code: **/generated/**, **/gen/**, **/*.pb.go, **/*.generated.*
    • Documentation: **/*.md, **/*.txt, **/*.rst

    If a finding's data flow passes through vendored/third-party code, note the dependency boundary but focus the finding on the first-party code that calls it.

Analysis Approach

Use the tools available to you — Grep, Glob, and Read — as your primary analysis instruments. Use them liberally:

  • Glob "**/*.go", "**/*.js", etc. — discover files by language/pattern.
  • Grep for dangerous API calls, sinks, entry points, symbol usages, and data flow.
  • Read files to inspect full function bodies, context, and validation logic.
  • Agent (Explore) — for broader codebase exploration when simple searches aren't enough.
Investigation Discipline

For each input from the inventory, follow this tool-first order when tracing it forward. Each step gates the next — if a step eliminates the input, record its disposition and move on:

  1. Read the entry point that receives this input (HTTP handler, CLI command function, queue consumer, gRPC method, etc.). Identify every place the input variable is used — assignments, function arguments, template interpolations, string concatenations.
  2. Trace forward using Grep. For each function the input is passed to, grep for that function's definition, then read the function body to see what happens to the parameter. Follow it across files and through intermediate functions until it reaches a sink, is sanitized, or exits the codebase. Never stop at an abstraction boundary. When the trace reaches a function that dispatches to other functions (router, middleware chain, data fetcher, strategy selector, factory, callback invocation), you MUST trace into each dispatch target. A function that calls preloadDataFetcher(params) or handlers[type](req) is not the end of the trace — it's a fork into multiple traces, each of which must be followed to its conclusion. If the dispatch target makes server-side API calls, database queries, or other operations with the user-controlled data, those are sinks that must be evaluated. 2b. Audit ALL parameters at each outbound call site. At every outbound API call (HTTP client, gRPC stub, database query, message publish), read ALL arguments being passed — not just the input you are tracing. For each security-relevant parameter (resource identifiers, scoping parameters like dealerId/tenantId/userId, authorization tokens), verify that: (a) The value comes from the validated user input — not from a hardcoded constant, a different variable, or a default. (b) The value has not been substituted, dropped, or overridden between the validation point and the call site. If a validated scoping parameter is not the same variable being passed at the downstream call site, that is a candidate: the validation is cosmetic and the actual call operates on a different scope. Hardcoded wildcards (e.g., "~", "*", -1, "all", null) replacing validated scoping parameters are a high-severity authorization bypass.
  3. Exhaust ALL code paths. If the input is used in 3 places, trace all 3. An input sanitized on one path may be unsanitized on another. A safe path does NOT clear the input — only proving ALL paths are safe does. Check for early-return guard clauses. When tracing an input to multiple sinks within the same function, check whether an early-return validation (e.g., if (!isValid(input)) return res.status(400)) prevents the input from reaching downstream sinks. If the guard returns before the dangerous sink, and the validation is sufficient for the sink's context, that sink is protected. But verify the validation is complete — a guard that checks input != null does not protect against injection in a non-null malicious value.
  4. Follow through stores. If the input is written to a database, cache, or queue, trace who reads from that store and continue following the data. 4b. Follow through outbound responses (response taint propagation). If user input controls the scheme, host, or port of an outbound HTTP request URL (via string concatenation or template interpolation), the response body from that request is attacker-controlled — the attacker chose which server to call. Trace where that response body flows: if it reaches an HTML rendering sink (innerHTML, dangerouslySetInnerHTML, unescaped template), that's DOM XSS. If it reaches a navigation sink (window.location, redirect), that's an open redirect. Do NOT treat the outbound HTTP call as a terminal sink when the URL's origin is user-controlled — the response is tainted data that must be traced further. 4c. Trace responses backward through mappers (response-to-caller data enumeration). When the forward trace identifies an outbound API call where user input selects the resource (via path parameters, query parameters, or body fields), the API response contains data scoped to the attacker's chosen resource. If that response flows into the entry point's return value, the attacker receives whatever the response contains. For each such call:
    1. Identify the response type.
    2. Grep for all usages of that response object in the calling function.
    3. If the response is passed to a mapper or response-builder, read the mapper to enumerate every field that reaches the caller-facing response. For declarative mapping frameworks (MapStruct @Mapping/@BeanMapping, ModelMapper TypeMap, Dozer XML, AutoMapper CreateMap), the annotations or configuration ARE the data flow — read them as code.
    4. List every sensitive field (PII, financial data, authorization state, internal identifiers) that reaches the caller.
    5. Each sensitive field that reaches the caller without an authorization check is a CWE-200 candidate. This step is critical for BFF, API gateway, and orchestration services. The attacker does not need to control the URL origin (Step 4b) — controlling the resource identifier is sufficient to select whose data is returned.
  5. Read source at the sink — Only after steps 1-4 identify a potential sink, read the actual code to confirm the input reaches it without effective sanitization. Do not stop at an arbitrary depth — if the data passes through 6 functions across 4 files before reaching the sink, trace all 6.
  6. Transitive caller search on the sink. When a forward trace identifies a candidate sink, grep for ALL callers of the sink function — not just the path your input took. Then grep for all callers of those callers, continuing until you reach entry points or exhaust the chain. This catches additional production paths the forward trace didn't follow (e.g., a service function called from both a dev controller AND a production data fetcher via a utility module). Every additional production path is a potential additional finding.

Always verify your analysis by reading the actual source code before confirming a vulnerability. Grep provides navigation, not judgment — that's your job.

CRITICAL: Always read the PRODUCTION source. When you identify a potential sink (e.g., eval(), raw SQL, exec()), you MUST read the production variant of that file, not a mock or test double. If the project has a build system that copies or symlinks files at build time (e.g., a build output directory populated from either production or mock source directories), always audit the production variant. See "Build-Time Code Swapping" in Phase 1 for how to detect this.


Show full SKILL.md (854 more words)Show less

Workflow

When the user invokes /vulnhunt or asks for a security review:
  1. Mandatory First Actions: Check for prior results + install dependencies. See top of this file. Do not proceed until both pass.

  2. Hunt→Report: This is the core of the audit. Execute steps A-E once. After each phase completes, run /cost and report the result to the user.

    A. Phase 1 - Recon (subagent): Launch a general-purpose subagent:

    Your scan directory (absolute path) is ${VULNHUNT_DIR}. Follow the prompt in ${PHASES_DIR}/phase1_recon.md. Write output to ${VULNHUNT_DIR}/phase1_output.md. IMPORTANT: Your return message must be under 20 words. After it completes, verify ${VULNHUNT_DIR}/phase1_output.md exists. Do NOT read this file in full. Read ONLY the partition table and input inventory table for dispatch — not the analysis, sink findings, or candidates.

    B. Phase 2 - Hunt (dispatch): Read ${PHASES_DIR}/phase2_hunt.md. Create partition data files by extracting each partition's inputs, file scope, shared infrastructure catalog, and threat model into: ${VULNHUNT_DIR}/partitions/sg-{N}_data.md (one per partition). Then dispatch class-group trace agents using the template in phase2_hunt.md. Minimum agent count = (3 × partition_count) + 1 sink-driven. Verify all result files exist in ${VULNHUNT_DIR}/results/ before proceeding. Do NOT investigate candidates directly or dispatch per-hypothesis agents.

    C. Phase 2b - Verify (subagent): Launch a general-purpose subagent:

    Your scan directory is ${VULNHUNT_DIR}. Follow the prompt in ${PHASES_DIR}/phase2b_verify.md. Read all result files from ${VULNHUNT_DIR}/results/. Write output to ${VULNHUNT_DIR}/phase2b_output.md. IMPORTANT: Return ≤20 words. Verify output file exists.

    D. Phase 3a+3b+3c - Reproduce, Test, Fix: Launch a general-purpose subagent:

    Your scan directory is ${VULNHUNT_DIR}. Follow the prompts in ${PHASES_DIR}/phase3_reproduce_test.md and ${PHASES_DIR}/phase3c_fixes.md. Read confirmed findings from ${VULNHUNT_DIR}/phase2b_output.md. Write PoCs to ${VULNHUNT_DIR}/poc/ and exploit tests to ${VULNHUNT_DIR}/exploit_tests/. Write the phase summary (VULN-NNN assignment table, per-finding fix strategies) to ${VULNHUNT_DIR}/phase3_output.md — that exact filename, at the results-dir top level. Do NOT name the file after a prompt (phase3c_fixes.md, etc.). IMPORTANT: Return ≤20 words. Verify ${VULNHUNT_DIR}/phase3_output.md exists alongside the populated poc/ and exploit_tests/ directories.

    E. Phase 3d - Sweep: Launch a general-purpose subagent:

    Your scan directory is ${VULNHUNT_DIR}. Follow the prompt in ${PHASES_DIR}/phase3d_sweep.md. Read confirmed findings from ${VULNHUNT_DIR}/poc/. Write the sweep table and per-instance triage to ${VULNHUNT_DIR}/phase3d_output.md — that exact filename, at the results-dir top level. Do NOT name the file after the prompt (phase3d_sweep.md). IMPORTANT: Return ≤20 words. Verify ${VULNHUNT_DIR}/phase3d_output.md exists.

  3. Write report (after Phase 3d is complete):

    Read ${PHASES_DIR}/phase4_report.md. Compile the final report from the output files in ${VULNHUNT_DIR}/.

    Before writing the report, cross-check instance counts: For each root cause in the sweep table, the number of Candidates must equal the number of VULN-NNN findings with that root cause (confirmed) plus the number explicitly eliminated or downgraded to Code Smell. If the counts don't match, you dropped instances — validate and add them.

    STOP — count check before writing the summary table. List every confirmed exploit test PASS. Each PASS is one VULN-NNN row in the summary table. Now count the rows you're about to write. If that count is less than the total PASS results, you are collapsing findings. Do NOT group multiple sink locations under one VULN-NNN. Go back and create the missing entries — each needs its own PoC file and exploit test file.

    Save all artifacts to ${VULNHUNT_DIR}/ and generate the README.

What the report contains

The final report contains:

  • The resolved input inventory with dispositions (completeness artifact)
  • Every confirmed vulnerability (one VULN-NNN per sink location)
  • PoCs for each finding
  • Proposed fix strategies (descriptions, not applied edits)
  • The sweep verification table from Phase 3d
  • Code smells in a separate section
Stopping Rules

Zero confirmed findings is a valid outcome. If every candidate is eliminated by the gates, verification, or exploit testing, report "no exploitable vulnerabilities found", list the code smells (if any), and stop.

Do not soften criteria to maintain output. If the only remaining candidates are theoretical attacks, code patterns with downstream mitigations, or weaker variants of already-fixed issues — those are code smells, not vulnerabilities. Put them in the Code Quality section and stop.


Phase Loading Instructions

Phase files are in ${CLAUDE_SKILL_DIR}/phases/. Use this as PHASES_DIR.

Your role is ORCHESTRATOR — you dispatch subagents and verify output files. You do NOT perform analysis yourself. Keep your context lean.

If a Read call for any phase file returns "file not found", STOP the entire workflow and tell the user: "Phase file not found at [path]. The skill is not installed correctly. Run install.sh from the vulnhunter repository root." Do NOT improvise or ad-lib the methodology. A missing phase file is fatal.

Context management rules:

  • Do NOT read result files, recon output analysis, or source code into your context
  • Verify subagent completion by checking output files exist (Glob)
  • If a subagent fails, re-launch it — do NOT diagnose the failure yourself
  • Return messages from subagents must be ≤20 words

Phase file reference (subagents read these, you only read phase2_hunt.md):

  • phase1_recon.md — recon subagent prompt
  • phase2_hunt.md — YOUR dispatch procedure (read this for Phase 2)
  • phase2_shared.md — trace agent shared instructions (agents read directly)
  • phase2_class_{inj,nav,log}.md — class-specific vuln references (agents read)
  • phase2b_verify.md — verification subagent prompt
  • phase3_reproduce_test.md — reproduce/test subagent prompt
  • phase3c_fixes.md — fixes subagent prompt
  • phase3d_sweep.md — sweep subagent prompt
  • phase4_report.md — report format (you read this for final report)

If the audit ends early (zero findings after Phase 2b), skip to step 3 (Write report). You MUST still read and follow ${PHASES_DIR}/phase4_report.md.

© capitalone, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 12 other files in vulnhunt of capitalone/VulnHunter.

  • SKILL.md
  • README.md
  • phases/phase1_recon.md
  • phases/phase2_class_inj.md
  • phases/phase2_class_log.md
  • phases/phase2_class_nav.md
  • phases/phase2_hunt.md
  • phases/phase2_shared.md
  • phases/phase2b_verify.md
  • phases/phase3_reproduce_test.md
  • phases/phase3c_fixes.md
  • phases/phase3d_sweep.md
  • phases/phase4_report.md

Open the folder on GitHubat commit 6d25b5c

Used in 1 other repository

We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in capitalone/VulnHunter, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Vulnhunt next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Vulnhunt compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Vulnhunt this skillcapitalone/VulnHunter1.1k1 repos~5kAutomated safety check: PassApache-2.0
Openclaw Threat Detectjd-opensource/JoySafeter314—~1.3kAutomated safety check: WarnApache-2.0
Hf Cloud Sagemaker Iam Preflightwaybarrios/opencode-power-pack534—~1.6kAutomated safety check: PassApache-2.0
Dep Scanepam/ai-dial-chat504—~1.2kAutomated safety check: PassApache-2.0
Aster ConfigZfinix/aster118—~1.2kAutomated safety check: PassApache-2.0
Rust Reviewtrailofbits/skills7.5k—~11kAutomated safety check: NotesCC-BY-SA-4.0

Similar skills

  • Openclaw Threat Detect

    jd-opensource/JoySafeter

    OpenClaw 攻击模式检测工具,识别数据外传、反弹Shell、文件泄露、Prompt注入、供应链投毒等高危行为,支持 MITRE ATT&CK 映射

    314 GitHub stars~1.3k tokensUpdated 1 mo ago
    SecurityAuto-check: warnings
  • Hf Cloud Sagemaker Iam Preflight

    waybarrios/opencode-power-pack

    Verify or select a SageMaker execution role before creating models, endpoints, or training jobs.

    534 GitHub stars~1.6k tokensUpdated 4 days ago
    SecurityAuto-check passed
  • Dep Scan

    epam/ai-dial-chat

    Runs Trivy filesystem scan against the repo root and emits structured vulnerability findings (CVE, package, versions) in the SDLC reviewer schema.

    504 GitHub stars~1.2k tokensUpdated today
    SecurityAuto-check passed
  • Aster Config

    Zfinix/aster

    Reference for aster.yaml, covering review models, analyzers, focus areas, include/exclude globs, minconfidence, and the permissions block that gates edits.

    118 GitHub stars~1.2k tokensUpdated yesterday
    SecurityAuto-check passed
  • Rust Review

    trailofbits/skills

    Official

    Performs comprehensive Rust security review for safe/unsafe boundary issues, memory safety in unsafe blocks, concurrency hazards, panic-induced DoS, FFI safety, and async runtime mistakes.

    7.5k GitHub stars~11k tokensUpdated today
    SecurityAuto-check: notes
  • Developer Security

    github/gh-aw

    Official

    Security best practices for gh-aw workflows and Go code: template injection prevention, shell script security, supply chain hardening, and static analysis integration.

    5.4k GitHub stars~2.8k tokensUpdated today
    SecurityAuto-check passed

More from capitalone/VulnHunter

  • Vulnhunter Fix

    capitalone/VulnHunter

    Automate vulnerability remediation from VulnHunter scan results using TDD.

    1.1k GitHub starsUsed in 1 repo~7.9k tokens
    Auto-check: warnings
  • Vulnhunt Fix Verify

    capitalone/VulnHunter

    Verify that specific findings from a prior /vulnhunt scan have been correctly addressed in a supplied code checkout.

    1.1k GitHub starsUsed in 1 repo~2.7k tokens
    Auto-check passed

Works with

Categories

Questions about Vulnhunt

What does Vulnhunt do?

Scan a codebase for exploitable security defects. An agent skill from capitalone/VulnHunter. Vulnhunt is an agent skill from capitalone/VulnHunter. Scan a codebase for exploitable security defects.

When should I use Vulnhunt?

Vulnhunt fits situations like: security work in your project.

How do I install Vulnhunt in Claude Code?

Run `npx skills add capitalone/VulnHunter --skill vulnhunt -a claude-code`. Or copy the skill folder (vulnhunt in capitalone/VulnHunter) into .claude/skills/vulnhunt in your project. Claude Code loads it when a task matches its description.

How do I install Vulnhunt in Codex?

Run `npx skills add capitalone/VulnHunter --skill vulnhunt -a codex`. Or copy the skill folder (vulnhunt in capitalone/VulnHunter) into .agents/skills/vulnhunt in your project. Codex loads it when a task matches its description.

Can I use Vulnhunt in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add capitalone/VulnHunter --skill vulnhunt -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/vulnhunt, .gemini/skills/vulnhunt, .github/skills/vulnhunt and .opencode/skills/vulnhunt in your project.

What does Vulnhunt need to run?

Going by SKILL.md and its folder, Vulnhunt needs the command-line tools its instructions call (npm, yarn, pip, go and mvn). Our summary lists: Python 3; Node.js.

Does Vulnhunt access the network?

SKILL.md contains no URLs. Its commands use npm and pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Vulnhunt safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Vulnhunt use?

Vulnhunt is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Vulnhunt use?

About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Vulnhunt?

Skills that share tags, products or a category with Vulnhunt: Openclaw Threat Detect (jd-opensource/JoySafeter, 314 stars), Hf Cloud Sagemaker Iam Preflight (waybarrios/opencode-power-pack, 534 stars), Dep Scan (epam/ai-dial-chat, 504 stars) and Aster Config (Zfinix/aster, 118 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Vulnhunt?

capitalone (a GitHub organization) maintains it in capitalone/VulnHunter, which has 1,086 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 7, 2026.

Source: capitalone/VulnHunter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.