为那些你不再盯着看的依赖,提供一套早期预警系统。
在 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 项目。
| Sentinello | Dependency-Track | Snyk | Dependabot | |
|---|---|---|---|---|
| 零配置 — 指向一个文件夹即可 | ~ | ~ | ||
| 无需 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,一起塑造路线图。