SentinelloSentinello

Un sistema di allerta precoce per le dipendenze che hai smesso di sorvegliare.

Nell'era dell'IA pubblichi più progetti di quanti tu possa mantenerne. Sentinello sorveglia ognuno e rivela i CVE noti nelle loro dipendenze — JavaScript di default, con Python, Go e Rust a un solo interruttore di distanza — così un progetto dimenticato non diventa mai un incidente.

Avvialo con un solo 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:latest

Funziona su linux/amd64 e arm64

Nessun account. Nessun SaaS. Nessuna telemetria. Un'immagine Docker e un file SQLite — il tuo codice e i tuoi risultati non lasciano mai la tua macchina.

Oppure salta del tutto il portale

Gli stessi scanner sono disponibili come CLI. Nessuna installazione, nessun account, nessun database: si avvia, stampa un advisory su cui il tuo agente può agire, ed esce.

npx sentinello

In pipe, stdout trasporta solo il markdown, così l'advisory arriva integro all'agente:

npx sentinello | claude -p "$(cat -)"

Attraversa la cartella

Puntala a una directory e troverà ogni progetto al suo interno, fermandosi alla radice di ciascuno perché un monorepo conti una volta e non cinquanta. .gitignore e .sentinelloignore vengono rispettati.

Consulta tre fonti

Risolve le versioni esatte installate dal lockfile e le confronta offline con una cache locale di advisory. Nessuna chiamata di rete per progetto, e nulla del tuo codice viene caricato.

Scrive un advisory

Un file markdown datato con i risultati e un prompt di remediation allegato: fare triage prima di toccare qualsiasi cosa, preferire l'aggiornamento del pacchetto padre agli override, verificare le correzioni nel lockfile.

In cosa differisce da npm audit

Non sostituisce npm audit: esegue npm audit e poi aggiunge due fonti di advisory che npm audit non può vedere, sopprimendo ciò che duplicano.

npm auditnpx sentinello
AmbitoL'unico progetto in cui ti trovi.Ogni progetto sotto una cartella, in un solo passaggio e un solo report.
Fonti di advisoryIl feed di advisory del tuo registry.Quello, più OSV e GitLab gemnasium. I duplicati vengono soppressi, quindi ogni fonte aggiuntiva aggiunge solo risultati nuovi.
Pacchetti malevoliNon coperto.I record MAL- di OSV segnalano pacchetti pubblicati con malware — typosquat, payload negli script di installazione — confrontati con le specifiche versioni compromesse.
OutputUna tabella, o JSON da interpretare.Un advisory markdown con un prompt di remediation allegato, pronto da consegnare a un agente.
ConfrontoUna chiamata al registry per progetto.Offline, contro una cache locale. La prima esecuzione la scarica e chiede prima; quelle successive trasferiscono quasi nulla.

Le fonti aggiuntive non sono una formalità. Sul repository di Sentinello stesso, npm audit e OSV riportano tre risultati ciascuno e concordano su tutti, mentre l'unico risultato critico proviene da gemnasium, che nessuna delle altre due contiene.

Funzionalità

Tutto in un portale self-hosted — nessun servizio esterno, nessun dato che lascia la tua rete.

Coda di triage unica

Vedi e fai il triage dei CVE di tutto il tuo portafoglio in un solo posto — invece di npm audit sparso su una dozzina di copie.

Sfoglia per progetto o libreria

Entra in qualsiasi repository per vederne i risultati, le versioni di correzione e la cronologia — oppure passa a un pacchetto vulnerabile per vedere ogni progetto interessato e silenziarlo ovunque in una volta sola.

Scansione multilinguaggio

Scansiona JavaScript da subito e aggiunge Python, Go e Rust con un interruttore per linguaggio — analizzando il lockfile di ogni progetto offline e confrontandolo con gli advisory di OSV e gemnasium di GitLab.

Scansione continua

Un processo in background riscansiona secondo una pianificazione, così i nuovi avvisi compaiono senza che tu debba ricordarti di controllare.

Più fonti

Oltre a npm audit: confronto con il database OSV per una copertura CVE più ampia e il rilevamento di pacchetti dannosi noti.

Notifiche e webhook

Ricevi avvisi di errori e risultati via Slack, Telegram o un semplice webhook — definiti per root o per progetto, nella lingua che scegli. Payload JSON o in testo semplice per un agente di auto-correzione.

Server MCP

Collega Claude Desktop, Cursor e altri client MCP per interrogare risultati, progetti e librerie — e avviare scansioni — senza lasciare la chat.

Esportazione avvisi

Esporta i risultati di un progetto o di una libreria come Markdown, con un prompt di remediation personalizzabile per il tuo team o un LLM.

Un'immagine, un file

Un'immagine Docker e un file SQLite. Nessun server di database, nessuna coda di messaggi, nessuna dipendenza dal cloud.

Roots auto-registrati

Tutto ciò che è montato sotto /roots viene registrato e scansionato all'avvio — il nome della directory diventa la sua etichetta.

Node per progetto

Rispetta il .nvmrc di ogni progetto, installando e mettendo in cache una sola volta la versione di Node che fissa.

10 lingue

L'interfaccia del portale, i codici motivo di scansione e gli stati sono tradotti in 10 lingue.

Screenshot

Guardalo in azione — il portale mentre scansiona alcuni progetti dimostrativi. Clicca su qualsiasi immagine per ingrandirla.

Come si confronta

Sentinello non è un Dependency-Track più pesante né uno Snyk più economico. Occupa un’altra nicchia: la coda lunga di progetti che nessuno ha collegato a una pipeline.

SentinelloDependency-TrackSnykDependabot
Senza configurazione — punta a una cartella~~
Nessun SBOM / passaggio CI richiesto
Analizza lockfile risolti reali~
Rilevamento pacchetti dannosi
Self-hosted, niente SaaS
Una sola immagine + SQLite
Nativo per l’IA (MCP + export)~
Poliglotta (Python, Go, …)
Policy aziendale / VEX~~

Dependency-Track vede solo i progetti che qualcuno ha strumentato con una pipeline SBOM. Sentinello trova quelli che hai dimenticato. Sono più forti sulla policy aziendale — se li usi già su una pipeline matura, tienili. Sentinello è per il resto del tuo portafoglio che nessuno sta osservando.

Perché l'abbiamo creato

Nell'era dell'IA, pubblichi più di quanto tu possa mantenere.

Oggi chi sviluppa da solo avvia, consegna e si lascia alle spalle una dozzina di progetti all'anno — il sito vetrina, la dashboard del cliente, il progetto personale finito in produzione in sordina. Un tempo, tenerli al sicuro significava collegarsi in SSH a ogni checkout per lanciare npm audit a mano, oppure scoprire un CVE di Next.js da un titolo di giornale giorni dopo che era uscito. Nessuno tiene quel ritmo su una dozzina di repository, quindi alla fine non lo fa proprio nessuno.

Basta una sola dipendenza dimenticata con una falla critica di esecuzione di codice remoto. Il sito più semplice che hai smesso di sorvegliare diventa la via d'accesso.

«Perché non usare semplicemente Snyk o Dependabot?» Quelli vivono dentro la pipeline CI che hai cablato — e la coda lunga non ne ha mai avuta una. Sentinello è il sistema di allerta precoce per tutto il resto: puntalo a una cartella e sorveglia ogni progetto che hai dimenticato, facendo emergere ogni nuovo CVE in un'unica coda prima che diventi un incidente.

Come funziona

Tre passi. Nessun agente da installare nei tuoi progetti, nessun account da creare.

Puntalo al tuo codice

Monta i tuoi repository sotto /roots, oppure aggiungili da Impostazioni → Roots. Ogni directory viene registrata e individuata automaticamente all'avvio.

Scansiona di continuo

Un processo in background confronta le tue dipendenze con i CVE noti secondo una pianificazione, installando la versione di Node che ogni progetto fissa quando serve.

Triage in un'unica coda

Ogni risultato di ogni progetto arriva in un'unica coda che puoi filtrare per gravità — con avvisi opzionali verso Slack, Telegram o un webhook.

A chi è rivolto

Sentinello è per tutti coloro che hanno più in produzione di quanto riescano a sorvegliare — chi sviluppa da solo, il piccolo team, l'agenzia che destreggia il lavoro dei clienti.

  • Pubblichi progetti personali e siti dei clienti che devono restare sicuri a lungo dopo il lancio.
  • Vuoi una vista sull'intero portafoglio senza cablare la CI in ogni repository.
  • Preferisci il self-hosting piuttosto che affidare l'inventario del tuo codice a un SaaS.

Se sei una grande organizzazione con Snyk o Dependabot già integrati in una pipeline matura, tienili — Sentinello non cerca di sostituire lo SCA enterprise. È qui per il resto del tuo portafoglio che nessuno sorveglia. È open source e con licenza MIT, così puoi leggere esattamente cosa fa.

Note di rilascio

Sentinello viene aggiornato spesso: ecco cosa ha portato ogni versione.

Il download di gemnasium funziona di nuovo — e la CLI restituisce il terminale

v3.0.1 · 4 ago 2026
  • Il download di GitLab gemnasium falliva nella 3.0.0 con `HTTP 406`, per tutti. Il fetch integrato di Node aggiunge un header `Sec-Fetch-Mode: cors` che un programma non può rimuovere, e GitLab rifiuta qualsiasi richiesta di archivio del repository che lo contenga — quindi non è mai dipeso dalla vostra rete, dal vostro IP o da quanti tentativi avete fatto. Ora il download usa una normale richiesta HTTPS e riesce
  • L’archivio viene scaricato per id di commit anziché per nome del branch, così chi aggiorna dallo stesso commit condivide una copia in cache invece di chiedere a GitLab di generare un archivio da 60 MB ciascuno. Un primo download che richiedeva quasi sette minuti ora finisce in pochi secondi
  • La CLI completava tutto il lavoro — report scritto, riepilogo stampato — e poi non restituiva mai il terminale. La connessione del download restava aperta dietro di essa, tenendo vivo il processo; ora viene chiusa non appena l’archivio è stato letto
  • Una sorgente che rifiuta un download non resta più ferma tre minuti prima di dirlo. Lo segnala in pochi secondi e, in un terminale, propone di riprovare — ritentando solo la sorgente che ha davvero fallito
  • `--fail-on` è onesto in entrambe le direzioni. Rifiuta un’esecuzione la cui sorgente di avvisi non è stata consultabile, invece di riportare una scansione pulita mai eseguita; e non fa più fallire un’esecuzione per una sorgente che avete disattivato voi con `SENTINELLO_OSV_FEED_URL=off` o `SENTINELLO_GEMNASIUM_FEED_URL=off` e mai scaricato

Sentinello ora funziona anche senza portale

v3.0.0 · 3 ago 2026
  • Gli scanner arrivano come CLI su npm. `npx sentinello` attraversa una cartella, trova ogni progetto al suo interno, li confronta con npm audit, OSV e GitLab gemnasium, e scrive un advisory markdown con un prompt di remediation allegato — nessuna installazione, nessun account, nessun database, e nulla del tuo codice lascia la macchina
  • In pipe, l’advisory è l’unica cosa su stdout, così `npx sentinello | claude -p "$(cat -)"` consegna a un agente un elenco di lavoro completo senza che nulla corrompa il documento
  • Una prima esecuzione non perde più la fonte gemnasium per un download rifiutato. GitLab rifiuta il suo archivio per uno o due minuti alla volta, e il vecchio retry si arrendeva dopo tredici secondi; ora la CLI aspetta che passi, spiega perché sta aspettando, e accetta `--feed-wait` se i tre minuti predefiniti non vanno bene
  • Entrambe le stime di download sono state misurate anziché ipotizzate: l’export npm di OSV è indicato a 204 MB invece di 196, e l’archivio gemnasium a 52 MB invece di 80. Il prompt di consenso segna una stima con una tilde perché non venga mai scambiata per una dimensione dichiarata dal server
  • Un valore che sembra un’opzione ora viene rifiutato invece di essere preso alla lettera — `--out --` scriveva un advisory in un file chiamato `--` dentro il tuo progetto e riportava successo
  • Il pannello Novità non esce più dal fondo della finestra quando una release ha molto da dire

Il documento degli avvisi arriva davvero — e conta ciò che serve

v2.6.0 · 29 lug 2026
  • get_project_advisory ora restituisce il documento vero e proprio. Finora i client collegati ricevevano solo i suoi metadati — un nome file e un conteggio — e mai il documento, benché lo strumento lo descrivesse come un elenco di lavoro completo
  • L’export degli avvisi contiene ora una voce per ogni avviso distinto, con le fonti unite, invece di una per riga dello scanner: una vulnerabilità segnalata sia da npm audit sia da OSV è un unico elemento di lavoro con entrambi gli identificativi, non due quasi identici. Vale anche per il pulsante Scarica .md del portale, e il conteggio ora coincide con quello della dashboard
  • Un progetto troppo grande per stare in una sola risposta MCP viene ora paginato: il documento dichiara di essere incompleto e indica la chiamata esatta per ottenere il resto, invece di essere troncato in silenzio dove un agente leggerebbe il resto come pulito
  • Ogni parametro di ogni strumento MCP ha ora una descrizione, e il nuovo strumento list_mutes espone gli identificativi di silenziamento richiesti da unmute — prima ottenibili solo creando il silenziamento nella stessa sessione
  • Corretta una falla nei conteggi di gravità: un rilevamento la cui gravità non era uno dei cinque valori noti veniva contato ma non finiva in alcuna categoria, così un progetto con quel solo rilevamento appariva completamente pulito

L’export degli avvisi, direttamente via MCP

v2.5.0 · 28 lug 2026
  • I client MCP collegati possono scaricare l’avviso Markdown completo di un progetto con il nuovo strumento get_project_advisory — lo stesso documento del pulsante Scarica .md del portale, senza copiarlo dal browser
  • I risultati silenziati non sono più inclusi nell’export degli avvisi del progetto, quindi a un agente non viene mai affidato un lavoro il cui rischio hai già accettato
  • Nota: poiché l’avviso contiene il tuo prompt di export, un client MCP può ora leggere ciò che hai scritto in Impostazioni → Export

Popup non più tagliati e un prompt di esportazione più severo

v2.4.3 · 26 lug 2026
  • I menu a discesa, il popover del percorso delle dipendenze e il menu di esportazione degli avvisi non vengono più tagliati dalla tabella o dalla finestra di dialogo che li contiene: sono disegnati sopra la pagina e si aprono verso l’alto quando sotto non c’è spazio
  • Il prompt predefinito di esportazione degli avvisi ora chiede all’agente di pianificare prima di modificare qualsiasi cosa, di raggruppare i risultati che condividono la stessa correzione e di descrivere l’impatto sul codice di ogni cambio di versione; punta a zero risultati escludendo le scorciatoie verso uno zero fittizio — silenziare, allargare gli intervalli o restringere l’ambito dell’analisi — e lascia ciò che è davvero irrisolvibile in una tabella dei residui con data

Il branch in una colonna dedicata

v2.4.2 · 25 lug 2026
  • Il branch git su cui è stato analizzato un progetto ha ora una colonna dedicata nell’elenco dei progetti — testo semplice, senza icona — invece di comparire sotto il nome del progetto

Arresti puliti

v2.4.1 · 25 lug 2026
  • Riavviare il container non interrompe più un’analisi a metà scrittura e il worker parte subito invece di riprovare per ~30 secondi
  • Imposta stop_grace_period: 60s (o --stop-timeout 60) nel tuo file compose per dargli spazio: il README e la documentazione Docker ora lo spiegano

Analisi poliglotta — Python, Go e Rust si aggiungono a npm

v2.4.0 · 25 lug 2026
  • Sentinello ora analizza progetti Python, Go e Rust oltre a npm — i lockfile sono risolti interamente offline e ogni progetto dichiara la propria copertura di analisi (completa, parziale o non verificabile), così le lacune sono visibili invece che silenziose
  • Il database gemnasium di GitLab si affianca a npm audit e OSV come sorgente di avvisi offline, deduplicata rispetto alle altre tramite alias CVE/GHSA; Impostazioni → Sorgenti è ora una matrice Linguaggi × Sorgenti con ambito di notifica per cella, e npm audit stesso può essere disattivato purché resti attiva una sorgente
  • I risultati registrano ora il branch git da cui provengono, mostrato nell’elenco dei progetti, nell’intestazione del progetto e in ogni notifica
  • Le righe dei progetti hanno azioni proprie — analizza ora, copia o scarica l’avviso, silenzia o riattiva e modifica i tag — così un giro di triage non richiede più di entrare in ogni progetto
  • La dashboard dei progetti è passata da ~3,3 s a ~0,03 s e la navigazione mostra ora stati di caricamento invece di sembrare bloccata
  • Sicurezza: risolti 25 avvisi sulle dipendenze, inclusi CVE di libvips attivi nell’ottimizzatore di immagini del portale e nove avvisi Next.js che riguardavano il portale distribuito
  • Il prompt predefinito di esportazione degli avvisi copre ora l’età minima di pubblicazione, la verifica del lockfile e gli override obsoleti

Configurazione MCP più semplice, senza variabili d’ambiente

v2.3.0 · 9 giu 2026
  • Configura MCP interamente in Impostazioni → MCP: genera un token per attivare l’endpoint /api/mcp, cancellalo per disattivarlo — le variabili d’ambiente SENTINELLO_MCP_ENABLED e SENTINELLO_MCP_API_TOKEN non esistono più (un token d’ambiente esistente viene importato una volta durante l’aggiornamento)
  • Frammenti di connessione pronti da incollare per Claude Code, Codex, Cursor e Claude Desktop, già compilati con il tuo token
  • Quando SENTINELLO_PORTAL_BASE_URL è impostata nell’ambiente, viene mostrata in sola lettura in Impostazioni → Avanzate, poiché resta autoritativa e viene riapplicata a ogni avvio

Meno falsi allarmi e risultati che si ripuliscono da soli

v2.2.0 · 9 giu 2026
  • Gli avvisi di malware ora corrispondono alla versione compromessa esatta — una versione pulita o già corretta di un pacchetto un tempo compromesso non viene più segnalata
  • I risultati duplicati ora si risolvono da soli alla scansione successiva, così le voci vecchie o orfane vengono eliminate automaticamente
  • Le etichette di produzione e sviluppo ora vengono calcolate in un unico modo coerente su tutte le sorgenti (npm e OSV)

Un’intestazione di progetto più pulita e filtri coerenti

v2.1.0 · 6 giu 2026
  • Intestazione di progetto semplificata — rinomina accanto al titolo, con silenzia e tag come icone
  • Filtra i risultati per fonte (npm / OSV) da un nuovo menu a discesa accanto al filtro per tipo di dipendenza
  • Menu a discesa unificati e coerenti in tutta l’app, con ricerca durante la digitazione per elenchi lunghi come i fusi orari

Indicazioni di aggiornamento più chiare

v2.0.1 · 4 giu 2026
  • Passaggi di aggiornamento ampliati per le modifiche incompatibili della 2.0
  • Il README segnala il binding della porta solo su localhost

Scansione multi-sorgente e un’installazione rafforzata e sicura per impostazione predefinita

v2.0.0 · 4 giu 2026
  • OSV come seconda sorgente opzionale (Impostazioni → Fonti, disattivata per impostazione predefinita) con rilevamento di pacchetti dannosi, confrontata con il database pubblico OSV in una cache locale
  • I risultati ora vengono uniti tra le sorgenti — una riga per vulnerabilità, ogni sorgente etichettata, la migliore correzione disponibile e l’unione dei percorsi di dipendenza, con un filtro per sorgente e un popover del percorso di dipendenza
  • Rafforzamento della sicurezza: l’endpoint MCP è disattivato per impostazione predefinita e richiede un token, la consegna dei webhook è protetta da SSRF, un gate di accesso opzionale al portale, e il contenitore viene eseguito come utente senza privilegi
  • Impostazioni è ora una sezione di primo livello con barra laterale e una pagina Profilo

Integrazione MCP e novità

v1.4.0 · 29 mag 2026
  • Server MCP su /api/mcp per Claude Desktop, Cursor e altri client
  • Nuova sezione Impostazioni → MCP con URL del server e gestione dei token
  • Badge delle novità e una cronologia delle note di rilascio

Correzione della versione nel piè di pagina

v1.3.1 · 28 mag 2026
  • La versione in esecuzione viene mostrata correttamente nel piè di pagina

Miglioramenti alle notifiche

v1.3.0 · 28 mag 2026
  • Filtra le notifiche per ambiente
  • Modulo di modifica delle destinazioni più semplice
  • Duplica una destinazione di notifica esistente

Pagine Progetti e Librerie

v1.2.0 · 24 mag 2026
  • La schermata iniziale è divisa in pagine dedicate Progetti e Librerie

Ricaricamento della pianificazione in tempo reale

v1.1.2 · 24 mag 2026
  • Il worker ricarica la pianificazione della scansione non appena salvi le modifiche nel portale

Eliminazioni più sicure e un avviso di aggiornamento più chiaro

v1.1.0 · 23 mag 2026
  • Conferma prima di eliminare radici e destinazioni di notifica
  • L’avviso di aggiornamento diventa un banner superiore richiudibile
  • Il worker rimuove le radici obsolete quando il loro mount scompare

Correzioni di precisione dello scanner

v1.0.1 · 23 mag 2026
  • Scarta i risultati la cui versione installata non è realmente nell’intervallo vulnerabile
  • Consente di eliminare una destinazione di notifica con cronologia di invio

Prima versione open source

v1.0.0 · 23 mag 2026
  • La prima versione pubblica di Sentinello

Roadmap

Oggi Sentinello sorveglia le tue dipendenze su più linguaggi. Ecco dove sta andando — e cosa puoi richiedere.

Priorità più intelligente

Pianificato

Ordina i risultati per sfruttabilità e per l’effettiva raggiungibilità del codice vulnerabile — gestisci prima ciò che conta.

Più integrazioni

Pianificato

Più canali di notifica e modi per collegare Sentinello agli strumenti che il tuo team già usa.

Analisi statica (SAST)

Pianificato

Individua schemi di codice rischiosi nel tuo codice, non solo i CVE noti nelle dipendenze.

Scansione di segreti e licenze

Pianificato

Segnala segreti committati e problemi di licenza nello stesso portafoglio, nella stessa coda.

Richiedi un'integrazione o una fonte

Dicci cosa integreresti o analizzeresti dopo — apri una issue su GitHub e aiuta a definire la roadmap.