WebChat (macOS app)
The macOS menu bar app embeds the WebChat UI as a native SwiftUI view. It connects to the Gateway and defaults to the main session for the selected agent (with a session switcher for other sessions).- Local mode: connects directly to the local Gateway WebSocket.
- Remote mode: forwards the Gateway control port over SSH and uses that tunnel as the data plane.
Launch & debugging
- Manual: Lobster menu → “Open Chat”.
-
Auto‑open for testing:
-
Logs:
./scripts/clawlog.sh(subsystemai.openclaw, categoryWebChatSwiftUI).
How it is wired
- Data plane: Gateway WS methods
chat.history,chat.send,chat.abort,chat.injectand eventschat,agent,presence,tick,health. chat.historyreturns display-normalized transcript rows: inline directive tags are stripped from visible text, plain-text tool-call XML payloads (including<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>, and truncated tool-call blocks) and leaked ASCII/full-width model control tokens are stripped, pure silent-token assistant rows such as exactNO_REPLY/no_replyare omitted, and oversized rows can be replaced with placeholders.- Session: defaults to the primary session (
main, orglobalwhen scope is global). The UI can switch between sessions. - Onboarding uses a dedicated session to keep first‑run setup separate.
Security surface
- Remote mode forwards only the Gateway WebSocket control port over SSH.
Known limitations
- The UI is optimized for chat sessions (not a full browser sandbox).