Skip to content

WebSocket State Hub ​

The state hub provides real-time session state to all connected clients via WebSocket. When an agent's state changes, the Board UI and any other listeners receive the update instantly.

Endpoints ​

OptimalOS has three WebSocket endpoints:

EndpointPurpose
/ws/terminalPTY terminal sessions (see Terminal).
/ws/stateReal-time orchestration state broadcast. Also bridges Morning Ritual events (triage_run_completed, triage_run_failed) to a window-level triage:updated CustomEvent for widgets like TODAY.
/ws/loomLive workflow strand events: run.started, step.started, step.completed, step.failed, run.finished. Used by the Loom tab for real-time strand animation. Code: optimalOS/src/server.ts:189-226 plus optimalOS/src/loom/event-hub.ts.

State WebSocket ​

wss://fabric.optimal.miami/ws/state?token=<your-auth-token>

Authentication uses the same session token as the REST API, passed as a query parameter. Invalid tokens result in an immediate close with code 4001.

Protocol: Snapshot + Delta ​

The state WebSocket uses a snapshot-then-delta protocol:

1. Snapshot (on connect) ​

When a client connects, the server immediately sends the full state of all tracked sessions:

json
{
  "type": "snapshot",
  "sessions": [
    {
      "id": "session-1",
      "taskId": "task-uuid",
      "agentType": "claude-code",
      "tmuxSession": "agent-login-fix",
      "state": "running",
      "label": "Fix login timeout",
      "prompt": "Fix the login timeout bug",
      "lastActivity": "2026-03-27T14:30:00.000Z",
      "lastEvent": "tool_use",
      "createdAt": "2026-03-27T14:28:00.000Z",
      "dependsOn": []
    }
  ],
  "timestamp": "2026-03-27T14:30:05.000Z"
}

2. Delta (ongoing) ​

State changes are batched with a 150ms debounce and sent as delta messages:

json
{
  "type": "delta",
  "changes": [
    {
      "type": "session_updated",
      "id": "session-1",
      "data": {
        "state": "awaiting_review",
        "lastEvent": "notification",
        "lastActivity": "2026-03-27T14:31:00.000Z"
      },
      "timestamp": "2026-03-27T14:31:00.000Z"
    }
  ]
}

Change Types ​

TypeWhen sent
session_addedA new session was created (data contains the full session object)
session_updatedA session's state changed (data contains the changed fields)
session_removedA session was deleted (data is null)
service_updatedA service status changed
task_updatedA kanban task was updated

Client Behavior ​

The client (board.ts) does not send messages on the state WebSocket. The onMessage handler on the server is a no-op. All communication is server-to-client.

Connection Lifecycle ​

  • On connect, the server validates the auth token and sends the snapshot
  • The server sends delta messages whenever the StateHub's pub/sub fires
  • If a ws.send() fails (broken connection), the client is removed from the broadcast set
  • On disconnect, the Board UI reconnects with a 3-second delay

How the Board Uses It ​

The orchestration board connects to /ws/state on initialization. When updates arrive:

  1. Snapshot: The board rebuilds its session list and renders all session cards
  2. Delta (session_added): A new card is created and placed in the correct column
  3. Delta (session_updated): The affected card's DOM is patched in place -- status dot, activity time, and column position update without re-rendering the entire board
  4. Delta (session_removed): The card is removed from the DOM

This means multiple browsers or devices viewing the board all stay in sync without polling.

Terminal WebSocket ​

The terminal WebSocket at /ws/terminal is documented in the Terminal page. It uses a different protocol optimized for PTY I/O (binary data + JSON control messages).

Connect parameters:

/ws/terminal?token=<token>&mode=<shell|tmux-attach>&session=<name>&cols=120&rows=40

Built by Carlos Lenis in Miami