AI Tools8 мин чтения

Пусть OpenCode исправляет баг, пока вы работаете в своей копии

OpenCode 2.2.6 умеет запускать сценарий в отдельном рабочем дереве Git. Разбираемся, как проверить результат и ограничить доступ агента.

K
Ken Jo

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

6 ноября в OpenCode 2.2.6 появилась возможность запускать сценарии командной строки в отдельном рабочем дереве. OpenCode — открытый агент для программирования с интерактивным терминальным интерфейсом и отдельной командой для передачи запроса из сценария. Теперь сценарий может попросить OpenCode начать работу в отдельном дереве Git, при желании задать ему имя и освободить исходный каталог для разработчика. В том же выпуске появилось отключённое по умолчанию совместное использование совпадающих подключений по протоколу Model Context Protocol (MCP). Перед запуском стоит ответить на два вопроса. Какие файлы агент может изменить и к каким сервисам он может обращаться? Релиз OpenCode v2.2.6 · Документация CLI OpenCode

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

Терминал OpenCode с просмотром патча, цветным выделением изменений и сведениями о сессии

На снимке терминала проекта OpenCode видны патч и сессия. Этот фирменный материал из версии релиза показывает терминальный интерфейс. Изображение сопровождается уведомлением о лицензии MIT. Telli.sh изменил размер снимка и добавил поля.

В отдельном каталоге проще понять, откуда взялись изменения

Один репозиторий Git связан с двумя рабочими каталогами, для разработчика и для агента

У каждой задачи в рабочем дереве Git свои рабочие файлы и индекс. Иллюстрация Telli.sh.

Рабочие деревья Git позволяют привязать несколько рабочих каталогов к одному репозиторию. У каждого дерева свой набор рабочих файлов, индекс и текущая позиция в истории. Большинство данных репозитория у них общие. Патч агента можно просмотреть отдельно, а ваши исходные правки останутся в первом каталоге. Меняется и набор исходников, который видит агент. Незакоммиченные изменения из первого каталога сами по себе во второй не попадут, даже если оба относятся к одному репозиторию. Документация Git worktree

В выпуске OpenCode от 6 ноября описаны три варианта запуска. Для нового дерева подойдут opencode run -w и opencode run --worktree, а --worktree=<name> позволяет присвоить ему имя. Опция рабочего дерева несовместима с --continue и --session. Для чистого запуска требуется новый контекст. Если вокруг бага уже состоялось долгое обсуждение, перенесите в новый запрос актуальные шаги воспроизведения и ожидаемый результат. Релиз OpenCode v2.2.6 · Реализация рабочих деревьев и примеры

Отдельный каталог служит местом для проверки. До запуска запишите ветку и коммит, с которых, по вашему ожиданию, начнёт агент. После запуска проверьте коммит и состояние получившегося дерева. Если тесту нужен неотслеживаемый файл с данными или правка, которая пока существует только в редакторе разработчика, разница в исходном состоянии объяснит расхождение между двумя запусками. Патч может правильно работать на старой версии кода и всё равно не подойти для ветки, которую вы готовитесь выпустить.

Сначала попробуйте одну небольшую правку

Начните со своего репозитория и задачи с ясным результатом. Сбой теста для високосного дня подходит лучше масштабного обновления: ожидаемое поведение легко проверить. Другой небольшой пример — устаревшая ссылка в навигации с одним тестом маршрута. В обоих случаях явно укажите, какое поведение должно измениться и как вы собираетесь его проверять.

  1. Зафиксируйте исходное состояние. В текущем каталоге выполните git status --short и git rev-parse HEAD. Сохраните вывод вместе с описанием бага. Если тесты на исходном коде уже проходят, запишите, как воспроизвести этот результат. Команда opencode --version покажет, поддерживает ли установленная версия новый флаг. Релиз OpenCode v2.2.6

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

    ShellЗапустите в: Терминал
    opencode run --worktree=date-parser "Reproduce the leap-day parsing bug in the date parser tests. Fix the narrow cause, run the targeted tests, and leave the changes uncommitted for review."
    

  3. Найдите новый каталог, прежде чем проверять результат. Выполните git worktree list в исходном репозитории и перейдите по указанному пути. В новом каталоге выполните git status --short, git diff и git diff --cached. Последняя команда пригодится, если агент добавил что-либо в индекс. Неотслеживаемые файлы просмотрите отдельно. Перезапустите нужные тесты из каталога агента и убедитесь, что они охватывают и 29 февраля високосного года, и год, в котором эта дата недопустима. Документация Git worktree

  4. Перенесите только проверенные правки. Держите предложение отдельно, пока не сможете применить проверенный коммит или патч в нужной ветке. Ещё раз проверьте состояние исходного каталога. Сохраняйте дерево агента, пока не запишете нужные сведения и не убедитесь, что там не осталось правок, которые хочется сохранить. Список рабочих деревьев Git помогает понять, к какой задаче относится каждый каталог. Документация Git worktree

Тот же подход помогает, когда одновременно поступают две несвязанные задачи. Дайте каждой собственные рамки и сравните получившиеся наборы изменений до интеграции. Раздельные деревья удержат незаписанную в индекс тестовую правку одного агента в его каталоге. При переносе в общую ветку исправления всё равно могут конфликтовать, особенно если оба затронули одну вспомогательную функцию. Объединение веток и итоговая проверка регрессий остаются частью обычного процесса ревью.

Определите, какие действия возможны за пределами репозитория

Два дерева могут использоваться от одной учётной записи операционной системы. Тогда у них может быть доступ к одним переменным окружения, средствам получения учётных данных и сети. Новая опция выбирает стартовый каталог и отделяет обычные рабочие изменения. Если задача требует более строгой изоляции, задайте ограничения для учётной записи или среды выполнения. Запрос на подтверждение управляет инструментами, которые его соблюдают. Возможности самого процесса определяются операционной системой и средой запуска.

Уровни доступа к файлам репозитория, разрешений агента и среды выполнения

Место внесения правок, разрешения на инструменты и доступ среды выполнения — отдельные решения. Иллюстрация Telli.sh.

Документация OpenCode V2 описывает упорядоченные правила для отдельных действий. Возможные варианты — allow, ask и deny, а последнее совпавшее правило имеет приоритет. Один из официальных примеров запрашивает подтверждение для команд оболочки, затем разрешает распространённые команды просмотра и запрещает отправку изменений. Если рядом с автоматическим запуском не будет человека, заранее проверьте, как правило ask ведёт себя в этом процессе. Зафиксируйте запреты в конфигурации и выдавайте короткоживущие учётные данные с узкой областью доступа к сервисам, необходимым задаче. Документация разрешений OpenCode

РешениеЧто можно проверить на пробном запуске
Где появятся измененияИсходный коммит, рабочее дерево агента, изменения с индексом и без него, вывод тестов
Что агент может вызватьДействующие правила для файлов и команд, доступные инструменты MCP, реакцию на запрет вызова
К чему получит доступ процессПрава учётной записи, смонтированные каталоги, учётные данные и сетевые адреса
Что войдёт в проектПатч после проверки человеком и успешный результат интеграционной проверки

Задача только по документации даёт простой способ проверить все уровни. Разрешите агенту менять один раздел в тестовом проекте. Дайте доступ к разрешённому провайдеру и исключите рабочие учётные данные. Запустите сценарий и убедитесь, что патч затронул только ожидаемый файл. Если дальнейшей автоматизации понадобится удалённый репозиторий или трекер задач, для каждой возможности определите назначение и отдельно проверьте разрешения.

Общее подключение уместно, когда у проектов совпадают границы доступа

MCP позволяет агенту использовать инструменты, предоставляемые другими программами, например поиском по документации или трекером задач. В релизе от 6 ноября параметр pool: true разрешает каталогам, обслуживаемым одним сервером OpenCode, повторно использовать подключение при совпадении соответствующей конфигурации. Документация V2 уточняет, что механизм работает с редакцией протокола от 28 июля 2026 года. При согласовании более старой версии сервер сохраняет раздельные подключения. Указать одинаковый адрес для двух проектов недостаточно. Должны совпасть настройки удалённого подключения и учётные записи. Для локального сервера проверяются также команда, окружение и рабочий каталог. Релиз OpenCode v2.2.6 · Документация общего доступа к подключениям MCP

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

Локальный сервер может зависеть от текущего каталога. Даже если текст команды совпадает, процессы, запущенные в разных папках проекта, могут видеть разный локальный контекст. По документации OpenCode, для совместного использования локальных соединений между проектами нужен фиксированный рабочий каталог, а общее соединение не получает корневых каталогов MCP. Начать лучше с сервиса только для чтения, который сам явно задаёт область доступных ресурсов. Если инструмент реагирует на то, из какого репозитория его вызвали, измерьте разницу до переключения на общее соединение. Документация общего доступа к подключениям MCP

Запуск по сценарию должен уметь завершаться

В OpenCode 2.2.6 также добавили --archived. Сессии сценариев и CI могут начинаться в архиве и не появляться в обычном списке. Это влияет на представление сессии. Сохраняйте результат задачи, путь к рабочему дереву и итоги тестов там, где их найдут проверяющие. Используйте флаг, когда сможете надёжно найти нужный патч даже при пустом списке сессий. Согласно заметкам о выпуске от 6 ноября, команда --continue пропускает архивные сессии. Релиз OpenCode v2.2.6

Выпуск меняет и жизненный цикл запуска по сценарию. OpenCode дожидается фоновых команд, дочерних агентов и задач с изображениями, запущенных в ходе выполнения запроса. По заметкам о релизе, внутреннего тайм-аута у ожидания нет. Сервер разработки или наблюдатель за файлами может удерживать запуск открытым. Для автоматической проверки выбирайте команды, которые завершаются после проверки, и ограничивайте время всего шага CI. Различайте отменённый запуск, проваленный тест и отчёт агента об успехе. По истечении тайм-аута осмотрите фактическое состояние правок, прежде чем перезапускать сценарий или переносить изменения. Релиз OpenCode v2.2.6

После пробного запуска оцените экономию времени по фактической работе. Сколько занимает подготовка чистого запуска? Сколько времени уходит на разбор и проверку правок? Как часто приходится исправлять постороннее изменение или выяснять, почему инструмент завис? Сравните несколько задач близкого размера и включите в расчёт подготовку и ревью. Отдельное дерево особенно полезно, когда помогает удержать патч достаточно небольшим, чтобы человек мог за него отвечать.

Чистая рабочая копия помогает понять, кто за что отвечает

Флаг рабочего дерева даёт проверяющему ясную исходную точку. Он видит исходный коммит, осматривает правки и повторяет тест, пока другой разработчик продолжает свою работу. Столь же явно стоит задавать параметры общего подключения и разрешения на выполнение. Небольшой патч удобно передавать, если по нему можно понять, с чего началась работа, что изменилось и почему правки готовы к интеграции.

Источники


Чтобы сохранять решения и эксперименты по проекту в одном месте с поиском, создайте аккаунт в Telli.sh.


← Вернуться в блог