Коротко
Автор объясняет, почему одних инструкций в CLAUDE.md недостаточно для безопасной работы агента, и показывает схему проверок через хуки Claude Code и Git. Главная практическая мысль: сканировать нужно не только файлы на диске, но и индекс, изменения относительно HEAD и коммиты, ещё не отправленные на сервер.
Контекст
Автор разбирает безопасность Claude Code и делится собственным опытом настройки хуков. Повод — данные GitGuardian: секреты обнаружены в 3,2% публичных коммитов, связанных с Claude Code, против 1,5% в среднем по GitHub; по этим цифрам нельзя определить, кто добавил секрет — человек или агент. Автор также описывает случай нарушения агентом прямого запрета и приводит инцидент Replit 2025 года как пример возможного ущерба.
Главное
- Инструкции в
CLAUDE.mdне являются гарантией: они находятся в контексте модели, и правило из начала длинной сессии может хуже учитываться. - Для перехвата команд Claude Code автор использует событие
PreToolUseсmatcher: "Bash"; данные о вызове приходят в JSON на stdin, включаяtool_nameиtool_input. - В Claude Code код выхода 2 блокирует вызов инструмента; сообщение в stderr объясняет отказ. Код 1 сам по себе блокирующим не считается, поэтому ошибки и таймауты скрипта нужно явно превращать в отказ.
- Пример Python-хука разбивает составные команды по
&&,||,;,|и переводам строк с учётом кавычек, чтобы проверять каждую команду и её аргументы отдельно. - Перед
git commitсканер проверяет добавленные строки из индекса (git diff --cached), изменения относительноHEAD(git diff HEAD) и новые неотслеживаемые файлы. - Перед
git pushпредлагается проверять добавленные строки в ещё не отправленных коммитах черезgit log -p --no-color -m --branches --not --remotes. - Приведённая регулярка ищет упрощённые шаблоны
sk-,ghp_иAKIAс последующими символами; для реального применения автор рекомендуетgitleaksилиtrufflehog. - Автор советует держать конфиги MCP с ключами в
.gitignoreи отдельно передавать их сканеру: отчёт GitGuardian обнаружил более 20 тысяч секретов в публичных MCP-конфигах. - Правила хуков стоит защищать от редактирования агентом и покрывать регрессионными сценариями; сами правила безопасности не следует поручать агенту менять без контроля.
- Агентский хук видит командную строку, а не намерение: варианты вроде
git -C другая/папка pushили вызов Git через собственный скрипт могут обойти проверку.
Как сделано
Автор предлагает вынести правила проверок в JSON, а общий Python-движок подключить в .claude/settings.json к PreToolUse для Bash. Движок разбирает составные команды на части, сопоставляет их с правилами и запускает заданную проверку с аргументами соответствующей части. Таймаут проверки в примере — 100 секунд; автор указывает таймаут хука Claude Code 120 секунд.
Отдельный Bash-скрипт scan_secrets.sh принимает режим commit или push и сканирует только добавленные строки. Для коммита он объединяет staged diff, изменения относительно HEAD и новые файлы; для push — изменения в локальных ветках, отсутствующие на удалённых. Ошибка Git, сбой проверки или найденный подозрительный шаблон должны блокировать действие.
Для более надёжного контроля автор рекомендует также нативные Git-хуки pre-commit и pre-push: они проверяют состояние после добавления файлов в индекс. Агентский хук при этом может запрещать обход через --no-verify.
Результаты
Предложена схема, которая закрывает несколько пропусков простого сканирования файлов: секрет может остаться в индексе после удаления с диска, находиться в ещё не отправленном коммите или попасть в коммит командой, объединяющей git add и git commit. Численных результатов испытаний самого решения автор не приводит. В статье также указано, что GitGuardian обнаружил секреты в 3,2% публичных коммитов Claude Code и более 20 тысяч секретов в публичных MCP-конфигах.
Ограничения
Автор не приводит сравнительных тестов полноты и точности предложенного сканера или оценки его производительности. Регулярное выражение дано как упрощённый пример, а не как надёжная проверка всех типов секретов. Хук анализирует команду, но не гарантирует перехват альтернативных способов вызова Git; нативные Git-хуки повышают надёжность, однако могут быть обойдены через --no-verify, если это отдельно не запрещено. Данные о доле коммитов с секретами не показывают, кто именно внёс ключ. Работа сканеров и хуков также зависит от корректной обработки ошибок и настройки.
Что взять себе
- Не полагайтесь только на
CLAUDE.mdдля критичных правил: защиту от утечки секретов реализуйте как автоматическую проверку. - Перед коммитом проверяйте индекс, изменения относительно
HEADи новые файлы, а перед push — ещё не отправленные коммиты. - Делайте отказ безопасным по умолчанию: сбой или таймаут проверки должны останавливать действие, а не разрешать его.
- Используйте специализированный сканер вроде
gitleaksилиtrufflehog, а тесты на блокировку и пропуск команд храните как регрессионные сценарии. - Сочетайте хуки Claude Code с
pre-commitиpre-push, учитывая обходные пути и защищая сами настройки проверок.
Читать оригинал, если…
Откройте оригинал, если нужны исходные фрагменты Python и Bash, пример настройки Claude Code или подробности разбора составных команд и ограничений хуков.