Português
Documentação
Servidor

Servidor

Interaja com o servidor do opencode via HTTP.

O comando opencode serve roda um servidor HTTP headless que expõe um endpoint OpenAPI que um cliente do opencode pode usar.


Uso

opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]

Opções

FlagDescriçãoPadrão
--portPorta na qual escutar4096
--hostnameHostname no qual escutar127.0.0.1
--mdnsAtivar descoberta por mDNSfalse
--mdns-domainNome de domínio personalizado para o serviço mDNSopencode.local
--corsOrigens de navegador adicionais a permitir[]

--cors pode ser passado várias vezes:

opencode serve --cors http://localhost:5173 --cors https://app.example.com

Autenticação

Defina OPENCODE_SERVER_PASSWORD para proteger o servidor com autenticação HTTP básica. O nome de usuário padrão é opencode, ou defina OPENCODE_SERVER_USERNAME para sobrescrevê-lo. Isso se aplica tanto ao opencode serve quanto ao opencode web.

OPENCODE_SERVER_PASSWORD=your-password opencode serve

Como funciona

Quando você roda o opencode, ele inicia uma TUI e um servidor, em que a TUI é o cliente que se comunica com o servidor. O servidor expõe um endpoint de spec OpenAPI 3.1. Esse endpoint também é usado para gerar um SDK.

Dica: Use o servidor do opencode para interagir com o opencode programaticamente.

Essa arquitetura permite que o opencode suporte vários clientes e permite que você interaja com o opencode programaticamente.

Você pode rodar opencode serve para iniciar um servidor independente. Se você tiver a TUI do opencode em execução, opencode serve iniciará um novo servidor.


Conectar a um servidor existente

Quando você inicia a TUI, ela atribui uma porta e um hostname aleatoriamente. Em vez disso, você pode passar as flags --hostname e --port. Depois use isso para conectar ao servidor dela.

O endpoint /tui pode ser usado para controlar a TUI pelo servidor. Por exemplo, você pode pré-preencher ou executar um prompt. Essa configuração é usada pelos plugins de IDE do OpenCode.


Spec

O servidor publica uma spec OpenAPI 3.1 que pode ser visualizada em:

http://<hostname>:<port>/doc

Por exemplo, http://localhost:4096/doc. Use a spec para gerar clientes ou inspecionar os tipos de requisição e resposta. Ou visualize-a em um explorador Swagger.


APIs

O servidor do opencode expõe as seguintes APIs.


Global

MétodoCaminhoDescriçãoResposta
GET/global/healthObter a saúde e a versão do servidor{ healthy: true, version: string }
GET/global/eventObter eventos globais (stream SSE)Stream de eventos

Project

MétodoCaminhoDescriçãoResposta
GET/projectListar todos os projetosProject[] (opens in a new tab)
GET/project/currentObter o projeto atualProject (opens in a new tab)

Path e VCS

MétodoCaminhoDescriçãoResposta
GET/pathObter o caminho atualPath (opens in a new tab)
GET/vcsObter info de VCS do projeto atualVcsInfo (opens in a new tab)

Instance

MétodoCaminhoDescriçãoResposta
POST/instance/disposeDescartar a instância atualboolean

Config

MétodoCaminhoDescriçãoResposta
GET/configObter informações de configConfig (opens in a new tab)
PATCH/configAtualizar a configConfig (opens in a new tab)
GET/config/providersListar provedores e modelos padrão{ providers: Provider[] (opens in a new tab), default: { [key: string]: string } }

Provider

MétodoCaminhoDescriçãoResposta
GET/providerListar todos os provedores{ all: Provider[] (opens in a new tab), default: {...}, connected: string[] }
GET/provider/authObter os métodos de autenticação do provedor{ [providerID: string]: ProviderAuthMethod[] (opens in a new tab) }
POST/provider/{id}/oauth/authorizeAutorizar um provedor usando OAuthProviderAuthAuthorization (opens in a new tab)
POST/provider/{id}/oauth/callbackTratar o callback OAuth de um provedorboolean

Sessões

MétodoCaminhoDescriçãoNotas
GET/sessionListar todas as sessõesRetorna Session[] (opens in a new tab)
POST/sessionCriar uma nova sessãobody: { parentID?, title? }, retorna Session (opens in a new tab)
GET/session/statusObter o status de todas as sessõesRetorna { [sessionID: string]: SessionStatus (opens in a new tab) }
GET/session/:idObter os detalhes da sessãoRetorna Session (opens in a new tab)
DELETE/session/:idExcluir uma sessão e todos os seus dadosRetorna boolean
PATCH/session/:idAtualizar as propriedades da sessãobody: { title? }, retorna Session (opens in a new tab)
GET/session/:id/childrenObter as sessões filhas de uma sessãoRetorna Session[] (opens in a new tab)
GET/session/:id/todoObter a lista de tarefas de uma sessãoRetorna Todo[] (opens in a new tab)
POST/session/:id/initAnalisar o app e criar o AGENTS.mdbody: { messageID, providerID, modelID }, retorna boolean
POST/session/:id/forkBifurcar uma sessão existente em uma mensagembody: { messageID? }, retorna Session (opens in a new tab)
POST/session/:id/abortAbortar uma sessão em execuçãoRetorna boolean
POST/session/:id/shareCompartilhar uma sessãoRetorna Session (opens in a new tab)
DELETE/session/:id/shareDeixar de compartilhar uma sessãoRetorna Session (opens in a new tab)
GET/session/:id/diffObter o diff desta sessãoquery: messageID?, retorna FileDiff[] (opens in a new tab)
POST/session/:id/summarizeResumir a sessãobody: { providerID, modelID }, retorna boolean
POST/session/:id/revertReverter uma mensagembody: { messageID, partID? }, retorna boolean
POST/session/:id/unrevertRestaurar todas as mensagens revertidasRetorna boolean
POST/session/:id/permissions/:permissionIDResponder a uma solicitação de permissãobody: { response, remember? }, retorna boolean

Mensagens

MétodoCaminhoDescriçãoNotas
GET/session/:id/messageListar as mensagens de uma sessãoquery: limit?, retorna { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}[]
POST/session/:id/messageEnviar uma mensagem e aguardar a respostabody: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, retorna { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}
GET/session/:id/message/:messageIDObter os detalhes da mensagemRetorna { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}
POST/session/:id/prompt_asyncEnviar uma mensagem de forma assíncrona (sem aguardar)body: igual a /session/:id/message, retorna 204 No Content
POST/session/:id/commandExecutar um comando de barrabody: { messageID?, agent?, model?, command, arguments }, retorna { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}
POST/session/:id/shellExecutar um comando de shellbody: { agent, model?, command }, retorna { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}

Comandos

MétodoCaminhoDescriçãoResposta
GET/commandListar todos os comandosCommand[] (opens in a new tab)

Arquivos

MétodoCaminhoDescriçãoResposta
GET/find?pattern=<pat>Buscar texto em arquivosArray de objetos de correspondência com path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Encontrar arquivos e diretórios por nomestring[] (caminhos)
GET/find/symbol?query=<q>Encontrar símbolos do workspaceSymbol[] (opens in a new tab)
GET/file?path=<path>Listar arquivos e diretóriosFileNode[] (opens in a new tab)
GET/file/content?path=<p>Ler um arquivoFileContent (opens in a new tab)
GET/file/statusObter o status dos arquivos rastreadosFile[] (opens in a new tab)

Parâmetros de query de /find/file

  • query (obrigatório) — string de busca (correspondência difusa)
  • type (opcional) — limitar os resultados a "file" ou "directory"
  • directory (opcional) — sobrescrever a raiz do projeto para a busca
  • limit (opcional) — máximo de resultados (1-200)
  • dirs (opcional) — flag legada ( "false" retorna apenas arquivos)

Ferramentas (Experimental)

MétodoCaminhoDescriçãoResposta
GET/experimental/tool/idsListar todos os IDs de ferramentasToolIDs (opens in a new tab)
GET/experimental/tool?provider=<p>&model=<m>Listar ferramentas com schemas JSON para um modeloToolList (opens in a new tab)

LSP, Formatadores e MCP

MétodoCaminhoDescriçãoResposta
GET/lspObter o status do servidor LSPLSPStatus[] (opens in a new tab)
GET/formatterObter o status do formatadorFormatterStatus[] (opens in a new tab)
GET/mcpObter o status do servidor MCP{ [name: string]: MCPStatus (opens in a new tab) }
POST/mcpAdicionar um servidor MCP dinamicamentebody: { name, config }, retorna o objeto de status do MCP

Agentes

MétodoCaminhoDescriçãoResposta
GET/agentListar todos os agentes disponíveisAgent[] (opens in a new tab)

Logging

MétodoCaminhoDescriçãoResposta
POST/logEscrever uma entrada de log. Body: { service, level, message, extra? }boolean

TUI

MétodoCaminhoDescriçãoResposta
POST/tui/append-promptAnexar texto ao promptboolean
POST/tui/open-helpAbrir o diálogo de ajudaboolean
POST/tui/open-sessionsAbrir o seletor de sessõesboolean
POST/tui/open-themesAbrir o seletor de temasboolean
POST/tui/open-modelsAbrir o seletor de modelosboolean
POST/tui/submit-promptEnviar o prompt atualboolean
POST/tui/clear-promptLimpar o promptboolean
POST/tui/execute-commandExecutar um comando ({ command })boolean
POST/tui/show-toastMostrar um toast ({ title?, message, variant })boolean
GET/tui/control/nextAguardar a próxima solicitação de controleObjeto de solicitação de controle
POST/tui/control/responseResponder a uma solicitação de controle ({ body })boolean

Auth

MétodoCaminhoDescriçãoResposta
PUT/auth/:idDefinir as credenciais de autenticação. O body deve corresponder ao schema do provedorboolean

Eventos

MétodoCaminhoDescriçãoResposta
GET/eventStream de server-sent events. O primeiro evento é server.connected, depois os eventos do busStream de server-sent events

Docs

MétodoCaminhoDescriçãoResposta
GET/docEspecificação OpenAPI 3.1Página HTML com a spec OpenAPI