Skip to content

Catch hallucinated, typosquatted, and non-canonical dependencies before they reach production.

Choose a tag to compare

@brennhill brennhill released this 30 Mar 20:25
· 1 commit to main since this release

Catch hallucinated, typosquatted, and non-canonical dependencies before they reach production.

The problem

AI code assistants hallucinate package names. When Copilot writes pip install liteelm instead of litellm, that typo might be a real package on PyPI — registered by an attacker to steal credentials. Existing security tools don't catch this because they only scan for known vulnerabilities in packages that already exist in your lockfile. They assume your dependencies are real.

sloppy-joe doesn't.

What it checks

  • Existence — Verifies every dependency actually exists on its registry
  • Similarity — 11 mutation generators flag names close to popular packages (typosquatting, homoglyphs, keyboard proximity, combo-squatting)
  • Canonical — Enforces your team's approved package choices
  • Vulnerabilities — Known CVEs via OSV.dev
  • Metadata signals — Version age gates, maintainer changes, install scripts, missing repository URLs

8 ecosystems

npm, PyPI, Cargo, Go, Ruby, PHP, JVM (Gradle/Maven), .NET

Quick start

  • uses: brennhill/sloppy-joe@v1

With config

AI-agent safe

Config lives outside your repo. An AI agent with shell access can't rewrite it to allowlist its own hallucinated dependencies. Use a remote config URL in CI for maximum security:

config: https://raw.githubusercontent.com/yourorg/private-configs/main/sloppy-joe.json

Also available via

  • cargo install sloppy-joe
  • brew install brennhill/tap/sloppy-joe
  • nix profile install github:brennhill/sloppy-joe
  • pre-commit hook