Я придерживаюсь мнения, что вайбкодинг без контроля - это зло и при каждом удобном случае пытаюсь это донести
Если не следить за тем, что делает модель (даже самая дорогая и топовая), то через пару десятков итераций (может и раньше) вы столкнетесь с тем, что код невозможно будет либо поддерживать, либо масштабировать (либо и то и другое)
При проектировании чего-то нового, я выбираю одну из двух стратегий:
• описать архитектуру и попросить модель ее критически поревьюить
• описать базовые требования, которым точно нужно соответствовать и попросить модель предложить вариант реализации
Выбор зависит в большей степени от проекта (важность, production-use и тп) и в меньшей степени от настроения
Делаю я тут значит ACP-клиент для opencode (ACP - это протокол, который позволяет организовать взаимодействие с агентами и встраивать их в разные места. Например, именно через ACP вы можете использовать любимые coding agent (open code, claude, codex, pi и т.п.) в любимых IDE), проверяю очередную итерацию, которую предложила мне модель и тут мы с ней зарубились...
Немного о самой идее и предыстории:
Мне нужно завернуть взаимодействие пользователя с агентами и скиллами через свой CLI-инструмент
Это дает больше гибкости, чем если бы пользователь свободно вызывал агенты и скиллы напрямую в opencode или claudecode
Ну и мне важен one-shot сценарий с моими обвязками (запустил, выполнилось и завершилось)
Такой подход требует разных интересных решений, например, надо решить как агент будет задавать вопросы пользователю.
Мой CLI - это ACP-клиент к opencode, но
opencode acp запускается в отдельном процессе, внутренности которого мы не контролируем. Так например, задача "задать вопросы пользователю" превращается в задачу о том, как усидеть на двух стульях, т.к. нужно получить контроль за stdout (чтобы выводить вопрос/анкету через тот же Inquirer.js) и stdin (чтобы получать данные), но при этом модель должна воспринимать это как MCP-инструмент. Более того, в CLI есть спиннер, которым нужно управлять в зависимости от того, что сейчас происходитУ ACP есть драфт на тему поддержки такой штуки из коробки - Elicitation: Structured User Input который в свою очередь ссылается на другой драфт из спецификации MCP - Elicitation. Если коротко, то elicitation позволяет нативно запрашивать у пользователя данные (задавать вопросы, заполнять формы и тп)
Поддержки elicitation в opencode пока нет, но есть в обертке для claude. Мне хочется поддерживать и то и то, поэтому я делаю даунгрейд до решения, которое работало бы везде, а именно: MCP запускается в том же процессе что и CLI и информация о запущенном MCP передается в сессию opencode (обычно opencode сам запускает все зарегистрированные MCP и обслуживает их жизненный цикл)
Если бы opencode поддерживал elicitation, то MCP который задает вопросы можно было бы зарегистрировать как обычный MCP внутри opencode
Этот MCP отправлял бы специальный elicitation request и opencode проксировал бы его в моего ACP-клиента (CLI), а там уже я решаю как вывести анкету, что сделать со спиннером и т.д., но, увы, issue пока открыт.