SentinelloSentinello

Un sistema de alerta temprana para las dependencias que dejaste de vigilar.

En la era de la IA publicas más proyectos de los que puedes mantener. Sentinello vigila cada uno y revela los CVE conocidos en sus dependencias —JavaScript por defecto, con Python, Go y Rust a un clic—, para que un proyecto olvidado nunca se convierta en un incidente.

Ejecútalo 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

Funciona en linux/amd64 y arm64

Sin cuenta. Sin SaaS. Sin telemetría. Una imagen de Docker y un archivo SQLite: tu código y tus hallazgos nunca salen de tu máquina.

O prescinde del portal por completo

Los mismos escáneres se distribuyen como CLI. Sin instalación, sin cuenta, sin base de datos: se ejecuta, imprime un informe sobre el que tu agente puede actuar, y termina.

npx sentinello

Canalizado, stdout lleva solo el markdown, de modo que el informe llega íntegro al agente:

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

Recorre la carpeta

Apúntalo a un directorio y encontrará todos los proyectos que contenga, deteniéndose en la raíz de cada uno para que un monorepo cuente una vez y no cincuenta. Respeta .gitignore y .sentinelloignore.

Consulta tres fuentes

Resuelve las versiones exactas instaladas desde el lockfile y las compara sin conexión con una caché local de avisos. Ninguna llamada de red por proyecto, y nada de tu código se sube.

Escribe un informe

Un archivo markdown fechado con los hallazgos y un prompt de remediación adjunto: triar antes de tocar nada, preferir actualizar el paquete padre a usar overrides, verificar las correcciones en el lockfile.

En qué se diferencia de npm audit

No sustituye a npm audit: ejecuta npm audit y luego añade dos fuentes de avisos que npm audit no puede ver, suprimiendo todo lo que dupliquen.

npm auditnpx sentinello
AlcanceEl único proyecto en el que te encuentras.Todos los proyectos de una carpeta, en una pasada y un solo informe.
Fuentes de avisosEl feed de avisos de tu registro.Ese, más OSV y GitLab gemnasium. Los duplicados se suprimen, así que cada fuente adicional solo añade hallazgos nuevos.
Paquetes maliciososNo cubierto.Los registros MAL- de OSV señalan paquetes publicados con malware —typosquats, cargas en scripts de instalación— comparados con las versiones comprometidas concretas.
SalidaUna tabla, o JSON que tienes que interpretar.Un informe markdown con un prompt de remediación adjunto, listo para entregar a un agente.
ComparaciónUna llamada al registro por proyecto.Sin conexión, contra una caché local. La primera ejecución la descarga y pregunta antes; las siguientes apenas transfieren nada.

Las fuentes adicionales no son un formalismo. En el propio repositorio de Sentinello, npm audit y OSV informan cada uno de tres hallazgos y coinciden en todos, mientras que el único hallazgo crítico proviene de gemnasium, que ninguna de las otras dos incluye.

Características

Todo en un portal autoalojado — sin servicios externos, sin que los datos salgan de tu red.

Cola de triaje única

Ve y tría los CVE de todo tu portafolio en un solo lugar, en vez de npm audit disperso en una docena de copias.

Explora por proyecto o por librería

Entra en cualquier repositorio para ver sus hallazgos, versiones de corrección e historial — o cambia a un paquete vulnerable para ver todos los proyectos a los que afecta y silenciarlo en todos a la vez.

Escaneo multilenguaje

Escanea JavaScript de fábrica y suma Python, Go y Rust con un interruptor por lenguaje — analizando el lockfile de cada proyecto sin conexión y comparándolo con los avisos de OSV y de gemnasium de GitLab.

Escaneo continuo

Un proceso en segundo plano vuelve a escanear según una programación, así los nuevos avisos aparecen sin que tengas que acordarte de revisar.

Múltiples fuentes

Más allá de npm audit: compara con la base de datos OSV para mayor cobertura de CVEs y detección de paquetes maliciosos conocidos.

Notificaciones y webhooks

Recibe alertas de fallos y hallazgos por Slack, Telegram o un webhook simple — acotadas por root o por proyecto, en el idioma que elijas. Payloads en JSON o texto plano para un agente de auto-reparación.

Servidor MCP

Conecta Claude Desktop, Cursor y otros clientes MCP para consultar hallazgos, proyectos y librerías, y lanzar escaneos, sin salir del chat.

Exportación de avisos

Exporta los hallazgos de un proyecto o una librería como Markdown, con un prompt de remediación personalizable para tu equipo o un LLM.

Una imagen, un archivo

Una imagen de Docker y un archivo SQLite. Sin servidor de base de datos, sin cola de mensajes, sin dependencia de la nube.

Roots autorregistrados

Todo lo que montes bajo /roots se registra y se escanea al arrancar; el nombre del directorio se vuelve su etiqueta.

Node por proyecto

Respeta el .nvmrc de cada proyecto, instalando y cacheando una sola vez la versión de Node que fija.

10 idiomas

La interfaz del portal, los códigos de motivo de escaneo y los estados están traducidos a 10 idiomas.

Capturas

Míralo en acción — el portal escaneando un puñado de proyectos de demostración. Haz clic en cualquier captura para ampliarla.

Cómo se compara

Sentinello no es un Dependency-Track más pesado ni un Snyk más barato. Ocupa otro nicho: la larga cola de proyectos que nadie conectó a un pipeline.

SentinelloDependency-TrackSnykDependabot
Sin configuración — apuntá a una carpeta~~
No requiere SBOM ni paso de CI
Escanea lockfiles resueltos reales~
Detección de paquetes maliciosos
Autoalojado, sin SaaS
Una imagen + SQLite
Nativo para IA (MCP + export)~
Polilingüe (Python, Go, …)
Política empresarial / VEX~~

Dependency-Track solo ve los proyectos que alguien instrumentó con un pipeline de SBOM. Sentinello encuentra los que olvidaste. Son más sólidas en políticas empresariales — si ya los corres en un pipeline maduro, consérvalos. Sentinello es para el resto de tu portafolio que nadie está mirando.

Por qué lo creamos

En la era de la IA, publicas más de lo que puedes mantener.

Hoy una sola persona desarrolladora levanta, entrega y deja atrás una docena de proyectos al año: el sitio de marketing, el panel del cliente, el proyecto personal que llegó a producción sin hacer ruido. Mantenerlos seguros solía significar entrar por SSH a cada copia para correr npm audit a mano, o enterarte de un CVE de Next.js por un titular días después de que salió. Nadie sostiene eso en una docena de repos, así que directamente no pasa.

Basta con una sola dependencia olvidada con una falla crítica de ejecución remota de código. El sitio más simple que dejaste de vigilar se vuelve la puerta de entrada.

«¿Por qué no usar Snyk o Dependabot y ya?» Esos viven dentro del pipeline de CI que armaste — y la larga cola nunca tuvo uno. Sentinello es el sistema de alerta temprana para todo lo demás: apúntalo a una carpeta y vigilará cada proyecto que olvidaste, revelando cada nuevo CVE en una sola cola antes de que se convierta en un incidente.

Cómo funciona

Tres pasos. Sin agentes que instalar en tus proyectos, sin cuentas que crear.

Apúntalo a tu código

Monta tus repositorios bajo /roots, o agrégalos desde Configuración → Roots. Cada directorio se registra y se descubre automáticamente al iniciar.

Escanea de forma continua

Un proceso en segundo plano compara tus dependencias con los CVE conocidos según una programación, instalando la versión de Node que cada proyecto fija cuando hace falta.

Triaje en una sola cola

Cada hallazgo de cada proyecto llega a una sola cola que puedes filtrar por severidad, con alertas opcionales a Slack, Telegram o un webhook.

Para quién es

Sentinello es para todos los que tienen más en producción de lo que pueden vigilar: la persona que desarrolla en solitario, el equipo pequeño, la agencia que hace malabares con trabajo de clientes.

  • Publicas proyectos personales y sitios de clientes que deben seguir seguros mucho después del lanzamiento.
  • Quieres una vista de todo el portafolio sin cablear CI en cada repositorio.
  • Prefieres autoalojar antes que entregar el inventario de tu código a un SaaS.

Si eres una organización grande con Snyk o Dependabot ya integrados en un pipeline maduro, consérvalos: Sentinello no intenta reemplazar el SCA empresarial. Está aquí para el resto de tu portafolio que nadie vigila. Es de código abierto y con licencia MIT, así que puedes leer exactamente qué hace.

Notas de la versión

Sentinello se actualiza con frecuencia: esto es lo que aportó cada versión.

La descarga de gemnasium vuelve a funcionar, y la CLI devuelve la terminal

v3.0.1 · 4 ago 2026
  • La descarga de GitLab gemnasium fallaba en 3.0.0 con `HTTP 406`, para todo el mundo. El fetch integrado de Node añade una cabecera `Sec-Fetch-Mode: cors` que un programa no puede eliminar, y GitLab rechaza cualquier petición de archivo del repositorio que la lleve — así que nunca tuvo que ver con tu red, tu IP ni con cuántas veces reintentaras. Ahora la descarga usa una petición HTTPS normal y funciona
  • El archivo se descarga por id de commit en lugar de por nombre de rama, así que todos los que actualizan desde el mismo commit comparten una copia en caché en vez de pedirle a GitLab que genere un archivo de 60 MB cada uno. Una primera descarga que tardaba casi siete minutos ahora termina en segundos
  • La CLI terminaba todo su trabajo — informe escrito, resumen impreso — y luego no devolvía la terminal. La conexión de la descarga quedaba abierta detrás, manteniendo vivo el proceso; ahora se cierra en cuanto se ha leído el archivo
  • Una fuente que rechaza una descarga ya no se queda tres minutos esperando antes de decirlo. Lo informa en segundos y, en una terminal, ofrece reintentar — reintentando solo la fuente que realmente falló
  • `--fail-on` es honesto en ambos sentidos. Rechaza una ejecución cuya fuente de avisos no se pudo consultar, en lugar de informar de un análisis limpio que nunca hizo; y ya no falla por una fuente que desactivaste tú con `SENTINELLO_OSV_FEED_URL=off` o `SENTINELLO_GEMNASIUM_FEED_URL=off` y nunca descargaste

Sentinello ya funciona sin portal alguno

v3.0.0 · 3 ago 2026
  • Los escáneres se distribuyen como CLI en npm. `npx sentinello` recorre una carpeta, encuentra todos los proyectos que contiene, los contrasta con npm audit, OSV y GitLab gemnasium, y escribe un informe markdown con un prompt de remediación adjunto: sin instalación, sin cuenta, sin base de datos y sin que nada de tu código salga de la máquina
  • Canalizado, el informe es lo único que sale por stdout, así que `npx sentinello | claude -p "$(cat -)"` entrega a un agente una lista de trabajo completa sin que nada corrompa el documento
  • Una primera ejecución ya no pierde la fuente gemnasium por una descarga rechazada. GitLab rechaza su archivo durante uno o dos minutos seguidos, y el reintento anterior se rendía a los trece segundos; ahora la CLI espera a que pase, explica por qué espera y acepta `--feed-wait` si los tres minutos por defecto no te sirven
  • Ambas estimaciones de descarga se midieron en lugar de suponerse: la exportación npm de OSV se indica como 204 MB en vez de 196, y el archivo de gemnasium como 52 MB en vez de 80. El aviso de consentimiento marca las estimaciones con una tilde para que nunca se confundan con un tamaño informado por el servidor
  • Un valor con aspecto de opción ahora se rechaza en lugar de tomarse literalmente: `--out --` escribía un informe en un archivo llamado `--` dentro de tu proyecto e informaba de éxito
  • El panel de Novedades ya no se sale por la parte inferior de la ventana cuando una versión tiene mucho que contar

El documento de vulnerabilidades por fin llega — y cuenta lo que debe

v2.6.0 · 29 jul 2026
  • get_project_advisory ahora devuelve el documento en sí. Hasta ahora los clientes conectados solo recibían sus metadatos —un nombre de archivo y un recuento— y nunca el documento, pese a que la herramienta lo describía como una lista de trabajo completa
  • El informe de vulnerabilidades incluye ahora una entrada por cada aviso distinto, con sus fuentes combinadas, en lugar de una por fila de escáner: una vulnerabilidad que reportan npm audit y OSV es un único elemento de trabajo con ambos identificadores, no dos casi idénticos. Esto vale también para el botón Descargar .md del portal, y el recuento ya coincide con el del panel
  • Un proyecto demasiado grande para caber en una sola respuesta MCP ahora se pagina: el documento indica que está incompleto y da la llamada exacta para obtener el resto, en vez de cortarse en silencio donde un agente leería lo que falta como limpio
  • Cada parámetro de cada herramienta MCP tiene ahora una descripción, y la nueva herramienta list_mutes expone los identificadores de silenciamiento que necesita unmute — antes solo se conseguían creando el silenciamiento en la misma sesión
  • Corregido un fallo en los recuentos de severidad: un hallazgo cuya severidad no era uno de los cinco valores conocidos se contaba como hallazgo pero no entraba en ninguna categoría, así que un proyecto cuyo único hallazgo fuera ese aparecía como completamente limpio

El informe de vulnerabilidades, directo por MCP

v2.5.0 · 28 jul 2026
  • Los clientes MCP conectados pueden obtener el informe Markdown completo de un proyecto con la nueva herramienta get_project_advisory: el mismo documento que el botón Descargar .md del portal, sin copiarlo desde el navegador
  • Los hallazgos silenciados ya no se incluyen en el informe del proyecto, así que a un agente nunca se le encarga trabajo cuyo riesgo ya has aceptado
  • Nota: como el informe contiene tu prompt de exportación, un cliente MCP ahora puede leer lo que hayas escrito en Ajustes → Exportar

Ventanas emergentes sin recortes y un prompt de exportación más estricto

v2.4.3 · 26 jul 2026
  • Los desplegables, el popover de ruta de dependencias y el menú de exportación de avisos ya no quedan recortados por la tabla o el diálogo que los contiene: se dibujan por encima de la página y se abren hacia arriba cuando no hay espacio debajo
  • El prompt de exportación de avisos por defecto ahora pide al agente que planifique antes de editar nada, que agrupe los hallazgos que comparten una misma corrección y que detalle el impacto en el código de cada cambio de versión; además fija como objetivo cero hallazgos y descarta los atajos hacia un cero falso —silenciar, ampliar rangos o reducir el alcance del análisis—, dejando lo realmente irresoluble en una tabla de residuos fechada

La rama en su propia columna

v2.4.2 · 25 jul 2026
  • La rama de git en la que se analizó cada proyecto ahora tiene su propia columna en la lista de proyectos —texto simple, sin icono— en lugar de aparecer debajo del nombre del proyecto

Apagados limpios

v2.4.1 · 25 jul 2026
  • Reiniciar el contenedor ya no interrumpe un análisis a mitad de escritura, y el worker arranca de inmediato en lugar de reintentar durante ~30 segundos
  • Define stop_grace_period: 60s (o --stop-timeout 60) en tu archivo compose para darle margen: el README y la documentación de Docker ya lo explican

Análisis políglota: Python, Go y Rust se suman a npm

v2.4.0 · 25 jul 2026
  • Sentinello ahora analiza proyectos de Python, Go y Rust además de npm: los archivos de bloqueo se resuelven totalmente sin conexión y cada proyecto informa su cobertura de análisis (completa, parcial o no auditable), de modo que las lagunas quedan visibles en lugar de silenciosas
  • La base de datos gemnasium de GitLab se suma a npm audit y OSV como fuente de avisos sin conexión, deduplicada frente a las demás por alias CVE/GHSA; Configuración → Fuentes es ahora una matriz de Lenguajes × Fuentes con alcance de notificaciones por celda, y npm audit ya se puede desactivar siempre que quede una fuente activa
  • Los hallazgos ahora registran la rama de git de la que provienen, visible en la lista de proyectos, el encabezado del proyecto y todas las notificaciones
  • Las filas de proyecto incluyen sus propias acciones: analizar ahora, copiar o descargar el aviso, silenciar o reactivar y editar etiquetas, así una ronda de triaje ya no exige entrar en cada proyecto
  • El panel de proyectos pasó de ~3,3 s a ~0,03 s, y la navegación ahora muestra estados de carga en lugar de parecer congelada
  • Seguridad: 25 avisos de dependencias resueltos, incluidos CVE de libvips que estaban activos en el optimizador de imágenes del portal y nueve avisos de Next.js que afectaban al portal distribuido
  • El prompt de exportación de avisos por defecto ahora cubre la antigüedad mínima de publicación, la verificación del archivo de bloqueo y los overrides obsoletos

Configuración de MCP más simple, sin variables de entorno

v2.3.0 · 9 jun 2026
  • Configura MCP por completo en Configuración → MCP: genera un token para activar el endpoint /api/mcp y bórralo para desactivarlo — las variables de entorno SENTINELLO_MCP_ENABLED y SENTINELLO_MCP_API_TOKEN ya no existen (un token de entorno existente se importa una vez al actualizar)
  • Fragmentos de conexión listos para pegar para Claude Code, Codex, Cursor y Claude Desktop, con tu token ya incluido
  • Cuando SENTINELLO_PORTAL_BASE_URL se define en el entorno, se muestra de solo lectura en Configuración → Avanzado, ya que sigue siendo autoritativa y se reaplica en cada arranque

Menos falsas alarmas y hallazgos que se limpian solos

v2.2.0 · 9 jun 2026
  • Los avisos de malware ahora coinciden con la versión comprometida exacta: una versión limpia o ya corregida de un paquete que estuvo comprometido deja de marcarse
  • Los hallazgos duplicados ahora se resuelven solos en el siguiente análisis, de modo que las entradas antiguas o huérfanas se eliminan automáticamente
  • Las etiquetas de producción y desarrollo ahora se calculan de una sola forma coherente en todas las fuentes (npm y OSV)

Un encabezado de proyecto más limpio y filtros coherentes

v2.1.0 · 6 jun 2026
  • Encabezado de proyecto simplificado: renombra junto al título, con silenciar y etiquetas como iconos
  • Filtra los hallazgos por fuente (npm / OSV) desde un nuevo desplegable junto al filtro de tipo de dependencia
  • Desplegables unificados y coherentes en toda la app, con búsqueda al escribir en listas largas como las zonas horarias

Guía de actualización más clara

v2.0.1 · 4 jun 2026
  • Pasos de actualización ampliados para los cambios incompatibles de 2.0
  • El README indica el enlace de puerto solo en localhost

Análisis multi-fuente y una instalación reforzada y segura por defecto

v2.0.0 · 4 jun 2026
  • OSV como segunda fuente opcional (Configuración → Fuentes, desactivada por defecto) con detección de paquetes maliciosos, cotejada con la base de datos pública de OSV en una caché local
  • Los hallazgos ahora se combinan entre fuentes: una fila por vulnerabilidad, con cada fuente etiquetada, la mejor corrección disponible y la unión de las rutas de dependencia, con filtro por fuente y un popover de ruta de dependencia
  • Refuerzo de seguridad: el endpoint MCP está desactivado por defecto y requiere un token, la entrega de webhooks está protegida contra SSRF, una puerta de inicio de sesión opcional del portal, y el contenedor se ejecuta como usuario sin privilegios
  • Configuración ahora es una sección de nivel superior con barra lateral y una página de Perfil

Integración MCP y novedades

v1.4.0 · 29 may 2026
  • Servidor MCP en /api/mcp para Claude Desktop, Cursor y otros clientes
  • Nueva sección Configuración → MCP con URL del servidor y gestión de tokens
  • Píldora de novedades e historial de notas de versión

Corrección de la versión en el pie

v1.3.1 · 28 may 2026
  • La versión en ejecución se muestra correctamente en el pie de página

Mejoras en las notificaciones

v1.3.0 · 28 may 2026
  • Filtrar notificaciones por entorno
  • Formulario de edición de destinos más simple
  • Duplicar un destino de notificación existente

Páginas de Proyectos y Bibliotecas

v1.2.0 · 24 may 2026
  • La vista de inicio se divide en páginas dedicadas de Proyectos y Bibliotecas

Recarga de la programación en vivo

v1.1.2 · 24 may 2026
  • El worker recarga la programación de escaneo en cuanto guardas cambios en el portal

Borrados más seguros y un aviso de actualización más claro

v1.1.0 · 23 may 2026
  • Confirmación antes de eliminar raíces y destinos de notificación
  • El aviso de actualización pasa a un banner superior descartable
  • El worker elimina raíces obsoletas cuando desaparece su montaje

Correcciones de precisión del escáner

v1.0.1 · 23 may 2026
  • Descarta hallazgos cuya versión instalada no está realmente en el rango vulnerable
  • Permite eliminar un destino de notificación con historial de envíos

Primera versión de código abierto

v1.0.0 · 23 may 2026
  • El primer lanzamiento público de Sentinello

Hoja de ruta

Hoy Sentinello vigila tus dependencias en varios lenguajes. Esto es hacia dónde va — y lo que puedes pedir.

Priorización más inteligente

Planeado

Ordená los hallazgos por explotabilidad y por si el código vulnerable es realmente alcanzable — triá primero lo que importa.

Más integraciones

Planeado

Más canales de notificación y formas de conectar Sentinello con las herramientas que tu equipo ya usa.

Análisis estático (SAST)

Planeado

Detecta patrones de código riesgosos en tu propio código, no solo CVE conocidos en tus dependencias.

Escaneo de secretos y licencias

Planeado

Señala secretos filtrados y problemas de licencias en el mismo portafolio, en la misma cola.

Solicitar una integración o fuente

Dinos qué integrarías o escanearías a continuación — abre una incidencia en GitHub y ayuda a definir la hoja de ruta.