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

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

В этой статье разберу архитектуру целиком: из чего она собрана, почему именно так, и где проходят границы, за которые я агентам выходить не даю. В качестве подопытного — мой pet-проект, обычный Telegram-бот на Go (MongoDB, Kubernetes). Что именно он делает — выходит за рамки статьи; важно, что это работающий продакшен с реальными пользователями, а не песочница.

TL;DR

  • Связка «команда + саб-агенты» индивидуальна для каждого проекта. Универсальных агентов не бывает — под каждый проект своя команда-точка входа и свои саб-агенты с коротким контекстом под этот проект. Именно индивидуальность связки даёт скорость и качество.

  • MCP — это руки и глаза агента. Через них он управляет базой (MongoDB), инфраструктурой (Kubernetes, DigitalOcean), статусом деплоя и созданием задач в GitHub — по максимуму, без ручных операций.

  • Этап планирования обязателен. Product-агент не бросается кодить — сначала задаёт уточняющие вопросы и проектирует фичу, как живой коллега.

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

  • Прозрачный контроль через код-ревью. Каждый PR ревьюит человек: агент открывает PR в dev и останавливается, не мержит. Без ревью это не AI-команда, а лотерея.

  • Claude Code крутится на VPS, а не локально. Длинные задачи идут в фоне, не зависят от ноутбука и интернета; довести фичу до прода можно хоть с телефона по SSH.

Моделируем человеческую команду

Ключевая разница между рабочим сетапом и бездумным vibe-coding'ом — не в модели и не в количестве MCP-серверов. Она в том, что система повторяет процессы реальной IT-команды.

Есть продуктовая постановка задачи, есть декомпозиция на тикеты, есть pull request, ревью, деплой через dev в prod. Это тот самый нормальный человеческий пайплайн который мы будем воспроизводить.

В центре — Claude Code, запущенный на сервере. Он держит основной контекст и дирижирует. Вокруг — слой саб-агентов с чёткими ролями. И слой MCP-серверов — адаптеров, через которые агенты ходят во внешние системы.

Универсальных агентов не существует — связка делается под каждый проект

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

Правильный подход — под каждый проект собирать отдельную связку «команда + саб-агенты». Под «командой» я имею в виду команду в терминах Claude Code — ту самую /-команду (у меня это /f), которая инжектит в системный промпт список саб-агентов и контекст конкретного проекта: имя базы, namespace, структуру репозиториев, правила. И под этот же проект — свои саб-агенты, у которых контекст короткий, эффективный и не засорён общими фразами — только то, что относится к этому проекту.

Вся эта связка (команда-точка входа плюс набор саб-агентов) должна быть индивидуальной для каждого проекта. Не «один набор на всё», а своя под каждый репозиторий/продукт. Именно поэтому оно работает быстро, эффективно и качественно: агент не тратит контекст на разбор «а к какому из пяти моих проектов это относится» — он сразу в нужном контексте.

Саб-агенты: три роли, не лезущие в чужую зону

У меня три саб-агента, и каждый знает только свою область:

  • product — превращает мою формулировку в продуктовые требования, задаёт уточняющие вопросы, режет фичу на подзадачи и создаёт тикеты в GitHub. Кода не пишет.

  • backend — пишет Go-код. Telegram webhook, бизнес-логика, MongoDB. Работает только в одном репозитории приложения.

  • devops — Kubernetes, конфиги, секреты. В бизнес-логику не лезет.

Технически и команды (вроде моей точки входа /f), и саб-агенты — это обычные markdown-файлы. Разница в том, что в них попадает.

Команда /f подмешивает перед моим запросом большой системный промпт: «ты работаешь над таким-то проектом, вот доступные саб-агенты, вот имя базы, вот namespace в Kubernetes, вот контекст». Это основной контекст выполнения. А саб-агенты — отдельные markdown-файлы, и им на вход уходит не вся переписка, а только конкретная задача.

Это и есть главный приём против деградации на длинных задачах. Контекст идёт «водопадом»: в product заходит полный системный промпт, на выходе он создаёт GitHub-issue с самодостаточной постановкой, и уже эта issue (а не вся история чата) уезжает в backend или devops. Контекст не засоряется, не нужно дёргать /compact, чтобы его сжать, и агенты остаются вменяемыми даже на сложных фичах.

MCP: руки и глаза агентов в реальной инфраструктуре

Без MCP-серверов LLM — это просто умный собеседник. Чтобы он мог что-то делать в реальном мире, под каждую внешнюю систему нужен адаптер. У меня их семь:

  • GitHub — агент сам открывает и закрывает issue, создаёт pull request'ы, управляет доской.

  • Kubernetes — смотрит поды, читает логи, может рестартнуть деплоймент и проверить, что выкат докатился.

  • MongoDB — заглядывает в базу напрямую запросом, а не глазами через mongo-shell: есть ли запись, корректны ли данные.

  • DigitalOcean — инфраструктура, DNS и прочее.

  • Serena — навигация по коду через синтаксическое дерево, а не grep. «Найди все вызовы такой-то функции» — точный список за секунду.

  • Sequential Thinking — заставляет агента «подумать вслух» перед действием: он прогоняет промпт через несколько итераций рассуждения, расширяет его на edge-кейсы. Меньше галлюцинаций, осмысленнее решения.

  • Context7 — свежая документация по библиотекам и API. Я не даю агенту угадывать сигнатуры — заставляю свериться с актуальными доками.

Без MCP это умный чат. С MCP — это руки и глаза AI в твоей инфраструктуре.

Pipeline по этапам

Пройдёмся по живому циклу на примере добавления простой фичи.

1. Планирование

Я формулирую задачу и кидаю промпт через /f. General-purpose агент понимает, что это новая фича, и зовёт product-агента. И вот тут важная деталь, которую обычно пропускают: product не бросается кодить. Он ведёт себя как нормальный коллега — задаёт уточняющие вопросы по объёму и поведению.

image.png
image.png

Я отвечаю, он итерируется. Это и отличает AI-команду от просто LLM — продуктовая проработка до того, как тронут код.

2. Постановка задач

Когда требования ясны, product создаёт эпик в отдельном репозитории с продуктовыми требованиями (без кода) и режет его на подзадачи. У каждой подзадачи:

  • ссылка на родительский эпик через GitHub Sub-issues;

  • метка исполнителя — [backend] или [devops];

  • готовый ready-to-run промпт прямо в теле задачи: что делать, где файлы, как тестировать, по какому маршруту PR;

  • статус Backlog на доске GitHub Projects.

Зачем класть промпт прямо в issue? Чтобы саб-агент брал задачу и работал по ней, не таща за собой основной контекст. Дирижёр остаётся чистым, вся специфика — в тикете.

И вообще — зачем создавать таски в GitHub, если можно просто кинуть промпт в чат? Во-первых, так агент может продолжить работу, даже если прервался или застрял на середине. Во-вторых, появляется хранилище: можно строить отчёты, что и за какой срок было сделано. По сути мы моделируем рабочий процесс живой команды, только в автоматическом режиме.

3. Выполнение

Когда план готов, я пишу «да, начинай». Дальше руками ничего не запускаю — основной контекст сам разбирает план, видит порядок подзадач и метки исполнителей и спавнит нужного саб-агента. Сначала backend, потом, если надо, devops.

Про многозадачность одна оговорка: в рамках одной продуктовой задачи всё происходит в одном окне контекста — там и product, и backend, и devops. Я не открываю их руками по вкладкам. Несколько окон (через Claude Squad) я держу только когда веду параллельно разные продуктовые таски. Внутри одной фичи — один контекст.

4. Код ревью

Каждый PR ревьюит человек. Не AI-ревьюер, не автоматика — я лично. Агент пишет код, гоняет сборку и тесты, открывает PR в ветку dev и останавливается. Не мержит. Ждёт меня.

PR можно глянуть хоть с телефона. Если что-то странное — оставляю комментарий, агент перепишет. Если ок — апрув, агент мержит.

Смысл ревью не в синтаксисе — современная модель почти не делает синтаксических ошибок. Смысл в бизнес-логике. Чем больше у агента самостоятельности, тем дороже его ошибка, и ручное ревью — это страховка, которая делает весь pipeline предсказуемым. Без ревью это уже не AI-команда, а лотерея. Особенно для проектов с чувствительным продакшеном.

5. Деплой

Flow двухступенчатый:

  1. merge в dev → автоматический деплой через GitHub Actions в отдельный namespace dev (свой тестовый бот, своя база);

  2. я проверяю фичу руками через UI на dev-окружении;

  3. PR из той же ветки в main → снова ревью → merge → деплой на прод.

Почему Kubernetes — не потому что «лучший выбор», а потому что у меня уже есть Kubernetes кластер, и в моей конфигурации это дешевле, чем managed-платформы. Если аппетита к k8s нет — тот же pipeline собирается на managed-решениях, MCP под них тоже есть. На деплое Kubernetes MCP даёт агенту возможность самому проверить статус выката и логи, а MongoDB MCP — данные в базе.

Если бы задача была сложной и что-то не заработало с первого раза — мы бы поймали это на dev, проитерировались (агент посмотрел бы логи, я сказал бы, что исправить), и всё это не задевая продакшен-пользователей. В этом вся ценность dev-ступени.

Три детали, без которых схема не заводится

  1. User-аккаунт на GitHub, а не GitHub App / бот. Я завёл отдельный аккаунт-пользователя на GitHub и дал ему админ-права в организации проекта. Именно полноценный user, не GitHub App и не bot-token. Причина прагматичная: у ботов и App урезанный API — часть операций (например, корректное обновление статуса на доске GitHub Projects) у них работает криво или недоступна. User-аккаунт же может управлять секретами, организацией, создавать репозитории, мержить — всё, что нужно для по-настоящему автономной работы.

  2. Claude Code на VPS, а не на ноутбуке. Claude Code работает на сервере с Claude Squad. Длинные задачи на 30–60 минут идут в фоне и не зависят от моего ноутбука, мигающего Wi-Fi или VPN. Поставил задачу, закрыл крышку макбука, уехал пить кофе — выполнение продолжится. Неочевидный бонус: с телефона через Termux (или похожее приложение) я подключаюсь по SSH к серверу, кидаю простой промпт, а ревью делаю прямо в мобильном приложении GitHub. То есть могу довести задачу до прода буквально с iPhone. И все MCP-серверы с доступом к базам — оттуда же, по приватной сети, без проброса портов с домашнего компа.

  3. Одна GitHub-организация на проект. Под каждый проект — отдельная организация, куда заинвайчен тот самый агентский user с админ-правами. Это даёт чистую изоляцию: код, секреты, доска — в своих границах. А саб-агенты знают только свою организацию, так что «случайно закоммитил не туда» физически не случается.

Итог

AI-команда из трёх агентов закрывает полный цикл: от продуктовой идеи до прод-деплоя. Я остаюсь продактом и тех-лидом — формулирую задачи и ревьюю код. Планирование, разбивку на тикеты, имплементацию, тесты, деплой и мониторинг делает AI через MCP.

Это не волшебная палочка. Чтобы оно завелось, нужно: настроить MCP-стек, прописать саб-агентов с чёткими ролями и правилами, выстроить pipeline dev → main с обязательным человеческим ревью, запустить Claude Code на сервере и использовать user-аккаунт на GitHub.

Но когда это собрано — оно работает каждый день, а не в демо. Конфиги саб-агентов и команды-точки входа я выложил в gist, можно адаптировать, заменить плейсхолдеры на свои ID и использовать у себя:

https://gist.github.com/ne-robot/f0ac647f7182d7ce996434a32bde5be9

Если интересно — задавайте вопросы в комментариях, отвечу по конкретике сетапа.

Бонус: видеоверсия

Комментарии (14)


  1. sanchesfree
    08.06.2026 20:01

    Не понятно, чем /plan хуже?


    1. DenisOmg Автор
      08.06.2026 20:01

      Ну, как минимум, в статье я описывал и рассказывал о том, что саб-агенты и системный промпт содержат название баз данных DEV и PROD, namespace в Kubernetes. Правил, как вестись должна разработка задачи, я имею в виду, pull request в DEV, pull request в MAIN. Я немножко уже изменил флоу, чего нет в статье. Сейчас это еще и ожидание комментариев от CodeRabbit. И итерация по этим комментариям самостоятельно. И только после этого assign PR на меня. Все это plan без указаний не сделает


      1. sanchesfree
        08.06.2026 20:01

        а как же AGENTS.md?


        1. DenisOmg Автор
          08.06.2026 20:01

          Agents.md по сути инжектится в системный промп и засоряет основной контекст информацией которая не всегда там нужна. Саб-агент имеет свой контекст. Команды по сути тот же Agents.md. Честно, не очень понял вопроса. Это разные инструменты которые решают разные задачи


          1. sanchesfree
            08.06.2026 20:01

            Ну так можно в AGENTS.md указать всё что вы выше в комменте описали, типа подожди комментов от coderabbit, субагентов дёрни команду /check-coderabbit-comments итп. У вас всё это съест 1% от контекста, зато без своих агентов...


  1. murenysh
    08.06.2026 20:01

    Когда план готов, я пишу «да, начинай»

    Когда план готов, я пишу "запускай 5-раундовое кросс-ревью плана другой sota-моделью".
    Правда, выглядит это все короче "/codex-dual-review-file-based ревью плана"

    https://github.com/Serg2000Mr/claude-codex-review-skill


    1. DenisOmg Автор
      08.06.2026 20:01

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


      1. murenysh
        08.06.2026 20:01

        На деле Кодекс каждый раз находит по несколько серьезных багов за Клодом (и наоборот), которые были бы пропущены.


  1. StudyQA
    08.06.2026 20:01

    Узнаю свой подход, только у нас реализация другая.

    Мы пришли к похожей архитектуре, но вместо Go-бота с MCP-серверами используем Telegram-топики как естественный диспетчер. Каждый топик = один проект = одна изолированная сессия Claude Code. Роутер определяет, какую модель подключить (Opus для сложного, Haiku для рутины), и каждая сессия видит только свой рабочий каталог.

    Несколько наблюдений из опыта с ~100 параллельными сессиями:

    1. CLAUDE.md >> промпт-инструкции в агенте. У нас в каждом проекте CLAUDE.md с архитектурой, правилами безопасности и деплой-инструкциями. Работает надёжнее, чем передача контекста между агентами, потому что файл всегда актуален и не теряется при компакции.

    2. CHECKPOINT.md как замена передачи состояния. Вместо водопада контекста между саб-агентами, каждая сессия пишет своё состояние в чекпоинт. При перезапуске или смене контекста читает один файл вместо перечитывания всего проекта.

    3. Код-ревью человеком: полностью согласен. Это единственное, что реально отделяет рабочий пайплайн от “лотереи”. У нас деструктивные операции (деплой, удаление, push) требуют явного подтверждения.

    Интересно, что вы Claude Code гоняете на VPS. Мы тоже: Hetzner VPS + Windows + Telegram Router. Фоновые задачи действительно удобнее на сервере, чем на локальной машине.


    1. DenisOmg Автор
      08.06.2026 20:01

      Да, хорошая тема. Судя по тому, что у вас диспатчер через Telegram-бота, предположу, что у вас несколько человек работает над claude code инстансом. Мне мультитенант не нужно, поэтому решил не усложнять и просто логинюсь по SSH на сервер


  1. Spyman
    08.06.2026 20:01

    Как мерите качество решения? Любой overenginiring построить легко, но надо ещё доказать что он даёт какие-то преимущества. И "ну мы попробовали, работает" - тут вообще не годится, может на 2х сценариях стало лучше, на 80 деградация, а на 10к - все осталось как было, только токенов ушло в 5 раз больше.


    1. wtandoor
      08.06.2026 20:01

      Уверен, что никак (субъективно)


    1. DenisOmg Автор
      08.06.2026 20:01

      Качество решения я меряю тем что теперь мне не приходится каждый раз в новом чате надиктовывать в течение двух минут по какому флоу мне надо протащить задачу сначала dev потом main; объяснять и рассказывать название баз данных; namespace в kubernetes


      1. Spyman
        08.06.2026 20:01

        Ну вот я просто включил эти вещи в пару md файлов, а ссылки указал в claude.md, чтобы в контексте было описано что читать, и тоже ничего не указываю. Более того, даже когда я ещё не указал явно ссылки в claude.md - он все равно находил нужные данные grep-ом или ls. Более того, даже если ничего этого не указать вообще, тот-же codex уже из коробки поддерживает кросспроектную долговременную память, и когда я создавал новый проект, он уже знал где у меня лежит папка с проектами и где папка с документацией.

        Ситуации когда "мы придумали мега решение для автоматизации агентов" - а на деле, самый тупой промпт задачи работает лучше и экономнее, чем это мего решение, я уже встречал неоднократно.