plugins/vulnetix/skills/vuln/SKILL.md
Look up a vulnerability by ID or list all vulnerabilities for a package
npx skillsauth add davepoon/buildwithclaude vulnInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill serves two purposes based on the argument provided:
This skill does not modify application code -- it only updates .vulnetix/memory.yaml to track findings. Use /vulnetix:fix for remediation, /vulnetix:exploits for exploit analysis, or /vulnetix:remediation for a context-aware remediation plan.
Determine the mode from the argument:
Vuln lookup mode -- argument matches any known vulnerability identifier pattern:
CVE-* (e.g., CVE-2021-44228)GHSA-* (e.g., GHSA-jfh8-3a1q-hjz9)PYSEC-*, GO-*, RUSTSEC-*, EUVD-*, OSV-*, GSD-*, VDB-*, GCVE-*SNYK-*, ZDI-*, MSCVE-*, MSRC-*, RHSA-*, TALOS-*, EDB-*WORDFENCE-*, PATCHSTACK-*, MFSA*, JVNDB-*, CNVD-*, BDU:*, HUNTR-*DSA-*, DLA-*, USN-*, ALSA-*, RLSA-*, MGASA-*, OPENSUSE-*, FreeBSD-*, BIT-*The VDB accepts 78+ identifier formats in total.
Package vulns mode -- argument does not match any vuln-id pattern. Treat it as a package name.
If ambiguous, prefer vuln lookup mode (vuln IDs are more structured). If the vuln lookup returns an error or empty response, fall back to package vulns mode automatically.
This skill reads and updates the .vulnetix/memory.yaml file in the repository root. This file is shared with /vulnetix:fix, /vulnetix:exploits, /vulnetix:package-search, /vulnetix:exploits-search, and /vulnetix:remediation.
The canonical schema is defined in /vulnetix:fix. This skill creates or updates base vulnerability fields: aliases, package, ecosystem, discovery, versions, severity, safe_harbour, and status. It does not modify threat_model or cwss (owned by /vulnetix:exploits).
At the start of every invocation:
.vulnetix/memory.yaml exists in the repo root.vulnetix/scans/*.cdx.json -- if CycloneDX SBOMs exist from prior scans, cross-reference for additional contextPreviously seen: <vulnId> -- <developer-friendly status> (as of <date>)
Priority: <P1/P2/P3/P4> (<score>) -- "<priority description>" (if cwss data exists)
Last decision: <developer-friendly decision> -- "<reason>"
Dependabot: <alert state, PR state if available>
Known history for <package>:
- CVE-2021-44228 -- Fixed (2024-01-15), P1 (87.5)
- CVE-2023-1234 -- Investigating (2024-03-01)
Vuln lookup mode (after Step L6):
status: under_investigation, decision.choice: investigating, discovery.source: userseverity and safe_harbour if newer. Do NOT change status or decision.history: event: lookupPackage vulns mode (after Step P7):
For each vulnerability that affects the installed version and is not already tracked:
status: under_investigation, decision.choice: investigating, discovery.source: scan, decision.reason: "Discovered via /vulnetix:vuln <package>"history: event: discoveredFor existing entries, do not change status or decision -- only update severity if newer.
Use developer-friendly language when surfacing status:
not_affected --> "Not affected"affected --> "Vulnerable"fixed --> "Fixed"under_investigation --> "Investigating"When gh CLI is available (check with gh auth status 2>/dev/null), query Dependabot alerts to enrich the output.
Vuln lookup mode: Query alerts matching the vuln ID:
gh api repos/{owner}/{repo}/dependabot/alerts --jq '[.[] | select(.security_advisory.cve_id == "'"$ARGUMENTS"'" or .security_advisory.ghsa_id == "'"$ARGUMENTS"'")] | first'
Package vulns mode: Query alerts for the package:
gh api repos/{owner}/{repo}/dependabot/alerts?state=open --jq '[.[] | select(.dependency.package.name == "'"$PACKAGE_NAME"'")] | length'
Use this workflow when the argument matches a vulnerability identifier pattern.
Check for and load .vulnetix/memory.yaml as described in "Reading Prior State" above. Display any prior state before proceeding.
vulnetix vdb vuln "$ARGUMENTS" -o json
CLI Reference (from vulnetix vdb vuln docs):
-o json returns machine-readable outputExtract: identity, aliases, description, dates, CVSS vectors/scores, EPSS, KEV status/deadline, CWE IDs, affected products with version ranges and fixed versions, reference URLs.
vulnetix vdb metrics "$ARGUMENTS" -o json
CLI Reference (from vulnetix vdb metrics docs):
Merge with Step L2 data. If this call fails, continue with Step L2 data alone.
Use Glob and Grep to assess repo impact:
Detect manifest files:
package.json, package-lock.json, yarn.lock, pnpm-lock.yaml --> npmgo.mod, go.sum --> goCargo.toml, Cargo.lock --> cargorequirements.txt, pyproject.toml, Pipfile, poetry.lock, uv.lock --> pypiGemfile, Gemfile.lock --> rubygemspom.xml, build.gradle, gradle.lockfile --> mavencomposer.json, composer.lock --> packagistSearch for affected packages from VDB response using Grep in manifests/lockfiles
Determine installed version (lockfile --> manifest --> installed artifacts --> unknown). Report source transparently.
Assess dependency relationship -- direct vs transitive, whether installed version is in vulnerable range
Cross-reference CycloneDX SBOMs in .vulnetix/scans/*.cdx.json
Identity:
<Vuln ID> (<alias1>, <alias2>, ...)
<Description -- first 2-3 sentences>
Published: <date> | Modified: <date>
Severity Table:
| Metric | Score | Vector | |--------|-------|--------| | CVSS v3.1 | 10.0 (Critical) | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H | | CVSS v4.0 | 10.0 (Critical) | ... | | EPSS | 0.97 (97% chance of exploitation within 30 days) | -- | | CISA KEV | Listed (deadline: YYYY-MM-DD) | -- |
Affected Packages:
| Package | Ecosystem | Vulnerable Range | Fixed In | |---------|-----------|-----------------|----------| | log4j-core | maven | < 2.17.1 | 2.17.1 |
Repository Impact:
| Package | Installed Version | Source | Affected? | Relationship | |---------|------------------|--------|-----------|-------------| | log4j-core | 2.14.1 | lockfile: pom.xml | Yes (in range) | Direct |
If no affected packages found: "No affected packages detected in this repository."
References: List top advisory and reference URLs.
Next Steps:
/vulnetix:exploits $ARGUMENTS for exploit intelligence and threat modeling"/vulnetix:fix $ARGUMENTS for fix intelligence and manifest edits"/vulnetix:remediation $ARGUMENTS for a context-aware remediation plan"/vulnetix:exploits-search --ecosystem <eco> to discover related exploited vulnerabilities"Update .vulnetix/memory.yaml as described in "Writing Updated State" above. If the user provides a decision during the conversation, record it using the risk treatment categories defined in /vulnetix:exploits.
Use this workflow when the argument does not match a vulnerability identifier pattern.
Check for and load .vulnetix/memory.yaml. Display any known history for the queried package before proceeding.
Use Glob to identify manifest files (same manifest list as Step L4 above). Determine which ecosystems the repository uses.
Determine if the queried package is installed. Resolve using the priority chain:
package-lock.json, yarn.lock, pnpm-lock.yamlpoetry.lock, Pipfile.lock, uv.lockgo.sumCargo.lockGemfile.lockgradle.lockfilecomposer.locknode_modules/<pkg>/package.json, pip show <pkg>)If not installed: "Not currently installed -- no existing version detected."
Version Source Label: 4.17.1 (from lockfile: package-lock.json), ^4.17.0 (from manifest: package.json -- constraint, not exact), Not installed
vulnetix vdb vulns "$ARGUMENTS" -o json
CLI Reference (from vulnetix vdb vulns docs):
--limit int -- Maximum results (default 100)--offset int -- Results to skip for pagination (default 0)-o, --output string -- Output format: json or pretty (default "pretty")Pagination modifiers -- parse user message:
--limit 20--offset <previous_offset + limit>--limit 500Vulnerabilities for <package>@<version> (<version source>)
Total: N known vulnerabilities (M affect your version)
| # | ID | Severity | Affects You? | Fixed In | Status | EPSS |
|---|-----------------|----------|-------------|----------|--------------|-------|
| 1 | CVE-2024-XXXXX | critical | Yes | 4.18.3 | -- | 0.45 |
| 2 | CVE-2023-YYYYY | high | Yes | 4.17.3 | Fixed | 0.12 |
| 3 | CVE-2022-ZZZZZ | medium | No (>=4.17) | 4.17.0 | -- | 0.03 |
Summary: M of N affect your version -- X critical, Y high, Z medium
Pagination info (if truncated): Showing 1-20 of 47. Say "next page" or "page 3" for more.
Actionable recommendations:
"Run /vulnetix:fix <vuln-id> to remediate" or "Run /vulnetix:remediation <vuln-id> for a context-aware remediation plan""Run /vulnetix:exploits <vuln-id> for exploit analysis""Run /vulnetix:vuln <vuln-id> for detailed vulnerability info""Run /vulnetix:exploits-search --ecosystem <eco> to find exploited vulnerabilities in your ecosystem"Update .vulnetix/memory.yaml as described in "Writing Updated State" above. Only create stub entries for vulns that affect the installed version to prevent memory file bloat.
Vuln lookup mode:
vdb vuln returns error/empty, try falling back to package vulns mode (the argument might be a package name)vdb metrics fails, continue with vdb vuln data alonePackage vulns mode:
vdb vulns returns error, suggest checking vulnetix vdb status/vulnetix:package-searchBoth modes:
.vulnetix/memory.yaml cannot be written, warn but do not block/vulnetix:fix or /vulnetix:remediation for that/vulnetix:exploits for single-vuln analysis or /vulnetix:exploits-search for broad discovery.vulnetix/memory.yaml after the lookupdevelopment
Show drill-me learning progress — topics studied, cards due for review, weakest concepts, and what to study next. Use when the user asks what's due, how their learning is going, or for their drill-me status.
development
Teach the user a topic as an adaptive tutor — retrieval practice, spaced repetition with decay, and persistent memory in ~/.drill-me/. Use when the user wants to learn or be drilled on something, says "drill me on X", "teach me X", or wants to study a topic, a codebase, or a document.
development
Turn any codebase into evidence-grounded Markdown docs plus a machine-readable index.json. Every claim cites its source; never invents deployment steps.
tools
Assesses the current state of the startup project and recommends what to focus on next. Use when there is a need or a question from the user to understand what the next steps are or what to focus on next.