Zum Inhalt springen
V1-Doku
Nutzung

Server

Der Befehl opencode serve startet einen headless HTTP-Server. Er stellt einen OpenAPI-Endpunkt bereit, den ein opencode-Client nutzen kann.


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

Optionen

FlagDescriptionDefault
--portPort to listen on4096
--hostnameHostname to listen on127.0.0.1
--mdnsEnable mDNS discoveryfalse
--mdns-domainCustom domain name for mDNS serviceopencode.local
--corsAdditional browser origins to allow[]

--cors kann mehrfach angegeben werden:

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

Setze OPENCODE_SERVER_PASSWORD, um den Server mit HTTP Basic Auth zu schuetzen. Der Benutzername ist standardmaessig opencode, kann aber mit OPENCODE_SERVER_USERNAME ueberschrieben werden. Das gilt fuer opencode serve und opencode web.

Terminal
OPENCODE_SERVER_PASSWORD=your-password opencode serve

Wenn du opencode startest, werden TUI und Server gestartet. Die TUI ist dabei der Client, der mit dem Server spricht; dessen OpenAPI-3.1-Endpunkt dient auch zur Generierung des SDK.

Diese Architektur erlaubt mehrere Clients und programmatische Nutzung.

Mit opencode serve startest du einen eigenstaendigen Server. Laeuft bereits eine TUI, startet opencode serve trotzdem eine neue Serverinstanz.


Mit bestehendem Server verbinden

Beim TUI-Start werden Port und Hostname zufaellig gewaehlt. Alternativ gibst du --hostname und --port als Flags vor und verbindest dich dann gezielt damit.

Der Endpunkt /tui kann die TUI ueber den Server steuern, etwa zum Vorbelegen oder Abschicken von Prompts. Dieses Muster nutzen auch die OpenCode-IDE-Plugins.


Der Server veroeffentlicht eine OpenAPI-3.1-Spezifikation unter:

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

Zum Beispiel http://localhost:4096/doc. Nutze die Spec zum Generieren von Clients, zum Pruefen von Request/Response-Typen oder in einem Swagger-Explorer.


Der opencode-Server stellt folgende APIs bereit.


MethodPathDescriptionResponse
GET/global/healthRuft Server-Status und Version ab{ healthy: true, version: string }
GET/global/eventRuft globale Events ab (SSE-Stream)Event stream

MethodPathDescriptionResponse
GET/projectListet alle ProjekteProject[]
GET/project/currentRuft das aktuelle Projekt abProject

MethodPathDescriptionResponse
GET/pathRuft den aktuellen Pfad abPath
GET/vcsRuft VCS-Infos fuer das aktuelle Projekt abVcsInfo

MethodPathDescriptionResponse
POST/instance/disposeBeendet die aktuelle Instanzboolean

MethodPathDescriptionResponse
GET/configRuft Konfigurationsinfos abConfig
PATCH/configAktualisiert KonfigurationConfig
GET/config/providersListet Provider und Standard-Modelle{ providers: Provider[], default: { [key: string]: string } }

MethodPathDescriptionResponse
GET/providerListet alle Provider{ all: Provider[], default: {...}, connected: string[] }
GET/provider/authRuft Authentifizierungsmethoden der Provider ab{ [providerID: string]: ProviderAuthMethod[] }
POST/provider/{id}/oauth/authorizeAutorisiert einen Provider per OAuthProviderAuthAuthorization
POST/provider/{id}/oauth/callbackBehandelt OAuth-Callback fuer einen Providerboolean

MethodPathDescriptionNotes
GET/sessionListet alle SitzungenGibt Session[] zurueck
POST/sessionErstellt eine neue Sitzungbody: { parentID?, title? }, returns Session
GET/session/statusRuft Status aller Sitzungen abGibt { [sessionID: string]: SessionStatus } zurueck
GET/session/:idRuft Sitzungsdetails abGibt Session zurueck
DELETE/session/:idLoescht eine Sitzung und alle DatenGibt boolean zurueck
PATCH/session/:idAktualisiert Sitzungseigenschaftenbody: { title? }, returns Session
GET/session/:id/childrenRuft Kind-Sitzungen einer Sitzung abGibt Session[] zurueck
POST/session/:id/initAnalysiert App und erstellt AGENTS.mdbody: { messageID, providerID, modelID }, returns boolean
POST/session/:id/forkForkt eine bestehende Sitzung an einer Nachrichtbody: { messageID? }, returns Session
POST/session/:id/abortBricht eine laufende Sitzung abGibt boolean zurueck
GET/session/:id/diffRuft den Diff fuer diese Sitzung abquery: messageID?, returns FileDiff[]
POST/session/:id/summarizeFasst die Sitzung zusammenbody: { providerID, modelID }, returns boolean
POST/session/:id/revertSetzt eine Nachricht zurueckbody: { messageID, partID? }, returns boolean
POST/session/:id/unrevertStellt alle zurueckgesetzten Nachrichten wieder herGibt boolean zurueck
POST/session/:id/permissions/:permissionIDAntwortet auf eine Berechtigungsanfragebody: { response, remember? }, returns boolean

MethodPathDescriptionNotes
GET/session/:id/messageListet Nachrichten in einer Sitzungquery: limit?, returns { info: Message, parts: Part[]}[]
POST/session/:id/messageSendet eine Nachricht und wartet auf Antwortbody: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, returns { info: Message, parts: Part[]}
GET/session/:id/message/:messageIDRuft Nachrichtendetails abReturns { info: Message, parts: Part[]}
POST/session/:id/prompt_asyncSendet eine Nachricht asynchron (ohne Warten)body: same as /session/:id/message, returns 204 No Content
POST/session/:id/commandFuehrt einen Slash-Befehl ausbody: { messageID?, agent?, model?, command, arguments }, returns { info: Message, parts: Part[]}
POST/session/:id/shellFuehrt einen Shell-Befehl ausbody: { agent, model?, command }, returns { info: Message, parts: Part[]}

MethodPathDescriptionResponse
GET/commandListet alle BefehleCommand[]

MethodPathDescriptionResponse
GET/find?pattern=<pat>Sucht Text in DateienArray of match objects with path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Findet Dateien und Verzeichnisse nach Namenstring[] (paths)
GET/find/symbol?query=<q>Findet Workspace-SymboleSymbol[]
GET/file?path=<path>Listet Dateien und VerzeichnisseFileNode[]
GET/file/content?path=<p>Liest eine DateiFileContent
GET/file/statusRuft Status fuer getrackte Dateien abFile[]

/find/file Abfrageparameter

  • query (erforderlich) — Suchbegriff (Fuzzy-Suche)
  • type (optional) — Ergebnisse auf "file" oder "directory" beschränken
  • directory (optional) — Projektstammverzeichnis für die Suche überschreiben
  • limit (optional) — Maximale Ergebnisse (1–200)
  • dirs (optional) — Legacy-Flag ("false" gibt nur Dateien zurück)

MethodPathDescriptionResponse
GET/experimental/tool/idsListet alle Tool-IDsToolIDs
GET/experimental/tool?provider=<p>&model=<m>Listet Tools mit JSON-Schemas fuer ein ModellToolList

MethodPathDescriptionResponse
GET/lspRuft LSP-Server-Status abLSPStatus[]
GET/formatterRuft Formatter-Status abFormatterStatus[]
GET/mcpRuft MCP-Server-Status ab{ [name: string]: MCPStatus }
POST/mcpFuegt MCP-Server dynamisch hinzubody: { name, config }, returns MCP status object

MethodPathDescriptionResponse
GET/agentListet alle verfuegbaren AgentenAgent[]

MethodPathDescriptionResponse
POST/logSchreibt Log-Eintrag. Body: { service, level, message, extra? }boolean

MethodPathDescriptionResponse
POST/tui/append-promptHaengt Text an den Prompt anboolean
POST/tui/open-helpOeffnet den Hilfedialogboolean
POST/tui/open-sessionsOeffnet die Session-Auswahlboolean
POST/tui/open-themesOeffnet die Theme-Auswahlboolean
POST/tui/open-modelsOeffnet die Modell-Auswahlboolean
POST/tui/submit-promptSendet den aktuellen Prompt abboolean
POST/tui/clear-promptLeert den Promptboolean
POST/tui/execute-commandFuehrt einen Befehl aus ({ command })boolean
POST/tui/show-toastZeigt Toast ({ title?, message, variant })boolean
GET/tui/control/nextWartet auf die naechste KontrollanfrageControl request object
POST/tui/control/responseAntwortet auf eine Kontrollanfrage ({ body })boolean

MethodPathDescriptionResponse
PUT/auth/:idSetzt Authentifizierungsdaten. Body muss dem Provider-Schema entsprechenboolean

MethodPathDescriptionResponse
GET/eventServer-Sent Events Stream. Erstes Event ist server.connected, dann Bus-EventsServer-sent events stream

MethodPathDescriptionResponse
GET/docOpenAPI 3.1 SpezifikationHTML page with OpenAPI spec