
Protegge dagli attacchi alla supply chain, slopsquatting e typosquatting provenienti da dipendenze e codice.
cargo install sloppy-joe
Le release compromesse possono utilizzare un nome di pacchetto legittimo. Il rapporto dei manutentori di LiteLLM identifica le versioni malevole 1.82.7 e 1.82.8 nel marzo 2026. Il controllo predefinito di sloppy-joe sull'età di pubblicazione di 72 ore può rifiutare le versioni appena pubblicate quando si analizza il grafo delle dipendenze risolte con
--cio--fullprima dell'installazione. Si tratta di una politica temporale, non di un'ispezione del payload malevolo.
La ricerca documenta le allucinazioni di pacchetti nel codice generato. sloppy-joe controlla i nomi e i metadati delle dipendenze prima dell'installazione; la sola esistenza non può stabilire che un pacchetto registrato sia sicuro.
I nomi dei pacchetti sono limitati a 214 byte per npm e a 1.024 byte per gli altri ecosistemi per limitare il lavoro di analisi dei refusi. I nomi più lunghi riportano Scan not supported (uscita 2).
# Install (single static binary, no runtime dependencies)
cargo install sloppy-joe
# Or download a prebuilt binary archive from GitHub Releases
# https://github.com/brennhill/sloppy-joe/releases
# Fast local guardrail — auto-detects ecosystem from manifest files
sloppy-joe check
# Strict online scan (recommended before push / release)
sloppy-joe check --full
# Strict CI-oriented scan
sloppy-joe check --ci
# Check a specific directory
sloppy-joe check --dir ./my-project
# Check only npm dependencies
sloppy-joe check --type npm
# Check the Python runtime plus selected groups/extras
sloppy-joe check --python-groups dev,test --python-version 3.12
sloppy-joe check --python-extras docs --python-platform linux --python-version 3.12
# Enforce canonical rules and org standards via config
sloppy-joe check --config /etc/sloppy-joe/config.json
# Config from a URL (useful in CI — no secrets to manage)
sloppy-joe check --config https://raw.githubusercontent.com/yourorg/security-configs/main/sloppy-joe.json
# JSON output for CI pipelines
sloppy-joe check --json
# Review exact maintainer-change exceptions with evidence
sloppy-joe check --review-exceptions
# Create and register a safe per-repo config outside the repo
sloppy-joe init --register
# Create an ecosystem-specific greenfield starter policy
sloppy-joe init --greenfield --ecosystem npm
# Print review-only bootstrap suggestions for an npm or Cargo repo
sloppy-joe init --from-current
# Or write/register those suggestions safely outside the repo
sloppy-joe init --from-current --register
# Or write a config manually to a secure path outside the repo
sloppy-joe init > /secure/location/sloppy-joe.json
nix profile install github:brennhill/sloppy-joe
Il flake su main fissa la release binaria pubblicata e i relativi checksum.
Modalità di scansione:
sloppy-joe check esegue la rapida guardrail locale. Applica sempre il parsing del manifest, lockfile/sync, provenienza e la policy sulle sorgenti non supportate. Se lo stato delle dipendenze o della policy è cambiato, o se l'ultima scansione completa riuscita è più vecchia di 24 ore, consiglia sloppy-joe check --full.sloppy-joe check --full esegue la scansione online rigorosa e aggiorna lo stato registrato dell'ultima scansione completa riuscita.sloppy-joe check --ci esegue la stessa copertura rigorosa di --full, con intento orientato alla CI.sloppy-joe check valuta il profilo runtime per impostazione predefinita. Se esistono dipendenze con scope, avvisa e indica di passare i flag espliciti --python-groups, --python-extras, --python-platform e/o --python-version per la parità con CI/build.sloppy-joe check in modalità semplice ricorda sempre di usare --ci o --full per il gating in CI e produzione.Codici di uscita: 0 = nessun problema bloccante trovato nella modalità selezionata, 1 = risultati bloccanti, 2 = input di scansione non supportato o errore di runtime. Sintassi/configurazione non supportata non è un risultato di malware.
Supporta: JavaScript (npm, pnpm, Yarn, Bun), Python, Rust, Go, Ruby, PHP, JVM (Gradle/Maven) e .NET — rilevati automaticamente dai file manifest.
Guide per ecosistema: consulta docs/ecosystems/README.md per il modello di fiducia attuale, le funzionalità supportate e i limiti fail-closed per ciascun ecosistema.
| Ecosistema | Manifest richiesto | Lockfile / stato del progetto considerato affidabile |
|---|---|---|
| JavaScript / npm | package.json | package-lock.json o npm-shrinkwrap.json; il legacy npm v1 è bloccato per impostazione predefinita |
| JavaScript / pnpm | package.json | pnpm-lock.yaml |
| JavaScript / Yarn | package.json | yarn.lock |
| JavaScript / Bun | package.json | bun.lock |
| Python | pyproject.toml, requirements*.txt, Pipfile, setup.cfg o setup.py | il percorso Poetry affidabile usa poetry.lock, il percorso uv affidabile usa uv.lock, e pip-tools completamente hash-locked è considerato affidabile solo quando il grafo delle requirements committato vincola esattamente i valori di --index-url e di eventuali --extra-index-url; gli indici Python visibili nel repository possono essere inseriti in allowlist tramite trusted_indexes.pypi; le modalità Python affidabili valutano un solo profilo di installazione selezionato alla volta (runtime per impostazione predefinita, gruppi/extras/platform/arch/version espliciti via CLI); i manifest legacy sono consentiti con avvisi per impostazione predefinita |
| Rust | Cargo.toml | Cargo.lock |
| Go | go.mod | go.sum richiesto per dipendenze esterne |
| Ruby | Gemfile | Gemfile.lock |
| PHP / Composer | composer.json | composer.lock |
| JVM / Gradle | build.gradle o build.gradle.kts | gradle.lockfile |
| JVM / Maven | pom.xml | solo avviso: nessun percorso di lockfile locale al progetto considerato affidabile |
| .NET / NuGet | .csproj | packages.lock.json |
Ambito di scansione: le scansioni ricorsive ignorano .planning per impostazione predefinita. Configura "ignore_dirs": [".planning", "experiments"] nella policy esterna per escludere altri nomi di directory, oppure usa "ignore_dirs": [] per disabilitare le esclusioni configurabili. Vedi esclusioni di directory.