2025-12-09 17:51:05 +00:00
---
summary: "How the mac app embeds the gateway WebChat and how to debug it"
read_when:
- Debugging mac WebChat view or loopback port
---
2025-12-07 03:34:49 +01:00
# Web Chat (macOS app)
2025-12-17 23:05:28 +01:00
The macOS menu bar app shows the WebChat UI as a native SwiftUI view and reuses the **primary Clawd session** (`main` by default, configurable via `inbound.session.mainKey` ).
2025-12-12 18:41:38 +00:00
2025-12-17 23:05:28 +01:00
- **Local mode**: connects directly to the local Gateway WebSocket.
- **Remote mode**: forwards the Gateway WebSocket control port over SSH and uses that as the data plane.
2025-12-07 03:34:49 +01:00
## Launch & debugging
- Manual: Lobster menu → “Open Chat”.
- Auto-open for testing: run `dist/Clawdis.app/Contents/MacOS/Clawdis --webchat` (or pass `--webchat` to the binary launched by launchd). The window opens on startup.
2025-12-17 23:05:28 +01:00
- Logs: see `./scripts/clawlog.sh` (subsystem `com.steipete.clawdis` , category `WebChatSwiftUI` ).
2025-12-07 03:34:49 +01:00
## How it’ s wired
2025-12-17 23:05:28 +01:00
- Implementation: `apps/macos/Sources/Clawdis/WebChatSwiftUI.swift` hosts `ClawdisChatUI` and speaks to the Gateway over `GatewayConnection` .
- Data plane: Gateway WebSocket methods `chat.history` , `chat.send` , `chat.abort` ; events `chat` , `agent` , `presence` , `tick` , `health` .
- Session: currently always primary (`main` ). Session switching UI is intentionally hidden for now.
2025-12-07 03:34:49 +01:00
## Security / surface area
2025-12-17 23:05:28 +01:00
- Remote mode forwards only the Gateway WebSocket control port over SSH.
2025-12-07 03:34:49 +01:00
## Known limitations
2025-12-17 23:05:28 +01:00
- The UI is optimized for the primary session and typical “chat” usage (not a full browser-based sandbox surface).