vuln-scanner
Installation
SKILL.md
${var} — Action selector, shaped
[<action>][:<owner/repo>]. Empty or a bareowner/repo→ scan arm (audit that repo, or auto-select a trending one).resubmit/resubmit:owner/repo→ re-submit arm (probe the security watchlist for repos that just enabled PVR and submit any queued advisory).disclose/
- `` → scan, auto-select from trending
openai/whisper→ scanopenai/whisperresubmit→ probe the whole watchlist and re-submit what flippedresubmit:vercel/next.js→ probe just that repo (one-off)disclose(aliaspoc-smoke→ exercise the PoC gate against a benign real Base fork (no audit or disclosure)
Today is ${today}. Read memory/MEMORY.md and the last 30 days of memory/logs/ before starting.
Why this skill exists
This is the write / action arm of the vuln-disclosure loop — one skill covering the full responsible-disclosure lifecycle:
- Scan — a security scanner that dumps unpatched vulnerabilities into public PRs is a zero-day publisher, not a helper. This skill matches industry practice: Private Vulnerability Reporting (PVR) for code flaws, public PRs only for dependency CVEs that are already public. Bad disclosure burns credibility and puts users at risk.
- Re-submit — when a scan finds a HIGH/CRITICAL issue in a repo with no PVR, no
SECURITY.md, and no reachable contact, it has no safe channel — so it logs the finding as"channel": "skipped"inmemory/vuln-scanned.jsonand stages a watchlist row. Without a weekly probe those findings silently age until the responsible-disclosure window closes. The re-submit arm closes that loop. - Disclose — when the only responsible path is a private email to the maintainer, drafts sit in
memory/pending-disclosures/withstatus: pending-operator-send, waiting for a human. The disclose arm finds drafts explicitly armed for auto-send, composes the email, and sends it in-run (Resend via./secretcurl) behind a set of fail-closed caps — the send is the arm's final action.