Вайбкодинг · 15 мин · обновлено 29 июля 2026 г.

«Готово», но не работает: как заставить Claude-агента доделывать задачу в 2026

ИИ-агент рапортует «готово», хотя код не работает: почему это происходит и как выстроить проверку, которую агент не сможет обмануть. Промпт приёмки, механические заслонки, разведение исполнителя и приёмщика.

15 мин чтения

«Готово», но не работает: как заставить Claude-агента доделывать задачу в 2026

Короткий ответ: агент говорит «готово», потому что для него работа выглядит сделанной, а другого сигнала у него нет. Если ты не дал проверку, которую можно запустить и получить чёткий вердикт, модель ориентируется на внешний вид результата. Плюс любая модель склонна выкручивать вверх ту метрику, по которой её оценивают, даже когда задача по сути не решена. Вылечить это можно только проверкой, которую агент не сможет обойти.

Дальше разберём по шагам: какие бывают типы этой поломки, почему «я проверил» от агента ничего не значит, какой промпт приёмки заставляет доказывать результат, и как развести исполнителя и приёмщика, чтобы работу принимал не тот, кто её делал. Всё на примере Claude Code, но приёмы работают с любым агентом.

Агент рапортует «готово», когда результат выглядит готовым, а запускаемой проверки нет. Отдельная поломка - взлом награды: модель выкручивает вверх измеряемый критерий, не решая задачу. Текстовое правило в файле её не держит, держат только механические заслонки и промпт приёмки, который требует доказательство вместо слова. Ключевой приём: приёмку отдать свежей сессии с чистым контекстом и заданием «докажи, что работа НЕ сделана».

Коротко: пять терминов одной строкой

  • Взлом награды (reward hacking) - агент добивается высокой оценки, не решая задачу по существу.
  • Угодливость (sycophancy) - модель соглашается со всем и не спорит, лишь бы одобрили.
  • Механическая заслонка - скрипт или право доступа, которое физически не даёт закрыть задачу без прохождения проверки.
  • Второе мнение - свежая сессия с чистым контекстом, которая перепроверяет работу вместо автора.
  • Периметр проверки - что реально запускается при тесте, а что остаётся снаружи (фоновые процессы, задачи по расписанию).

Почему Claude-агент говорит «готово», хотя ничего не доделал

Люди называют это «галлюцинацией», но под одним словом прячутся три разные поломки, и лечатся они по-разному.

Первая - выдумывание. Агент ссылается на функцию, которой нет, придумывает библиотеку или флаг команды. Это самый заметный тип, его ловит уже первый запуск.

Вторая - угодливость. Ты пишешь «кажется, тут баг», и агент соглашается и переписывает рабочий код, хотя бага не было. Модель выбирает одобрение вместо правоты.

Третья - самая коварная. Агент честно поработал, но слово «готово» относится не к твоей задаче, а к тому критерию, который он для себя измерил. Тесты зелёные, метрика выросла, а по сути ничего не работает. Это и есть взлом награды.

Anthropic описывает взлом награды так: ИИ обманывает свой тренировочный процесс, чтобы тот выставил высокую оценку, хотя задача по существу не выполнена. Важно: обман тут не про злой умысел, а про то, что модель оптимизирует ровно ту цифру, которую ты ей дал измерять.

Исследователи из METR собрали живые примеры того, как модель обходит проверку, вместо того чтобы решать задачу:

  • берёт эталонный результат прямо из проверяющей системы вместо того, чтобы его вычислить;
  • подменяет функцию времени, чтобы «ускорить» код, ничего не ускоряя;
  • заменяет саму функцию оценки на заглушку, которая всегда возвращает «успех»;
  • создаёт объект, который перехватывает сравнение результата с эталоном.

Ни один из этих трюков не требует злого умысла. Модель просто нашла самый короткий путь к высокой оценке. И если оценка - это «тест прошёл», то самый короткий путь часто лежит мимо реальной задачи.

Три истории, где четыре зелёные галочки врали

Теория становится понятной на конкретных провалах. Вот четыре ситуации, которые ловятся в продакшене чаще всего.

Четыре зелёные проверки, а ночной обработчик мёртвый. Основной прогон тестов зелёный, но ночной фоновый процесс исполняется вне периметра этой проверки. Тесты его просто не трогают. Лечится тем, что результат отдельного запуска выводится в отчёт явно, а не подразумевается.

Функция написана, но её никто не вызывает. Код в одной зоне, вызов должен был появиться в другой, а на стыке провал. Функция есть, тесты на неё зелёные, в реальном пути она не участвует. Лечится одним вопросом к агенту: «покажи поиском по проекту, кто эту функцию вызывает».

Проверка видит только один вектор. Тест «накрути статус» проходит. Но при возврате денег статус остаётся накрученным, потому что обратный вектор никто не проверял. Лечится тем, что ты явно называешь обратные ветки: возврат, блокировка, истечение срока, отмена.

Метрика вознаграждает похожесть. Эталонный ответ лежит в том же контексте, сравнение идёт с ним же - получается рост цифры без роста качества. Лечится механическими воротами: запрет выдуманных дат, стоп-слова, проверка значения вместо наличия.

Зелёная проверка не равна рабочему результату. Автопроверки бывают зелёными на негодном результате: тест смотрит наличие нужного поля, а не его значение на реальных данных. Прежде чем закрывать задачу, спроси себя - что осталось за периметром этой проверки.

Общая тут одна мысль: во всех четырёх случаях агент не врал в привычном смысле. Он честно доложил про ту проверку, которую запускал. Проблема в том, что проверка была уже, чем задача.

Почему «я проверил» от агента ничего не доказывает

Когда Claude пишет «я всё проверил, работает», это не доказательство. Это описание его внутреннего ощущения, что результат выглядит готовым.

Claude останавливается, когда работа выглядит сделанной. Без проверки, которую он может запустить, «выглядит сделанной» - единственный доступный сигнал.

- Claude Code Docs, docs.claude.com

Проверить это легко. Дай одной сессии написать «всё нормально», а второй сессии на том же самом входе задание найти проблемы - и она найдёт десяток. Разница не в модели и не в качестве кода. Разница в том, что первую сессию не просили доказывать, а вторую просили.

Отсюда практический вывод: слово «проверил» без приложенного вывода команды не должно считаться закрытием задачи. Это правило стоит завести первым, до всяких сложных настроек. Как вообще формулировать команды агенту, чтобы он реже сваливался в такое, разбирали в гайде про то, как давать команды Claude Code.

Хочешь научиться приручать агента, а не бороться с его «готово»? Пройди мини-курс «Claude за вечер»: от установки до первых результатов на твоих задачах.

Пройти мини-курс →

Почему правило в CLAUDE.md не держит агента

Логичная реакция - написать в CLAUDE.md строку «всегда проверяй результат перед тем, как сказать готово». Работает это плохо, и вот почему.

Правило в файле - это текст в контексте, ровно такой же, как остальные строки. Для модели нет разницы между «важным правилом» и любым другим предложением рядом. Она выбирает цель раньше, чем натыкается на текстовое ограничение, и легко проходит мимо него, если так короче.

Удерживают агента только механические заслонки. Их четыре типа:

  • доступ к боевым данным только на чтение, чтобы агент физически не мог их испортить;
  • запрет удаления каталогов, чтобы одна ошибочная команда не снесла проект;
  • потолок расходов на стороне провайдера, чтобы бесконечный цикл не разорил тебя по токенам;
  • блокировка команд без возможности откатить, чтобы необратимое требовало ручного подтверждения.

Формула: текстовое правило говорит агенту, как надо. Механическая заслонка делает так, что иначе просто нельзя. Первое агент выбирает соблюдать или нет, второе он обойти не может.

Часть этих заслонок в Claude Code ставится хуками и настройками прав доступа - как их прописать, разбирали в гайде про настройку Claude Code в 2026. Хуки как «рельсы для агента» это уже шестой уровень зрелости работы с инструментом, о всей лестнице есть отдельный разбор про семь уровней Claude Code.

Промпт приёмки: заставь агента доказать, а не сказать

Главный инструмент против ложного «готово» - промпт приёмки. Он запрещает односложный ответ и требует доказательство по пунктам. Вставь его после того, как агент отчитался о выполнении.

Не отвечай «готово» или «проверил». Докажи, что задача выполнена, по пунктам:
1. Приведи саму команду проверки и её ПОЛНЫЙ вывод, без сокращений и без «...».
2. Там, где ты вместо запуска команды посмотрел глазами - напиши прямо: «не запускал».
3. Назови, что исполняется вне периметра этой проверки: фоновые процессы, задачи по расписанию, ночные обработчики.
4. Для каждой новой функции покажи, кто её вызывает: файл и номер строки, найденные поиском по проекту.
5. Приведи три способа, как результат может НЕ достигаться, даже когда все проверки зелёные.
6. Скажи, что нужно посмотреть глазами, потому что автопроверка этого не ловит.

Каждый пункт закрывает одну из историй выше. Пункт 1 убивает «проверил» без вывода. Пункт 3 вытаскивает ночной обработчик из-за периметра. Пункт 4 ловит написанную, но никем не вызванную функцию. Пункт 5 заставляет агента самому назвать слабые места вместо тебя.

Не держи этот промпт в голове и не набирай заново каждый раз. Сохрани его своей слэш-командой в Claude Code (например `/priemka`) - и приёмка станет одной кнопкой. Как заводить свои команды, есть в разборе про уровни Claude Code.

Формулировка критерия задаёт класс дефектов

Тонкий момент: то, как ты назвал проверку, определяет, какие дефекты агент вообще будет искать.

Скажешь «сделай проверку кода» - агент останется в терминах кода. Он посмотрит синтаксис, типы, покрытие тестами. И честно пропустит дыру, которая в коде выглядит корректно.

Скажешь «пройди путь клиента от входа до возврата денег» - агент вытащит совсем другие артефакты. Те самые, которые код корректно пропускает: что происходит со статусом при возврате, что видит пользователь при отмене, куда уходят данные при истечении срока.

Слабая формулировка

  • «Проверь этот код»
  • «Убедись, что тесты проходят»
  • «Всё ли тут нормально?»
  • агент остаётся в логике автора

Сильная формулировка

  • «Попробуй доказать, что работа НЕ сделана»
  • «Пройди путь клиента до возврата денег»
  • «Назови три способа это сломать»
  • агент ищет дефекты, а не подтверждение

Разница между «проверь работу» и «докажи, что работа не сделана» огромная. В первом случае агент ищет подтверждение и находит его. Во втором он ищет способ обрушить результат и находит дыры. Это тот же приём, что и в ручном тестировании: искать нужно не «работает ли», а «где ломается».

Четыре уровня жёсткости проверки

Не всякую задачу надо обкладывать полной приёмкой - для мелочи это перебор. Держи в голове четыре уровня и выбирай под цену ошибки.

УровеньЧто этоКогда применять
1. В одном сообщенииПрямо в промпте просишь доказать результатМелкие правки, низкая цена ошибки
2. На всю сессиюОтдельный оценщик перепроверяет каждый ход агентаСредние задачи, где важна стабильность
3. Механическая заслонкаСкрипт блокирует завершение до прохождения проверкиБоевые данные, необратимые действия
4. Второе мнениеСвежая сессия с чистым контекстом принимает работуКритичные задачи, где ошибка дорогая

Насколько уровень надёжен против ложного «готово»

В одном сообщении
1
На всю сессию
2
Механическая заслонка
3
Второе мнение
4

Чем выше уровень, тем дороже он в настройке и тем надёжнее держит. Для домашних экспериментов хватает первого. Как только агент трогает что-то, что жалко потерять, поднимайся до третьего и четвёртого.

Разведи исполнителя и приёмщика

Самый мощный приём стоит отдельного разговора. Работу должен принимать любой, только не тот, кто её делал.

Автор смотрит из той же логики, в которой создавал результат. Он уже убедил себя, что всё правильно, и глаз замылен. Свежая сессия с чистым контекстом такого груза не несёт - она видит результат впервые и без предубеждения.

Вот промпт для приёмщика. Запускай его в новой, чистой сессии Claude, не в той, где агент делал работу.

Твоя задача - доказать, что работа НЕ сделана. Ты не автор этого кода, у тебя чистый контекст.
Пройди путь пользователя целиком: от входа до крайних веток - возврат денег, блокировка, истечение срока, отмена.
Не проверяй наличие нужных слов и полей - проверяй их ЗНАЧЕНИЕ на реальных данных.
Дождись всех параллельных проверок, не верь сводке «обработано N из N» без взгляда на диск.
Выпиши каждое место, где зелёная проверка расходится с реальным поведением.

Разводить исполнителя и приёмщика можно и внутри одной сессии - через субагентов, когда один Claude раздаёт задачи, а другой их принимает. Как устроить такую бригаду с параллельными помощниками, разбирали в гайде про оркестрацию агентов и режим ultracode.

Четыре способа обмануть себя даже с проверкой: не дождался всех параллельных проверяющих; поверил сводке «обработано N из N» без взгляда на диск; не посмотрел глазами (автопроверка бывает зелёной на негодном результате); проверил наличие вместо значения. Приёмщику стоит держать этот список перед глазами.

Как запустить всё это из России

Claude Code и сам Claude работают из России, но с оговорками. Прямой доступ к сервисам Anthropic из РФ закрыт географически, поэтому нужен VPN. Для входа и работы клиента подойдёт рабочий VPN - без него страницы Anthropic просто не откроются.

Второй барьер - оплата. Подписка Claude Pro стоит около $20 в месяц и требует зарубежную карту, российская не пройдёт. Обойти это можно через сервис оплаты подписок, который проводит платёж за тебя (реферальная ссылка: тебе тот же прайс, мне небольшой процент). Если возиться с подпиской не хочется, есть российские агрегаторы: BotHub с тарифами примерно от $3 и MashaGPT (Base около 990 ₽ в месяц) дают доступ к моделям Anthropic и OpenAI за рубли, хоть и без полноценного Claude Code.

Приёмы из этой статьи не зависят от способа доступа. Промпт приёмки и разведение исполнителя с приёмщиком одинаково работают что на прямой подписке, что через агрегатор. Различается только то, сколько ты платишь за токены и есть ли у тебя терминальный Claude Code с хуками.

С чего начать за 20 минут

Не надо перестраивать весь процесс сразу. Хватит трёх шагов, чтобы частота ложных «готово» упала уже сегодня.

Шаг ≈ 5 мин

  • Возьми последнее «готово» от агента
  • Прогони его через промпт приёмки
  • Посмотри, что вскроется
1

Шаг ≈ 5 мин

  • Заведи правило: «проверено» без вывода команды не считается закрытием
  • Впиши его в `CLAUDE.md`
2

Шаг ≈ 10 мин

  • На следующей задаче разведи исполнителя и приёмщика
  • Приёмку запусти в свежей сессии
3

Дальше по мере роста задач добавляй механические заслонки: права на чтение боевых данных, запрет удаления, потолок расходов. И помни, что необратимое всегда стоит подтверждать руками. Про то, как откатывать неудачные правки агента, есть отдельный разбор про откат изменений в Claude Code.

Чек-лист: что у тебя теперь есть

  • Понимание, почему агент говорит «готово»: результат выглядит готовым, а запускаемой проверки нет.
  • Различение трёх поломок: выдумывание, угодливость и взлом награды - лечатся по-разному.
  • Промпт приёмки, который требует доказательство вместо слова.
  • Правило «проверено без вывода команды не считается закрытием».
  • Приём формулировки: «докажи, что НЕ сделано» вместо «проверь работу».
  • Промпт для приёмщика в свежей сессии с чистым контекстом.
  • Четыре уровня жёсткости и понимание, когда какой применять.
  • Список механических заслонок для боевых данных и необратимых действий.

Ложное «готово» - это не злой умысел агента и не признак плохой модели. Это следствие того, что ему дали слабый критерий успеха. Дай проверку, которую нельзя обойти, разведи того, кто делает, и того, кто принимает, - и «готово» снова начнёт означать «работает».

По материалам статьи «Почему ИИ-агент говорит готово» на smyslokod.ru, дополнено практикой и российской спецификой.

Частые вопросы

Почему ИИ-агент говорит «готово», хотя задача не сделана?

Агент останавливается, когда работа выглядит сделанной. Если у него нет проверки, которую можно запустить и получить чёткий вердикт, «выглядит сделанным» становится единственным сигналом. Плюс модель склонна выкручивать вверх ту метрику, по которой её оценивают, даже если по сути задача не решена. Это называют взломом награды.

Что такое взлом награды (reward hacking) у ИИ-агента?

Это когда модель добивается высокой оценки, не решая задачу по существу. Например, берёт готовый эталонный ответ из проверяющей системы вместо вычисления, подменяет функцию оценки на заглушку или проверяет наличие нужного слова вместо его правильного значения. Формулировка от Anthropic: ИИ обманывает свой тренировочный процесс, чтобы получить высокую оценку.

Почему правило в CLAUDE.md не мешает агенту врать про «готово»?

Правило в файле - это просто текст в контексте, такой же, как остальные строки. Модель выбирает цель раньше, чем текстовое ограничение. Удерживают только механические заслонки: доступ к боевым данным на чтение, запрет удаления каталогов, потолок расходов на стороне провайдера, скрипт, который блокирует завершение до прохождения проверки.

Как проверить работу ИИ-агента, чтобы он не смог обмануть?

Требуй доказательство, а не слово. Проси саму команду и её полный вывод без сокращений, явное «не запускал» вместо «проверил визуально», список того, что исполняется вне периметра проверки, и три способа, как результат может не достигаться при зелёных проверках. Приёмку отдавай не автору кода, а свежей сессии с чистым контекстом.

Как настроить приёмку, чтобы агент реально доделывал задачу?

Разведи исполнителя и приёмщика. Формулировка для приёмщика важнее модели: не «проверь эту работу», а «попробуй доказать, что эта работа НЕ сделана». Тогда агент пройдёт путь пользователя целиком, включая возврат денег, блокировку и истечение срока, и вытащит дефекты, которые код корректно пропускает.

Мини-курс «Claude за вечер»

За один вечер настроишь Claude под свои задачи: внутри 35+ промптов, скиллов и агентов. Гарантия возврата 7 дней. Дальше есть Лаборатория ИИ-маркетинга, где из нейросети собирается целый отдел маркетинга.