Об этом проекте
irreversible-command-gate (icg) — это небольшой защитный механизм на Rust, предназначенный для интеграции в hook-интерфейс AI-агента для кодинга. Его цель — перехватывать те немногие действия, которые невозможно отменить: удаление секрета, force-push поверх истории, вывод учетных данных в транскрипт или очистку Docker-тома, в то время как все остальные вызовы инструментов проходят без изменений. Он подключается к хуку PreToolUse: на вход подается один JSON-документ, на выходе — один конверт с решением. В документации проекта он описывается как «предохранитель» для честного, но склонного к ошибкам агента, а не как барьер безопасности против злоумышленника.
Принцип работы. Вызов инструмента направляется в наборы правил (rule packs) по ключевому слову инструмента. Сначала проверяются безопасные паттерны (safe patterns), которые приводят к немедленному разрешению; среди охраняемых паттернов побеждает первое совпадение. Такой порядок гарантирует, что обычная работа в режиме «только чтение» не вызывает срабатываний, так как правило срабатывает только на ввод, который не был распознан безопасным паттерном. Движок детерминирован и не выполняет сетевой ввод-вывод. По дизайну он работает по принципу fail-open: пустая директория с пакетами, нераспознанный инструмент или сбой проверки позволяют выполнить команду, исходя из логики, что пропущенное нарушение восстановимо, в то время как остановка всего парка агентов — нет. В README указано, что медианная стоимость проверки составляет примерно 10 мс при «горячем» кэше, а также отмечено наличие политики fail-closed для использования после того, как релиз докажет свою стабильность.
Существует четыре вердикта (по одному на каждый канал перенаправления, который может объявить правило), и только deny фактически останавливает команду: allow (правило не совпало или первым совпал безопасный паттерн), warning (разрешение плюс дополнительный контекст, когда правило не может принять решение достаточно надежно, чтобы заблокировать действие), rewrite (разрешение плюс обновленный ввод, чтобы интерфейс повторил попытку в безопасной форме того же намерения) и deny (причина содержит альтернативный вариант действий).
Состав поставки. Опубликованные пакеты включают openbao (kv destroy, удаление метаданных, удаление mount и политик, operator rekey, литералы секретов в argv, чтение секретов в stdout), git (заполнение голых учетных данных, преобразование force push в обычный push, коммиты без pathspec, пуш поверх устаревшего remote head), secrets (токены GitHub и PAT, ключи AWS, токены Slack, ключи Anthropic, блоки закрытых ключей PEM, поиск в командах и содержимом файлов), docker (system prune --all, volume rm, image rm --force), image-tag, storage-class, а также beads, misc, tmux и argocd-topology, которые кодируют локальные конвенции парка. Документация помечает каждый пакет как общий или специфичный для конкретного парка и называет каждый id правила. Создание структуры пакета обеспечивается командой new-pack, которая одновременно создает пакет и регрессионный тест, а release gate формирует корпус deny-regression для отчета о правилах, которые перестали покрывать то, что покрывали ранее.
Установка и использование. Бинарный файл можно собрать из исходников с помощью Rust toolchain или скачать как готовый актив релиза. Скрипт установки размещает бинарный файл и пакеты под владельцем root и регистрирует хук; он намеренно проверяет принудительное исполнение, отправляя через хук заведомо деструктивную команду и отказываясь сообщать об успехе, если команда не вернулась с вердиктом deny, так как незавершенная установка в противном случае вела бы себя точно так же, как рабочая. Доступны опции dry-run и uninstall. Команда check для пользователя всегда завершается с кодом ноль, поэтому анализировать следует ее вывод, а не статус.
Заявленные ограничения. В README четко указано, что icg не защищает от prompt-инъекций или вредоносных репозиториев, не знает, кто вызывает команду (нет проверки личности, TTY или привилегий), не охватывает облачные сессии агентов, такие как ChatGPT web, Codex cloud tasks или claude.ai, и не покрывает мутации kubectl, файлы workflow или объекты Kubernetes Job и CronJob, которые остаются за отдельными механизмами обеспечения на уровне организации. Переменная окружения может отключить защиту; она подвергается аудиту, а не ограничению, поэтому агент может установить ее так же легко, как и пользователь. Переход trust-pointer в потоке обновлений не был протестирован полностью и описывается как непроверенный.
Статус. В README указано, что движок, пакеты, оба фронтенда (хук и PATH-обертка), механизмы целостности релизов и 526 успешно пройденных тестов в 52 файлах работают. Проект представляет собой crate объемом около 25 800 строк на Rust с 17 зависимостями и без требований к C toolchain. Текущим релизом названа версия v0.1.4; версия v0.1.3 рекомендуется как минимальная для обновления, так как в ней был устранен обход защиты, при котором апостроф в теле heredoc заставлял лексер терять остальную часть команды. Репозиторий является зеркалом с лицензией MIT для self-hosted экземпляра git.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.