Сервис

С самого начала 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 на эту документацию, чтобы он смог мигрировать вещи для вас.