Зависимости — это не библиотека, это долг с процентами
Cursor и Claude в 2026-м пишут код быстрее, чем вы успеваете читать `package.json`. Попросили компонент — модель молча притащила три пакета для форматирования дат, две утилиты для стейт-менеджмента и валидатор, который дублирует уже стоящий у вас zod. Работает? Да. Раздувает бандл и площадь атаки? Тоже да.
Практика, которая реально экономит нервы: перед тем как принять диф с новым `import`, задайте себе три вопроса.
- Эта штука уже есть в проекте под другим именем?
- Она весит больше, чем экономит строк кода?
- У неё есть внятный мейнтейнер и обновления за последний год?
Если хотя бы на один ответ «нет» — просите модель переписать без новой зависимости. Обычно она справляется, просто по умолчанию идёт по пути наименьшего сопротивления и тащит первое, что видела в обучающих данных.
Отдельный ритуал раз в неделю (или перед релизом): `npm outdated` / `pnpm outdated` и беглый взгляд на CVE через `npm audit`. Это пять минут, которые дешевле, чем разбор инцидента постфактум.
Ревью ИИ-кода: читайте диф, а не результат
Главная ловушка вайб-кодинга — тестировать глазами вместо тестирования кодом. Кнопка нажалась, страница открылась — значит, всё ок. Нет, не значит. ИИ-код одинаково уверенно пишет и рабочее решение, и рабочее решение с дырой в авторизации.
Что реально ловит проблемы:
- **Диф целиком, а не «итог».** Просите модель показать план изменений до применения — в Cursor это отдельная панель, в Claude Code — обычный `git diff` перед коммитом. Бегло скроллить нельзя, это создаёт иллюзию контроля.
- **Отдельный проход на "что здесь лишнего".** ИИ склонен добавлять defensive-код, try/catch на всё подряд, лишние абстракции "на будущее". Спросите вторую модель или второй промпт: «что можно выкинуть без потери функциональности».
- **Тесты пишет не тот агент, что писал код.** Если один и тот же контекст генерирует фичу и тесты к ней, тесты будут проверять то, что код и так делает — включая баги. Разделяйте сессии или явно просите «напиши тест, который сломает наивную реализацию».
- **Секреты и права доступа — руками.** Ни одна модель пока не обязана держать в голове вашу модель угроз. Ключи API, RLS-политики в базе, CORS — это зона, где «выглядит нормально» не аргумент.
Порядка трети критичных багов в vibe-coding проектах, по опыту команды, — это не логические ошибки, а «код технически верный, но не в контексте вашей системы»: неправильная таблица, устаревший эндпоинт, забытый rate-limit.
Дисциплина: три правила, которые дешевле лечить, чем чинить
**Не давайте агенту доступ шире задачи.** Если просите поправить кнопку — не давайте разрешение трогать миграции базы данных. Разграничение прав в Claude Code и подобных инструментах существует не для галочки: агент, у которого есть возможность запустить `rm -rf` или задеплоить, рано или поздно этой возможностью воспользуется по неверно понятому промпту.
**Коммитьте часто и маленькими шагами.** Один гигантский промпт «сделай мне личный кабинет» превращается в диф на полторы тысячи строк, который никто не читает целиком — а значит, никто и не ревьюит. Дробите задачу на шаги, коммитьте после каждого рабочего кусочка. Откат тогда стоит секунды, а не вечера.
**Ведите файл с контекстом проекта.** CLAUDE.md, `.cursorrules` или их аналог — это не бюрократия, а способ не объяснять заново на каждой сессии, что у вас в проекте своя система авторизации и своя структура папок. Без этого модель каждый раз изобретает архитектуру заново, и зависимости множатся именно на стыках несовместимых решений.
Чек-лист перед тем как слить в main
- Диф прочитан целиком, а не только тестами кликнут
- Новые зависимости прошли три вопроса выше
- `npm audit` / `pnpm audit` без критичных находок
- Секреты не попали в код и в историю коммитов
- Тесты писались не тем же промптом, что фича
- Права агента на сессию соответствовали задаче, а не «на всякий случай пошире»
Вайб-кодинг не про то, чтобы меньше думать — про то, чтобы думать в других местах. Модель отлично печатает; решения о том, что печатать и зачем, по-прежнему ваши.




