SentinelloSentinello

Un système d'alerte précoce pour les dépendances que vous ne surveillez plus.

À l'ère de l'IA, vous livrez plus de projets que vous ne pouvez en maintenir. Sentinello surveille chacun d'eux et révèle les CVE connues dans leurs dépendances — JavaScript par défaut, Python, Go et Rust à portée d'un interrupteur — pour qu'un projet oublié ne devienne jamais un incident.

Lancez-le en une seule commande :

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

Fonctionne sur linux/amd64 et arm64

Pas de compte. Pas de SaaS. Pas de télémétrie. Une image Docker et un fichier SQLite — votre code et vos résultats ne quittent jamais votre machine.

Ou passez-vous complètement du portail

Les mêmes scanners existent en CLI. Aucune installation, aucun compte, aucune base de données : elle s'exécute, imprime un avis exploitable par votre agent, puis se termine.

npx sentinello

En pipe, stdout ne transporte que le markdown, si bien que l'avis parvient intact à l'agent :

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

Parcourt le dossier

Pointez-la sur un répertoire et elle trouve chaque projet en dessous, en s'arrêtant à la racine de chacun pour qu'un monorepo compte une fois et non cinquante. .gitignore et .sentinelloignore sont respectés.

Interroge trois sources

Elle résout les versions exactes installées depuis le lockfile et les compare hors ligne à un cache d'avis local. Aucun appel réseau par projet, et rien de votre code n'est envoyé.

Écrit un avis

Un fichier markdown daté contenant les découvertes et un prompt de remédiation : trier avant de toucher à quoi que ce soit, préférer la mise à jour du parent aux overrides, vérifier les correctifs dans le lockfile.

En quoi elle diffère de npm audit

Elle ne remplace pas npm audit : elle exécute npm audit, puis ajoute deux sources d'avis que npm audit ne peut pas voir, en supprimant ce qu'elles dupliquent.

npm auditnpx sentinello
PortéeLe seul projet dans lequel vous vous trouvez.Tous les projets d'un dossier, en une passe et un seul rapport.
Sources d'avisLe flux d'avis de votre registre.Celui-ci, plus OSV et GitLab gemnasium. Les doublons sont supprimés : chaque source supplémentaire n'ajoute que des découvertes inédites.
Paquets malveillantsNon couvert.Les enregistrements MAL- d'OSV signalent les paquets publiés avec du code malveillant — typosquats, charges dans les scripts d'installation — comparés aux versions précisément compromises.
SortieUn tableau, ou du JSON à interpréter.Un avis markdown accompagné d'un prompt de remédiation, prêt à être confié à un agent.
CorrespondanceUn appel au registre par projet.Hors ligne, contre un cache local. La première exécution le télécharge après vous avoir demandé ; les suivantes ne transfèrent presque rien.

Ces sources supplémentaires ne sont pas une formalité. Sur le dépôt de Sentinello lui-même, npm audit et OSV rapportent chacun trois découvertes et s'accordent sur toutes, tandis que l'unique découverte critique provient de gemnasium, que ni l'un ni l'autre ne contient.

Fonctionnalités

Tout dans un portail auto-hébergé — aucun service externe, aucune donnée ne quitte votre réseau.

File de triage unique

Voyez et triez les CVE de tout votre parc de projets à un seul endroit — au lieu d'un npm audit éparpillé sur une dizaine de copies.

Parcourir par projet ou par bibliothèque

Plongez dans n'importe quel dépôt pour ses résultats, ses versions de correction et son historique — ou basculez vers un paquet vulnérable pour voir tous les projets qu'il affecte et le mettre en sourdine partout d'un coup.

Analyse multilangage

Analyse JavaScript d'emblée et ajoute Python, Go et Rust via un interrupteur par langage — en lisant le lockfile de chaque projet hors ligne et en le comparant aux avis OSV et gemnasium de GitLab.

Analyse continue

Un processus en arrière-plan réanalyse selon une planification, pour que les nouveaux avis apparaissent sans que vous ayez à penser à vérifier.

Sources multiples

Au-delà de npm audit : comparaison avec la base OSV pour une couverture CVE plus large et la détection de paquets malveillants connus.

Notifications et webhooks

Recevez des alertes d'échecs et de résultats via Slack, Telegram ou un simple webhook — ciblées par root ou par projet, dans la langue de votre choix. Payloads JSON ou texte brut pour un agent d'auto-correction.

Serveur MCP

Connectez Claude Desktop, Cursor et d'autres clients MCP pour interroger les résultats, projets et bibliothèques — et lancer des analyses — sans quitter le chat.

Export d'avis

Exportez les résultats d'un projet ou d'une bibliothèque en Markdown, avec une invite de remédiation personnalisable pour votre équipe ou un LLM.

Une image, un fichier

Une image Docker et un fichier SQLite. Pas de serveur de base de données, pas de file de messages, aucune dépendance au cloud.

Roots auto-enregistrés

Tout ce qui est monté sous /roots est enregistré et analysé au démarrage — le nom du répertoire devient son libellé.

Node par projet

Respecte le .nvmrc de chaque projet, en installant et en mettant en cache une seule fois la version de Node qu'il fixe.

10 langues

L'interface du portail, les codes de motif d'analyse et les statuts sont traduits en 10 langues.

Captures

Voyez-le en action — le portail analysant quelques projets de démonstration. Cliquez sur une capture pour l'agrandir.

Comparaison

Sentinello n’est ni un Dependency-Track plus lourd ni un Snyk moins cher. Il occupe une autre niche : la longue traîne des projets que personne n’a reliés à un pipeline.

SentinelloDependency-TrackSnykDependabot
Sans configuration — pointez vers un dossier~~
Aucun SBOM / étape CI requis
Analyse les lockfiles résolus réels~
Détection de paquets malveillants
Auto-hébergé, sans SaaS
Une image + SQLite
Natif pour l’IA (MCP + export)~
Polyglotte (Python, Go, …)
Politique d’entreprise / VEX~~

Dependency-Track ne voit que les projets que quelqu'un a instrumentés avec un pipeline SBOM. Sentinello trouve ceux que vous avez oubliés. Ils sont plus forts sur la politique d’entreprise — si vous les utilisez déjà sur un pipeline mature, gardez-les. Sentinello est là pour le reste de votre parc de projets que personne ne surveille.

Pourquoi nous l'avons créé

À l'ère de l'IA, vous livrez plus que vous ne pouvez maintenir.

Aujourd'hui, un dev en solo lance, livre et passe à autre chose sur une dizaine de projets par an — le site vitrine, le tableau de bord client, le projet perso passé discrètement en production. Les protéger, ça voulait dire se connecter en SSH à chaque copie pour lancer npm audit à la main, ou découvrir une CVE Next.js dans les gros titres plusieurs jours après sa sortie. Personne ne tient le rythme sur une dizaine de dépôts, alors ça n'arrive tout simplement jamais.

Il suffit d'une seule dépendance oubliée présentant une faille critique d'exécution de code à distance. Le site le plus simple, celui que vous avez cessé de surveiller, devient la porte d'entrée.

« Pourquoi ne pas simplement utiliser Snyk ou Dependabot ? » Ceux-là vivent à l'intérieur du pipeline CI que vous avez mis en place — et la longue traîne n'en a jamais eu. Sentinello est le système d'alerte précoce pour tout le reste : pointez-le vers un dossier et il surveille chaque projet que vous avez oublié, faisant remonter chaque nouvelle CVE dans une seule file avant qu'elle ne devienne un incident.

Comment ça marche

Trois étapes. Aucun agent à installer dans vos projets, aucun compte à créer.

Pointez-le vers votre code

Montez vos dépôts sous /roots, ou ajoutez-les depuis Paramètres → Roots. Chaque répertoire est enregistré et découvert automatiquement au démarrage.

Il analyse en continu

Un processus en arrière-plan compare vos dépendances aux CVE connues selon une planification, en installant la version de Node que chaque projet fixe lorsque c'est nécessaire.

Triage dans une seule file

Chaque résultat de chaque projet arrive dans une seule file que vous pouvez filtrer par gravité — avec des alertes optionnelles vers Slack, Telegram ou un webhook.

À qui ça s'adresse

Sentinello s'adresse à tous ceux qui ont plus en production qu'ils ne peuvent surveiller — la personne qui développe seule, la petite équipe, l'agence qui jongle avec le travail client.

  • Vous livrez des projets perso et des sites clients qui doivent rester sûrs longtemps après le lancement.
  • Vous voulez une vue d'ensemble du parc de projets sans câbler la CI dans chaque dépôt.
  • Vous préférez l'auto-hébergement plutôt que de confier l'inventaire de votre code à un SaaS.

Si vous êtes une grande organisation avec Snyk ou Dependabot déjà intégrés dans un pipeline mature, gardez-les — Sentinello ne cherche pas à remplacer le SCA d'entreprise. Il est là pour le reste de votre parc de projets que personne ne surveille. Il est open source et sous licence MIT, vous pouvez donc lire exactement ce qu'il fait.

Notes de version

Sentinello évolue régulièrement — voici ce qu'a apporté chaque version.

Le téléchargement gemnasium fonctionne de nouveau, et la CLI rend la main

v3.0.1 · 4 août 2026
  • Le téléchargement de GitLab gemnasium échouait en 3.0.0 avec `HTTP 406`, pour tout le monde. Le fetch intégré de Node ajoute un en-tête `Sec-Fetch-Mode: cors` qu’un programme n’a pas le droit de retirer, et GitLab refuse toute requête d’archive de dépôt qui le porte — cela n’a donc jamais eu de rapport avec votre réseau, votre IP ou le nombre de tentatives. Le téléchargement utilise désormais une simple requête HTTPS, et aboutit
  • L’archive est récupérée par identifiant de commit plutôt que par nom de branche : tous ceux qui partent du même commit amont partagent une copie mise en cache au lieu de demander chacun à GitLab de construire une archive de 60 Mo. Un premier téléchargement qui prenait près de sept minutes se termine maintenant en quelques secondes
  • La CLI terminait tout son travail — rapport écrit, résumé affiché — puis ne rendait jamais le terminal. La connexion du téléchargement restait ouverte derrière elle et maintenait le processus en vie ; elle est désormais fermée dès que l’archive a été lue
  • Une source qui refuse un téléchargement ne bloque plus trois minutes avant de le signaler. Elle le signale en quelques secondes et, dans un terminal, propose de réessayer — en ne réessayant que la source réellement en échec
  • `--fail-on` est honnête dans les deux sens. Il refuse une exécution dont une source d’avis n’a pas pu être consultée, au lieu d’annoncer une analyse propre qu’il n’a jamais faite ; et il ne fait plus échouer une exécution à cause d’une source que vous avez vous-même désactivée avec `SENTINELLO_OSV_FEED_URL=off` ou `SENTINELLO_GEMNASIUM_FEED_URL=off` et jamais téléchargée

Sentinello fonctionne désormais sans portail du tout

v3.0.0 · 3 août 2026
  • Les scanners sont publiés en CLI sur npm. `npx sentinello` parcourt un dossier, trouve tous les projets qu’il contient, les confronte à npm audit, OSV et GitLab gemnasium, et écrit un avis markdown accompagné d’un prompt de remédiation — sans installation, sans compte, sans base de données, et rien de votre code ne quitte la machine
  • En pipe, l’avis est la seule chose sur stdout : `npx sentinello | claude -p "$(cat -)"` remet à un agent une liste de travail complète sans que rien ne corrompe le document
  • Une première exécution ne perd plus la source gemnasium à cause d’un téléchargement refusé. GitLab refuse son archive une à deux minutes d’affilée, et l’ancienne logique abandonnait au bout de treize secondes ; la CLI patiente désormais, explique pourquoi, et accepte `--feed-wait` si les trois minutes par défaut ne conviennent pas
  • Les deux estimations de téléchargement ont été mesurées plutôt que devinées : l’export npm d’OSV est annoncé à 204 Mo au lieu de 196, et l’archive gemnasium à 52 Mo au lieu de 80. L’invite de consentement marque une estimation d’un tilde pour qu’elle ne soit jamais prise pour une taille annoncée par le serveur
  • Une valeur ressemblant à une option est désormais rejetée plutôt que prise au pied de la lettre — `--out --` écrivait un avis dans un fichier nommé `--` au sein de votre projet, en signalant une réussite
  • Le panneau Nouveautés ne déborde plus du bas de la fenêtre quand une version a beaucoup à dire

Le document d’avis arrive enfin — et compte ce qu’il faut

v2.6.0 · 29 juil. 2026
  • get_project_advisory renvoie désormais le document lui-même. Les clients connectés ne recevaient jusqu’ici que ses métadonnées — un nom de fichier et un décompte — et jamais le document, alors que l’outil le présentait comme une liste de travail complète
  • L’export d’avis contient désormais une entrée par avis distinct, sources fusionnées, au lieu d’une par ligne de scanner : une vulnérabilité signalée à la fois par npm audit et OSV devient un seul élément de travail portant les deux identifiants, et non deux quasi identiques. Cela vaut aussi pour le bouton Télécharger .md du portail, et le décompte correspond maintenant à celui du tableau de bord
  • Un projet trop volumineux pour tenir dans une seule réponse MCP est désormais paginé : le document indique qu’il est incomplet et donne l’appel exact pour récupérer la suite, au lieu d’être tronqué en silence là où un agent lirait le reste comme sain
  • Chaque paramètre de chaque outil MCP est désormais décrit, et le nouvel outil list_mutes expose les identifiants de mise en sourdine dont unmute a besoin — auparavant accessibles uniquement en créant la mise en sourdine dans la même session
  • Correction d’une faille dans les décomptes de gravité : un signalement dont la gravité ne faisait pas partie des cinq valeurs connues était compté comme signalement mais rangé dans aucune catégorie, si bien qu’un projet dont c’était le seul signalement paraissait parfaitement sain

L’export d’avis, directement via MCP

v2.5.0 · 28 juil. 2026
  • Les clients MCP connectés peuvent récupérer l’avis Markdown complet d’un projet avec le nouvel outil get_project_advisory — le même document que le bouton Télécharger .md du portail, sans le copier depuis le navigateur
  • Les découvertes masquées sont désormais exclues de l’export d’avis du projet : un agent ne se voit donc jamais confier un travail dont vous avez déjà accepté le risque
  • Remarque : comme l’avis contient votre prompt d’export, un client MCP peut désormais lire ce que vous avez écrit dans Paramètres → Export

Des popups qui ne sont plus rognés et un prompt d’export plus strict

v2.4.3 · 26 juil. 2026
  • Les menus déroulants, le popover de chemin de dépendance et le menu d’export d’avis ne sont plus rognés par le tableau ou la boîte de dialogue qui les contient : ils s’affichent au-dessus de la page et basculent vers le haut lorsqu’il n’y a pas de place en dessous
  • Le prompt d’export d’avis par défaut demande désormais à l’agent de planifier avant toute modification, de regrouper les résultats qui partagent un même correctif et de détailler l’impact sur le code de chaque montée de version ; il vise zéro résultat tout en écartant les raccourcis vers un faux zéro — mise en sourdine, élargissement des plages ou réduction du périmètre d’analyse — et fait figurer ce qui reste réellement bloqué dans un tableau de résidus daté

La branche dans sa propre colonne

v2.4.2 · 25 juil. 2026
  • La branche git sur laquelle un projet a été analysé occupe désormais sa propre colonne dans la liste des projets — texte brut, sans icône — au lieu d’être placée sous le nom du projet

Arrêts propres

v2.4.1 · 25 juil. 2026
  • Redémarrer le conteneur n’interrompt plus une analyse en cours d’écriture, et le worker démarre immédiatement au lieu de réessayer pendant environ 30 secondes
  • Définissez stop_grace_period : 60s (ou --stop-timeout 60) dans votre fichier compose pour lui laisser la place — le README et la documentation Docker l’expliquent désormais

Analyse polyglotte — Python, Go et Rust rejoignent npm

v2.4.0 · 25 juil. 2026
  • Sentinello analyse désormais les projets Python, Go et Rust en plus de npm — les fichiers de verrouillage sont résolus entièrement hors ligne, et chaque projet indique sa couverture d’analyse (complète, partielle ou non auditable) afin que les lacunes soient visibles plutôt que silencieuses
  • La base gemnasium de GitLab rejoint npm audit et OSV comme source d’avis hors ligne, dédupliquée par rapport aux autres via les alias CVE/GHSA ; Paramètres → Sources devient une matrice Langages × Sources avec une portée de notification par cellule, et npm audit peut désormais être désactivé tant qu’une source reste active
  • Les résultats enregistrent désormais la branche git dont ils proviennent, affichée dans la liste des projets, l’en-tête du projet et chaque notification
  • Les lignes de projet portent leurs propres actions — analyser maintenant, copier ou télécharger l’avis, mettre en sourdine ou réactiver, et modifier les tags — si bien qu’une passe de triage n’oblige plus à ouvrir chaque projet
  • Le tableau de bord des projets est passé d’environ 3,3 s à 0,03 s, et la navigation affiche désormais des états de chargement au lieu de paraître figée
  • Sécurité : 25 avis de dépendances corrigés, dont des CVE libvips actives dans l’optimiseur d’images du portail et neuf avis Next.js affectant le portail livré
  • Le prompt d’export d’avis par défaut couvre désormais l’âge minimal de publication, la vérification du fichier de verrouillage et les overrides obsolètes

Configuration MCP simplifiée, sans variables d’environnement

v2.3.0 · 9 juin 2026
  • Configurez MCP entièrement dans Paramètres → MCP : générez un jeton pour activer le point de terminaison /api/mcp, effacez-le pour le désactiver — les variables d’environnement SENTINELLO_MCP_ENABLED et SENTINELLO_MCP_API_TOKEN ont disparu (un jeton d’environnement existant est importé une fois lors de la mise à niveau)
  • Extraits de connexion prêts à coller pour Claude Code, Codex, Cursor et Claude Desktop, pré-remplis avec votre jeton
  • Lorsque SENTINELLO_PORTAL_BASE_URL est définie dans l’environnement, elle s’affiche en lecture seule dans Paramètres → Avancé, car elle reste prioritaire et est réappliquée à chaque démarrage

Moins de fausses alertes et des résultats qui se nettoient seuls

v2.2.0 · 9 juin 2026
  • Les avis de malware correspondent désormais à la version compromise exacte — une version saine ou déjà corrigée d’un paquet autrefois compromis n’est plus signalée
  • Les résultats en double se résolvent désormais d’eux-mêmes au prochain scan, si bien que les entrées anciennes ou orphelines disparaissent automatiquement
  • Les étiquettes production et développement sont désormais calculées d’une seule façon cohérente pour toutes les sources (npm et OSV)

Un en-tête de projet plus épuré et des filtres cohérents

v2.1.0 · 6 juin 2026
  • En-tête de projet simplifié — renommez à côté du titre, avec la mise en sourdine et les tags en icônes
  • Filtrez les résultats par source (npm / OSV) depuis un nouveau menu déroulant à côté du filtre de type de dépendance
  • Menus déroulants unifiés et cohérents dans toute l’application, avec recherche instantanée sur les longues listes comme les fuseaux horaires

Conseils de mise à niveau plus clairs

v2.0.1 · 4 juin 2026
  • Étapes de mise à niveau détaillées pour les changements incompatibles de la 2.0
  • Le README indique la liaison du port en localhost uniquement

Analyse multi-source et une installation renforcée, sécurisée par défaut

v2.0.0 · 4 juin 2026
  • OSV comme deuxième source optionnelle (Paramètres → Sources, désactivée par défaut) avec détection des paquets malveillants, comparée à la base de données publique OSV dans un cache local
  • Les résultats sont désormais fusionnés entre sources — une ligne par vulnérabilité, chaque source étiquetée, le meilleur correctif disponible et l’union des chemins de dépendances, avec un filtre par source et une infobulle de chemin de dépendance
  • Renforcement de la sécurité : le point de terminaison MCP est désactivé par défaut et requiert un jeton, la livraison des webhooks est protégée contre le SSRF, une page de connexion optionnelle au portail, et le conteneur s’exécute en utilisateur non privilégié
  • Les Paramètres forment désormais une section de premier niveau avec une barre latérale et une page Profil

Intégration MCP et nouveautés

v1.4.0 · 29 mai 2026
  • Serveur MCP sur /api/mcp pour Claude Desktop, Cursor et d’autres clients
  • Nouvelle section Paramètres → MCP avec URL du serveur et gestion des jetons
  • Pastille de nouveautés et historique des notes de version

Correction de la version dans le pied de page

v1.3.1 · 28 mai 2026
  • La version en cours s’affiche correctement dans le pied de page

Améliorations des notifications

v1.3.0 · 28 mai 2026
  • Filtrer les notifications par environnement
  • Formulaire d’édition des cibles simplifié
  • Dupliquer une cible de notification existante

Pages Projets et Bibliothèques

v1.2.0 · 24 mai 2026
  • La vue d’accueil est divisée en pages Projets et Bibliothèques dédiées

Rechargement du planning en direct

v1.1.2 · 24 mai 2026
  • Le worker recharge le planning d’analyse dès que vous enregistrez des modifications dans le portail

Suppressions plus sûres et bannière de mise à jour plus claire

v1.1.0 · 23 mai 2026
  • Confirmation avant la suppression de racines et de cibles de notification
  • L’avis de mise à jour devient une bannière supérieure que l’on peut fermer
  • Le worker supprime les racines obsolètes quand leur montage disparaît

Corrections de précision du scanner

v1.0.1 · 23 mai 2026
  • Écarte les résultats dont la version installée n’est pas réellement dans la plage vulnérable
  • Permet de supprimer une cible de notification ayant un historique d’envois

Première version open source

v1.0.0 · 23 mai 2026
  • La première version publique de Sentinello

Feuille de route

Aujourd'hui, Sentinello surveille vos dépendances sur plusieurs langages. Voici où il va — et ce que vous pouvez demander.

Priorisation plus intelligente

Prévu

Classez les résultats selon leur exploitabilité et selon que le code vulnérable est réellement atteignable — triez d’abord l’essentiel.

Plus d'intégrations

Prévu

Plus de canaux de notification et de façons de connecter Sentinello aux outils que votre équipe utilise déjà.

Analyse statique (SAST)

Prévu

Repérez les motifs de code risqués dans votre propre code, pas seulement les CVE connues de vos dépendances.

Analyse des secrets et licences

Prévu

Signalez les secrets commités et les problèmes de licence sur le même parc de projets, dans la même file.

Demander une intégration ou une source

Dites-nous ce que vous intégreriez ou analyseriez ensuite — ouvrez un ticket sur GitHub et aidez à façonner la feuille de route.