Skip to main content

HTTP

GET /health

Returns server status.
{ "ok": true }

GET /providers

Lists available providers and their capabilities.
{
  "providers": [
    {
      "id": "claude",
      "label": "Claude",
      "defaultModel": "claude-sonnet-4-6",
      "models": ["claude-sonnet-4-6", "claude-opus-4-7", "claude-haiku-4-5"],
      "configured": true
    }
  ]
}

POST /chat

Send chat messages to a provider. Streams SSE by default. Request body:
FieldTypeRequiredDescription
providerstringyescodex or claude
modelstringyesProvider model ID
messagesarrayyes{ role, content } chat messages
systemPromptstringnoSystem prompt
streambooleannoDefaults to true
Example:
curl -N -X POST http://localhost:4096/chat \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "codex",
    "model": "gpt-5.4-mini",
    "messages": [{ "role": "user", "content": "Explain this module." }]
  }'

POST /completions

Return a one-shot completion for an editor buffer.
FieldTypeRequiredDescription
prefixstringyesText before the cursor
suffixstringyesText after the cursor
languagestringyesFile language
filepathstringyesCurrent file path
maxTokensnumbernoCompletion budget
temperaturenumbernoSampling temperature
providerstringnoProvider override
modelstringnoModel override

POST /inline-edit

Return replacement text for a selected range.
FieldTypeRequiredDescription
filestringyesFile path
rangeobjectyesstartLine, startColumn, endLine, endColumn
promptstringyesEdit instruction
textstringyesSelected text
repoRootstringnoRepository root
providerstringnoProvider override
modelstringnoModel override

### `GET /sessions`

Lists all active sessions.

```json
[
  {
    "id": "abc-123",
    "repoRoot": "/repo",
    "provider": "claude",
    "model": "claude-sonnet-4-6",
    "createdAt": "2026-04-26T10:00:00.000Z"
  }
]

GET /sessions/:id

Get a single session by ID.

DELETE /sessions/:id

Delete a session and free its resources.

SSE Events

When streaming from POST /chat, the server emits data: lines containing one of these event objects:
EventDescription
startProvider and model selected
text_deltaIncremental text chunk from the model
doneFinal text and optional usage
errorError during processing
Example stream:
data: {"type":"start","provider":"codex","model":"gpt-5.4-mini"}
data: {"type":"text_delta","text":"This module"}
data: {"type":"done","provider":"codex","model":"gpt-5.4-mini","text":"This module..."}

WebSocket

Connect to:
ws://localhost:4096/ws
The server sends a ready message first:
{ "type": "ready", "protocolVersion": 1 }

Session Messages

| Client message | Purpose | |---|---|---| | session.create | Create a git-backed agent session | | session.open | Reopen an existing session | | chat.turn | Run an agent turn in the session worktree | | run.cancel | Cancel an active session run | | changes.status | Read changed files | | changes.accept_all | Apply all agent changes to the repo | | changes.discard_all | Drop all agent changes | | changes.accept_file | Apply one changed file | | changes.discard_file | Drop one changed file |

One-Shot Messages

Client messagePurpose
chatStream a stateless chat request
completionStream a stateless completion request
inline.editReturn replacement text for an edit
cancelCancel a one-shot request by ID
pingHealth check

Server Messages

Server messagePurpose
session.createdSession metadata
assistant.deltaAgent text chunk
assistant.doneAgent turn complete
inline.resultInline edit replacement
changes.updatedChanged files and refs
run.statussyncing, running, checking, checkpointing, or done
chat_eventStateless chat or completion stream event
cancelledRequest cancelled
pongPing response
errorError message