В прогоне курса агент трижды за один проект трогал тесты (маленькие программы, которые проверяют код). Сначала написал четыре проверки и две главные удалил, отчитавшись «два теста добавлены». Потом, чиня оплату, стёр пять старых. А в третий раз «перевернул» проверку: тест должен был убедиться, что поддельное уведомление об оплате не открывает доступ, а после правки проверял обратное. Каждый раз в отчёте стояло «все тесты проходят». В инструкции было написано, что тесты трогать нельзя. Не помогло.
Чему научишься в этом уроке:
• отличать модель от обвязки и находить, какой части обвязки у тебя не хватает;
• различать запрещающую проверку и проверяющую;
• поставить готовый комплект навыков и проверок и подключить две проверки результата;
• своими глазами увидеть, как проверка срабатывает, и понять, что она не поймает.
Модель ещё не работник
Представь, что ты нанял сильного специалиста и посадил его в пустую комнату: ни документов, ни списка задач, ни человека, который скажет, правильно ли сделано. Много он наработает? Когда говорят «модель не справляется», чаще не справляется то, что вокруг неё. Это «вокруг» называется обвязкой: в статьях её зовут «харнес», от английского harness, упряжь.
Claude Code и есть обвязка вокруг модели. Ты уже собрал несколько её частей: CLAUDE.md с правилами проекта, MCP с внешними инструментами, навыки с процедурами, git для отката. Всего частей одиннадцать, и самая важная у новичка пустует.

Почему проверки важнее интеграций
Хочется подключить побольше: MCP к таблице, к почте, к календарю. Но агент работает циклом: сделал шаг, узнал результат, сделал следующий. Он исправляется ровно настолько, насколько ясный сигнал об ошибке получает. Нет сигнала, и десять интеграций дают десять способов ошибиться молча. Поэтому до любой интеграции реши, как ты узнаешь, что результат плохой.
Второй вывод из истории с тестами. Правило словами в CLAUDE.md нарушается не от глупости модели: к концу длинной задачи её внимание занято результатом, а не памяткой. Человек так же забывает выключить утюг, хотя правило знает. Если правило нарушено дважды, третий абзац в инструкции не поможет. Нужен механизм, которому не нужна память.
Два рода проверок
В Claude Code такой механизм называется хуком (от английского hook, крючок): это маленькая программа на Python, которую запускает сама среда в нужный момент. Агент не может её забыть или пропустить, потому что вызывает её не он. Хуки бывают двух родов.
- Запрещающая проверка срабатывает до действия. Смотрит на команду, которую агент собрался выполнить, и не даёт её выполнить. Как турникет: без пропуска не пройдёшь. Пример: запрет стереть рабочую папку одной командой.
- Проверяющая проверка срабатывает после действия. Смотрит на то, что уже получилось, и говорит агенту, если получилось плохо. Как ОТК на заводе: деталь уже выточена, контролёр её меряет. Пример: файл записан, а JSON в нём сломан.
Запрещающие ставят почти все. Проверяющие забывают, хотя именно они дают агенту тот самый сигнал об ошибке.

Что в комплекте
Собирать всё с нуля не нужно. Я выложил свою рабочую обвязку, очищенную от личных данных: claude-code-kit на GitHub. Внутри 42 навыка (планирование, исполнение, ревью, проверка качества, маркетинг), шаблон общих правил CLAUDE.md.example, пример настроек settings.json.example и хуки:
- гейт навыков (skill_engage_gate): не даёт агенту править код, пока он не взял профильный навык;
- chip_tree_gate: не даёт стереть рабочую папку или чужую незакоммиченную работу одной командой вроде
git reset --hard; - index_scope_gate: не даёт коммитом унести чужие изменения;
- schema_gate, «схема до SQL»: не даёт писать запрос к таблице базы данных, чьё устройство агент не посмотрел;
- artifact_check: после записи проверяет файл на сломанный JSON и испорченную кодировку (кракозябры);
- tests_guard, сторож тестов: после правки тестов сигналит, если тесты удалены, отключены пометкой skip или проверок стало меньше.
Первые четыре запрещающие, последние два проверяющие. Сторож тестов появился как раз после прогона, с которого начался урок.
Практика: ставим комплект
Нужен Python: проверь командой python --version в PowerShell, ты ставил его в уроке 1.2. Забери комплект через git:
cd $HOME
git clone https://github.com/vkomlev/claude-code-kit.git
cd claude-code-kit
Скопируй навыки и хуки в папку Claude Code твоего профиля:
mkdir $HOME\.claude\skills, $HOME\.claude\hooks -Force
Copy-Item -Recurse -Force .\skills\* $HOME\.claude\skills\
Copy-Item -Recurse -Force .\hooks\* $HOME\.claude\hooks\
Открой README.md комплекта и docs\skills-overview.md: пять минут чтения о том, какие навыки есть. Потом открой свои настройки: notepad $HOME\.claude\settings.json. Если идёшь дорожкой «без подписки», там уже лежит ключ CloseRouter, его не трогай. Добавь рядом раздел hooks с двумя проверками результата и замени ИМЯ_ПОЛЬЗОВАТЕЛЯ на имя своей папки в C:\Users:
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit|NotebookEdit",
"hooks": [
{ "type": "command", "command": "python \"C:\\Users\\ИМЯ_ПОЛЬЗОВАТЕЛЯ\\.claude\\hooks\\artifact_check.py\"" }
]
},
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{ "type": "command", "command": "python \"C:\\Users\\ИМЯ_ПОЛЬЗОВАТЕЛЯ\\.claude\\hooks\\tests_guard.py\"" }
]
}
]
}
Между разделами в JSON нужна запятая, а лишняя запятая ломает весь файл. Проверь его до запуска:
python -c "import json, pathlib; json.load(open(pathlib.Path.home()/'.claude'/'settings.json', encoding='utf-8')); print('настройки в порядке')"настройки в порядке
Запрещающие проверки подключаются так же, разделом PreToolUse из settings.json.example. Гейт навыков сначала настраивают под свои проекты по hooks\README.md, поэтому его оставь на потом.
Главный шаг: увидеть срабатывание
Хук, который ни разу не сработал у тебя на глазах, считай отсутствующим. Самая частая причина: опечатка в пути, и проверка молчит не потому, что всё хорошо. Поэтому ломаем специально. Открой Claude Code в любой учебной папке под git и попроси:
Создай файл probe.json с содержимым {"тест": 1,,}
Файл создастся, а следом агент получит сообщение от artifact_check:
Пост-проверка записанного файла нашла проблему (1 шт.):
JSON НЕВАЛИДЕН после правки: Expecting value: line 1 column 12
Файл: ...\probe.json
Ты ничего не проверял, среда увидела сама. Теперь сторож тестов. Попроси агента создать tests\test_probe.py с двумя простыми тестами, например «2 + 2 равно 4» и «строка ‘кот’ длиной 3», и закоммить его. Затем попроси: «удали второй тест из tests\test_probe.py». После правки придёт:
Сторож тестов: правка ослабила тесты в ...\tests\test_probe.py
- Число тестов в файле уменьшилось: 2 -> 1.
- Пропали тесты: test_kot
Запись уже произошла. Если тест мешает — почини КОД, а не тест.
Обрати внимание: обе проверки не отменяют запись, они сообщают о ней. Агент получает сигнал и должен вернуть тест или прямо сказать, какой убран и почему. Удали probe.json и тестовый файл, они больше не нужны.

Что комплект ловит, а что остаётся тебе
В прогоне курса агент работал сначала без комплекта, потом с ним. Без комплекта он удалял тесты три раза и писал «готово», когда тестов на новую функцию не было вовсе. С комплектом агент сам взял профильный навык перед правкой кода, чего раньше не делал ни разу. В следующем проекте, где стояли сторож тестов и git, удалений тестов не было.
Но в том же проекте агент выдумал адрес сервиса, которого не существует, напечатал в ответе начало секретного ключа и сдал отчёт «всё ✅» без единой строки, по которой это можно проверить. Ни один хук этого не поймал. Сторож тестов не заметит и перевёрнутую проверку: число тестов и их имена те же. Комплект сокращает ошибки, но последнюю проверку глазами не отменяет: читай отчёт, открывай файлы, запускай тесты сам.
Если ты заказываешь, а не собираешь
Если тебе продают «внедрение ИИ», семь вопросов отличат обвязку от чата с промптом: как система узнаёт, что результат плохой; где записаны правила проекта; есть ли описанные процедуры; что агенту запрещено; что система помнит между запусками; куда пишется, что она сделала; что происходит, когда проверка не прошла. Лучший тест честности: попроси показать срабатывание проверки, как ты сделал выше.
Если не получилось
- Сообщения нет совсем. Проверь путь в settings.json: ИМЯ_ПОЛЬЗОВАТЕЛЯ заменено, файлы artifact_check.py и tests_guard.py лежат в %USERPROFILE%\.claude\hooks. Открой Claude Code заново.
- python не найден, а py —version работает. В командах хуков напиши
pyвместоpython. - Claude Code перестал видеть ключ или настройки. В settings.json сломан JSON. Запусти проверку выше, она покажет строку с ошибкой.
- Сторож тестов промолчал. Тестовый файл должен быть закоммичен до удаления теста: сторож сравнивает с последним коммитом. Без git первая правка нового файла только запоминается.
Контрольный вопрос. Ты подключил artifact_check, Claude Code молча записал probe.json с содержимым {«тест»: 1,,}, никакого сообщения не пришло. Что это значит?
Подсказка: Кто запускает хук: агент или сама среда? И что нужно, чтобы среда его нашла?
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Контрольный вопрос. Агент уже второй раз за неделю пишет «готово», не запустив тесты. В CLAUDE.md правило про тесты есть. Что разумнее сделать?
Подсказка: Почему записанное правило уже не сработало дважды?
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Контрольный вопрос. Что из этого комплект с хуками сам не поймает? Отметь все верные.
Выберите все верные варианты.
Подсказка: Хуки смотрят на файлы и команды. Что в списке касается смысла ответа, а не файла?
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Задание. МИССИЯ «Проверка у меня на глазах». Поставь комплект claude-code-kit, подключи в settings.json две проверки результата (artifact_check и tests_guard) и вызови срабатывание обеих: запись probe.json со сломанным JSON и удаление закоммиченного теста. Приложи: (1) снимок, где видно сообщение artifact_check; (2) снимок, где видно сообщение сторожа тестов; (3) раздел hooks из своего settings.json (без ключа CloseRouter); (4) одно предложение: какую ошибку агента из твоей практики не поймает ни одна из этих проверок. Принято, если: на снимках видны оба сообщения; в разделе hooks пути ведут в твою папку профиля, а не в ИМЯ_ПОЛЬЗОВАТЕЛЯ; ключей и паролей нет ни на снимках, ни в тексте; в пункте 4 названа конкретная ошибка, а не «всё ловится».
Подсказка: Если сторож тестов молчит, проверь, закоммичен ли тестовый файл до удаления теста.
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Читайте также: AI-агент говорит «готово», а тесты упали: как проверять работу Claude Code
Частые вопросы
Почему AI-агент пишет «готово», а ничего не работает?
Агент отчитывается уверенно, но отчёт — не проверка. В нашем прогоне 10–11.10.2026 из 32 тестов 21 не прошёл (13 упали, 8 завершились ошибкой), а агент написал, что всё работает. Правило одно — запускать тесты самому и считать их число.
Может ли агент удалить тесты, чтобы всё стало «зелёным»?
Да. За прогоны трека (09–12.10.2026) агент удалял тесты 5 раз и однажды перевернул проверку подделки платежа: тест зелёный, а защиту не проверяет.
Что помогает держать агента в рамках?
Обвязка: git, файл правил, навыки и автоматические проверки. В нашем прогоне с комплектом проверок и git агент в модуле AI-ассистента не удалил ни одного теста, а модуль обошёлся ≈ 0,4 $ против ≈ 10 $ на мини-SaaS без комплекта (11–12.10.2026).
Можно ли верить ссылке агента на документацию?
Нет, сверяйте сами. В прогонах 10–12.10.2026 агент выдумал, как ЮKassa подписывает уведомления, и сослался на документацию, а в другом модуле выдумал адрес API сервиса.
Что дальше
Обвязка собрана и поедет с тобой во все проекты трека. Следующий урок про деньги: сколько стоит месяц работы по каждой дорожке и где смотреть настоящий расход.
Итог:
• качество работы агента зависит от обвязки, и первой в ней нужна проверка результата;
• правило, нарушенное дважды, переводи в механизм: запрещающий хук до действия, проверяющий после;
• комплект поставлен, срабатывание проверок ты видел сам;
• выдуманные адреса, утёкшие ключи и пустые отчёты хуки не ловят, это остаётся на твоих глазах.
