Um sistema de alerta antecipado para as dependências que você parou de vigiar.
Na era da IA você publica mais projetos do que consegue manter. O Sentinello vigia cada um e revela os CVEs conhecidos em suas dependências — JavaScript por padrão, com Python, Go e Rust a um clique — para que um projeto esquecido nunca vire um incidente.
Execute com um único comando:
docker run -d \
--name sentinello \
-p 127.0.0.1:3870:3000 \
--stop-timeout 60 \
-v sentinello-data:/app/data \
-v sentinello-nvm:/home/sentinello/.nvm \
-v ~/Developer:/roots/personal:ro \
ghcr.io/walkofcode/sentinello:latestFunciona em linux/amd64 e arm64
Sem conta. Sem SaaS. Sem telemetria. Uma imagem Docker e um arquivo SQLite — seu código e seus achados nunca saem da sua máquina.
Ou dispense o portal por completo
Os mesmos scanners vêm como CLI. Sem instalação, sem conta, sem banco de dados: ele roda, imprime um parecer sobre o qual seu agente pode agir, e encerra.
npx sentinelloEm pipe, o stdout carrega apenas o markdown, então o parecer chega íntegro ao agente:
npx sentinello | claude -p "$(cat -)"Percorre a pasta
Aponte para um diretório e ele encontra todos os projetos abaixo, parando na raiz de cada um para que um monorepo conte uma vez e não cinquenta. .gitignore e .sentinelloignore são respeitados.
Consulta três fontes
Resolve as versões exatas instaladas a partir do lockfile e as compara offline com um cache local de pareceres. Nenhuma chamada de rede por projeto, e nada do seu código é enviado.
Escreve um parecer
Um arquivo markdown datado com os achados e um prompt de remediação anexado: triar antes de mexer em qualquer coisa, preferir atualizar o pacote pai a usar overrides, verificar as correções no lockfile.
Como difere do npm audit
Não substitui o npm audit: ele executa o npm audit e então adiciona duas fontes de pareceres que o npm audit não enxerga, suprimindo o que elas duplicam.
| npm audit | npx sentinello | |
|---|---|---|
| Escopo | O único projeto em que você está. | Todos os projetos sob uma pasta, em uma passagem e um relatório. |
| Fontes de pareceres | O feed de pareceres do seu registry. | Esse, mais OSV e GitLab gemnasium. Duplicatas são suprimidas, então cada fonte extra só acrescenta achados inéditos. |
| Pacotes maliciosos | Não coberto. | Os registros MAL- do OSV sinalizam pacotes publicados com malware — typosquats, cargas em scripts de instalação — comparados às versões especificamente comprometidas. |
| Saída | Uma tabela, ou JSON que você precisa interpretar. | Um parecer em markdown com um prompt de remediação anexado, pronto para entregar a um agente. |
| Correspondência | Uma chamada ao registry por projeto. | Offline, contra um cache local. A primeira execução o baixa e pergunta antes; as seguintes transferem quase nada. |
As fontes extras não são formalidade. No próprio repositório do Sentinello, npm audit e OSV relatam três achados cada e concordam em todos, enquanto o único achado crítico vem do gemnasium, que nenhuma das outras duas carrega.
Recursos
Tudo em um portal auto-hospedado — sem serviços externos, sem dados saindo da sua rede.
Fila de triagem única
Veja e faça a triagem de CVEs de todo o seu portfólio em um só lugar — em vez de npm audit espalhado por uma dúzia de cópias.
Navegue por projeto ou biblioteca
Entre em qualquer repositório para ver seus achados, versões de correção e histórico — ou pule para um pacote vulnerável para ver todos os projetos afetados e silenciá-lo em todos de uma vez.
Varredura multilinguagem
Escaneia JavaScript de imediato e adiciona Python, Go e Rust com um interruptor por linguagem — analisando o lockfile de cada projeto offline e comparando-o com os avisos do OSV e do gemnasium do GitLab.
Escaneamento contínuo
Um processo em segundo plano reescaneia conforme um agendamento, então novos avisos aparecem sem você precisar lembrar de verificar.
Múltiplas fontes
Além do npm audit: comparação com o banco de dados OSV para maior cobertura de CVEs e detecção de pacotes maliciosos conhecidos.
Notificações e webhooks
Receba alertas de falhas e achados via Slack, Telegram ou um webhook simples — definidos por root ou projeto, no idioma que você escolher. Payloads em JSON ou texto simples para um agente de correção automática.
Servidor MCP
Conecte o Claude Desktop, o Cursor e outros clientes MCP para consultar achados, projetos e bibliotecas — e iniciar varreduras — sem sair do chat.
Exportação de avisos
Exporte os achados de um projeto ou biblioteca como Markdown, com um prompt de remediação personalizável para a sua equipe ou um LLM.
Uma imagem, um arquivo
Uma imagem Docker e um arquivo SQLite. Sem servidor de banco de dados, sem fila de mensagens, sem dependência de nuvem.
Roots autorregistrados
Tudo o que for montado em /roots é registrado e escaneado na inicialização — o nome do diretório vira o seu rótulo.
Node por projeto
Respeita o .nvmrc de cada projeto, instalando e armazenando em cache uma única vez a versão do Node que ele fixa.
10 idiomas
A interface do portal, os códigos de motivo de escaneamento e os status estão traduzidos para 10 idiomas.
Capturas
Veja em ação — o portal escaneando alguns projetos de demonstração. Clique em qualquer captura para ampliá-la.
Como se compara
O Sentinello não é um Dependency-Track mais pesado nem um Snyk mais barato. Ocupa outro nicho: a cauda longa de projetos que ninguém ligou a um pipeline.
| Sentinello | Dependency-Track | Snyk | Dependabot | |
|---|---|---|---|---|
| Sem configuração — aponte para uma pasta | ~ | ~ | ||
| Não exige SBOM / etapa de CI | ||||
| Escaneia lockfiles resolvidos reais | ~ | |||
| Detecção de pacotes maliciosos | ||||
| Auto-hospedado, sem SaaS | ||||
| Uma imagem + SQLite | ||||
| Nativo para IA (MCP + export) | ~ | |||
| Poliglota (Python, Go, …) | ||||
| Política corporativa / VEX | ~ | ~ |
O Dependency-Track só vê os projetos que alguém instrumentou com um pipeline de SBOM. O Sentinello encontra os que você esqueceu. Eles são mais fortes em política corporativa — se você já os roda em um pipeline maduro, mantenha-os. O Sentinello é para o resto do seu portfólio que ninguém está vigiando.
Por que criamos isto
Na era da IA, você publica mais do que consegue manter.
Hoje quem desenvolve sozinho cria, entrega e segue em frente em uma dúzia de projetos por ano — o site de marketing, o painel do cliente, o projeto paralelo que foi para produção sem alarde. Manter tudo isso seguro costumava significar dar SSH em cada cópia para rodar npm audit na mão, ou descobrir um CVE do Next.js por uma manchete dias depois de ele aparecer. Ninguém aguenta esse ritmo em uma dúzia de repositórios, então simplesmente não acontece.
Basta uma única dependência esquecida com uma falha crítica de execução remota de código. O site mais simples que você deixou de vigiar vira a porta de entrada.
“Por que não usar logo o Snyk ou o Dependabot?” Eles vivem dentro do pipeline de CI que você montou — e a cauda longa nunca ganhou um. O Sentinello é o sistema de alerta antecipado para todo o resto: aponte-o para uma pasta e ele vigia cada projeto que você esqueceu, revelando cada novo CVE em uma única fila antes que vire um incidente.
Como funciona
Três passos. Sem agentes para instalar nos seus projetos, sem contas para criar.
Aponte-o para o seu código
Monte seus repositórios em /roots ou adicione-os em Configurações → Roots. Cada diretório é registrado e descoberto automaticamente na inicialização.
Ele escaneia continuamente
Um processo em segundo plano compara suas dependências com os CVEs conhecidos conforme um agendamento, instalando a versão do Node que cada projeto fixa quando necessário.
Triagem em uma única fila
Cada achado de cada projeto chega a uma única fila que você pode filtrar por severidade — com alertas opcionais para Slack, Telegram ou um webhook.
Para quem é
O Sentinello é para todos que têm mais em produção do que conseguem vigiar — a pessoa que desenvolve sozinha, a equipe pequena, a agência que faz malabarismo com trabalho de clientes.
- Você publica projetos paralelos e sites de clientes que precisam continuar seguros muito depois do lançamento.
- Você quer uma visão de todo o portfólio sem cabear CI em cada repositório.
- Você prefere auto-hospedar a entregar o inventário do seu código a um SaaS.
Se você é uma organização grande com Snyk ou Dependabot já integrados em um pipeline maduro, mantenha-os — o Sentinello não tenta substituir o SCA corporativo. Ele está aqui para o resto do seu portfólio que ninguém vigia. É de código aberto e licenciado sob MIT, então você pode ler exatamente o que ele faz.
Notas de versão
O Sentinello é atualizado com frequência — veja o que cada versão trouxe.
O download do gemnasium volta a funcionar — e a CLI devolve o terminal
v3.0.1 · 4 de ago. de 2026- O download do GitLab gemnasium falhava na 3.0.0 com `HTTP 406`, para todo mundo. O fetch nativo do Node adiciona um cabeçalho `Sec-Fetch-Mode: cors` que um programa não pode remover, e o GitLab recusa qualquer requisição de arquivo do repositório que o carregue — então nunca teve a ver com sua rede, seu IP ou quantas vezes você tentou. Agora o download usa uma requisição HTTPS comum e funciona
- O arquivo é buscado pelo id do commit em vez do nome do branch, então todos que atualizam a partir do mesmo commit compartilham uma cópia em cache em vez de cada um pedir ao GitLab que gere um arquivo de 60 MB. Um primeiro download que levava quase sete minutos agora termina em segundos
- A CLI terminava todo o trabalho — relatório escrito, resumo impresso — e depois nunca devolvia o terminal. A conexão do download ficava aberta por trás, mantendo o processo vivo; agora ela é fechada assim que o arquivo é lido
- Uma fonte que recusa um download não trava mais por três minutos antes de avisar. Ela avisa em segundos e, num terminal, oferece tentar de novo — repetindo apenas a fonte que realmente falhou
- `--fail-on` é honesto nos dois sentidos. Ele recusa uma execução cuja fonte de avisos não pôde ser consultada, em vez de relatar uma varredura limpa que nunca fez; e não falha mais por causa de uma fonte que você mesmo desligou com `SENTINELLO_OSV_FEED_URL=off` ou `SENTINELLO_GEMNASIUM_FEED_URL=off` e nunca baixou
O Sentinello agora roda sem portal nenhum
v3.0.0 · 3 de ago. de 2026- Os scanners saem como CLI no npm. `npx sentinello` percorre uma pasta, encontra todos os projetos abaixo, confere contra npm audit, OSV e GitLab gemnasium, e escreve um parecer em markdown com um prompt de remediação anexado — sem instalação, sem conta, sem banco de dados, e nada do seu código sai da máquina
- Em pipe, o parecer é a única coisa no stdout, então `npx sentinello | claude -p "$(cat -)"` entrega a um agente uma lista de trabalho completa sem nada corromper o documento
- A primeira execução não perde mais a fonte gemnasium por um download recusado. O GitLab recusa seu arquivo por um ou dois minutos seguidos, e a repetição antiga desistia em treze segundos; agora a CLI espera passar, diz por que está esperando, e aceita `--feed-wait` se os três minutos padrão não servirem
- As duas estimativas de download foram medidas, não chutadas: o export npm do OSV é informado como 204 MB em vez de 196, e o arquivo do gemnasium como 52 MB em vez de 80. O aviso de consentimento marca uma estimativa com um til para que nunca seja confundida com um tamanho informado pelo servidor
- Um valor com cara de flag agora é recusado em vez de aceito ao pé da letra — `--out --` escrevia um parecer em um arquivo chamado `--` dentro do seu projeto e relatava sucesso
- O painel de Novidades não escapa mais pela parte de baixo da janela quando uma versão tem muito a dizer
O documento de parecer realmente chega — e conta o que você quer dizer
v2.6.0 · 29 de jul. de 2026- get_project_advisory agora retorna o próprio documento de parecer. Antes, os clientes conectados recebiam só os metadados — um nome de arquivo e uma contagem — e nunca o documento, embora a ferramenta o descrevesse como uma lista de trabalho completa
- A exportação de pareceres agora tem uma entrada por parecer distinto, com suas fontes mescladas, em vez de uma por linha de scanner: uma vulnerabilidade que npm audit e OSV relatam é um único item de trabalho carregando os dois IDs, não dois quase idênticos. Isso vale também para o Download .md do portal, e a contagem agora bate com o painel
- Um projeto grande demais para caber em uma resposta MCP agora é paginado — o documento informa que está incompleto e dá a chamada exata para buscar o resto, em vez de ser cortado em silêncio onde um agente leria o restante como limpo
- Toda entrada de toda ferramenta MCP agora tem uma descrição, e uma nova ferramenta list_mutes expõe os IDs de silenciamento de que unmute precisa — antes só obteníveis criando o silenciamento na mesma sessão
- Corrigida uma falha nas contagens de severidade: um achado cuja severidade não fosse um dos cinco valores conhecidos era contado como achado mas não entrava em nenhum balde de severidade, então um projeto cujo único achado tivesse isso parecia completamente limpo
O relatório de vulnerabilidades, direto pelo MCP
v2.5.0 · 28 de jul. de 2026- Clientes MCP conectados podem obter o relatório Markdown completo de um projeto com a nova ferramenta get_project_advisory — o mesmo documento do botão Baixar .md do portal, sem copiá-lo do navegador
- Descobertas silenciadas não entram mais no relatório do projeto, então um agente nunca recebe um trabalho cujo risco você já aceitou
- Observação: como o relatório contém o seu prompt de exportação, um cliente MCP agora consegue ler o que você escreveu em Configurações → Exportação
Popups sem corte e um prompt de exportação mais rigoroso
v2.4.3 · 26 de jul. de 2026- Os menus suspensos, o popover de caminho de dependência e o menu de exportação de avisos não são mais cortados pela tabela ou pelo diálogo em que ficam — eles são renderizados acima da página e abrem para cima quando não há espaço embaixo
- O prompt padrão de exportação de avisos agora pede que o agente planeje antes de editar qualquer coisa, agrupe os achados que compartilham uma mesma correção e detalhe o impacto no código de cada mudança de versão; ele mira zero achados e descarta os atalhos para um zero falso — silenciar, ampliar intervalos ou reduzir o escopo da análise —, deixando o que é realmente irredutível em uma tabela de resíduos datada
O branch em sua própria coluna
v2.4.2 · 25 de jul. de 2026- O branch do git em que o projeto foi analisado agora tem uma coluna própria na lista de projetos — texto simples, sem ícone — em vez de ficar embaixo do nome do projeto
Desligamentos limpos
v2.4.1 · 25 de jul. de 2026- Reiniciar o contêiner não interrompe mais uma análise no meio da gravação, e o worker inicia imediatamente em vez de tentar de novo por ~30 segundos
- Defina stop_grace_period: 60s (ou --stop-timeout 60) no seu arquivo compose para dar espaço a ele — o README e a documentação do Docker agora explicam isso
Análise poliglota — Python, Go e Rust se juntam ao npm
v2.4.0 · 25 de jul. de 2026- O Sentinello agora analisa projetos Python, Go e Rust além de npm — os arquivos de bloqueio são resolvidos totalmente offline e cada projeto informa sua cobertura de análise (completa, parcial ou não auditável), de modo que as lacunas fiquem visíveis em vez de silenciosas
- O banco gemnasium do GitLab se junta ao npm audit e ao OSV como fonte de avisos offline, deduplicada em relação às demais por alias CVE/GHSA; Configurações → Fontes agora é uma matriz Linguagens × Fontes com escopo de notificação por célula, e o próprio npm audit pode ser desativado desde que uma fonte permaneça ativa
- Os achados agora registram o branch do git de onde vieram, exibido na lista de projetos, no cabeçalho do projeto e em todas as notificações
- As linhas de projeto trazem suas próprias ações — analisar agora, copiar ou baixar o aviso, silenciar ou reativar e editar tags — assim uma rodada de triagem não exige mais entrar em cada projeto
- O painel de projetos passou de ~3,3 s para ~0,03 s, e a navegação agora mostra estados de carregamento em vez de parecer travada
- Segurança: 25 avisos de dependências resolvidos, incluindo CVEs do libvips que estavam ativos no otimizador de imagens do portal e nove avisos do Next.js que afetavam o portal distribuído
- O prompt padrão de exportação de avisos agora cobre idade mínima de publicação, verificação do arquivo de bloqueio e overrides obsoletos
Configuração de MCP mais simples, sem variáveis de ambiente
v2.3.0 · 9 de jun. de 2026- Configure o MCP inteiramente em Configurações → MCP: gere um token para ativar o endpoint /api/mcp e limpe-o para desativá-lo — as variáveis de ambiente SENTINELLO_MCP_ENABLED e SENTINELLO_MCP_API_TOKEN foram removidas (um token de ambiente existente é importado uma vez na atualização)
- Trechos de conexão prontos para colar para Claude Code, Codex, Cursor e Claude Desktop, já preenchidos com o seu token
- Quando SENTINELLO_PORTAL_BASE_URL é definida no ambiente, ela aparece como somente leitura em Configurações → Avançado, pois continua sendo autoritativa e é reaplicada a cada inicialização
Menos alarmes falsos e achados que se limpam sozinhos
v2.2.0 · 9 de jun. de 2026- Os avisos de malware agora correspondem à versão comprometida exata — uma versão limpa ou já corrigida de um pacote que esteve comprometido deixa de ser sinalizada
- Achados duplicados agora se resolvem sozinhos na próxima varredura, de modo que entradas antigas ou órfãs são removidas automaticamente
- Os rótulos de produção e desenvolvimento agora são calculados de uma única forma consistente em todas as fontes (npm e OSV)
Um cabeçalho de projeto mais limpo e filtros consistentes
v2.1.0 · 6 de jun. de 2026- Cabeçalho de projeto simplificado — renomeie ao lado do título, com silenciar e tags como ícones
- Filtre as ocorrências por fonte (npm / OSV) em um novo menu suspenso ao lado do filtro de tipo de dependência
- Menus suspensos unificados e consistentes em todo o app, com busca ao digitar em listas longas como fusos horários
Orientações de atualização mais claras
v2.0.1 · 4 de jun. de 2026- Passos de atualização ampliados para as alterações incompatíveis da 2.0
- O README indica a vinculação de porta somente em localhost
Varredura multi-fonte e uma instalação reforçada e segura por padrão
v2.0.0 · 4 de jun. de 2026- OSV como segunda fonte opcional (Configurações → Fontes, desativada por padrão) com detecção de pacotes maliciosos, comparada com o banco de dados público do OSV em um cache local
- Os achados agora são mesclados entre fontes — uma linha por vulnerabilidade, cada fonte marcada, a melhor correção disponível e a união dos caminhos de dependência, com filtro por fonte e um popover de caminho de dependência
- Reforço de segurança: o endpoint MCP está desativado por padrão e exige um token, a entrega de webhooks é protegida contra SSRF, uma porta de login opcional do portal, e o contêiner é executado como usuário sem privilégios
- Configurações agora é uma seção de nível superior com barra lateral e uma página de Perfil
Integração MCP e novidades
v1.4.0 · 29 de mai. de 2026- Servidor MCP em /api/mcp para Claude Desktop, Cursor e outros clientes
- Nova seção Configurações → MCP com URL do servidor e gerenciamento de tokens
- Etiqueta de novidades e um histórico de notas de versão
Correção da versão no rodapé
v1.3.1 · 28 de mai. de 2026- A versão em execução é exibida corretamente no rodapé
Melhorias nas notificações
v1.3.0 · 28 de mai. de 2026- Filtrar notificações por ambiente
- Formulário de edição de destinos mais simples
- Duplicar um destino de notificação existente
Páginas de Projetos e Bibliotecas
v1.2.0 · 24 de mai. de 2026- A tela inicial é dividida em páginas dedicadas de Projetos e Bibliotecas
Recarregamento da agenda em tempo real
v1.1.2 · 24 de mai. de 2026- O worker recarrega a agenda de varredura assim que você salva alterações no portal
Exclusões mais seguras e um aviso de atualização mais claro
v1.1.0 · 23 de mai. de 2026- Confirmação antes de excluir raízes e destinos de notificação
- Aviso de atualização movido para um banner superior dispensável
- O worker remove raízes obsoletas quando o ponto de montagem desaparece
Correções de precisão do scanner
v1.0.1 · 23 de mai. de 2026- Descarta achados cuja versão instalada não está realmente na faixa vulnerável
- Permite excluir um destino de notificação com histórico de envios
Primeira versão de código aberto
v1.0.0 · 23 de mai. de 2026- O primeiro lançamento público do Sentinello
Roadmap
Hoje o Sentinello vigia suas dependências em várias linguagens. É para cá que ele vai — e o que você pode pedir.
Priorização mais inteligente
PlanejadoClassifique os achados por explorabilidade e se o código vulnerável é realmente alcançável — triagem do que importa primeiro.
Mais integrações
PlanejadoMais canais de notificação e formas de conectar o Sentinello às ferramentas que sua equipe já usa.
Análise estática (SAST)
PlanejadoDetecte padrões de código arriscados no seu próprio código, não só CVEs conhecidos nas dependências.
Varredura de segredos e licenças
PlanejadoSinalize segredos commitados e problemas de licença no mesmo portfólio, na mesma fila.
Diga o que você integraria ou escanearia em seguida — abra uma issue no GitHub e ajude a moldar o roadmap.