SentinelloSentinello

An early-warning system for the dependencies you stopped watching.

In the AI age you ship more Node.js projects than you can maintain. Sentinello watches every one and surfaces known CVEs in their npm dependencies — so a forgotten project never becomes an incident.

Run it in one command:

docker run -d \
  --name sentinello \
  -p 3870:3000 \
  -v sentinello-data:/app/data \
  -v sentinello-nvm:/root/.nvm \
  -v ~/Developer:/roots/personal:ro \
  ghcr.io/walkofcode/sentinello:latest

Runs on linux/amd64 and arm64

No account. No SaaS. No telemetry. One Docker image and one SQLite file — your code and your findings never leave your machine.

Features

Everything in one self-hosted portal — no external services, no data leaving your network.

Single triage queue

See and triage CVEs across your whole portfolio in one place — instead of npm audit scattered across a dozen checkouts.

Browse by project or library

Drill into any repository for its findings, fix versions, and history — or pivot to a vulnerable package to see every project it affects and mute it everywhere at once.

Continuous scanning

A background worker rescans on a schedule, so new advisories show up without you remembering to check.

Multiple sources

Beyond npm audit: match against the OSV database for broader CVE coverage and known-malicious package detection.

Notifications & webhooks

Get failure and finding alerts via Slack, Telegram, or a plain webhook — scoped per root or project, in the language you choose. JSON or plain-text payloads for an auto-fix agent.

MCP server

Connect Claude Desktop, Cursor, and other MCP clients to query findings, projects, and libraries — and trigger scans — without leaving the chat.

Advisory export

Export findings for a project or library as Markdown, with a customizable remediation prompt for your team or an LLM.

Single image, single file

One Docker image and one SQLite file. No database server, no message queue, no cloud dependency.

Auto-registered roots

Anything mounted under /roots is registered and scanned on boot — the directory name becomes its label.

Per-project Node

Respects each project's .nvmrc, installing and caching the Node version it pins, once.

10 languages

The portal UI, scan reason codes, and statuses are localized to 10 languages.

Screenshots

See it in action — the portal scanning a handful of demo projects. Click any shot to expand it.

How it compares

Sentinello isn’t a heavier Dependency-Track or a cheaper Snyk. It owns a different niche: the long tail of Node projects nobody wired into a pipeline.

SentinelloDependency-TrackSnykDependabot
Zero-config — point it at a folder~~
No SBOM / CI step required
Scans real resolved lockfiles~
Malicious-package detection
Self-hosted, no SaaS
Single image + SQLite
AI-native (MCP + export)~
Polyglot (Python, Go, …)Planned
Enterprise policy / VEX~~

Dependency-Track only sees the projects someone instrumented with an SBOM pipeline. Sentinello finds the ones you forgot. They’re stronger on enterprise policy, and polyglot coverage is on Sentinello’s roadmap — if you already run them on a mature pipeline, keep them. Sentinello is for the rest of your portfolio that nobody is watching.

Why we built this

In the AI age, you ship more than you can maintain.

A solo dev now spins up, delivers, and moves on from a dozen projects a year — the marketing site, the client dashboard, the side project that quietly went to production. Keeping them safe used to mean SSHing into each checkout to run npm audit by hand, or finding out about a Next.js CVE from a headline days after it dropped. Nobody keeps that up across a dozen repos, so it doesn't happen at all.

A single forgotten dependency with a critical remote-code-execution flaw is all it takes. The simplest site you stopped watching becomes the way in.

“Why not just use Snyk or Dependabot?” Those live inside the CI pipeline you wired up — and the long tail never got one. Sentinello is the early-warning system for everything else: point it at a folder and it watches every project you forgot, surfacing each new CVE in one queue before it becomes an incident.

How it works

Three steps. No agents to install in your projects, no accounts to create.

Point it at your code

Mount your repositories under /roots, or add them from Settings → Roots. Every directory is auto-registered and discovered on startup.

It scans continuously

A background worker checks your dependencies against known CVEs on a schedule, installing the Node version each project pins when it needs to.

Triage in one queue

Every finding across every project lands in a single queue you can filter by severity — with optional alerts to Slack, Telegram, or a webhook.

Who it's for

Sentinello is for everyone who has more in production than they have eyes on — the solo developer, the small team, the agency juggling client work.

  • You ship side projects and client sites that still need to stay safe long after launch.
  • You want a portfolio-wide view without wiring CI into every repository.
  • You'd rather self-host than hand your code inventory to a SaaS.

If you're a large org with Snyk or Dependabot already wired into a mature pipeline, keep them — Sentinello isn't trying to replace enterprise SCA. It's here for the rest of your portfolio that nobody is watching. It's open source and MIT-licensed, so you can read exactly what it does.

Release notes

Sentinello ships regularly — here's what each release delivered.

Simpler MCP setup — no environment variables

v2.3.0 · Jun 9, 2026
  • Set up MCP entirely in Settings → MCP: generate a token to turn the /api/mcp endpoint on, clear it to turn it off — the SENTINELLO_MCP_ENABLED and SENTINELLO_MCP_API_TOKEN environment variables are gone (an existing env token is imported once on upgrade)
  • Ready-to-paste connection snippets for Claude Code, Codex, Cursor, and Claude Desktop, pre-filled with your token
  • When SENTINELLO_PORTAL_BASE_URL is set in the environment it’s shown read-only in Settings → Advanced, since it stays authoritative and is re-applied on every boot

Fewer false alarms and self-cleaning findings

v2.2.0 · Jun 9, 2026
  • Malware advisories now match the exact compromised version — a clean or already-remediated version of a once-compromised package is no longer flagged
  • Duplicate findings now resolve themselves on the next scan, so old or stranded entries clear out automatically
  • Production and development labels are now computed one consistent way across every source (npm and OSV)

A cleaner project header and consistent filters

v2.1.0 · Jun 6, 2026
  • Streamlined the project header — rename inline beside the title, with mute and tags as one-tap icons
  • Filter findings by source (npm / OSV) from a new dropdown beside the dependency-type filter
  • Unified, consistent dropdowns across the app, with type-to-search on long lists like time zones

Clearer upgrade guidance

v2.0.1 · Jun 4, 2026
  • Expanded upgrade steps for the 2.0 breaking changes
  • README notes the localhost-only port binding

Multi-source scanning and a hardened, secure-by-default install

v2.0.0 · Jun 4, 2026
  • OSV as an opt-in second source (Settings → Sources, off by default) with malicious-package detection, matched against the public OSV database in a local cache
  • Findings now merge across sources — one row per vulnerability, every source tagged, the best available fix, and the union of dependency paths, with a source filter and a dependency-path popover
  • Security hardening: the MCP endpoint is off by default and requires a token, webhook delivery is guarded against SSRF, an optional portal login gate, and the container runs as an unprivileged user
  • Settings is now a top-level section with a sidebar and a Profile page

MCP integration & what’s-new

v1.4.0 · May 29, 2026
  • MCP server at /api/mcp for Claude Desktop, Cursor, and other clients
  • New Settings → MCP section with server URL and token management
  • What’s-new pill plus a Release notes history

Footer version fix

v1.3.1 · May 28, 2026
  • The running version renders cleanly in the footer

Notification improvements

v1.3.0 · May 28, 2026
  • Filter notifications by environment
  • Simpler notification-target edit form
  • Duplicate an existing notification target

Projects and Libraries pages

v1.2.0 · May 24, 2026
  • The home view is split into dedicated Projects and Libraries pages

Live schedule reload

v1.1.2 · May 24, 2026
  • The worker reloads the scan schedule the moment you save changes in the portal

Safer deletes & a clearer update banner

v1.1.0 · May 23, 2026
  • Confirmation prompts before deleting roots and notification targets
  • Update notice moved to a dismissible top banner
  • Worker prunes stale roots when a host mount disappears

Scanner accuracy fixes

v1.0.1 · May 23, 2026
  • Drop audit findings whose installed version isn’t actually in the vulnerable range
  • Allow deleting a notification target that has delivery history

Initial open-source release

v1.0.0 · May 23, 2026
  • The first public release of Sentinello

Roadmap

Sentinello watches your Node.js dependencies today. Here's where it's headed — and what you can ask for.

Smarter prioritization

Planned

Rank findings by exploitability and whether the vulnerable code is actually reachable — triage what matters first.

More ecosystems

Planned

Extend scanning beyond Node to Python, Go, and Rust, using the same filesystem-native discovery.

More integrations

Planned

More notification channels and ways to plug Sentinello into the tools your team already uses.

Static analysis (SAST)

Planned

Catch risky patterns in your own source code, not just known CVEs in your dependencies.

Secret & license scanning

Planned

Flag committed secrets and license issues across the same portfolio, in the same queue.

Request an integration or source

Tell us what you'd integrate or scan next — open an issue on GitHub and help shape the roadmap.