Inspiration
What it does
How we built it
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for cveq — CVE triage in one command
cveq — CVE Triage in One Command
Inspiration
I'm a cybersecurity student who plays CTFs and HackTheBox. Every time I study a CVE, the same ritual begins: NVD's slow page, a GitHub PoC hunt, vendor advisories — 15–20 minutes of tab-hopping per vulnerability.
My second pain: even when I did research a CVE properly, the findings died in browser tabs and scattered folders.
cveq was born from those two annoyances: triage in one command, and a research log that actually gets kept.
What It Does
cveq <CVE-ID>→ A complete terminal report in under 5 seconds:- Plain official summary
- Color-coded CVSS severity badge
- Affected products & official references
- Top-5 GitHub PoC repositories ranked by stars
cveq <ID> --save→ Logs the lookup into~/.cveq/journal.md, an Obsidian-friendly markdown research journal.cveq journal→ Reviews the last 20 investigations formatted as a clean table.- Graceful everywhere: Invalid IDs, unknown CVEs, network timeouts, and GitHub rate limits produce friendly messages and correct exit codes — never a raw stack trace.
How We Built It
Entirely with the Devpost Learn Skill Pack in Antigravity CLI, following the plan-first workflow:
run 1-startinterviewed me.2-scope,3-prd, and4-specproduced the planning documents committed indevpost/— before a single line of code was written.
Key Engineering Decisions:
- Zero external runtime dependencies: Built using native Node.js
fetch,parseArgs, and hand-rolled ANSI escapes. A security tool with zero supply-chain attack surface. - CVE.org as single data source: One response schema, authoritative records, and no API keys required; concurrent GitHub PoC search run via
Promise.all. - Failure modes specified before the happy path: Built-in partial success on rate limits, tolerant markdown parsing, and 8-second abort timeouts.
The build was executed as 4 vertical slices, each verified with the native node:test suite and a hands-on terminal battery before committing.
Challenges We Ran Into
- Agent session drop: My agent session died mid-build due to a server connection drop. The planning docs, checklist, and git history let a fresh session resume with zero lost context — plan-first proved to be a reliable save file, not ceremony.
- Windows ANSI colors: Escape codes can render as garbage on some terminal emulators. We specified TTY detection and
NO_COLORsupport in the spec before hitting the bug live. - CVE JSON 5.0 metric containers: CVSS scores hide across different record containers (CNA vs. ADP). The spec pinned a clean fallback hierarchy defaulting to
"NOT SCORED"rather than guessing.
Accomplishments That We're Proud Of
- Shipped in ~1 day: A complete, robust CLI tool with 20/20 unit tests green, built from an empty folder to final submission.
- Zero dependencies, zero API keys, zero configuration: Install and it just works across Windows, macOS, and Linux.
- Contract-enforced failure handling: The fake-CVE test, rate-limit fallback, and timeout paths all yield clean user-facing messages and explicit exit codes — verified live, not assumed.
- Resilient agent workflow: The planning documents survived a mid-build crash and carried the full context into a fresh session without rework.
What We Learned
The flipped interaction — being interviewed instead of prompt engineering — kept the scope tight enough to actually ship. Writing failure modes first eliminated the rework loops common with AI-generated code. When sessions drop, structured artifacts carry the context forward. Plan-first is now my default workflow when building with agents.
What's Next for cveq
Features currently parked in scope.md's "Later" backlog:
- [ ] EPSS scores integration
- [ ] NVD enrichment
- [ ] Machine-readable output (
--json) - [ ] Optional AI plain-English summary layer
Built With
- antigravity
- cli
- cve
- cybersecurity
- devpost-learn-skill-pack
- github-api
- javascript
- markdown
- node.js
- windows
Log in or sign up for Devpost to join the conversation.