SentinelloSentinello

Система раннего предупреждения для зависимостей, за которыми вы перестали следить.

В эпоху ИИ вы выпускаете больше проектов, чем способны поддерживать. Sentinello следит за каждым из них и выявляет известные CVE в их зависимостях — JavaScript по умолчанию, а Python, Go и Rust в одном переключателе — чтобы забытый проект никогда не превратился в инцидент.

Запустите одной командой:

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

Работает на linux/amd64 и arm64

Без аккаунта. Без SaaS. Без телеметрии. Один образ Docker и один файл SQLite — ваш код и результаты никогда не покидают вашу машину.

Или обойдитесь вовсе без портала

Те же сканеры поставляются как CLI. Без установки, без аккаунта, без базы данных: запускается, печатает сводку, с которой может работать ваш агент, и завершается.

npx sentinello

В конвейере stdout несёт только markdown, поэтому сводка доходит до агента без искажений:

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

Обходит папку

Укажите каталог — и он найдёт все проекты внутри, останавливаясь на корне каждого, чтобы монорепозиторий считался один раз, а не пятьдесят. .gitignore и .sentinelloignore учитываются.

Проверяет три источника

Определяет точные установленные версии из lock-файла и сверяет их офлайн с локальным кэшем сводок. Ни одного сетевого запроса на проект, и ничего из вашего кода не отправляется наружу.

Пишет сводку

Датированный markdown-файл с находками и приложенным промптом по устранению: сначала разобрать, предпочитать обновление родительского пакета переопределениям, проверять исправления в lock-файле.

Чем это отличается от npm audit

Это не замена npm audit: он запускает npm audit, а затем добавляет два источника сводок, недоступных npm audit, подавляя всё, что дублируется.

npm auditnpx sentinello
ОхватЕдинственный проект, в котором вы находитесь.Все проекты внутри папки — за один проход и в одном отчёте.
Источники сводокЛента сводок вашего реестра.Она же, плюс OSV и GitLab gemnasium. Дубликаты подавляются, поэтому каждый дополнительный источник добавляет только новые находки.
Вредоносные пакетыНе покрывается.Записи MAL- в OSV отмечают пакеты, опубликованные с вредоносным кодом — тайпсквоттинг, полезная нагрузка в install-скриптах — сверяя их с конкретными скомпрометированными версиями.
ВыводТаблица или JSON, который нужно интерпретировать.Markdown-сводка с приложенным промптом по устранению, готовая для передачи агенту.
СопоставлениеЗапрос к реестру на каждый проект.Офлайн, по локальному кэшу. Первый запуск скачивает его, предварительно спросив; последующие передают почти ничего.

Дополнительные источники — не формальность. В собственном репозитории Sentinello npm audit и OSV сообщают по три находки и совпадают во всех, тогда как единственная критическая находка приходит из gemnasium, которого нет ни в одном из двух других.

Возможности

Всё в одном самостоятельно размещаемом портале — никаких внешних сервисов, данные не покидают вашу сеть.

Единая очередь триажа

Просматривайте и сортируйте CVE всего портфеля в одном месте — вместо npm audit, разбросанного по десятку чекаутов.

Просмотр по проектам или библиотекам

Откройте любой репозиторий, чтобы увидеть его находки, версии с исправлением и историю, — или переключитесь на уязвимый пакет, чтобы увидеть каждый затронутый им проект и заглушить его сразу везде.

Многоязычное сканирование

Сканирует JavaScript «из коробки» и добавляет Python, Go и Rust переключателем для каждого языка — разбирая lockfile каждого проекта офлайн и сопоставляя его с рекомендациями OSV и gemnasium от GitLab.

Непрерывное сканирование

Фоновый процесс пересканирует по расписанию, поэтому новые рекомендации появляются без того, чтобы вы помнили о проверке.

Несколько источников

Не только npm audit: сопоставление с базой OSV для более широкого охвата CVE и обнаружения известных вредоносных пакетов.

Уведомления и вебхуки

Получайте оповещения о сбоях и находках через Slack, Telegram или обычный вебхук — с привязкой к конкретному корню или проекту, на выбранном вами языке. Полезная нагрузка в формате JSON или обычного текста для агента автоисправления.

MCP-сервер

Подключите Claude Desktop, Cursor и другие MCP-клиенты, чтобы запрашивать результаты, проекты и библиотеки — и запускать сканирование — не покидая чат.

Экспорт рекомендаций

Экспортируйте находки проекта или библиотеки в Markdown с настраиваемой подсказкой для устранения — для вашей команды или LLM.

Один образ, один файл

Один образ Docker и один файл SQLite. Никакого сервера баз данных, очереди сообщений или зависимости от облака.

Автоматически регистрируемые roots

Всё, что смонтировано в /roots, регистрируется и сканируется при запуске — имя каталога становится его меткой.

Node для каждого проекта

Учитывает .nvmrc каждого проекта, устанавливая и кэшируя зафиксированную версию Node один раз.

10 языков

Интерфейс портала, коды причин сканирования и статусы локализованы на 10 языков.

Скриншоты

Посмотрите в действии — портал сканирует несколько демонстрационных проектов. Нажмите на любой снимок, чтобы увеличить.

Сравнение

Sentinello — не более тяжёлый Dependency-Track и не более дешёвый Snyk. Он занимает другую нишу: длинный хвост проектов, которые никто не подключил к конвейеру.

SentinelloDependency-TrackSnykDependabot
Без настройки — укажите папку~~
Не нужен SBOM / шаг CI
Сканирует реальные разрешённые lockfile~
Обнаружение вредоносных пакетов
Self-hosted, без SaaS
Один образ + SQLite
AI-native (MCP + экспорт)~
Полиглот (Python, Go, …)
Корпоративные политики / VEX~~

Dependency-Track видит только проекты, которые кто-то оснастил конвейером SBOM. Sentinello находит забытые. Они сильнее в корпоративных политиках; если вы уже используете их в зрелом конвейере, оставьте их. Sentinello — для остальной части вашего портфеля, за которой никто не следит.

Зачем мы это создали

В эпоху ИИ вы выпускаете больше, чем способны поддерживать.

Сегодня один разработчик за год запускает, сдаёт и оставляет позади десяток проектов — маркетинговый сайт, клиентскую панель, пет-проект, который тихо ушёл в продакшн. Чтобы держать их в безопасности, раньше приходилось заходить по SSH в каждый чекаут и вручную запускать npm audit — или узнавать о CVE в Next.js из заголовков, спустя дни после публикации. Никто не делает этого по десятку репозиториев, так что этого не происходит вовсе.

Достаточно одной забытой зависимости с критической уязвимостью удалённого выполнения кода. Самый простой сайт, за которым вы перестали следить, становится точкой входа.

«Почему просто не взять Snyk или Dependabot?» Они живут внутри CI-конвейера, который вы настроили, — а длинному хвосту такой конвейер так и не достался. Sentinello — это система раннего предупреждения для всего остального: укажите ему папку, и он будет следить за каждым забытым проектом, выводя каждый новый CVE в одну очередь — прежде чем он превратится в инцидент.

Как это работает

Три шага. Никаких агентов для установки в ваши проекты, никаких аккаунтов.

Укажите ему свой код

Смонтируйте репозитории в /roots или добавьте их в «Настройки → Roots». Каждый каталог автоматически регистрируется и обнаруживается при запуске.

Непрерывное сканирование

Фоновый процесс по расписанию сверяет ваши зависимости с известными CVE, устанавливая нужную версию Node, которую фиксирует каждый проект, когда это требуется.

Триаж в одной очереди

Каждая находка из каждого проекта попадает в единую очередь, которую можно фильтровать по серьёзности, — с опциональными оповещениями в Slack, Telegram или вебхук.

Для кого это

Sentinello — для всех, у кого в продакшне больше, чем они способны охватить взглядом: для тех, кто разрабатывает в одиночку, для небольшой команды, для агентства, жонглирующего клиентскими проектами.

  • Вы выпускаете пет-проекты и клиентские сайты, которые должны оставаться безопасными ещё долго после запуска.
  • Вам нужен обзор всего портфеля без подключения CI к каждому репозиторию.
  • Вы предпочитаете размещать у себя, а не отдавать опись своего кода SaaS-сервису.

Если вы крупная организация, у которой Snyk или Dependabot уже встроены в зрелый конвейер, оставьте их — Sentinello не пытается заменить корпоративный SCA. Он здесь для остальной части вашего портфеля, за которой никто не следит. Он с открытым кодом и под лицензией MIT, так что вы можете в точности прочитать, что он делает.

Примечания к выпуску

Sentinello регулярно обновляется — вот что появилось в каждой версии.

Загрузка gemnasium снова работает, а CLI возвращает терминал

v3.0.1 · 4 авг. 2026 г.
  • В 3.0.0 загрузка GitLab gemnasium падала с `HTTP 406` у всех. Встроенный fetch в Node добавляет заголовок `Sec-Fetch-Mode: cors`, который программа не вправе убрать, а GitLab отклоняет любой запрос архива репозитория с этим заголовком — так что дело никогда не было ни в вашей сети, ни в IP, ни в числе повторов. Теперь загрузка выполняется обычным HTTPS-запросом и проходит успешно
  • Архив запрашивается по идентификатору коммита, а не по имени ветки: все, кто обновляется с одного и того же коммита, используют общую кэшированную копию вместо того, чтобы каждый просил GitLab собрать архив на 60 МБ. Первая загрузка, занимавшая почти семь минут, теперь завершается за секунды
  • CLI заканчивал всю работу — записывал отчёт, печатал сводку — и после этого не возвращал терминал. Соединение загрузки оставалось открытым и удерживало процесс; теперь оно закрывается сразу после чтения архива
  • Источник, отказавший в загрузке, больше не молчит три минуты перед сообщением. Он сообщает за секунды и в терминале предлагает повторить — повторяя только тот источник, который действительно не удался
  • `--fail-on` честен в обе стороны. Он отклоняет запуск, в котором источник рекомендаций не удалось опросить, вместо того чтобы отчитаться о чистом сканировании, которого не было; и больше не заваливает запуск из-за источника, который вы сами отключили через `SENTINELLO_OSV_FEED_URL=off` или `SENTINELLO_GEMNASIUM_FEED_URL=off` и ни разу не загружали

Sentinello теперь работает вообще без портала

v3.0.0 · 3 авг. 2026 г.
  • Сканеры выходят как CLI в npm. `npx sentinello` обходит папку, находит все проекты внутри, сверяет их с npm audit, OSV и GitLab gemnasium и пишет markdown-сводку с приложенным промптом по устранению — без установки, без аккаунта, без базы данных, и ничего из вашего кода не покидает машину
  • В конвейере на stdout попадает только сводка, поэтому `npx sentinello | claude -p "$(cat -)"` передаёт агенту полный список работ, ничем не повредив документ
  • Первый запуск больше не теряет источник gemnasium из-за отклонённой загрузки. GitLab отклоняет свой архив на минуту-две подряд, а прежние повторы сдавались через тринадцать секунд; теперь CLI дожидается окончания, объясняет, почему ждёт, и принимает `--feed-wait`, если три минуты по умолчанию вам не подходят
  • Обе оценки размера загрузки измерены, а не угаданы: npm-экспорт OSV указан как 204 МБ вместо 196, а архив gemnasium — как 52 МБ вместо 80. В запросе подтверждения оценка помечается тильдой, чтобы её нельзя было принять за размер, сообщённый сервером
  • Значение, похожее на флаг, теперь отклоняется, а не понимается буквально: `--out --` раньше писал сводку в файл с именем `--` внутри вашего проекта и рапортовал об успехе
  • Панель «Что нового» больше не уходит за нижний край окна, когда в релизе много изменений

Документ с рекомендациями действительно доходит — и считает верно

v2.6.0 · 29 июл. 2026 г.
  • get_project_advisory теперь возвращает сам документ. Раньше подключённые клиенты получали только метаданные — имя файла и количество — но не документ, хотя инструмент описывал его как полный рабочий список
  • Экспорт рекомендаций теперь содержит одну запись на каждую отдельную рекомендацию с объединёнными источниками, а не одну на строку сканера: уязвимость, о которой сообщают и npm audit, и OSV, становится единой рабочей задачей с обоими идентификаторами, а не двумя почти одинаковыми. Это касается и кнопки «Скачать .md» в портале, а количество теперь совпадает с панелью
  • Проект, который не помещается в один ответ MCP, теперь разбивается на страницы: документ сообщает, что он неполный, и указывает точный следующий вызов для получения остального, вместо того чтобы молча обрываться там, где агент счёл бы остаток чистым
  • У каждого параметра каждого инструмента MCP появилось описание, а новый инструмент list_mutes выдаёт идентификаторы отключений, нужные для unmute — раньше их можно было узнать, только создав отключение в той же сессии
  • Исправлен пробел в подсчёте уровней риска: находка с уровнем вне пяти известных значений учитывалась как находка, но не попадала ни в одну категорию, поэтому проект с единственной такой находкой выглядел полностью чистым

Экспорт рекомендаций прямо через MCP

v2.5.0 · 28 июл. 2026 г.
  • Подключённые MCP-клиенты могут получить полный Markdown-отчёт проекта новым инструментом get_project_advisory — тот же документ, что и кнопка «Скачать .md» в портале, без копирования из браузера
  • Заглушённые находки больше не попадают в экспорт рекомендаций проекта, поэтому агент никогда не получит работу, риск которой вы уже приняли
  • Примечание: поскольку отчёт содержит ваш промпт экспорта, MCP-клиент теперь может прочитать то, что вы написали в Настройки → Экспорт

Всплывающие панели без обрезки и более строгий промпт экспорта

v2.4.3 · 26 июл. 2026 г.
  • Выпадающие списки, всплывающая панель пути зависимости и меню экспорта рекомендаций больше не обрезаются таблицей или диалогом, в котором они находятся, — они отрисовываются поверх страницы и раскрываются вверх, когда снизу не хватает места
  • Стандартный промпт экспорта рекомендаций теперь требует от агента сначала составить план и только потом что-то править, группировать находки, закрывающиеся одним исправлением, и описывать влияние каждого изменения версии на код; цель — ноль находок, но обходные пути к фальшивому нулю запрещены: заглушение, расширение диапазонов или сужение области сканирования, а действительно нерешаемое попадает в датированную таблицу остатков

Ветка в отдельной колонке

v2.4.2 · 25 июл. 2026 г.
  • Ветка git, на которой сканировался проект, теперь занимает отдельную колонку в списке проектов — обычный текст, без иконки — вместо строки под названием проекта

Корректное завершение работы

v2.4.1 · 25 июл. 2026 г.
  • Перезапуск контейнера больше не обрывает сканирование на середине записи, а воркер запускается сразу, а не после ~30 секунд повторных попыток
  • Задайте stop_grace_period: 60s (или --stop-timeout 60) в compose-файле, чтобы дать ему запас, — README и документация по Docker теперь это описывают

Полиглотное сканирование — к npm добавились Python, Go и Rust

v2.4.0 · 25 июл. 2026 г.
  • Sentinello теперь сканирует проекты на Python, Go и Rust наряду с npm — файлы блокировок разбираются полностью офлайн, а каждый проект сообщает своё покрытие сканирования (полное, частичное или непроверяемое), поэтому пробелы видны, а не остаются незамеченными
  • База gemnasium от GitLab присоединяется к npm audit и OSV как офлайн-источник рекомендаций с дедупликацией по псевдонимам CVE/GHSA; раздел Настройки → Источники стал матрицей «Языки × Источники» с областью уведомлений для каждой ячейки, а сам npm audit теперь можно отключить, пока активен хотя бы один источник
  • Находки теперь фиксируют ветку git, из которой они получены, — она видна в списке проектов, в заголовке проекта и в каждом уведомлении
  • В строках проектов появились собственные действия — сканировать сейчас, скопировать или скачать рекомендацию, заглушить или снять заглушение и изменить теги, — поэтому для разбора больше не нужно заходить в каждый проект
  • Панель проектов ускорилась с ~3,3 с до ~0,03 с, а при переходах теперь показываются состояния загрузки вместо подвисшей страницы
  • Безопасность: устранено 25 рекомендаций по зависимостям, включая CVE в libvips, которые реально действовали в оптимизаторе изображений портала, и девять рекомендаций Next.js, затрагивавших поставляемый портал
  • Стандартный промпт экспорта рекомендаций теперь учитывает минимальный возраст релиза, проверку файла блокировки и устаревшие override

Более простая настройка MCP — без переменных окружения

v2.3.0 · 9 июн. 2026 г.
  • Теперь MCP настраивается полностью в «Настройки → MCP»: сгенерируйте токен, чтобы включить эндпойнт /api/mcp, очистите его, чтобы выключить — переменные окружения SENTINELLO_MCP_ENABLED и SENTINELLO_MCP_API_TOKEN удалены (существующий токен из окружения импортируется один раз при обновлении)
  • Готовые к вставке фрагменты подключения для Claude Code, Codex, Cursor и Claude Desktop, уже заполненные вашим токеном
  • Когда SENTINELLO_PORTAL_BASE_URL задана в окружении, она отображается только для чтения в «Настройки → Дополнительно», поскольку остаётся приоритетной и повторно применяется при каждом запуске

Меньше ложных срабатываний и самоочищающиеся находки

v2.2.0 · 9 июн. 2026 г.
  • Оповещения о вредоносном ПО теперь сопоставляются с точной затронутой версией — чистая или уже исправленная версия некогда скомпрометированного пакета больше не помечается
  • Дублирующиеся находки теперь устраняются сами при следующем сканировании, поэтому старые или осиротевшие записи удаляются автоматически
  • Метки production и development теперь вычисляются единым согласованным способом по всем источникам (npm и OSV)

Более чистый заголовок проекта и единообразные фильтры

v2.1.0 · 6 июн. 2026 г.
  • Упрощённый заголовок проекта — переименование рядом с названием, отключение и теги в виде иконок
  • Фильтрация находок по источнику (npm / OSV) через новый выпадающий список рядом с фильтром типа зависимости
  • Единообразные выпадающие списки по всему приложению, с поиском по вводу для длинных списков, например часовых поясов

Более понятные инструкции по обновлению

v2.0.1 · 4 июн. 2026 г.
  • Расширенные шаги обновления для несовместимых изменений 2.0
  • В README указана привязка порта только к localhost

Сканирование из нескольких источников и усиленная, безопасная по умолчанию установка

v2.0.0 · 4 июн. 2026 г.
  • OSV как необязательный второй источник (Настройки → Источники, по умолчанию выключено) с обнаружением вредоносных пакетов, сверяемый с публичной базой данных OSV в локальном кэше
  • Результаты теперь объединяются между источниками — одна строка на уязвимость, каждый источник помечен, лучшее доступное исправление и объединение путей зависимостей, с фильтром по источнику и всплывающим окном пути зависимости
  • Усиление безопасности: эндпойнт MCP по умолчанию выключен и требует токен, доставка вебхуков защищена от SSRF, необязательный вход в портал, и контейнер запускается от непривилегированного пользователя
  • Настройки теперь — раздел верхнего уровня с боковой панелью и страницей профиля

Интеграция MCP и новинки

v1.4.0 · 29 мая 2026 г.
  • MCP-сервер по адресу /api/mcp для Claude Desktop, Cursor и других клиентов
  • Новый раздел «Настройки → MCP» с URL сервера и управлением токенами
  • Значок новинок и история примечаний к выпускам

Исправление версии в подвале

v1.3.1 · 28 мая 2026 г.
  • Текущая версия корректно отображается в подвале

Улучшения уведомлений

v1.3.0 · 28 мая 2026 г.
  • Фильтрация уведомлений по среде
  • Более простая форма редактирования получателей
  • Дублирование существующего получателя уведомлений

Страницы проектов и библиотек

v1.2.0 · 24 мая 2026 г.
  • Главный экран разделён на отдельные страницы проектов и библиотек

Живая перезагрузка расписания

v1.1.2 · 24 мая 2026 г.
  • Воркер перезагружает расписание сканирования сразу после сохранения изменений в портале

Более безопасное удаление и понятный баннер обновления

v1.1.0 · 23 мая 2026 г.
  • Подтверждение перед удалением корней и получателей уведомлений
  • Уведомление об обновлении перенесено в закрываемый баннер сверху
  • Воркер удаляет устаревшие корни, когда их монтирование исчезает

Исправления точности сканера

v1.0.1 · 23 мая 2026 г.
  • Отбрасывает результаты, чья установленная версия фактически не входит в уязвимый диапазон
  • Позволяет удалить получателя уведомлений с историей отправок

Первый релиз с открытым исходным кодом

v1.0.0 · 23 мая 2026 г.
  • Первый публичный выпуск Sentinello

Дорожная карта

Сегодня Sentinello следит за вашими зависимостями на нескольких языках. Вот куда он движется — и что вы можете запросить.

Умнее приоритизация

Запланировано

Ранжируйте находки по эксплуатируемости и по тому, достижим ли уязвимый код, — сначала разбирайте главное.

Больше интеграций

Запланировано

Больше каналов уведомлений и способов подключить Sentinello к инструментам, которыми ваша команда уже пользуется.

Статический анализ (SAST)

Запланировано

Выявляйте рискованные паттерны в вашем собственном коде, а не только известные CVE в зависимостях.

Сканирование секретов и лицензий

Запланировано

Отмечайте закоммиченные секреты и проблемы с лицензиями в том же портфеле, в той же очереди.

Запросить интеграцию или источник

Расскажите, что бы вы интегрировали или просканировали дальше — откройте issue на GitHub и помогите сформировать дорожную карту.