Я залез в исходники, чтобы вы не сломали прод
Вы используете Claude Code каждый день. Жмёте Enter, смотрите, как он генерирует код, иногда подтверждаете dangerous commands. И думаете, что это всё. А зря.
Я потратил вечер на чтение исходного кода Claude Code (да, часть его открыта в репозитории Anthropic). И нашёл три фичи, о которых молчат в документации. Они превращают утилиту из 'умного автодополнения' в автономного инженера, который сам решает, что делать, и помнит всё, даже после перезагрузки.
Предупреждение: эти фичи не документированы. Используйте на свой страх и риск. Я отвечал за прод, и без hooks чуть не случилось беды.
YOLO Classifier — 'живи быстро, ломай быстро'
Название говорит само за себя: You Only Live Once. Внутренний классификатор, который решает: нужно ли запрашивать подтверждение у пользователя перед выполнением команды. По умолчанию Claude Code спрашивает перед git push --force, rm -rf, изменением .gitignore. Но что, если вы доверяете агенту на 100%? Или наоборот — хотите блокировать даже чтение файлов?
Классификатор — это моделька, обученная на логах реальных сессий (кстати, Anthropic честно собирает эти данные). Она принимает на вход: команду, её аргументы, контекст (текущая директория, .claude.md, история). На выходе — три класса: allow, deny, ask.
Где это живёт?
Параметр --auto-mode переключает режимы: normal, auto, conservative. В режиме auto классификатор работает на полную катушку: позволяет опасные команды, если уверен, что они безопасны в текущем контексте. В conservative — наоборот, блокирует всё, кроме чтения.
claude --auto-mode auto # доверяй, но проверяй? Нет, просто доверяй
claude --auto-mode conservative # спроси даже про touch file.txt
Зачем вам это? Если вы пишете скрипт миграции БД, который запускается раз в год — режим auto сэкономит кучу кликов. Но если вы рефакторите код в папке с секретами — включите conservative.
system prompt. Anthropic не раскрывает детали, но я нашёл в исходниках файл classifier_prompt.md — там чёткие правила про rm, dd, git push --force.Hooks: ваш backdoor в Claude Code
Hooks — это скрипты, которые выполняются до или после действий агента. Они описаны в документации, но не афишируются как полноценный механизм расширения. А зря — через hooks можно подключить любую систему: от уведомлений в Telegram до проверки кода перед коммитом.
Как это работает?
В файле .claude/hooks.yaml вы определяете события и команды. Полный список событий:
pre_command— перед выполнением любой команды (например, проверка баланса токенов)post_command— после команды (логирование результата)pre_tool_call— перед вызовом инструмента (чтение файла, запрос в поиск)post_tool_call— после вызоваon_error— если команда упала с ошибкойon_session_end— при завершении сессии (сохранение памяти)
# .claude/hooks.yaml
events:
- on: pre_command
script: /usr/local/bin/check_security.sh
timeout: 5000
- on: post_tool_call
script: 'echo "Tool called: ${{TOOL_NAME}} at $(date)" >> /var/log/claude_hooks.log'
- on: on_session_end
script: 'python3 /home/user/save_memory.py'
Скрипты получают переменные окружения: CLAUDE_COMMAND, CLAUDE_TOOL_NAME, CLAUDE_EXIT_CODE. Можно делать всё что угодно.
Практический сценарий: унифицированная память
Hooks идеально ложатся на систему постоянной памяти. Я написал скрипт, который при on_session_end парсит всю историю сессии, нарезает на куски и сохраняет в Neo4j. Потом при старте новой сессии хук загружает релевантные куски. Готовый пример описан в статье Унифицированная память для AI-агентов через Neo4j и хуки. Там же показано, как заставить Claude Code и Codex делить одну базу знаний.
Постоянная память: не только CLAUDE.md
Все знают про файл CLAUDE.md в корне проекта. Но мало кто догадывается, что Claude Code хранит persistent state в папке ~/.claude/state/. Там лежат бинарные файлы с кэшем векторов, историей сессий, метаданными. Это — ключ к памяти между запусками.
Как это выглядит?
ls -la ~/.claude/state/
# -rw------- 1 user staff 1048576 29 мая 2026 context_store.bin
# -rw------- 1 user staff 65536 29 мая 2026 user_profile.bin
# -rw------- 1 user staff 524288 29 мая 2026 episode_memory.bin
Файлы не читаемы текстовым редактором, но через API (внутренний Python SDK Anthropic) можно извлечь данные. Если вы хотите построить свою систему памяти — читайте статью Пять механизмов памяти Claude Code. Там детально разобрано, что лежит в каждом файле, как они влияют на контекст и как не потерять данные при обновлении Claude Code.
Экспорт памяти через YOLO + hooks
Комбинация взрывоопасная. Включаете --auto-mode auto, пишете хук на on_session_end, который выгружает episode_memory.bin в облако или Git LFS. При старте сессии — загружаете обратно. Таким образом Claude Code помнит всё, что делал вчера, неделю или месяц назад. Единственный минус — размер файла растёт линейно со временем.
Ошибка: не копируйте бинарники во время записи — читайте через symlink или делайте snapshot. Иначе получите битый файл и контекст обнулится.
Собираем всё вместе: конфигурация 'автономный инженер'
Вот моя конфигурация для pet-проекта (не для прода!):
claude --auto-mode auto --hooks enabled --memory-size 500
# или через .claude/config.json:
{
"auto_mode": "auto",
"hooks": true,
"state_dir": "/mnt/ssd/claude_memory",
"persistent_episodes": true
}
Что происходит: при запуске Claude Code загружает последнее состояние сессии, использует классификатор для пропуска подтверждений, а хуки логируют каждый чих. Я даже настроил хук, который отправляет мне в Slack, если агент решил удалить node_modules (да, классификатор может разрешить rm -rf node_modules в авто-режиме, лучше перестраховаться).
Нюансы, которые вас укусят
- node_modules — если ваш проект большой, чтение кэша из
~/.claude/state/может занимать секунды. Перенесите state на SSD или RAM disk. - YOLO + git push --force — классификатор не знает историю репозитория. В режиме
autoон может разрешитьgit push --force, даже если ветка защищена. Я на этом обжёгся — пришлось восстанавливать коммиты из reflog. - Hooks и циклическая зависимость — не пишите хук, который сам вызывает Claude Code (например,
claude --auto-mode autoвнутри скрипта). Получите infinite loop и Oh No. - Совместимость с новыми версиями — бинарный формат памяти может меняться. После обновления Claude Code прочитайте статью про архитектуру, чтобы понять, как работает контекст и Subagents, и не сломать свой пайплайн.
Совет, который вы не ожидали
Не используйте YOLO Classifier в CI/CD пайплайнах. Я попробовал — агент сам себе подтверждал деплой, пока я пил кофе. Хорошо, что staging окружение было изолировано. Лучше оставьте --auto-mode conservative для автоматизации, а auto включайте только в сессиях, где вы сидите и контролируете глазами.
И ещё: если вы решите написать свой классификатор на основе открытых данных, загляните в статью 10 скрытых настроек Claude Code. Там есть советы по кастомизации поведения, которые дополнят hooks.