Автоматический цикл кодинга в OpenCode без плагинов

· 1 мин чтения
opencode ai-agents loop-engineering automation orchestration
Автоматический цикл кодинга в OpenCode без плагинов

Peng Qian с блога Data Leads Future реализовал полностью автоматизированный цикл кодинга внутри OpenCode — без единого плагина, только через Markdown-файлы агентов и команд. Вся обвязка работает на DeepSeek-V4-Pro и DeepSeek-V4-Flash, а результаты впечатляют: от генерации скрипта Фибоначчи до полноценной шахматной веб-игры с Python-бэкендом. Разбираем архитектуру.

Что такое Loop Engineering

Andrew Ng описал три петли разработки продукта с AI:

  1. Петля реализации — coding-агент получает спек и измеримую цель, пишет код, запускает тесты, итерирует пока требования не выполнены.
  2. Петля обратной связи инженера — инженер тестирует результат, сравнивает со своим видением и, если что-то не так, пишет новый спек.
  3. Петля внешней обратной связи — продукт попадает к пользователям, их фидбек собирается и возвращается в петлю №2.

В Claude Code и Codex этим петлям соответствуют две команды: /goal для петель 1-2 и /loop для петли 3.

Архитектура цикла в OpenCode

Автор реализовал усиленную версию /goal. Вместо того чтобы пользователь вручную прописывал метод верификации и лимит итераций, агент делает это сам. Пользователь просто говорит, что ему нужно.

Два агента

goal-orch (оркестратор, модель deepseek-v4-pro):

  • Общается с пользователем, уточняет требования
  • Разбивает задачу на атомарные пункты и сохраняет в reqs-manifest.md
  • Строит DAG зависимостей и запускает параллельное исполнение
  • Принимает ответы от воркера на технические вопросы
  • Проверяет завершённость работы: unit-тесты, покрытие, E2E-тесты через browser use

goal-worker (исполнитель, модель deepseek-v4-flash):

  • Получает одно требование от оркестратора
  • Пишет план реализации (стек, изменения, тесты) и отправляет на ревью оркестратору
  • После одобрения — кодит, добавляет обработку граничных случаев, пишет тесты
  • При возникновении технического вопроса не спрашивает пользователя, а возвращает вопрос оркестратору через task_id

Ключевые механики

Сохранение контекста через task_id. OpenCode позволяет отправлять сообщения субагенту через инструмент task. Первый вызов создаёт новую сессию и возвращает task_id. Если воркеру нужна помощь, он возвращает вопрос оркестратору, а тот передаёт ответ вместе с task_id обратно — сессия продолжается без потери контекста.

DAG-параллелизм. После утверждения списка требований оркестратор строит граф зависимостей. Требования без взаимных зависимостей выполняются параллельно несколькими экземплярами goal-worker.

Документирование каждого шага. Воркер не только обновляет статус в reqs-manifest.md, но и генерирует заметку по каждому завершённому требованию. Когда цикл длится часами, контекст сессии раздувается и агент начинает терять нить — документация позволяет оркестратору восстановить картину.

E2E-тестирование. Если задача включает фронтенд, на финальном этапе оркестратор запускает E2E-тесты через @playwright-mcp или agent-browser и делает скриншоты как доказательство работы.

Почему без плагинов

OpenCode позволяет определять команды и агентов через Markdown-файлы в директории .opencode/. Плагины ломаются при обновлениях, а Markdown-файлы — нет. Команда /goal описывается в .opencode/commands/goal.md с указанием агента goal-orch в frontmatter и плейсхолдером $ARGUMENTS для задачи пользователя.

Результаты тестирования

Скрипт Фибоначчи

Промпт: /goal Write a Fibonacci calculation script with the best possible performance.

DeepSeek выбрал алгоритм fast doubling — оптимальный для задачи.

Игра «Ханойская башня»

Промпт: /goal Build a playable Tower of Hanoi web game.

Агент построил игру со встроенным AI-солвером.

Шахматная веб-игра

Промпт: /goal Build a playable chess web game. Include easy, medium, and hard difficulty levels. No online multiplayer needed. Use a Python backend as the AI engine.

OpenCode сначала уточнил требования, предложил варианты, затем вошёл в автономный режим: спроектировал архитектуру, реализовал модули, прогнал unit-тесты, edge case-тесты и E2E-тесты, и вернул результат только когда всё прошло.

Клавиатурный тренажёр

Пример с развёрнутым описанием механик — падающие буквы, позиции пальцев, градиентная зона попадания, комбо-эффекты. Агент справился и с этим.

Выбор моделей

Peng Qian обнаружил интересную особенность DeepSeek: deepseek-v4-flash точнее pro в задачах вызова функций (function calling) и загрузки навыков (skill loading), при этом значительно дешевле. Поэтому goal-orch (оркестрация, рассуждения) работает на pro, а goal-worker (исполнение) — на flash.

Для чтения изображений (скриншоты E2E-тестов) используется @observer-агент.

TODO-менеджер и современные пакетные менеджеры

Воркеру явно предписано использовать uv вместо pip и pnpm вместо npm — это сохраняет чистоту окружения при длительной работе цикла.

Цикл против OpenSpec

Автор подчёркивает, что цикл кодинга не заменяет SDD-фреймворки вроде OpenSpec. Они решают разные задачи:

  • Цикл кодинга — быстрое прототипирование MVP менеджером продукта или тимлидом. Приоритет — скорость и автономность.
  • OpenSpec / SDD — production-разработка с высокими требованиями к качеству кода, где у инженера есть детальный спек.

Цикл кодинга — это первая петля из трёх. Для серьёзного продукта нужно прогнать все три.

Как использовать

Исходный код доступен в GitHub-репозитории автора (доступен подписчикам). Для установки достаточно скопировать agents/ и commands/ из .opencode/ репозитория в ~/.config/opencode/ и перезапустить OpenCode. Или скопировать всю папку .opencode/ в корень конкретного проекта.

После этого команда /goal <задача> запускает цикл. Можно описать задачу подробно или одной фразой — оркестратор уточнит детали в диалоге.

Источник: https://www.dataleadsfuture.com/no-plugins-needed-i-built-a-fully-automated-coding-loop-in-opencode/