Скил — это код, который вы отдаёте агенту
Когда вы ставите скил из чужого репозитория, вы отдаёте агенту набор инструкций и часто скриптов, которые он выполняет с вашими правами: читает файлы, ходит в сеть, запускает команды. Проверять это вручную тяжело: в SKILL.md под сотню строк, часть логики в скриптах, часть в описаниях, которые модель воспринимает как прямой приказ.
SkillSpector от NVIDIA — сканер, который отвечает на один вопрос: безопасно ли ставить этот скил. Код скила он не запускает, а разбирает содержимое и выдаёт отчёт с оценкой риска и списком находок.
Почему это стало проблемой
Авторы ссылаются на исследование «Agent Skills in the Wild» (Liu et al., 2026): 42 447 скилов из крупных маркетплейсов, 31 132 прошли анализ. Из них 26,1% содержат хотя бы одну уязвимость, а 5,2% показывают признаки злого умысла. Скилы с исполняемыми скриптами уязвимы в 2,12 раза чаще.
Что именно он ищет
71 паттерн, разложенный по 17 категориям. Основные:
- Prompt injection — инструкции внутри скила, которые перебивают ваши указания агенту.
- Anti-refusal — попытки отключить отказы модели.
- Data exfiltration — отправка файлов, ключей и переменных окружения наружу.
- Privilege escalation — попытки получить права выше заявленных.
- Supply chain — опасные зависимости и подозрительные источники установки.
- Excessive agency — свобода действий шире, чем нужно задаче.
- Output handling, system prompt leakage, memory poisoning, tool misuse, rogue agent, trigger abuse.
- Отдельная группа для MCP: least privilege и tool poisoning — подмена описания инструмента, чтобы агент вызвал не то.
Поверх паттернов работают поведенческий анализ AST (exec, eval, subprocess и похожие вызовы), taint tracking (путь данных от источника до опасного стока) и YARA-сигнатуры.
Как устроена проверка
Первый проход: статика
Одиннадцать статических анализаторов прогоняют все файлы скила: регулярные выражения по паттернам, разбор AST для опасных вызовов, поиск известных CVE в зависимостях через OSV.dev. Проход быстрый, ничего не исполняет и даёт высокий охват — ценою части ложных срабатываний.
Второй проход: LLM по желанию
Если включить смысловой анализ, содержимое файлов уходит выбранному провайдеру, и модель оценивает намерение скила. Важная деталь: LLM не может понизить уверенность в находке. Детерминированные находки остаются в отчёте, даже если модель с ними не согласна; те, что модель не подтвердила, помечаются как llm-unconfirmed в JSON и SARIF.
Оценка риска
Баллы складываются из находок, а скилы с исполняемыми скриптами получают множитель 1.3.
| Баллы | Уровень | Рекомендация |
|---|---|---|
| 0–20 | LOW | ставить можно |
| 21–50 | MEDIUM | ставить осторожно |
| 51–80 | HIGH | не ставить |
| 81–100 | CRITICAL | не ставить |
CRITICAL-находка даёт +50, HIGH +25, MEDIUM +10, LOW +5. То есть одна серьёзная находка уже выводит скил в зону «не ставить».
Что можно проверить и в каком виде получить отчёт
На вход принимаются папка со скилом, отдельный файл SKILL.md, git-репозиторий, zip-архив и целая коллекция скилов — например, каталог установленных скилов агента.
skillspector scan ./my-skill/
skillspector scan ./SKILL.md
skillspector scan https://github.com/user/my-skill
skillspector scan ./my-skill.zip
Отчёт выводится в терминал либо в JSON, Markdown или SARIF — последний удобен для CI и редакторов.
skillspector scan ./my-skill/ --format sarif --output report.sarif
Встраивание в работу агента
Главная практическая ценность — не разовая проверка, а гейт на установку.
- MCP-сервер.
skillspector mcpподнимает сервер, который агенты вроде Claude Code, Codex CLI и Gemini CLI вызывают как инструмент. Тогда проверка идёт внутри сессии, до установки скила. - OpenCode. Расширение регистрирует инструмент
skillspector_scanи команду/skillspector; ставится копированием каталога.opencodeв проект. - Pi. Пакет ставится командой
pi installи даёт тот же инструмент внутри сессии. - CI и скрипты. Коды возврата: 0 — чисто, 1 — превышен порог или сработал строгий флаг, 2 — ошибка разбора. Этого достаточно, чтобы блокировать установку автоматически.
Что он не делает
Важно не переоценить инструмент:
- Не песочница. Он предупреждает до установки, но не изолирует скил, который вы всё равно поставили.
- Не исполняет код скила. Весь анализ статический, плюс чтение содержимого моделью.
- При включённом LLM-анализе содержимое файлов уходит провайдеру. Для полностью локальной проверки есть
--no-llm. - Проверка зависимостей отправляет на OSV.dev имена и версии пакетов; без сети используется встроенный список.
- Слабые места: текст на неанглийском, надписи на картинках, скомпилированный или зашифрованный код, поведение в рантайме.
С чего начать
uv tool install git+https://github.com/NVIDIA/skillspector.git
skillspector scan ./my-skill/
Есть вариант без Python — сборка Docker-образа из репозитория и запуск с монтированием каталога. Для гейта в агенте — установка с дополнением [mcp] и запуск skillspector mcp.
Кому и когда это нужно
Если вы ставите скилы пачками из GitHub и маркетплейсов и не читаете каждый целиком, сканер закрывает реальную дыру. Если ваши скилы написаны вами и лежат в своём репозитории, польза ниже: свой код проще проверить глазами, а сканер пригодится как регулярный прогон в CI.
Ставить стоит: проект свежий, активно обновляется, поддерживает популярные среды и умеет работать гейтом, а не только отчётом. Ограничения описаны честно, и это хороший знак.