
Protege contra ataques de supply-chain, slopsquatting e typosquatting provenientes de dependências e código.
cargo install sloppy-joe
O ataque à cadeia de suprimentos do LiteLLM (março de 2026) comprometeu um pacote com 97 milhões de downloads mensais. Atacantes roubaram credenciais de publicação, enviaram versões maliciosas que coletaram chaves SSH, credenciais de nuvem e segredos do K8s. O bloqueio padrão de 72 horas do sloppy-joe teria impedido ambas as versões envenenadas — elas foram descobertas em horas, muito antes da liberação. Se você executar
sloppy-joe checkna CI, esse ataque falha. Análise completa
Geradores de código de IA alucinam nomes de pacotes ~20% das vezes. Atacantes registram esses nomes e esperam. O sloppy-joe os captura na CI antes de npm install ou pip install ser executado.
cargo install sloppy-joe
sloppy-joe check
sloppy-joe check --full
sloppy-joe check --ci
sloppy-joe check --dir ./my-project
sloppy-joe check --type npm
sloppy-joe check --python-groups dev,test --python-version 3.12 sloppy-joe check --python-extras docs --python-platform linux --python-version 3.12
sloppy-joe check --config /etc/sloppy-joe/config.json
sloppy-joe check --config https://raw.githubusercontent.com/yourorg/security-configs/main/sloppy-joe.json
sloppy-joe check --json
sloppy-joe check --review-exceptions
sloppy-joe init --register
sloppy-joe init --greenfield --ecosystem npm
sloppy-joe init --from-current
sloppy-joe init --from-current --register
sloppy-joe init > /secure/location/sloppy-joe.json
### Nix```bash
nix profile install github:brennhill/sloppy-joe
Modos de verificação:
sloppy-joe check executa o guardrail local rápido. Ele sempre impõe análise de manifesto, lockfile/sincronização, proveniência e política de fontes não suportadas. Se o estado da dependência ou política mudou, ou a última verificação completa bem-sucedida tem mais de 24 horas, ele recomenda sloppy-joe check --full.sloppy-joe check --full executa a verificação online rigorosa e atualiza o estado registrado da verificação completa bem-sucedida.sloppy-joe check --ci executa a mesma cobertura rigorosa que --full, com intenção orientada a CI.sloppy-joe check avalia o perfil runtime por padrão. Se existirem dependências com escopo, ele avisa e informa para passar flags explícitas --python-groups, --python-extras, --python-platform e/ou --python-version para paridade de CI/build.sloppy-joe check sempre lembra você de usar --ci ou --full para bloqueio em CI e produção.Códigos de saída: 0 = nenhum problema bloqueante encontrado no modo selecionado, 1 = problemas bloqueantes encontrados, 2 = erro de execução.
Compatível com: JavaScript (npm, pnpm, Yarn, Bun), Python, Rust, Go, Ruby, PHP, JVM (Gradle/Maven) e .NET — detectado automaticamente a partir dos arquivos de manifesto.
Guias de ecossistemas: consulte docs/ecosystems/README.md para o modelo de confiança atual, recursos suportados e limites de falha fechada para cada ecossistema.
| Ecossistema | Manifesto obrigatório | Lockfile / estado do projeto confiável |
|---|---|---|
| JavaScript / npm | package.json | package-lock.json ou npm-shrinkwrap.json; npm v1 legado bloqueado por padrã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 confiável Poetry usa poetry.lock, o caminho confiável uv usa uv.lock, e pip-tools com hash completo é confiado apenas quando o grafo de requisitos commitado vincula exatamente os valores de --index-url e qualquer --extra-index-url; índices Python visíveis no repositório podem ser permitidos via trusted_indexes.pypi; modos Python confiáveis avaliam um perfil de instalação selecionado de cada vez (runtime por padrão, grupos/extras/platform/arch/version explícitos via CLI); manifestos legados permitidos com avisos por padrão |
| Rust | Cargo.toml | Cargo.lock |
| Go | go.mod | go.sum obrigatório para deps 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: nenhum caminho de lockfile local do projeto confiável ainda |
| .NET / NuGet | .csproj | packages.lock.json |
Fontes de configuração: caminho de arquivo local, URL HTTPS ou variável de ambiente SLOPPY_JOE_CONFIG. A configuração nunca é lida do diretório do projeto (veja CONFIG.md para o motivo).
Integração: use o modo de inicialização que corresponda ao repositório:
sloppy-joe init --greenfield --ecosystem <eco> imprime uma política inicial específica do ecossistema para novos projetos. Atualmente, predefinições greenfield são implementadas para npm, pypi e cargo; outros ecossistemas falham com um erro "ainda não suportado". Adicione --register para escrevê-la fora do repositório e registrá-la com segurança.sloppy-joe init --from-current inspeciona o repositório atual e imprime sugestões de inicialização apenas para revisão. Atualmente, --from-current é implementado apenas para repositórios cujo código de primeira parte é npm e/ou cargo; outros ecossistemas falham fechados com um erro "ainda não implementado". Adicione --register para escrever e registrar a configuração gerada.sloppy-joe init com nenhum modo imprime um modelo manual neutro.