Добавить в корзинуПозвонить
Найти в Дзене
Vlad Loop

Мой набор инструментов для AI-кодинга: что работает, а что сожрало нервы

Несколько вечеров назад я подключал к Claude Code очередной MCP-сервер, про который «все пишут». Включил, посмотрел на счётчик контекста, который только что съело шестьдесят описаний tools, и тихо выключил обратно. Сел и впервые честно нарисовал свой стек не как список любимых тулз, а как набор слоёв. Получилось ровно шесть. И оказалось, что у меня дыры не там, где я искал. За полгода плотной работы с AI-кодингом — назовите это vibe coding или harness engineering, смотря кто в разговоре — я понял простую штуку. Инструменты вокруг агента не равноценны. Каждый закрывает свой режим отказа: без «глаз» агент не видит результат в браузере, без «знания» галлюцинирует API годовалой давности, без «наблюдаемости» ты теряешь по полчаса на сессию, потому что забыл, что он уже закончил... Главная идея, ради которой всё это пишется. Стек для AI-кодинга — или, если угодно, для серьёзного vibe coding — это не каталог любимых инструментов, а шесть слоёв обвязки. Если внутри слоя пусто, режим отказа гар
Оглавление

Несколько вечеров назад я подключал к Claude Code очередной MCP-сервер, про который «все пишут». Включил, посмотрел на счётчик контекста, который только что съело шестьдесят описаний tools, и тихо выключил обратно. Сел и впервые честно нарисовал свой стек не как список любимых тулз, а как набор слоёв. Получилось ровно шесть. И оказалось, что у меня дыры не там, где я искал.

За полгода плотной работы с AI-кодингом — назовите это vibe coding или harness engineering, смотря кто в разговоре — я понял простую штуку. Инструменты вокруг агента не равноценны. Каждый закрывает свой режим отказа: без «глаз» агент не видит результат в браузере, без «знания» галлюцинирует API годовалой давности, без «наблюдаемости» ты теряешь по полчаса на сессию, потому что забыл, что он уже закончил...

Шесть слоёв, а не десять серверов

Главная идея, ради которой всё это пишется. Стек для AI-кодинга — или, если угодно, для серьёзного vibe coding — это не каталог любимых инструментов, а шесть слоёв обвязки. Если внутри слоя пусто, режим отказа гарантирован. Если в слое каша из десяти инструментов, начинается деградация качества и токенов.

-2

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

Глаза: чтобы агент увидел, что наделал

Боль очень конкретная. Агент написал фронтенд и понятия не имеет, как оно выглядит в браузере. Кнопки на месте? Лейаут поехал? Текст читается? Без визуальной обратной связи он остаётся слепым исполнителем, а вы превращаетесь в его QA-инженера.

У меня в стеке тут стоит MCP Playwright. Это MCP-сервер, который даёт агенту управлять браузером: открыть страницу, кликнуть, сделать скриншот, прочитать DOM. Самый ценный кейс был на игре, которую я делал на Defold. Агент правил логику доски, после каждого изменения сам открывал страницу, проверял, что фишки на местах и интерактив не пропал. Без Playwright это была бы карусель «поправь, переключись в браузер, опиши, что не так, повтори».

Рядом стоят, и я туда не пошёл: Penpot MCP (открытый аналог Figma), Builder.io Visual Copilot, скриншот-в-код через vision-возможности GPT-4o. И отдельно скажу про Figma MCP. Первое впечатление было «вау»: подключил, агент увидел макет, верстал почти один-в-один. Я уже мечтал о пайплайне «Figma → код → Playwright → итерация без меня». А потом выяснилось, что на бесплатном плане Figma даёт шесть запросов в месяц. Не в день, в месяц. Я выжег лимит за вечер на тестовых прогонах. Урок: перед тем как строить пайплайн вокруг чужого MCP, проверяйте лимиты. Звучит банально, но я узнал это вечером впустую.

Цена слоя: Playwright поднимает полноценный браузер, на 16 гигах RAM это заметно. И главное, агент видит DOM и скриншоты, но «красиво или нет» интерпретировать пока не умеет. Слепое пятно остаётся.

Знание: чтобы агент не галлюцинировал на ровном месте

Боль ровно в двух местах. Первое: агент знает мир до cutoff модели, и новые API ему недоступны. Второе: ваш проект и его конвенции он не знает в принципе. Каждая сессия начинается с чистой памяти.

Я закрываю это сразу несколькими штуками, и они работают вместе. Локальная папка docs/ в проекте с выжимками API ключевых зависимостей: то, что точно понадобится, агент читает напрямую. CLAUDE.md (или AGENTS.md для Codex) с командами проекта, конвенциями и ссылками на эти выжимки. Скиллы под фреймворки: чужие я ищу по запросу «название фреймворка skill for claude code», свои пишу за полчаса, когда готового нет. Так я нашёл скиллы для Phaser и Defold, не идеальные, но дают агенту фору.

Раньше у меня вместо локальных docs/ стоял Context7: MCP-сервер, который подтягивает свежую документацию по запросу. Сейчас он у меня на отходе. Почему: подтягивает не то и часто слишком общие куски. Я хочу контролировать, что именно агент видит. Папка refs/ менее изящна, зато предсказуема. Глобально такая же мысль есть у OpenAI в их разборе harness engineering: длинные дефолтные инструкции превращаются в шум, лучше короткая карта и точные ссылки на знание в репозитории.

И отдельно отмечу инструмент, который тихо переворачивает работу: claude-reflect. Каждый раз, когда я поправляю агента («у нас так не делают», «используй этот паттерн»), коррекция сохраняется. Потом по команде /reflect накопленные правила, с моего одобрения, мигрируют в CLAUDE.md и скиллы. Это система обучения наоборот: не вы учитесь работать с агентом, а агент учится работать с вашим проектом. Я подробно разбирал, как у меня устроена связка Skills, Agents и Commands, сюда не дублирую.

Рядом, но я не использую: .cursorrules, Cline rules, ai-rules, репозиторий чужих скиллов aitmpl.com. Все они про одно: как накопить и переиспользовать «знание о проекте» в формате, который агент читает каждую сессию.

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

Руки: MCP-серверы и оркестраторы

Боль: агент может советовать, но не действовать. Без слоя «рук» он генератор кода, а не участник вашего workflow.

Тут моя главная позиция, и она спорная: свои узкие MCP я предпочитаю готовым жирным. Когда сервер даёт агенту тридцать tools, контекст забивается описаниями инструментов, модель путается в выборе, и качество падает. Я пришёл к этому не из умозрения, а после того как подключил один «популярный» сервер с кучей интеграций, провозился вечер и обнаружил, что агент треть сессии потратил на выбор из пятнадцати похожих инструментов вместо работы. Теперь пишу Python-скрипт или мини-MCP с двумя командами под одну задачу. Дольше на старте, дешевле в работе.

-3

Из готового я в режиме осторожного эксперимента щупаю vibe-kanban (доска задач, распределяет их между несколькими агентами) и Symphony от OpenAI (похожая идея, но под Codex). Звучит как мечта: один агент пилит фронтенд, другой бэкенд, третий тесты. Меня тут смущает одна штука. Эти инструменты запускают агентов без ограничений. Полный доступ к файловой системе, к терминалу, ко всему. Sandbox по умолчанию нет, approve-deny на опасные операции нет. Для пет-проекта на отдельной ветке это ок, для рабочего репо с .env, секретами и CI это лотерея.

-4

В соседней зоне живут Paperclip multi-agent оркестратор на VPS, я с ним уже экспериментировал и обжёгся на 200 миллионах токенов, OmniRoute (AI-гейтвей с маршрутизацией по провайдерам). Каждый чуть под своим углом, но базовая идея одна.

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

Невидимая обвязка: hooks, sub-agents, slash-команды

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

Расскажу по этапам, как у меня этот слой собрался.

Этап 1. Первый хук на auto-format. Простейшая вещь: после каждого изменения файла прогоняется prettier и линтер. Агенту больше не надо помнить, надо ли вызывать форматтер: его вызывает обвязка. Уже на этом шаге количество мусорных правок «поставь точку с запятой» упало в разы.

Этап 2. Скиллы под мой пайплайн. Скилл это шаблон под повторяющуюся задачу: написать новый компонент, сделать ревью PR, оформить миграцию. Внутри скилла прописано, что читать, какому стилю следовать, что проверять. Это уже не разовый промпт, а целый контекст под задачу.

Этап 3. Sub-agents с изолированным контекстом. Лёгкая модель (Haiku) для рутинных проверок, тяжёлая (Opus) для архитектурных решений. Sub-agent работает в своём окне, основное окно остаётся чистым. Это и про качество, и про экономию: основной контекст не пожирается результатами поиска по 200 файлам.

Этап 4. Slash-команды в репо. У меня их сейчас около тридцати. /long-outline, /sync-posts, /reflect, и так далее. Каждая это маленький пайплайн, который я однажды описал словами, а теперь он запускается одной строкой. Один из самых высоких ROI во всём стеке.

Рядом, и я туда не пошёл: Cursor commands, GitHub Copilot extensions. Идея та же, реализация под другую среду.

Тезис, в котором я уверен сильнее всего: модель меняется раз в три месяца, обвязка меняется каждую неделю, и именно она определяет, в каком виде модель до вас доходит.

Наблюдаемость: знать, что агент закончил

Боль внешне мелкая, по факту жрущая много энергии. Отправил агенту задачу на десять минут, переключился, забыл. Возвращаешься через полчаса. Или наоборот, дёргаешься в чат каждые две минуты проверить, не закончил ли.

В моём стеке тут стоит Ghostty. Это современный терминал, в котором нормально работают системные уведомления macOS. Стандартный Terminal.app так не умеет. Звучит как мелочь, по факту экономит кучу ментальной энергии: больше не нужно держать в голове «как там агент».

Поверх Ghostty я ставлю peon-ping: звуковые уведомления через хук Claude Code, разные звуки на завершение, на запрос подтверждения, на длинную задачу. Полезно, когда работаешь в наушниках. Минус один: в опен-спейсе оно может отвлекать, лечится категориями и mute-режимом.

Третья штука нестандартная: я гоняю часть событий в n8n как в простейший логгер. Каждый раз, когда я надиктовываю промпт голосом, в n8n уезжает строчка: сколько слов, какой инструмент, какое время. Через месяц видно, где я реально живу и где у меня дыры.

Рядом, и я туда не пошёл: tmux notifications, Wezterm, телеграм-бот для очень длинных задач. Для домашнего сетапа точно избыточно.

Экономия: токены и память хоста

Объединяю две вещи в один слой, потому что обе про «сколько ресурсов съедает обвязка, чтобы хватило места на полезное».

Сначала про токены. Я долго не думал про них, пока не упёрся в лимиты Claude Code. Типичная сессия за полчаса жрёт около ста тысяч токенов. И большая часть это не ваши промпты, а вывод команд: git status, npm test, логи сборки. Агент честно читает всю эту простыню, хотя ему нужны три строчки из двухсот.

У меня тут стоит RTK, CLI-прокси на Rust, который перехватывает вывод терминальных команд и сжимает его. Установка через rtk init -g, дальше всё работает через хуки прозрачно: вы пишете git status, под капотом выполняется rtk git status с компактным выводом. Цифры по моему опыту: git-операции жмутся примерно на 85%, тесты на 90% (показывает только упавшие, не все пройденные), линтеры и сборка на 80%. В сумме за сессию экономия около 80%. Вместо того чтобы упереться в потолок за час, спокойно работаешь весь день.

-5

Sub-agents из предыдущего слоя тоже сюда: изолированный контекст это экономия по определению.

Теперь про память хоста, потому что RAM тоже бюджет. У Codex есть UI-приложение, у Claude Code тоже. Удобно: мышка, кнопки, мультисессии. Цена: Electron-клиенты заметно жрут память. На моём MacBook с 16 гигами, когда параллельно работают пара агентов, браузер и IDE, каждый лишний процесс на счету. Поэтому я остался на CLI. Если у вас 32+ ГБ, разницы скорее всего не заметите, берите UI спокойно.

-6

Рядом, и я туда не пошёл: ccusage для учёта токенов по локальным логам Claude Code, ручные пайпы и обёртки под шумные команды.

Тезис: каждый сэкономленный токен это место для полезного контекста. Каждый сэкономленный гигабайт это место для второго агента.

Где это не работает

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

Обвязка устаревает. Тот же CLAUDE.md, который вы написали полгода назад, сегодня может направлять агента по старой архитектуре. Хуже, чем его отсутствие. Я живу с этим: примерно раз в месяц прохожусь по обвязке и выкидываю то, что больше не правда.

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

Модель всё равно может сломать что угодно. Шесть слоёв снижают вероятность, не отменяют её. Я до сих пор читаю каждый PR от агента глазами. Просто PR-ы стали меньше и чище.

Минимальный стек: с чего начать

Если вы сейчас работаете с голым AI-кодером и хотите закрыть слои самым дешёвым способом, вот мой минимум по одному пункту на слой:

  1. Глаза: MCP Playwright. Один сервер, одна история «агент сам открыл свою же страницу».
  2. Знание: CLAUDE.md на одну страницу + папка docs/ с тремя ключевыми API. MCP-доки на старте не нужны.
  3. Руки: ваши узкие скрипты или один MCP под конкретную задачу. Не «подключим всё». В оркестраторы лезть только из-под DevContainer.
  4. Невидимая обвязка: один хук на форматирование и один на уведомление. Этого достаточно, чтобы почувствовать слой.
  5. Наблюдаемость: терминал с системными уведомлениями. Ghostty, Wezterm, что угодно, лишь бы уведомление прилетало.
  6. Экономия: RTK или аналог. Если RAM меньше 32 ГБ, оставайтесь на CLI.

Бонусом, не слой, но без него мой день длиннее на пару часов: voice-to-text для длинных промптов. Я переключаюсь по кругу между Wispr Flow и Handy, потому что у каждого свой лимит, и наговорил так около сорока тысяч слов. Подробнее как я перешёл с печати на голос, какой стек собрал и что меня в нём держит. Если коротко: промпты для агентов часто длинные, голосом выходит и быстрее, и живее, канцелярщина уходит, и агент лучше понимает естественный язык.

А у вас какой из шести слоёв сейчас самый дырявый? И есть ли инструмент, который вы поставили только потому, что «все ставят», а пользы так и не увидели? Делитесь в комментариях, мне правда интересно посмотреть на чужие карты.