Skip to main content
Glama

Skarn guard: плагины для агентов

Конфигурация хуков, навыки агента и объявление локального MCP-сервера для Skarn, упакованные для четырёх хостов, при этом пятый хост обслуживается из собственного репозитория. Этот репозиторий генерируется при каждом выпуске Skarn. Он не содержит бинарных файлов, правил обнаружения и кода движка.

Здесь находятся пять модулей, четыре из них — модули защиты. claude/ и codex/ — это плагины в маркетплейсе, который обслуживает корневой манифест этого репозитория, для Claude Code и Codex CLI. antigravity/ — каталог плагинов для Antigravity CLI (agy). Корень репозитория сам по себе является расширением Gemini CLI, потому что установщик Google и краулер галереи читают манифест из корня. Файл в корне — это либо файл уровня репозитория (этот README, LICENSE, SECURITY.md, манифест маркетплейса), либо файл Gemini (gemini-extension.json, GEMINI.md, hooks/, skills/); каждый другой хост получает подкаталог. Пятый модуль, recall/, — это плагин только с навыками в том же маркетплейсе: один навык, без хуков, без MCP-сервера. Модуль Cursor вообще не находится в этом репозитории; он живёт по адресу https://github.com/skarn-security/cursor-plugin.

Защита — это хук предварительного выполнения. Прежде чем ваш агент выполнит команду оболочки, применит патч, запишет файл, получит URL, вызовет MCP-инструмент или отправит запрос поставщику модели, ожидающее действие сканируется движком обнаружения Skarn на вашей машине и получает вердикт: deny (блокировать), ask (передать вам) или allow (молча). Он сканирует локально, не совершает сетевых вызовов и никогда не выводит сырой секрет — вердикт называет правило и отредактированный предпросмотр.

Установка

Сначала установите бинарный файл skarn (плагин его не содержит; хуки вызывают skarn guard из вашего PATH):

brew install skarn-security/tap/skarn

Claude Code:

claude plugin marketplace add skarn-security/agent-guard
claude plugin install skarn-guard@skarn

Codex CLI:

codex plugin marketplace add skarn-security/agent-guard
codex plugin add skarn-guard-codex@skarn

Два плагина защиты имеют разные имена, потому что один маркетплейс не может содержать два плагина под одним именем, и каждый поставляет форму хука своего хоста (имена событий, сопоставители инструментов и --agent, по которому маршрутизирует защита). Установите тот, который соответствует подключаемому хосту. Оба содержат навык skarn-audit, который запускает skarn assess и skarn vet на этой машине и сообщает об отредактированных результатах. Редактирование маскирует значения учётных данных, которые обнаруживает Skarn; окружающий контекст транскрипта в результате всё ещё получен из сеанса, поэтому навык обрабатывает весь результат как данные сеанса, а не как безопасный текст.

Codex просит вас довериться хукам при первом запуске после установки: выберите «Trust all and continue» в приглашении «Hooks need review». Пока вы этого не сделаете, хуки не выполняются, и защита вас не защищает. Доверие — это хэш содержимого для каждого хука, поэтому любое последующее изменение хука (обновление версии или переключение с аудита на принудительный режим) снова запрашивает подтверждение. Claude Code не требует шага доверия; хуки активны в вашем следующем сеансе.

skarn-recall — это третий плагин в том же маркетплейсе, и добавление маркетплейса выше уже достигает его. Он содержит один навык, без хуков и без чего-либо специфичного для хоста, поэтому один и тот же плагин обслуживает оба хоста:

claude plugin install skarn-recall@skarn
codex plugin add skarn-recall@skarn

Этот навык восстанавливает то, над чем вы работали, из транскриптов ваших сеансов, поэтому он поставляется отдельно от защиты, а не внутри неё. Содержимое транскриптов, которое он читает, покидает вашу машину и передаётся поставщику модели, обслуживающему агента; редактирование маскирует учётные данные, которые обнаруживает Skarn, а не всё, что вы считаете чувствительным. Установите его, когда захотите этого, и ограничьте то, что он читает, по проекту и по временному окну.

Gemini CLI устанавливает этот репозиторий как расширение, которое содержит те же хуки защиты в режиме аудита, навык skarn-audit, контекстный файл GEMINI.md и MCP-сервер ниже:

gemini extensions install https://github.com/skarn-security/agent-guard
gemini extensions list
gemini extensions uninstall skarn

Установка запрашивает согласие, потому что расширение объявляет и хуки, и MCP-сервер, и просит довериться папке. Ответьте на оба запроса.

Antigravity CLI устанавливает каталог antigravity/ из клона:

git clone https://github.com/skarn-security/agent-guard
agy plugin install agent-guard/antigravity
agy plugin list
agy plugin uninstall skarn-guard

agy plugin list сообщает о плагине с количеством его хуков, навыков и MCP-серверов. Копирование antigravity/ в ~/.gemini/config/plugins/skarn-guard/ вручную делает то же самое.

У Cursor есть собственный репозиторий, https://github.com/skarn-security/cursor-plugin, созданный тем же выпуском. Маркетплейс Cursor и его проверка выполняются для каждого репозитория, поэтому этот модуль не находится здесь.

skarn setup — это альтернативный путь установки для Claude Code, Codex CLI, Cursor, Copilot CLI, Gemini CLI и Grok Build: он объединяет те же хуки в нативную конфигурацию каждого из этих хостов без системы плагинов. Он не знает Antigravity CLI, поэтому этот хост устанавливает каталог плагинов выше или объединяет свой файл хука вручную.

Related MCP server: netallion-mcp-lite

Локальный MCP-сервер

Каждый из четырёх модулей защиты (claude/, codex/, antigravity/ и расширение Gemini в корне) объявляет один и тот же stdio MCP-сервер, который хост запускает, выполняя skarn mcp из вашего PATH. Cursor и VS Code подключают его в один клик:

Add to Cursor

Add to VS Code

Обе кнопки регистрируют сервер как skarn и запускают skarn mcp из вашего PATH, поэтому сначала установите бинарный файл. Если вы предпочитаете не устанавливать его, форма с закреплённым лаунчером работает при наличии только Node: Cursor или VS Code — она загружает @skarn-security/skarn@0.26.0 при первом запуске и затем использует кэш npx; более новая версия Skarn требует более новую ссылку.

Ручная настройка для любого клиента:

{
  "mcpServers": {
    "skarn": {
      "command": "skarn",
      "args": ["mcp"]
    }
  }
}

Он работает на вашей машине, не совершает сетевых вызовов и предоставляет четыре инструмента только для чтения: scan_sessions (результаты прошлых сеансов, каждое предпросмотренное значение отредактировано), vet_configs (маскированный отчёт о поверхности конфигурации вашего ассистента), list_sessions и session_stats (метаданные и агрегаты, никогда не содержимое сообщений). Нет инструмента записи и нет инструмента, возвращающего содержимое сообщений.

Два инструмента содержимого, search_sessions и get_session, появляются только если вы запустите сервер как skarn mcp --enable-recall. Оба маскируют то, что возвращают, и содержимое всё равно покидает вашу машину для поставщика модели, обслуживающего сеанс, поэтому объявления выше не устанавливают этот флаг. search_sessions отказывает в вызове, в котором не указаны ни hours, ни project; get_session принимает один точный session_id, который уже является его областью действия.

Если вы предпочитаете не устанавливать бинарный файл самостоятельно, работает форма npx с закреплённой версией:

{
  "mcpServers": {
    "skarn": {
      "command": "npx",
      "args": ["-y", "@skarn-security/skarn@0.26.0", "mcp"]
    }
  }
}

npx загружает пакет при первом запуске сервера и затем кэширует его, поэтому первый запуск медленнее и требует доступа к сети. Закрепите версию. Незакреплённая форма разрешается в то, что реестр предоставляет на момент запуска, и skarn vet сообщает о ней как о vet-mcp-unpinned. Не используйте её.

llms-install.md в корне этого репозитория — это та же установка в шагах, читаемых агентом, для клиента, который подключает сервер за вас.

Каждый хост сообщает об отсутствующем бинарном файле по-своему. claude mcp list говорит Failed to connect с Executable not found in $PATH: "skarn". gemini mcp list показывает сервер skarn как Disconnected. codex mcp list не выполняет проверку работоспособности, поэтому строка остаётся в списке и включённой, и сервер падает при запуске сеанса. Cursor показывает строку плагина как Error - Show Output, а панель вывода заканчивается на spawn skarn ENOENT. В любом случае выполните skarn --version в терминале: command not found означает, что бинарный файл не установлен или отсутствует в PATH, который наследует хост, что обычно бывает для приложения, запущенного с рабочего стола, а не из оболочки.

Сначала аудит, затем принудительный режим

Оба плагина защиты поставляются в режиме аудита (skarn-recall не имеет хуков, поэтому у него нет режима): защита сообщает вердикт, который она бы вернула, и никогда не изменяет то, что делает ваш агент. Сначала запустите её в этом режиме и измерьте реальную частоту блокировок. Установите SKARN_GUARD_LOG=<path> в окружении, которое наследует ваш агент, и защита добавит одну отредактированную запись JSONL для каждого помеченного вызова (ts, verdict, tool, rule, severity, отредактированная причина, session, cwd, latency_ms); чистые вызовы не регистрируются.

Когда журнал выглядит чистым, измените --guard-mode audit в команде хука на --guard-mode enforce или выполните skarn setup --update --mode enforce. Принудительный режим требует лицензию Skarn; без неё защита остаётся в режиме аудита и сообщает, а не блокирует, поэтому истёкшая лицензия никогда не сломает ваш редактор.

Поддержание хука в актуальном состоянии по мере того, как выпуски Skarn расширяют набор событий хоста, — это обновление плагина, описанное ниже, а не команда Skarn: эти плагины содержат собственные файлы хуков, и skarn setup --update обновляет только записи, принадлежащие Skarn, которые сам skarn setup записал, в той области, в которой он их записал (по умолчанию для пользователя или в конфигурации репозитория с --scope project). Для конфигурации, настроенной другим способом, --update перезаписывает эти записи тем, что записывает установленный бинарный файл, заменяя каждую целиком, за исключением таймаута вызова хука, который вы настроили сами (timeout или timeoutSec в Copilot), который переносится, когда он однозначно сопоставляется со своей заменой и значение разумно, поэтому бюджет на машину переживает обновление; любое другое поле, которое вы добавили в такую запись, отбрасывается. При запуске в терминале skarn guard report и skarn assess называют настроенный через setup пользовательский хук, который отстал, один раз за выпуск, с точной командой обновления для этого хоста.

Обновление

Claude Code:

claude plugin marketplace update skarn
claude plugin update skarn-guard@skarn

Codex CLI (у него нет глагола обновления; повторное добавление устанавливает новую версию):

codex plugin marketplace upgrade
codex plugin add skarn-guard-codex@skarn

Обновления плагинов и обновления бинарных файлов независимы: команды хуков вызывают skarn guard из PATH, поэтому одного brew upgrade skarn достаточно, чтобы получить более новый движок обнаружения. Обновление плагина важно, когда изменяется что-либо, что несёт сам плагин: форма хука (новое событие, новый флаг, новый сопоставитель), текст навыка или метаданные манифеста.

Безопасность

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

Claude Code, Codex CLI и Gemini CLI отказывают открыто: некорректное событие, инструмент вне области действия или любая ошибка защиты даёт allow, и защита никогда не «кирпичит» вашего агента. Единственный путь с закрытым отказом на этих хостах — --strict с лицензированным принудительным режимом, что описано в README каждого хоста.

Antigravity CLI отказывает закрыто при любом исходе хука, кроме явного allow: сбой, таймаут, недопустимый JSON и пустой {} блокируют соответствующий вызов, как в режиме аудита, так и в принудительном режиме, а подключённый хук без бинарного файла skarn в PATH блокирует каждый соответствующий вызов. Защита отвечает на каждое полученное событие явным решением, а поставляемый сопоставитель называет только те инструменты, которые он охватывает, чтобы шаг вне сопоставителя никогда не мог быть заблокирован сбоем защиты. Установите skarn перед подключением этого хука и удалите запись перед удалением skarn. Документация: https://getskarn.com/?utm_source=agent-guard-readme&utm_medium=referral&utm_campaign=home&utm_content=documentation

Лицензия, конфиденциальность и поддержка

Этот репозиторий распространяется по лицензии MIT; см. LICENSE. Он содержит только конфигурацию, поэтому это покрывает манифесты плагинов, хуки, навыки и объявления MCP-сервера в нём.

Бинарный файл skarn, который вызывают эти файлы, загружается отдельно и не является открытым исходным кодом. Он лицензируется в соответствии с Skarn End User License Agreement по адресу https://getskarn.com/terms/, и его запуск означает принятие этого соглашения. Что он читает, что сохраняет и что никогда никуда не отправляет: https://getskarn.com/privacy/.

Поддержка: hello@getskarn.com. Сообщения об уязвимостях отправляйте на security@getskarn.com; см. SECURITY.md в этом репозитории.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

0Maintainers
No issuesResponse time
0Releases (12mo)
Commit activity

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Local-first security check for AI coding agents — finds hardcoded secrets, exposed .env files, git-history leaks and vulnerable dependencies (OSV), entirely on your machine. Ask your agent "is this safe to ship?" and get a Launch Readiness score with a fix for every finding.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Scans text and files for common secrets (AWS, GitHub, etc.) and redacts them to prevent credential leakage in AI-assisted development. Runs entirely locally with no telemetry.
    MIT

View all related MCP servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/skarn-security/agent-guard'

If you have feedback or need assistance with the MCP directory API, please join our Discord server