Наша разработка · Открытый код · Плагин для Claude Code
agent-guard спрашивает человека перед командой, которая меняет систему, прячет пароли и токены от модели и записывает каждую команду агента в журнал. Работает с любым стеком: Linux, контейнеры, Kubernetes, Terraform, облака, базы.
systemctl restart nginx меняет систему, поэтому Claude Code покажет её с причиной и выполнит после вашего согласия. Если что-то пойдёт не так, верну прежний конфиг и перезапущу снова.‹hidden› вместо значения. Само значение мне не видно.Перед каждой командой хук сверяет её с правилами по областям. В профиле prod он спрашивает перед любым изменением, в test только перед разрушительным.
systemctl, service, reboot, пакеты, пользователи, сетевой экран, kill, монтирование, crontab, правка и удаление в /etc, /opt, /var и домашнем каталоге.
docker и podman run, stop, push, compose up/down; kubectl apply/patch/scale/drain, helm install/upgrade/rollback, flux reconcile.
terraform, tofu, terragrunt apply и import, pulumi up, ansible-playbook без --check, модули ansible -m shell/service/copy.
aws, yc, gcloud, az: создание, изменение, остановка, запуск и удаление ресурсов, aws s3 cp/mv/sync/rm.
Запись и DDL через psql, mysql, sqlcmd, sqlite3, clickhouse-client; запись в MongoDB и Redis; rabbitmqctl с политиками, пользователями и очисткой очередей.
curl, wget, httpie с POST, PUT, PATCH, DELETE или телом запроса; git push --force.
Запрещено совсем. mkfs, wipefs, dd of=/dev/sdX, rm -rf / и fork-бомба не выполняются ни в prod, ни в test. Полный список правил с тестами лежит в hooks/guard.py.
Плагин подключает хуки Claude Code PreToolUse и PostToolUse и один скил. Решение о команде принимает Claude Code по ответу хука до запуска.
Перед командой, которая меняет систему, Claude Code показывает её с причиной и выполняет только после согласия человека, даже в автоматическом режиме.
Пароли, токены, ключи, строки подключения и учётки в адресах заменяются на ‹hidden› в выводе Bash, Read и Grep до того, как его увидит модель.
Каждая команда Bash, которую выполнил агент, пишется в журнал: команда с замаскированными секретами, вывод никогда.
Скил говорит агенту, как работать под защитой: назвать, где выполнится команда, что изменит и как откатить; маски и подтверждения не обходить.
Проверили вживую в Claude Code 2.1: модель получила маску вместо пароля, systemctl restart остановился на подтверждении, строка попала в журнал.
Нужен python3 версии 3.6 или новее в PATH на машине, где запущен агент. Других зависимостей нет.
/plugin marketplace add drxinfra/agent-guard
/plugin install agent-guard@agent-guard
По умолчанию действует профиль prod.
Чтение идёт без вопросов. Когда агент соберётся что-то изменить, Claude Code покажет команду и спросит вас.
Строгость задаётся профилем: на рабочих серверах prod, на тестовом стенде можно ослабить до test.
По умолчанию. Спрашивает перед любым изменением.
Спрашивает только перед разрушительными командами: delete, drop, destroy, prune, purge, flush, rm -r в системных и домашних путях, terraform destroy, git push --force.
Подтверждения выключены. Маскировку и журнал выключают отдельно: AGENT_GUARD_MASK=off, AGENT_GUARD_JOURNAL=off.
Где задать. Переменная AGENT_GUARD_PROFILE в окружении или в блоке env настроек Claude Code. Для одного проекта положите в корень файл .agent-guard, он сильнее переменных. Правку этого файла агентом хук всегда выносит на подтверждение.
profile=test mask=on journal=off
Журнал. Файл journal.jsonl в каталоге данных плагина, строка на команду: время UTC, сессия, рабочий каталог, хост, профиль, команда с масками, код выхода и спрашивал ли хук. Ротация на 10 МБ, права 0600. Команды за последний час, перед которыми хук спрашивал:
python3 hooks/journal.py --since 1h --asked
Минимальные права агенту и резервные копии нужны и с agent-guard.
Хуки работают по протоколу PreToolUse и PostToolUse Claude Code. Другим агентам плагин ничего не даёт.
Без python3 в PATH хуки не срабатывают и ничего не проверяется.
Необычно записанную команду (скрипт в файле, eval, base64, алиас) проверка может пропустить.
В режиме --dangerously-skip-permissions на подтверждение не полагайтесь.
Если в организации включён экспорт телеметрии Claude Code, исходный вывод может попасть туда.
В журнал попадают завершённые команды. Запрещённые и отклонённые на подтверждении не пишутся.
rxops это скилы для администратора Directum RX, и в них уже есть та же идея: подтверждение изменений и маскировка паролей. agent-guard это общая защита для любого стека, без знаний о конкретной системе. Если вы работаете не с Directum RX, ставьте agent-guard.
Подтверждение запрашивает Claude Code по ответу хука, поэтому модель его не отменяет. Но проверка построена на шаблонах: команду, спрятанную в скрипт, eval или base64, она может не узнать. Давайте агенту минимальные права и держите резервные копии.
Пароли, токены, ключи и строки подключения в выводе Bash, Read и Grep заменяются на ‹hidden› до того, как вывод увидит модель. Остальное содержимое файлов и вывода уходит как есть, поэтому решение о внешнем сервисе остаётся за вашей службой ИБ.
Читайте журнал: python3 hooks/journal.py --since 1h, с отбором по команде --grep kubectl, только с подтверждением --asked, только упавшие --failed, в JSON --json.
Исходники и релизы лежат на GitHub. Лицензия Apache-2.0.