Как проверить всё, что делает код Клода за вашей спиной (подробная настройка внутри)
Claude Code выполняет команды, редактирует файлы и обращается к API, пока вы читаете краткое описание, которое он вам показал.
Но реальные действия происходят вне поля зрения: выполняются команды, изменяются файлы, совершаются сетевые запросы.
Ниже представлен слой логирования, состоящий из 3 хуков: журнал команд, журнал изменений файлов и журнал аудита сессий, который можно прочитать постфактум.
Вы перестаёте доверять словам агента относительно того, что он сделал, и начинаете иметь доказательства.
Вы перестаёте доверять словам агента относительно того, что он сделал, и начинаете иметь доказательства.
Вот именно та конфигурация, которая вам нужна.👇
Почему краткого изложения недостаточно
Итоговое резюме Клода — это скорее рассказ, а не запись произошедшего. В нём говорится: «Обновлён модуль аутентификации». В нём не сказано, что при этом также была выполнена миграция, изменены 3 конфигурационных файла и совершено 2 сетевых вызова.
В большинстве случаев это нормально. Единственный раз, когда это не так, — у вас нет записей для проверки. Что-то сломалось в процессе производства, вы спрашиваете: «Что изменилось?», а единственный ответ — это перефразирование того, что привело к изменению.
В большинстве случаев это нормально. Единственный раз, когда это не так, — у вас нет записей для проверки. Что-то сломалось в процессе производства, вы спрашиваете: «Что изменилось?», а единственный ответ — это перефразирование того, что привело к изменению.
Журнал аудита решает эту проблему. Каждая команда, каждая запись в файл, каждая сессия записываются в файл, который Клод не может редактировать. Настройка состоит из 3 хуков.
HOOK 1: регистрировать каждую команду
Переместите файл .claude/settings.json в следующую папку:
json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "echo \"$(date '+%Y-%m-%d %H:%M:%S') | CMD | $command\" >> .claude/audit/commands.log" }
]
}
]
}
}
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "echo \"$(date '+%Y-%m-%d %H:%M:%S') | CMD | $command\" >> .claude/audit/commands.log" }
]
}
]
}
}
Перед выполнением каждой команды оболочки, запускаемой Клодом, в файл commands.log вносится запись с меткой времени.
Миграции, установки, удаления, git push — всё это. Вы читаете один файл и видите полную историю команд сессии.
HOOK 2: регистрировать каждое изменение файла
Добавить к тому жеsettings.json:
json
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{ "type": "command", "command": "echo \"$(date '+%Y-%m-%d %H:%M:%S') | EDIT | $file\" >> .claude/audit/files.log" }
]
}
]
{
"matcher": "Write|Edit",
"hooks": [
{ "type": "command", "command": "echo \"$(date '+%Y-%m-%d %H:%M:%S') | EDIT | $file\" >> .claude/audit/files.log" }
]
}
]
Каждый файл, который Клод записывает или редактирует, регистрируется с указанием времени.
Когда что-то ломается, вы проверяете files.log и точно видите, какие файлы были затронуты и когда, без необходимости копаться в git blame для 14 файлов.
HOOK 3: журнал аудита сессии
Этот вариант позволяет получить полную картину в конце сессии. Добавьте стоп-хук:
json
"Stop": [
{
"hooks": [
{ "type": "command", "command": "bash .claude/audit/snapshot.sh" }
]
}
]
{
"hooks": [
{ "type": "command", "command": "bash .claude/audit/snapshot.sh" }
]
}
]
Затем создайте .claude/audit/snapshot.sh:
bash
#!/usr/bin/env bash
mkdir -p .claude/audit
stamp=$(date '+%Y-%m-%d_%H-%M-%S')
{
echo "= Session ended $stamp ="
echo "--- Files changed (git) ---"
git diff --stat 2>/dev/null
echo "--- Uncommitted files ---"
git status --short 2>/dev/null
echo "--- Commands this session ---"
tail -30 .claude/audit/commands.log 2>/dev/null
echo ""
} >> .claude/audit/sessions.log
mkdir -p .claude/audit
stamp=$(date '+%Y-%m-%d_%H-%M-%S')
{
echo "= Session ended $stamp ="
echo "--- Files changed (git) ---"
git diff --stat 2>/dev/null
echo "--- Uncommitted files ---"
git status --short 2>/dev/null
echo "--- Commands this session ---"
tail -30 .claude/audit/commands.log 2>/dev/null
echo ""
} >> .claude/audit/sessions.log
В конце каждой сессии вы получаете снимок состояния: что изменилось в Git, что еще не зафиксировано и последние 30 команд.
Спустя три месяца вы можете открыть файл sessions.log и точно восстановить, что происходило в любой конкретный день.
Держите бревна подальше от Клода
Важный шаг. Добавьте папку audit в файл .gitignore , чтобы логи не попадали в коммиты, и укажите Клоду в файле CLAUDE.md, чтобы он оставил её без изменений:
разметка
## Audit logs
Never read, edit, or delete anything in .claude/audit/.
That folder is the human's record, not yours.
Never read, edit, or delete anything in .claude/audit/.
That folder is the human's record, not yours.
Суть в том, что Клод не контролирует эту запись. Если агент может переписать свой собственный журнал аудита, то это уже не журнал аудита.
Распространенные ошибки
Вы ведете журнал, но никогда его не читаете. Папка аудита помогает только в том случае, если ее проверка становится привычкой. После любой странной сессии сначала откройте commands.log. Это займет 10 секунд и обычно покажет проблему.
Если вы позволите логам расти бесконечно, файл commands.log разрастется за несколько месяцев. Добавьте еженедельную ротацию tail -1000 или очищайте его для каждого проекта отдельно. Большие логи — это медленные логи.
Вы можете случайно записать секреты в лог. Если Клод выполнит команду с встроенным токеном, это попадёт в лог. Ограничьте объем записываемого контента или очистите лог, прежде чем делиться им с кем-либо.
Вы сохраняете логи внутри репозитория и фиксируете их. Шаг с файлом .gitignore имеет значение. Журналы аудита в истории Git — это и лишние данные, и риск утечки памяти.
Установка занимает 5 минут.
- 2 минуты: добавьте хуки PreToolUse и PostToolUse в.claude/settings.json.
- 1 минута: создайте файл .claude/audit/snapshot.sh и обработчик Stop.
- 1 минута: добавьте папку audit в файл .gitignore и правило в файл CLAUDE.md.
- 1 минута: запустите задачу, затем откройте файл .claude/audit/commands.log и наблюдайте, как заполняется журнал команд.
Теперь все действия агента не остаются неофициальными. Вы не остановили Клода. Вы просто перестали слепо ему доверять.
----
Для тех кто дочитал - статья для Obsidian - сохраните себе в папку хранилища Obsidian и заставьте Claude прочитать (статья с формате MD). Рекомендуемое место хранения Obsidian/Claude/Article/Guide/Hooks
claude
code
hook
security
guide