Der Befehl opencode serve startet einen headless HTTP-Server.
Er stellt einen OpenAPI-Endpunkt bereit, den ein opencode-Client nutzen kann.
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
Flag Description Default --portPort to listen on 4096--hostnameHostname to listen on 127.0.0.1--mdnsEnable mDNS discovery false--mdns-domainCustom domain name for mDNS service opencode.local--corsAdditional browser origins to allow []
--cors kann mehrfach angegeben werden:
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.
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.
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.
Method Path Description Response GET/global/healthRuft Server-Status und Version ab { healthy: true, version: string }GET/global/eventRuft globale Events ab (SSE-Stream) Event stream
Method Path Description Response GET/projectListet alle Projekte Project[]GET/project/currentRuft das aktuelle Projekt ab Project
Method Path Description Response GET/pathRuft den aktuellen Pfad ab PathGET/vcsRuft VCS-Infos fuer das aktuelle Projekt ab VcsInfo
Method Path Description Response POST/instance/disposeBeendet die aktuelle Instanz boolean
Method Path Description Response GET/configRuft Konfigurationsinfos ab ConfigPATCH/configAktualisiert Konfiguration ConfigGET/config/providersListet Provider und Standard-Modelle { providers: Provider[] , default: { [key: string]: string } }
Method Path Description Response 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 OAuth ProviderAuthAuthorizationPOST/provider/{id}/oauth/callbackBehandelt OAuth-Callback fuer einen Provider boolean
Method Path Description Notes GET/sessionListet alle Sitzungen Gibt Session[] zurueck POST/sessionErstellt eine neue Sitzung body: { parentID?, title? }, returns Session GET/session/statusRuft Status aller Sitzungen ab Gibt { [sessionID: string]: SessionStatus } zurueck GET/session/:idRuft Sitzungsdetails ab Gibt Session zurueck DELETE/session/:idLoescht eine Sitzung und alle Daten Gibt boolean zurueck PATCH/session/:idAktualisiert Sitzungseigenschaften body: { title? }, returns Session GET/session/:id/childrenRuft Kind-Sitzungen einer Sitzung ab Gibt Session[] zurueck GET/session/:id/todoRuft die Todo-Liste einer Sitzung ab Gibt Todo[] zurueck POST/session/:id/initAnalysiert App und erstellt AGENTS.md body: { messageID, providerID, modelID }, returns boolean POST/session/:id/forkForkt eine bestehende Sitzung an einer Nachricht body: { messageID? }, returns Session POST/session/:id/abortBricht eine laufende Sitzung ab Gibt boolean zurueck POST/session/:id/shareTeilt eine Sitzung Gibt Session zurueck DELETE/session/:id/shareHebt Teilen einer Sitzung auf Gibt Session zurueck GET/session/:id/diffRuft den Diff fuer diese Sitzung ab query: messageID?, returns FileDiff[] POST/session/:id/summarizeFasst die Sitzung zusammen body: { providerID, modelID }, returns boolean POST/session/:id/revertSetzt eine Nachricht zurueck body: { messageID, partID? }, returns boolean POST/session/:id/unrevertStellt alle zurueckgesetzten Nachrichten wieder her Gibt boolean zurueck POST/session/:id/permissions/:permissionIDAntwortet auf eine Berechtigungsanfrage body: { response, remember? }, returns boolean
Method Path Description Notes GET/session/:id/messageListet Nachrichten in einer Sitzung query: limit?, returns { info: Message , parts: Part[] }[] POST/session/:id/messageSendet eine Nachricht und wartet auf Antwort body: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, returns { info: Message , parts: Part[] } GET/session/:id/message/:messageIDRuft Nachrichtendetails ab Returns { 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 aus body: { messageID?, agent?, model?, command, arguments }, returns { info: Message , parts: Part[] } POST/session/:id/shellFuehrt einen Shell-Befehl aus body: { agent, model?, command }, returns { info: Message , parts: Part[] }
Method Path Description Response GET/commandListet alle Befehle Command[]
Method Path Description Response GET/find?pattern=<pat>Sucht Text in Dateien Array of match objects with path, lines, line_number, absolute_offset, submatches GET/find/file?query=<q>Findet Dateien und Verzeichnisse nach Namen string[] (paths)GET/find/symbol?query=<q>Findet Workspace-Symbole Symbol[]GET/file?path=<path>Listet Dateien und Verzeichnisse FileNode[]GET/file/content?path=<p>Liest eine Datei FileContentGET/file/statusRuft Status fuer getrackte Dateien ab File[]
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)
Method Path Description Response GET/experimental/tool/idsListet alle Tool-IDs ToolIDsGET/experimental/tool?provider=<p>&model=<m>Listet Tools mit JSON-Schemas fuer ein Modell ToolList
Method Path Description Response GET/lspRuft LSP-Server-Status ab LSPStatus[]GET/formatterRuft Formatter-Status ab FormatterStatus[]GET/mcpRuft MCP-Server-Status ab { [name: string]: MCPStatus }POST/mcpFuegt MCP-Server dynamisch hinzu body: { name, config }, returns MCP status object
Method Path Description Response GET/agentListet alle verfuegbaren Agenten Agent[]
Method Path Description Response POST/logSchreibt Log-Eintrag. Body: { service, level, message, extra? } boolean
Method Path Description Response POST/tui/append-promptHaengt Text an den Prompt an booleanPOST/tui/open-helpOeffnet den Hilfedialog booleanPOST/tui/open-sessionsOeffnet die Session-Auswahl booleanPOST/tui/open-themesOeffnet die Theme-Auswahl booleanPOST/tui/open-modelsOeffnet die Modell-Auswahl booleanPOST/tui/submit-promptSendet den aktuellen Prompt ab booleanPOST/tui/clear-promptLeert den Prompt booleanPOST/tui/execute-commandFuehrt einen Befehl aus ({ command }) booleanPOST/tui/show-toastZeigt Toast ({ title?, message, variant }) booleanGET/tui/control/nextWartet auf die naechste Kontrollanfrage Control request object POST/tui/control/responseAntwortet auf eine Kontrollanfrage ({ body }) boolean
Method Path Description Response PUT/auth/:idSetzt Authentifizierungsdaten. Body muss dem Provider-Schema entsprechen boolean
Method Path Description Response GET/eventServer-Sent Events Stream. Erstes Event ist server.connected, dann Bus-Events Server-sent events stream
Method Path Description Response GET/docOpenAPI 3.1 Spezifikation HTML page with OpenAPI spec