Сервис
С самого начала OpenCode использовал архитектуру клиент/сервер, но это была функциональность, которую по умолчанию не использовали — разве что опытные пользователи.
В версии 2.0 сервер автоматически запускается как фоновый процесс на вашей машине. Открываете ли вы TUI, веб-интерфейс или десктопное приложение — все они подключаются к одному центральному процессу.
При использовании программного клиента @opencode/client для написания собственных скриптов автоматическое обнаружение локального сервиса сработает без дополнительных действий. Это особенно полезно для запланированных задач. Можно также вызывать функциональность через CLI с помощью команд opencode api.
Сервис можно открыть для других хостов и запустить /pair или команду opencode pair, чтобы подключить его к другим приложениям. Есть собственные приложения, которые используют этот механизм.
API
Старый API рос хаотично по мере того, как мы все вместе разбирались, что такое агенты и каким они должны быть. Это был беспорядок.
Мы начали с нуля и рассмотрели все необычные сценарии использования среди миллионов пользователей OpenCode. Теперь API поддерживает практически всё, что может понадобиться.
OpenCode также знает о собственном API и использует его для полезных задач, таких как перемещение текущей сессии в git worktree при запуске новой работы.
Также вышел новый клиентский пакет @opencode/client, который содержит клиентов для ванильного JavaScript и Effect.
import { OpenCode } from "@opencode/client"
import { Service } from "@opencode/client/service"
const endpoint = await Service.ensure()
const client = OpenCode.make({
baseUrl: endpoint.url,
headers: Service.headers(endpoint),
})
const session = await client.session.create({
location: { directory: process.cwd() },
})
await client.session.prompt({
sessionID: session.id,
text: "Review the current changes",
})
Code Mode
Модели обожают писать код, и OpenCode 2.0 использует это в большей степени, чем любой другой агент для кодирования. В пакете @opencode/codemode реализован минимальный интерпретатор JavaScript.
Этот пакет принимает MCP-серверы или OpenAPI-эндпоинты, преобразуя их в функции, которые агент может вызывать в скрипте. Скрипты могут работать нативно без усложнений Node.js VM или сложных решений вроде QuickJS.
Это позволяет агенту писать скрипты, которые, например, вызывают один инструмент, проходят по результатам и вызывают другой инструмент. Единая сессия взаимодействия вместо последовательных вызовов.
Все MCP-серверы в версии 2.0 по умолчанию включены в режиме кода. Это означает, что можно добавить тысячи них с минимальными затратами на контекст, и агент будет их находить и комбинировать для выполнения задач.
Фоновые задачи
Последний набор моделей невероятно хорошо справляется с оркестрацией, и важно, чтобы фреймворки позволяли им в полной мере использовать эту способность.
Во-первых, добавлены фоновые подагенты. Это позволяет основному агенту передать часть работы другому, пока он продолжает работу.
Это происходит автоматически, но можно также запустить это вручную — даже с использованием другой модели. Например, можно выполнить команду вроде «запустить фоновый подагент fable для рецензии этого кода» параллельно с основным взаимодействием.
Во-вторых, добавлены фоновые команды оболочки. Инструмент shell можно вызывать асинхронно, чтобы долгоиграющие задачи не блокировали основного агента. Его уведомят по завершении.
Если какая-то команда оболочки или подагент занимает больше времени, чем ожидалось, можно нажать горячую клавишу, чтобы переместить её в фон и продолжить писать запросы.
Плагины
Хотя в OpenCode 1.0 была система плагинов, она не получила должного внимания. Чтобы исправить это, мы заставили себя реализовать практически каждый компонент OpenCode 2.0 как внутренний плагин — теперь их уже 80+. Это гарантирует, что API плагинов останется хорошо поддерживаемым.
Мы также повысили TUI-плагины со статуса экспериментальных до стабильных. Так как всё работает через OpenTUI, можно создать практически что угодно. Вот пример чего-то совершенно бесполезного.
Мы также потратили немало времени, чтобы всё в OpenCode 2.0 можно было горячей перезагружать. Таким образом, агент может написать для себя плагин во время сессии и использовать его сразу же — мы описали дизайн этого в предыдущей записи.
Можно попросить OpenCode создать любой нужный вам плагин, и он будет знать, как это сделать. Но если захочется изучить документацию, она доступна здесь.
SDK
OpenCode теперь можно использовать как библиотеку через пакет @opencode/sdk. Это тот же код, который питает наш CLI.
Это означает, что можно урезать его и создать собственный вариант OpenCode, который работает на сервере или в специализированных окружениях типа Durable Objects. Потом можно подключиться к нему из любого клиента OpenCode, так как он использует стандартный протокол сервера OpenCode.
Также есть опциональный API на основе Effect.
Этот API ещё в разработке, так как всё меняется, но уже можно его использовать.
Обновление
Чтобы обновить CLI, убедитесь, что на установлена последняя версия 1.x, затем запустите opencode upgrade --major.
Чтобы обновить десктопное приложение, загрузите последнюю версию отсюда.
Есть несколько критических изменений:
- Плагины 1.0 не будут работать в 2.0
- Server API полностью переделан
- Конфигурация tui.json переехала в json
Есть много других изменений, но они обратно совместимы. Имеет смысл указать OpenCode на эту документацию, чтобы он смог мигрировать вещи для вас.