
Protege contra ataques de supply-chain, slopsquatting e typosquatting provenientes de dependências e código.
cargo install sloppy-joe
Versões comprometidas podem usar um nome de pacote legítimo. O relatório do mantenedor do LiteLLM identifica as versões maliciosas 1.82.7 e 1.82.8 em março de 2026. O filtro padrão de 72 horas de idade de publicação do sloppy-joe pode rejeitar versões recém-publicadas quando você escaneia o grafo de dependências resolvido com
--ciou--fullantes da instalação. Trata-se de uma política de temporização, não de inspeção do payload malicioso.
Pesquisas documentam alucinações de pacotes em código gerado. O sloppy-joe verifica nomes e metadados de dependências antes da instalação; a mera existência não pode estabelecer que um pacote registrado seja seguro.
Os nomes de pacotes são limitados a 214 bytes para npm e 1.024 bytes para outros ecossistemas, a fim de limitar o trabalho de análise de erros de digitação. Nomes mais longos reportam Scan not supported (saída 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
O flake em main fixa a versão binária publicada e os respetivos checksums.
Modos de análise:
sloppy-joe check executa a verificação local rápida. Aplica sempre a análise do manifesto, a sincronização do lockfile, a proveniência e a política de fontes não suportadas. Se o estado das dependências ou da política tiver mudado, ou se a última análise completa bem-sucedida tiver mais de 24 horas, recomenda sloppy-joe check --full.sloppy-joe check --full executa a análise online estrita e atualiza o estado registado da última análise completa bem-sucedida.sloppy-joe check --ci executa a mesma cobertura estrita que --full, com uma intenção orientada a CI.sloppy-joe check avalia o perfil runtime por predefinição. Se existirem dependências com âmbito definido, avisa e indica que deve passar explicitamente as flags --python-groups, --python-extras, --python-platform e/ou --python-version para paridade com CI/build.sloppy-joe check relembra sempre que deve usar --ci ou --full para gating de CI e produção.Códigos de saída: 0 = nenhum problema bloqueante encontrado no modo selecionado, 1 = achados bloqueantes, 2 = entrada de análise não suportada ou erro de runtime. Sintaxe/configuração não suportada não é um achado de malware.
Suporta: JavaScript (npm, pnpm, Yarn, Bun), Python, Rust, Go, Ruby, PHP, JVM (Gradle/Maven) e .NET — detetados automaticamente a partir dos ficheiros de manifesto.
Guias de ecossistemas: consulte docs/ecosystems/README.md para o modelo de confiança atual, funcionalidades suportadas e limites fail-closed de cada ecossistema.
| Ecossistema | Manifesto obrigatório | Lockfile / estado do projeto de confiança |
|---|---|---|
| JavaScript / npm | package.json | package-lock.json ou npm-shrinkwrap.json; npm v1 legado bloqueado por predefinição |
| 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 ou setup.py | o caminho Poetry de confiança usa poetry.lock, o caminho uv de confiança usa uv.lock, e o pip-tools totalmente hash-locked só é de confiança quando o grafo de requirements commitado vincula exatamente os valores de --index-url e de quaisquer --extra-index-url; os índices Python visíveis no repositório podem ser permitidos via trusted_indexes.pypi; os modos Python de confiança avaliam um perfil de instalação selecionado de cada vez (runtime por predefinição, grupos/extras/plataforma/arquitetura/versão explícitos via CLI); manifestos legados permitidos com avisos por predefinição |
| Rust | Cargo.toml | Cargo.lock |
| Go | go.mod | go.sum obrigatório para dependências externas |
| Ruby | Gemfile | Gemfile.lock |
| PHP / Composer | composer.json | composer.lock |
| JVM / Gradle | build.gradle ou build.gradle.kts | gradle.lockfile |
| JVM / Maven | pom.xml | apenas aviso: ainda não existe um caminho de lockfile local ao projeto de confiança |
| .NET / NuGet | .csproj | packages.lock.json |
Âmbito da análise: as análises recursivas ignoram .planning por predefinição. Configure "ignore_dirs": [".planning", "experiments"] na política externa para excluir outros nomes de diretórios, ou use "ignore_dirs": [] para desativar as exclusões configuráveis. Consulte exclusões de diretórios.