Refuse sits in front of npm, pip, cargo, gem, go + 13 more package managers and refuses known-vulnerable installs before they hit disk β the moment you (or your coding agent) run them. Also, Open-source, self-hostable, one Docker container.
Hey Product Hunt π I'm the maker.
Most vulnerability scanners tell you a package is bad after it's already on your disk. I wanted something that refuses it at the moment of install β before the install ever runs.
So I built Refuse. A single binary puts itself in front of npm, pip, cargo and ~13 more package managers. You run npm install exactly like always β it checks the package against the live CVE databases first, then either installs it or blocks with the fix:
npm install lodash@4.17.10
β refuse: blocked β CVE-2019-10744 (critical); safe: 4.17.21
The reason it exists: AI coding agents. Claude Code and Cursor run installs from inside a tool call and pin versions from their training data β old versions that have since picked up CVEs. Refuse installs as an agent hook so those installs go through the same gate, with no human-override flag for the agent.
It's open-source (Apache-2.0) and self-hostable β one Docker container, your own CVE backend, no telemetry. Or use the hosted tier if you'd rather not run it.
π https://refuse.dev Β· https://github.com/RefuseHQ/refu...
Would love your feedback β easiest test is to run it against a lockfile from a project you already have and see what it catches. Happy to answer anything in the comments today.
Report
@gok03Β The "agents pin old versions from training data" point is the part everyone's missing. watched Claude Code confidently install something ancient more than once. catching it at install instead of after it's on disk is the whole game. following.
Report
Nice launch. The no agent override bit is the right instinct.
Iβd want a small receipt when something is blocked or a human overrides it: package, version, CVE/source, who approved, and what changed next. Are overrides repo policy, or an explicit approval event?
Refuse
@gok03Β The "agents pin old versions from training data" point is the part everyone's missing. watched Claude Code confidently install something ancient more than once. catching it at install instead of after it's on disk is the whole game. following.
Nice launch. The no agent override bit is the right instinct.
Iβd want a small receipt when something is blocked or a human overrides it: package, version, CVE/source, who approved, and what changed next. Are overrides repo policy, or an explicit approval event?