SentinelloSentinello

为那些你不再盯着看的依赖,提供一套早期预警系统。

在 AI 时代,你发布的 Node.js 项目多过你能维护的数量。Sentinello 会盯住其中的每一个,揭示其 npm 依赖中已知的 CVE —— 让被遗忘的项目永远不会演变成事故。

一条命令即可运行:

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

运行于 linux/amd64 和 arm64

无需账号。没有 SaaS。没有遥测。一个 Docker 镜像和一个 SQLite 文件 —— 你的代码和结果绝不离开你的机器。

功能

尽在一个自托管门户 —— 没有外部服务,数据不会离开你的网络。

单一分诊队列

在一个地方查看并分诊整个组合的 CVE —— 而不是散落在十几个检出目录里的 npm audit。

按项目或库浏览

深入任意仓库,查看它的发现、修复版本和历史 —— 或切换到某个易受攻击的包,看它影响的每一个项目,并一次性在所有项目中将其静音。

持续扫描

后台工作进程按计划重新扫描,新的公告会自动出现,无需你记得去检查。

多种来源

不止 npm audit:与 OSV 数据库匹配,获得更广的 CVE 覆盖并检测已知恶意软件包。

通知与 Webhook

通过 Slack、Telegram 或一个普通 Webhook 接收失败与发现的告警 —— 可按 root 或项目划分范围,并使用你选择的语言。JSON 或纯文本负载,可直接交给自动修复代理。

MCP 服务器

连接 Claude Desktop、Cursor 等 MCP 客户端,无需离开聊天即可查询发现、项目和库,并触发扫描。

公告导出

将项目或库的发现导出为 Markdown,并附带可为你的团队或 LLM 自定义的修复提示。

一个镜像,一个文件

一个 Docker 镜像和一个 SQLite 文件。没有数据库服务器,没有消息队列,没有云端依赖。

自动注册的 Roots

挂载到 /roots 下的任何内容都会在启动时被注册和扫描 —— 目录名会成为它的标签。

按项目区分的 Node

遵循每个项目的 .nvmrc,将其固定的 Node 版本安装并缓存一次。

10 种语言

门户界面、扫描原因代码和状态均已本地化为 10 种语言。

截图

实际效果一览 —— 门户正在扫描几个演示项目。点击任意截图即可放大查看。

对比

Sentinello 不是更重的 Dependency-Track,也不是更便宜的 Snyk。它占据另一个定位:没人接入流水线的那一长串 Node 项目。

SentinelloDependency-TrackSnykDependabot
零配置 — 指向一个文件夹即可~~
无需 SBOM / CI 步骤
扫描真实解析的锁文件~
恶意软件包检测
自托管,无 SaaS
单一镜像 + SQLite
AI 原生(MCP + 导出)~
多语言(Python、Go……)计划中
企业策略 / VEX~~

Dependency-Track 只能看到有人用 SBOM 流水线接入的项目。Sentinello 找出你遗忘的那些。它们在企业策略上更强,而多语言覆盖已在 Sentinello 的路线图上 —— 如果你已在成熟流水线中运行它们,继续用。Sentinello 面向你那部分无人看管的其余项目组合。

我们为何打造它

在 AI 时代,你发布的多过你能维护的。

如今,一个独立开发者一年就会启动、交付、然后放下十几个项目 —— 营销站点、客户仪表盘、悄悄上了生产的业余项目。要让它们保持安全,过去意味着逐个 SSH 进每个检出目录手动跑 npm audit,或者在某个 Next.js CVE 爆出几天后才从新闻标题里得知。没人能对十几个仓库坚持这么做,所以这事根本就没人做。

只需一个被遗忘、带有严重远程代码执行漏洞的依赖就足够了。那个你不再盯着看的最简单的站点,会成为入侵的入口。

“为什么不直接用 Snyk 或 Dependabot?”那些工具活在你接好的 CI 流水线里 —— 而这条长尾从来就没有流水线。Sentinello 正是其余一切的早期预警系统:把它指向一个文件夹,它就会盯住你遗忘的每一个项目,在每个新 CVE 演变成事故之前,把它汇集到一个队列里浮现出来。

工作原理

三个步骤。无需在你的项目中安装代理,也无需创建账号。

把它指向你的代码

将你的仓库挂载到 /roots,或在“设置 → Roots”中添加。每个目录都会在启动时被自动注册和发现。

持续扫描

后台工作进程按计划将你的依赖与已知 CVE 比对,并在需要时安装每个项目所固定的 Node 版本。

在一个队列中分诊

所有项目的每一条结果都汇入一个可按严重程度筛选的队列 —— 还可选择向 Slack、Telegram 或 Webhook 发送告警。

适合谁

Sentinello 适合所有在生产环境里拥有的东西多过自己能盯住的人 —— 独立开发者、小团队、忙于客户项目的工作室。

  • 你发布的业余项目和客户站点,在上线后很久仍需保持安全。
  • 你想要覆盖整个组合的视图,而不必为每个仓库接入 CI。
  • 比起把代码清单交给 SaaS,你更愿意自托管。

如果你是一家大型机构,已经在成熟的流水线中接入了 Snyk 或 Dependabot,那就继续用它们 —— Sentinello 并不想取代企业级 SCA。它面向的是你那部分无人盯防的代码组合。它是开源且采用 MIT 许可证的,因此你可以确切地读到它在做什么。

发行说明

Sentinello 持续更新——以下是每个版本带来的内容。

更简单的 MCP 设置——无需环境变量

v2.3.0 · 2026年6月9日
  • 现在完全在“设置 → MCP”中配置 MCP:生成令牌即可开启 /api/mcp 端点,清除令牌即可关闭——SENTINELLO_MCP_ENABLED 和 SENTINELLO_MCP_API_TOKEN 环境变量已移除(升级时会一次性导入已有的环境变量令牌)
  • 面向 Claude Code、Codex、Cursor 和 Claude Desktop 的即贴即用连接片段,已预填你的令牌
  • 当通过环境变量设置 SENTINELLO_PORTAL_BASE_URL 时,它会在“设置 → 高级”中以只读方式显示,因为它具有最高优先级并在每次启动时重新应用

更少的误报,以及会自我清理的检测结果

v2.2.0 · 2026年6月9日
  • 恶意软件公告现在会与确切的受影响版本进行比对——曾被入侵的包,其干净或已修复的版本不再被标记
  • 重复的检测结果现在会在下次扫描时自我解决,过期或遗留的条目会自动清除
  • 生产(production)和开发(development)标签现在在所有来源(npm 和 OSV)上以统一的单一方式计算

更简洁的项目页头与一致的筛选器

v2.1.0 · 2026年6月6日
  • 精简的项目页头——在标题旁直接重命名,静音和标签改为图标按钮
  • 在依赖类型筛选器旁新增下拉框,可按来源(npm / OSV)筛选发现
  • 全应用统一一致的下拉框,时区等长列表支持输入即搜索

更清晰的升级指引

v2.0.1 · 2026年6月4日
  • 扩充了 2.0 重大变更的升级步骤
  • README 说明了仅限本地(localhost)的端口绑定

多来源扫描,以及默认安全的加固安装

v2.0.0 · 2026年6月4日
  • 将 OSV 作为可选的第二来源(设置 → 来源,默认关闭),具备恶意软件包检测,并与本地缓存中的公开 OSV 数据库进行比对
  • 检测结果现在可跨来源合并——每个漏洞一行,标记每个来源、提供可用的最佳修复方案以及依赖路径的并集,并配有来源筛选和依赖路径弹出框
  • 安全加固:MCP 端点默认关闭并需要令牌,webhook 投递可防御 SSRF,可选的门户登录入口,容器以非特权用户身份运行
  • “设置”现在是带侧边栏和个人资料页面的顶级板块

MCP 集成与新功能

v1.4.0 · 2026年5月29日
  • 面向 Claude Desktop、Cursor 等客户端的 /api/mcp MCP 服务器
  • 全新的“设置 → MCP”板块,提供服务器 URL 和令牌管理
  • 新功能标记以及发行说明历史

页脚版本显示修复

v1.3.1 · 2026年5月28日
  • 运行中的版本在页脚正确显示

通知改进

v1.3.0 · 2026年5月28日
  • 按环境筛选通知
  • 更简单的通知目标编辑表单
  • 复制现有的通知目标

项目与库页面

v1.2.0 · 2026年5月24日
  • 主页拆分为独立的项目页面和库页面

计划实时重载

v1.1.2 · 2026年5月24日
  • 在门户中保存更改后,worker 会立即重新加载扫描计划

更安全的删除与更清晰的更新横幅

v1.1.0 · 2026年5月23日
  • 删除根目录和通知目标前进行确认
  • 更新提示改为可关闭的顶部横幅
  • 当主机挂载消失时,worker 会清理过期的根目录

扫描器准确性修复

v1.0.1 · 2026年5月23日
  • 丢弃已安装版本实际上不在易受攻击范围内的审计结果
  • 允许删除有发送历史的通知目标

首个开源版本

v1.0.0 · 2026年5月23日
  • Sentinello 的首个公开发布版本

路线图

如今 Sentinello 已盯住你的 Node.js 依赖。这是它的发展方向 —— 以及你可以提出的需求。

更智能的优先级

计划中

按可利用性以及易受攻击的代码是否真正可达对发现进行排序——优先处理重要的问题。

更多生态系统

计划中

用同样的文件系统原生发现方式,把扫描从 Node 扩展到 Python、Go 和 Rust。

更多集成

计划中

更多通知渠道,以及把 Sentinello 接入你团队已在使用的工具的方式。

静态分析(SAST)

计划中

不仅检测依赖中的已知 CVE,还能发现你自己源码中的风险模式。

密钥与许可证扫描

计划中

在同一个组合、同一个队列中,标记被提交的密钥和许可证问题。

申请集成或数据源

告诉我们你接下来想集成或扫描什么 —— 在 GitHub 上提交 issue,一起塑造路线图。