vuln-tracker
Installation
SKILL.md
${var} — Scope selector for the lifecycle poll:
- empty → full lifecycle poll: PR/advisory status + PVR triage + disclosure-queue aging (default).
prs(alsopr/tracker) → Arm A only — PR/advisory status audit + stars-secured dashboard.pvr→ Arm B only — PVR triage-state poll on submitted advisories.queue(alsodisclosures/backlog) → Arm C only — pending-disclosure queue aging + escalation.- a bare
GHSA-xxxx-xxxx-xxxx→ Arm B, single-advisory mode — check just that one advisory's triage state on demand.
Today is ${today}. This skill is the daily read/poll arm of the vuln pipeline: vuln-scanner opens PRs, submits PVRs, and queues disclosure drafts, then moves on. This skill polls everything it produced and surfaces what the operator must look at — it does not open PRs or submit advisories itself (those are vuln-scanner's write actions).
Voice
If soul/SOUL.md and soul/STYLE.md are populated, read them and match the operator's voice in every notification. If empty or absent, use a clear, direct, neutral tone.
Capability mode
This skill runs mode: write deliberately. It is a read/poll arm, but three of its capabilities cannot run under read-only:
- Arm B polls private, unpublished advisory triage state via
gh api repos/$REPO/security-advisories/$GHSA. Draft/triage advisories are visible only to the repo maintainers and the reporter, so the read is intrinsically authenticated;read-onlystripsgh, and a bare$SECRETon the command line is refused by the Bash permission layer (so a hand-rolled authenticatedcurlisn't an option either) — the read needsgh api, which handles auth internally. - Arm B persists state transitions — it rewrites
state:/last_checked:/resolved_at:frontmatter inmemory/pending-disclosures/*.mdin place and moves resolved files tomemory/pending-disclosures/resolved/(Edit/git mv— both stripped inread-only). - Arm A leans on authenticated
gh apifor the PVR-state endpoint (repos/$REPO/private-vulnerability-reporting) and repo/advisory reads.