Гайды

Почему ИИ-агент правит не тот файл — три причины и как проверить каждую

Иллюстрация: две одинаковые папки, правка ушла не в ту

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

Агент не соврал. Он честно отредактировал файл. Просто не тот.

Хорошая новость: причин, по которым это происходит, всего три, и каждая проверяется за минуту. Начнём с самой частой.

Причина 1: он работает не в той папке

Агент правит файл по пути src/ui/Button.tsx. Ты смотришь в свой src/ui/Button.tsx. Пути совпали, а файлы разные — потому что корень у вас разный.

Так бывает чаще, чем кажется: агент запущен из подпапки или из другого каталога; ты открыл второй клон проекта для эксперимента; или работаешь через git worktree, и агент сидит в соседнем дереве, где ветка другая.

Как проверить. Попроси его показать, где он находится и на какой ветке:

pwd && git branch --show-current

Сравни с тем, что открыто у тебя в редакторе. И ещё: требуй от агента абсолютные пути в отчёте — /home/me/shop/src/ui/Button.tsx вместо «изменил Button.tsx». Половина таких загадок раскрывается прямо на этой строчке.

Как починить. Запускай агента из корня проекта. Если параллельно работают несколько — каждому своя рабочая папка, а не общая. И проверяй ветку перед правкой: файл может быть правильный, а ветка — не та, с которой ты собираешь.

Причина 2: в проекте живёт файл-двойник

Вторая по частоте и самая коварная. В репозитории два файла с одинаковым именем:

  • src/components/Button.tsx и src/legacy/Button.tsx;
  • копия страницы, оставшаяся после рефакторинга;
  • utils.ts в четырёх местах;
  • компонент и его же «старая версия», которую забыли удалить.

Агент ищет по имени, находит первое совпадение — и уверенно правит его. Логика у него та же, что у тебя при поиске в редакторе: совпало имя — значит, тот самый.

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

git ls-files | grep -i button

Если строк больше одной — ты нашёл причину. Дальше выясни, какой файл реально попадает в сборку: посмотри, что импортируется в том месте, где кнопка показывается на экране.

Как починить. Давай точный путь прямо в просьбе: не «поправь кнопку», а «поправь src/components/Button.tsx». Мёртвые копии удаляй — они путают не только агента. Если старый код пока нужен, скажи об этом в правилах проекта: «файлы в src/legacy/ не трогать».

Причина 3: он правит сгенерированный файл

Тут правка действительно уходит в тот файл, который ты смотришь — и всё равно исчезает. Потому что этот файл делает не человек, а сборщик.

Типичные жертвы: всё внутри dist/, build/, out/; скомпилированный CSS; клиент API, сгенерированный по схеме; конфиги проектов, которые собираются генератором. Ты видишь изменение, запускаешь сборку — и файл перезаписывается исходной версией.

Как проверить. Два быстрых признака: файл перечислен в .gitignore (значит, он продукт, а не источник) и в его шапке стоит что-то вроде «autogenerated — do not edit».

Как починить. Правь источник: шаблон, схему, конфиг генератора — то, из чего файл собирается. И скажи агенту прямо: «dist/ не трогай, это сборка». Сам по себе он такую границу не чувствует — для него текст есть текст.

Быстрый чеклист на минуту

Прежде чем спорить с агентом, пройди сверху вниз:

  1. Он в той же папке и на той же ветке, что и ты?
  2. Файл с таким именем в проекте один?
  3. Этот файл — источник или результат сборки?
  4. Ты перезапустил сервер или собрал проект заново после правки?

Три из четырёх случаев закрываются здесь. Остальное — уже обычная отладка вместе с ИИ.

Почему агент не проверяет это сам?

Потому что он видит файловую систему, а не твои намерения. Файл с подходящим именем существует, права на запись есть, правка применилась — с его точки зрения задача выполнена. Он не знает, что у тебя в редакторе открыт другой каталог. Это один из системных источников ошибок в коде от ИИ: формально верное действие не в том месте.

Как сделать, чтобы это не повторялось?

Приучи себя к двум привычкам. Первая: просить показывать абсолютные пути изменённых файлов — тогда ошибка видна сразу, а не через полчаса. Вторая: заканчивать правку проверкой результата, а не отчётом — «покажи, что изменилось» или git diff. Отчёт врёт не потому, что агент хитрый, а потому что он отчитывается о своём действии, а не о твоём результате.

Он говорит «файл не найден», хотя файл есть

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

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →