3 Кормилец доками 4 Направляющий ~9 мин

Хуки для ИИ-агента: защита от опасных команд и утечек

Поставь агенту красные флажки - и он не снесёт твой проект в три часа ночи

Хуки и hookify-правила простыми словами: как поставить агенту автоматического охранника, который ловит rm -rf, утечку секретов и опасные команды до выполнения.

Скиллы ECC в этом уроке: hookify-rules

Что такое хук простыми словами

Представь, что ты дал ребёнку ключи от кухни. В целом он молодец: готовит, моет посуду, складывает тарелки стопочкой. Но раз в сто заходов по запарке может сунуть вилку в розетку или выкинуть твой паспорт - он же лежал на столе, мешался.

ИИ-агент устроен ровно так же. В 99% случаев всё хорошо. А в оставшийся 1% он спокойно выполнит команду, которая удалит твою папку, зальёт пароль в открытый репозиторий или снесёт рабочую базу. И сделает это бодро, с уверенным лицом и фразой «Готово!».

Чтобы этого 1% не случилось, ставят хук - что-то вроде охранника на входе. Перед каждым опасным действием он встаёт и говорит: «Так, стоп. А ну покажи, что ты задумал».

Робот-агент тянется к красной кнопке удаления, а перед ним вырастает охранник-турникет
Агент тянется к опасной команде - хук встаёт между ним и кнопкой.

Зачем вайбкодеру защита от опасных действий агента

Ты вайбкодер. Сваливаешь на агента кучу рутины - и правильно делаешь. Но доверие без страховки однажды стоит тебе нервов и данных. Хуки нужны, чтобы ты:

  • спал спокойно - агент физически не выполнит то, что ты запретил;
  • не повторял один и тот же запрет по сто раз в каждом новом чате;
  • ловил ошибки заранее, а не разгребал последствия с кружкой холодного кофе в три ночи;
  • не залил случайно пароли и ключи в открытый доступ - классика, на которой обжигались все.

Между «агент удалил мне три дня работы» и «агент попытался, но хук его остановил» лежит один маленький текстовый файл с правилом. Сейчас научимся его писать.

Как работают hookify-правила

Писать хуки руками на коде - больно. Поэтому есть инструмент hookify : ты создаёшь обычный текстовый файл-правило, и всё. Никакого кода.

Каждое правило отвечает на три вопроса.

КОГДА смотреть - событие (event)

Охранник не торчит сразу везде. Ты говоришь, в какой момент ему просыпаться:

  • bash - когда агент собирается выполнить команду в терминале (тут ловят rm -rf, sudo и прочую тяжёлую артиллерию);
  • file - когда агент пишет или правит файл (тут ловят пароли в коде и отладочный мусор);
  • prompt - когда ты сам что-то написал агенту;
  • stop - момент, когда агент закончил ответ (удобно для напоминалок);
  • all - на любое событие.

ЧТО ловить - шаблон (pattern)

Это «словесный портрет» опасного действия. Технически - паттерн . Скажем, шаблон rm\s+-rf поймает страшную команду удаления, даже если агент влепит лишний пробел.

ЧТО делать - действие (action)

Поймал охранник нарушителя - и дальше у него два варианта реакции:

  • warn - предупредить и пропустить. «Эй, ты точно хочешь это сделать? Ну ладно, проходи». Режим по умолчанию.
  • block - заблокировать наглухо. «Стоп. Не пущу. Точка». Действие не выполнится вообще.
Когда хватит warn (предупредить)
  • Действие обычно безопасно, но иногда хочется подумать второй раз.
  • Напоминания типа «не забудь добавить файл в .gitignore».
  • Стилевые мелочи: «оставил console.log в коде - почисти потом».
Когда нужен block (запретить)
  • Команды, которые невозможно откатить: удаление, форматирование диска.
  • Запись секретов (паролей, API-ключей) туда, где их кто-то увидит.
  • Любые действия над боевым сервером или базой - тут только глухой стоп.

Как выглядит hookify-правило

Само правило - короткий текстовый файл. Сверху между двумя линиями --- идут настройки, ниже - сообщение, которое агент увидит, когда правило сработает. Вот и вся конструкция.

Опишем словами правило «блокируй опасное удаление файлов»:

  • имя правила: block-rm-rf (имя лучше начинать с глагола: warn-, block-, require-);
  • включено: да;
  • событие: bash (следим за командами в терминале);
  • действие: block (блокируем);
  • шаблон: ловит команду удаления rm с флагами -rf;
  • сообщение: «Стоп. Это удаление без возможности отката. Подтверди вручную, прежде чем продолжить».

Файлы правил лежат в папке .claude внутри проекта. И вот тут - самая важная мысль урока.

Слева хрупкая записка «не удаляй» улетает с ветром, справа табличка-правило прибита болтами к стене
Слова в чате уносит ветром. Правило в файле прибито намертво.

Пример: как хук ловит утечку секретов

Ты пилишь свой первый стартап. Подключаешь платёжку, агент создаёт файл .env и кладёт туда секретный ключ от Stripe. Через пять минут ты просишь «залей всё на гитхаб», агент бодро делает git push - и твой денежный ключ теперь виден всему интернету. Ещё пара часов - и кто-то спокойно выкачивает по нему лимит. Поздравляю, ты оплатил чужие выходные.

Знакомая катастрофа? А теперь смотри, как она гасится одним правилом.

Ты заранее ставишь хук: «как только агент пишет что-то похожее на API-ключ в файл .env - напомни проверить .gitignore». Вот промпт, который попросит агента собрать такую защиту за тебя.

Промпт - скопируй и попробуй

Создай мне hookify-правило для защиты от утечки секретов.

Условия правила:

  1. Событие - запись в файл (event file).
  2. Срабатывает, когда путь файла оканчивается на .env И когда в новом тексте встречается API_KEY, SECRET или TOKEN.
  3. Действие - предупредить (warn), не блокировать.
  4. Сообщение агенту: «Ты пишешь секрет в .env. Проверь, что этот файл добавлен в .gitignore и не попадёт в публичный репозиторий».

Положи правило в папку .claude проекта и объясни мне простыми словами, что именно оно делает.

Хорошее правило против плохого

Хуки - мощная штука, но ими легко переборщить. Повесишь block на каждый чих - и агент встанет колом: шагу ступить не сможет. Вот как поймать баланс.

Хорошее правило
  • Ловит реально опасное: удаление, секреты, боевой сервер.
  • Шаблон точный: ловит «console.log(», а не любое слово «log».
  • Сообщение говорит агенту что делать дальше, а не просто «нельзя».
  • Опасное и необратимое идёт на block, мелочи - на warn.
Плохое правило
  • Слишком широкий шаблон: слово «log» поймает «login» и «dialog».
  • Всё подряд на block - агент не может работать, ты бесишься.
  • Запрет без объяснения - агент не понимает, как пройти законно.
  • Правило живёт только в чате, а не в файле - после перезапуска его нет.
Мем: охранник-хук блокирует абсолютно всё, включая безобидное сохранение файла
Когда поставил block на каждый чих и теперь сам не можешь работать.

Частые ошибки новичка с хуками

  • Думать, что слов в чате достаточно. «Я же просил не удалять» - а агент забыл после компакта. Запрет должен жить в файле.
  • Вешать block на всё подряд. Агент задохнётся, и ты сам в сердцах отключишь хуки. Блокируй только необратимое.
  • Слишком широкий шаблон. Запретил слово rm - и агент больше не может написать слово «information». Делай шаблон точным.
  • Запрет без подсказки «а что теперь». Агент упёрся в стену и ходит по кругу. Пиши в сообщении, как сделать правильно.
  • Игнорировать .gitignore для секретов. Хук предупредил, а ты пролистал мимо. Читай, что говорит охранник.
  • Не проверить, что правило вообще срабатывает. Попроси агента выполнить тестовую безопасную команду и убедись, что хук её поймал.

TL;DR - если коротко

  • Хук - охранник, который проверяет каждое действие агента до того, как оно выполнится.
  • hookify-правило - текстовый файл по принципу «делаешь вот это - предупреждаю или запрещаю».
  • Два режима: warn (предупредил и пропустил) и block (стоп, дальше нельзя).
  • Ловит по шаблону: опасные команды, секретные ключи, отладочный мусор.
  • Живёт в файле, а не в чате - работает всегда, даже после перезапуска.
  • Скажи словами, чего боишься - агент сам соберёт шаблон, регулярки учить не надо.

Поиск по вики

Нажмите Esc для закрытия

Введите запрос для мгновенного поиска по всем страницам курсов и уроков.