TGViewer
Сергей Мелюков Сергей Мелюков @smelukov_dev · 646 subscribers
Post #128 602
Подумал: почему бы не писать о том, что делаю прямо сейчас и с чем сталкиваюсь 🙂

Я придерживаюсь мнения, что вайбкодинг без контроля - это зло и при каждом удобном случае пытаюсь это донести
Если не следить за тем, что делает модель (даже самая дорогая и топовая), то через пару десятков итераций (может и раньше) вы столкнетесь с тем, что код невозможно будет либо поддерживать, либо масштабировать (либо и то и другое)
При проектировании чего-то нового, я выбираю одну из двух стратегий:
• описать архитектуру и попросить модель ее критически поревьюить
• описать базовые требования, которым точно нужно соответствовать и попросить модель предложить вариант реализации
Выбор зависит в большей степени от проекта (важность, 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 пока открыт.
Agent Client Protocol Introduction - Agent Client Protocol Get started with the Agent Client Protocol.
  • 👍 1
More from @smelukov_dev
  1. Jun 14, 2026Подумал тут про покрытие тестами кода, который написала модель Есть отдельный интересный к…
  2. May 15, 2026Кстати, если вы когда-нибудь озадачивались подсчетом ресурсов для развертывания LLM локаль…
  3. May 15, 2026В чем произошла заруба: Среди прочего, я хочу понимать какие MCP были запущены и сколько о…
  4. Apr 13, 2026ИИ победил! Готовлю кое-что интересное. Интересно, что Ведьмак и Статоскоп поделили степен…
  5. Apr 10, 2026Post #126
  6. Oct 12, 2025Post #125
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →