Сервер
Взаимодействуйте с сервером opencode через HTTP.
Команда opencode serve запускает headless HTTP-сервер, который предоставляет конечную точку OpenAPI, доступную для использования клиентом opencode.
Использование
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]Опции
| Флаг | Описание | По умолчанию |
|---|---|---|
--port | Порт для прослушивания | 4096 |
--hostname | Имя хоста для прослушивания | 127.0.0.1 |
--mdns | Включить обнаружение mDNS | false |
--mdns-domain | Пользовательское доменное имя для службы mDNS | opencode.local |
--cors | Дополнительные браузерные источники для разрешения | [] |
--cors можно передавать несколько раз:
opencode serve --cors http://localhost:5173 --cors https://app.example.comАутентификация
Задайте OPENCODE_SERVER_PASSWORD, чтобы защитить сервер базовой HTTP-аутентификацией. Имя пользователя по умолчанию opencode, либо задайте OPENCODE_SERVER_USERNAME, чтобы переопределить его. Это применяется как к opencode serve, так и к opencode web.
OPENCODE_SERVER_PASSWORD=your-password opencode serveКак это работает
Когда вы запускаете opencode, он запускает TUI и сервер. При этом TUI является клиентом, который общается с сервером. Сервер предоставляет конечную точку спецификации OpenAPI 3.1. Эта конечная точка также используется для генерации SDK.
Совет: Используйте сервер opencode для программного взаимодействия с opencode.
Эта архитектура позволяет opencode поддерживать несколько клиентов и даёт вам возможность взаимодействовать с opencode программно.
Вы можете выполнить opencode serve, чтобы запустить автономный сервер. Если у вас запущен TUI opencode, opencode serve запустит новый сервер.
Подключение к существующему серверу
Когда вы запускаете TUI, он случайным образом назначает порт и имя хоста. Вместо этого вы можете передать флаги --hostname и --port. Затем используйте их для подключения к его серверу.
Конечную точку /tui можно использовать для управления TUI через сервер. Например, вы можете предзаполнить или запустить промпт. Эта настройка используется плагинами IDE OpenCode.
Спецификация
Сервер публикует спецификацию OpenAPI 3.1, которую можно посмотреть по адресу:
http://<hostname>:<port>/docНапример, http://localhost:4096/doc. Используйте спецификацию для генерации клиентов или проверки типов запросов и ответов. Или просмотрите её в Swagger explorer.
API
Сервер opencode предоставляет следующие API.
Global
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /global/health | Получить состояние и версию сервера | { healthy: true, version: string } |
GET | /global/event | Получить глобальные события (SSE-поток) | Поток событий |
Project
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /project | Список всех проектов | Project[] (opens in a new tab) |
GET | /project/current | Получить текущий проект | Project (opens in a new tab) |
Path & VCS
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /path | Получить текущий путь | Path (opens in a new tab) |
GET | /vcs | Получить информацию о VCS для текущего проекта | VcsInfo (opens in a new tab) |
Instance
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
POST | /instance/dispose | Освободить текущий экземпляр | boolean |
Config
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /config | Получить информацию о конфигурации | Config (opens in a new tab) |
PATCH | /config | Обновить конфигурацию | Config (opens in a new tab) |
GET | /config/providers | Список провайдеров и моделей по умолчанию | { providers: Provider[] (opens in a new tab), default: { [key: string]: string } } |
Provider
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /provider | Список всех провайдеров | { all: Provider[] (opens in a new tab), default: {...}, connected: string[] } |
GET | /provider/auth | Получить методы аутентификации провайдера | { [providerID: string]: ProviderAuthMethod[] (opens in a new tab) } |
POST | /provider/{id}/oauth/authorize | Авторизовать провайдера с помощью OAuth | ProviderAuthAuthorization (opens in a new tab) |
POST | /provider/{id}/oauth/callback | Обработать OAuth-обратный вызов для провайдера | boolean |
Sessions
| Метод | Путь | Описание | Примечания |
|---|---|---|---|
GET | /session | Список всех сессий | Возвращает Session[] (opens in a new tab) |
POST | /session | Создать новую сессию | тело: { parentID?, title? }, возвращает Session (opens in a new tab) |
GET | /session/status | Получить статус всех сессий | Возвращает { [sessionID: string]: SessionStatus (opens in a new tab) } |
GET | /session/:id | Получить детали сессии | Возвращает Session (opens in a new tab) |
DELETE | /session/:id | Удалить сессию и все её данные | Возвращает boolean |
PATCH | /session/:id | Обновить свойства сессии | тело: { title? }, возвращает Session (opens in a new tab) |
GET | /session/:id/children | Получить дочерние сессии сессии | Возвращает Session[] (opens in a new tab) |
GET | /session/:id/todo | Получить список задач для сессии | Возвращает Todo[] (opens in a new tab) |
POST | /session/:id/init | Проанализировать приложение и создать AGENTS.md | тело: { messageID, providerID, modelID }, возвращает boolean |
POST | /session/:id/fork | Ответвить существующую сессию на сообщении | тело: { messageID? }, возвращает Session (opens in a new tab) |
POST | /session/:id/abort | Прервать выполняющуюся сессию | Возвращает boolean |
POST | /session/:id/share | Поделиться сессией | Возвращает Session (opens in a new tab) |
DELETE | /session/:id/share | Отменить публикацию сессии | Возвращает Session (opens in a new tab) |
GET | /session/:id/diff | Получить diff для этой сессии | запрос: messageID?, возвращает FileDiff[] (opens in a new tab) |
POST | /session/:id/summarize | Резюмировать сессию | тело: { providerID, modelID }, возвращает boolean |
POST | /session/:id/revert | Откатить сообщение | тело: { messageID, partID? }, возвращает boolean |
POST | /session/:id/unrevert | Восстановить все откатанные сообщения | Возвращает boolean |
POST | /session/:id/permissions/:permissionID | Ответить на запрос разрешения | тело: { response, remember? }, возвращает boolean |
Messages
| Метод | Путь | Описание | Примечания |
|---|---|---|---|
GET | /session/:id/message | Список сообщений в сессии | запрос: limit?, возвращает { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}[] |
POST | /session/:id/message | Отправить сообщение и дождаться ответа | тело: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, возвращает { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} |
GET | /session/:id/message/:messageID | Получить детали сообщения | Возвращает { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} |
POST | /session/:id/prompt_async | Отправить сообщение асинхронно (без ожидания) | тело: то же, что и /session/:id/message, возвращает 204 No Content |
POST | /session/:id/command | Выполнить slash-команду | тело: { messageID?, agent?, model?, command, arguments }, возвращает { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} |
POST | /session/:id/shell | Выполнить команду оболочки | тело: { agent, model?, command }, возвращает { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} |
Commands
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /command | Список всех команд | Command[] (opens in a new tab) |
Files
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /find?pattern=<pat> | Поиск текста в файлах | Массив объектов совпадений с path, lines, line_number, absolute_offset, submatches |
GET | /find/file?query=<q> | Поиск файлов и каталогов по имени | string[] (пути) |
GET | /find/symbol?query=<q> | Поиск символов рабочего пространства | Symbol[] (opens in a new tab) |
GET | /file?path=<path> | Список файлов и каталогов | FileNode[] (opens in a new tab) |
GET | /file/content?path=<p> | Прочитать файл | FileContent (opens in a new tab) |
GET | /file/status | Получить статус отслеживаемых файлов | File[] (opens in a new tab) |
Параметры запроса /find/file
query(обязательный) — строка поиска (нечёткое совпадение)type(необязательный) — ограничить результаты до"file"или"directory"directory(необязательный) — переопределить корень проекта для поискаlimit(необязательный) — максимум результатов (1-200)dirs(необязательный) — устаревший флаг ("false"возвращает только файлы)
Tools (экспериментально)
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /experimental/tool/ids | Список всех ID инструментов | ToolIDs (opens in a new tab) |
GET | /experimental/tool?provider=<p>&model=<m> | Список инструментов с JSON-схемами для модели | ToolList (opens in a new tab) |
LSP, форматтеры и MCP
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /lsp | Получить статус LSP-серверов | LSPStatus[] (opens in a new tab) |
GET | /formatter | Получить статус форматтеров | FormatterStatus[] (opens in a new tab) |
GET | /mcp | Получить статус MCP-серверов | { [name: string]: MCPStatus (opens in a new tab) } |
POST | /mcp | Динамически добавить MCP-сервер | тело: { name, config }, возвращает объект статуса MCP |
Agents
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /agent | Список всех доступных агентов | Agent[] (opens in a new tab) |
Logging
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
POST | /log | Записать запись лога. Тело: { service, level, message, extra? } | boolean |
TUI
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
POST | /tui/append-prompt | Добавить текст к промпту | boolean |
POST | /tui/open-help | Открыть диалог справки | boolean |
POST | /tui/open-sessions | Открыть селектор сессий | boolean |
POST | /tui/open-themes | Открыть селектор тем | boolean |
POST | /tui/open-models | Открыть селектор моделей | boolean |
POST | /tui/submit-prompt | Отправить текущий промпт | boolean |
POST | /tui/clear-prompt | Очистить промпт | boolean |
POST | /tui/execute-command | Выполнить команду ({ command }) | boolean |
POST | /tui/show-toast | Показать toast ({ title?, message, variant }) | boolean |
GET | /tui/control/next | Дождаться следующего управляющего запроса | Объект управляющего запроса |
POST | /tui/control/response | Ответить на управляющий запрос ({ body }) | boolean |
Auth
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
PUT | /auth/:id | Установить учётные данные аутентификации. Тело должно соответствовать схеме провайдера | boolean |
Events
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /event | Поток server-sent events. Первое событие — server.connected, затем события шины | Поток server-sent events |
Docs
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /doc | Спецификация OpenAPI 3.1 | HTML-страница со спецификацией OpenAPI |