Система раннего предупреждения для зависимостей, за которыми вы перестали следить.
В эпоху ИИ вы выпускаете больше проектов, чем способны поддерживать. 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 audit | npx 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. Он занимает другую нишу: длинный хвост проектов, которые никто не подключил к конвейеру.
| Sentinello | Dependency-Track | Snyk | Dependabot | |
|---|---|---|---|---|
| Без настройки — укажите папку | ~ | ~ | ||
| Не нужен 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 и помогите сформировать дорожную карту.