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 для закриття

Введіть запит для миттєвого пошуку по всіх сторінках курсів та уроків.