Открытый терминальный кодинг-агент OpenCode 7 ноября в 02:37 по Москве вышел в версии 2.2.6. Главное для тех, кто держит много проектов и MCP-серверов: один сервер теперь можно подключить один раз на все проекты с одинаковыми настройками вместо отдельного процесса и рукопожатия в каждой папке. Для скриптов и CI добавили запуск сессии в отдельном git worktree и флаг, который не пускает такие прогоны в инбокс.
Ещё одно изменение касается всех, кто вызывает opencode run из пайплайнов: команда теперь дожидается фоновых задач, которые запустил промпт, и не завершится, пока они работают. Если агент поднял dev-сервер или наблюдатель за файлами, прогон будет висеть до Ctrl+C или SIGTERM, поэтому таймаут на джобу становится обязательным.
pool: trueу MCP-сервера: проекты с совпадающей конфигурацией делят одно подключение и один список инструментов. В замере автора 10 проектов подключились за 3,1 секунды вместо 15,4.- Делится только соединение по протоколу MCP 2026-07-28; со старыми серверами OpenCode молча возвращается к отдельному подключению на проект и пишет предупреждение в лог.
opencode run -wсоздаёт новый git worktree под сессию,--worktree=имязадаёт его название.opencode run --archivedсразу архивирует сессию, чтобы CI-прогоны не засоряли инбокс и список сессий.opencode runждёт фоновых задач без ограничения по времени, SIGTERM отменяет сессию и завершает процесс с кодом 143.
Зачем делить MCP-подключения
Один сервер OpenCode обслуживает много директорий, и до 2.2.6 каждая открывала своё подключение к каждому MCP-серверу. Автор изменения в PR #61185 приводит пример: при 10 открытых проектах MCP-сервер Cloudflare получает 10 подключений и 10 копий списка из 3765 инструментов, а локальный cua-driver запускается 10 раз и занимает 189 МБ.
Теперь у сервера в конфиге можно включить пул. Без флага или с false всё работает как раньше. Пример из PR:
"mcp": {
"cloudflare": { "type": "remote", "url": "https://mcp.cloudflare.com/mcp", "pool": true },
"cua-driver": { "type": "local", "command": ["cua-driver", "mcp"], "cwd": "~", "pool": true }
}
Проекты получают общее подключение, только если у них совпадает ключ пула. Для удалённого сервера в него входят URL, заголовки, настройки OAuth, протокол, таймауты и идентификатор выбранной учётной записи; для локального — команда, рабочая директория, переменные окружения, протокол и таймауты. Заголовки, переменные окружения и секрет клиента OAuth в ключе хранятся только в виде хэша. Отсюда практическое следствие: локальному серверу нужен фиксированный cwd, например "~", иначе каждый проект запускает свою копию в своей папке, а OpenCode один раз пишет в лог «mcp pool ignored: local server has no fixed cwd».
В том же замере память сервера вместе с дочерними процессами в установившемся режиме снизилась примерно с 770 до 540 МБ. Автор честно оговаривает два момента. Сразу после одновременного старта всех проектов процесс занимает примерно на 60 МБ больше, чем без пула, потому что каждый проект в этот момент заново собирает общий список инструментов; через 60 секунд потребление опускается ниже, чем без пула. А часть ускорения подключения дало само рукопожатие по новому протоколу, а не только общее соединение.
Где общее подключение ведёт себя иначе
Пул работает только с серверами, которые говорят по протоколу MCP 2026-07-28. Если сервер старше или отказался от общего рукопожатия, директория подключается отдельно, как раньше, а в лог один раз пишется предупреждение. Такой вердикт действует до перезапуска. У общего подключения есть и другие отличия от приватного:
- общее подключение не объявляет серверу roots, то есть корневую директорию проекта, — если ваш MCP-сервер на неё опирается, пул ему не подходит;
- запрос сервера к пользователю (elicitation) уходит в ту директорию, чей вызов его вызвал, а запрос без вызывающего — во все, и первая ответившая побеждает;
- если общий сервер падает, ошибку видят все проекты, которые его держат; подключение закрывается сразу, как только его отпустила последняя директория.
Скриптовые прогоны: worktree, архив и ожидание фоновых задач
Флаг -w у opencode run создаёт под сессию новый git worktree, так что агент правит код не в вашей рабочей копии. Имя задаётся только через знак равенства: --worktree=имя. Без него -w "fix it" воспринимается как флаг без значения плюс сообщение, так что текст задачи не потеряется. С --continue и --session флаг не сочетается.
Флаг --archived создаёт сессию сразу в архиве: она не появляется в инбоксе, на главной и в списках сессий приложения, скрыта в TUI и пропускается командой --continue. Найти её можно через opencode session list, который показывает и архивные сессии, и открыть по ID. Вместе это выглядит так:
# прогон в отдельном worktree, без мусора в инбоксе и с таймаутом
timeout 30m opencode run -w --archived "обнови зависимости и прогони тесты"
Таймаут здесь не для красоты. По релиз-нотам, opencode run теперь ждёт фоновые shell-команды, субагентов и генерацию картинок, запущенные промптом, и даёт модели ответить на их результаты. Пока ждёт, печатает «waiting for N background job(s)», а с --format json — событие background_wait. Ограничения по времени нет, поэтому разработчики прямо советуют ставить таймаут на CI-джобы. SIGTERM отменяет сессию вместе с фоновыми задачами, код выхода 143.
Что ещё в 2.2.6
- Безопасность сервера: чтение файлов и медиа через API отдаётся как изолированная загрузка, а межсайтовые переходы и запросы к
/api/*с недопустимых источников отклоняются — файл из проекта больше не может выполнить скрипт на домене сервера. - Webfetch и
fetchв Code Mode отклоняют URL с логином и паролем, игнорируют#fragmentпри сверке с правилами доступа, аfetchпроверяет по правилам каждый редирект. - Перед вызовом модели OpenCode до 2 секунд ждёт MCP-серверы, которые ещё подключаются, чтобы их инструменты попали в первый промпт.
- Экспериментальная байт-кодовая виртуальная машина для Code Mode, по умолчанию выключена:
experimental.codemode_vm: trueилиOPENCODE_FLAGS=codemode_vm. - Политика
websearch.useдля управляемых установок и прогрев сессий под TTL кэша провайдера (interval: "auto"). - GUI-плагины могут добавлять темы и действия для блоков кода, на телефонах и планшетах кнопки композера переехали в док над клавиатурой.
Как OpenCode дошёл до этого релиза
2.2.6 вышла через неделю после трёх релизов подряд: все они вышли 30 октября по UTC, последний — в ночь на 31 октября по Москве, и Tproger разбирал их в сводке про кодинг-агентов. Коротко:
| Версия | Главное |
| 2.2.3 | Встроенный провайдер Claude Agent: OpenCode работает через логин и модели Claude Code. Ломающие изменения: TUI-плагинам нужен OpenTUI 0.8, политика integration.use больше не покрывает MCP, скиллы и плагины — для них появились mcp.use, skill.use, plugin.use |
| 2.2.4 | Терминалы в десктопе живут в сессии и переживают перезапуск сервера; экспериментальные артефакты (HTML и статика, которые агент публикует и обновляет); расписания работают под opencode serve |
| 2.2.5 | Горячие клавиши выбора worktree и базовой ветки; буфер компакции в процентах окна контекста ("compaction": { "buffer": "20%" }); MCP-серверы со stdio-сообщениями больше 10 МиБ больше не отключаются |
Линия последовательная: 2.2.5 сделала worktree удобными в интерфейсе, 2.2.6 перенесла их в скриптовый запуск, а исправления MCP из 2.2.5 продолжились пулом подключений.
Как обновиться и кому это нужно
Версия 2.2.6 опубликована в npm как @opencode/cli; README проекта предлагает также установочный скрипт и Homebrew. Старый пакет opencode-ai в npm остался на ветке 1.x, ставить нужно новый:
npm i -g @opencode/cli@latest
# или
curl -fsSL https://opencode.ai/v2/install | bash
# или (macOS и Linux)
brew install anomalyco/tap/opencode-v2
Пул заметно поможет, если вы держите открытыми несколько проектов с одинаковыми MCP-серверами, особенно тяжёлыми локальными. С одним проектом или со старыми серверами экономии на числе подключений не будет, а общее подключение всё равно ведёт себя иначе, например не объявляет серверу roots. Для CI полезнее всего связка -w --archived и обязательный таймаут. Похожие задачи с фоновыми субагентами решают и в Claude Code — например, недавно Anthropic перевела статусы субагентов на Haiku 5.5. Пулинг серверов на старых протоколах и кэш списка инструментов на диске остались за рамками этого изменения.
Источники
- https://github.com/anomalyco/opencode/releases/tag/v2.2.6
- https://github.com/anomalyco/opencode/pull/61185
- https://github.com/anomalyco/opencode/pull/60712
- https://github.com/anomalyco/opencode/pull/61270
- https://github.com/anomalyco/opencode/pull/60699
- https://github.com/anomalyco/opencode/releases/tag/v2.2.5
- https://github.com/anomalyco/opencode/releases/tag/v2.2.4
- https://github.com/anomalyco/opencode/releases/tag/v2.2.3
- https://tproger.ru/news/koding-agenty-nauchilis-perenosit-sessii-i-rabotat-v-fone
Комментарии