Clawchat
A desktop client for openclaw
Ask AI about Clawchat
Powered by Claude ยท Grounded in docs
I know everything about Clawchat. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
๐ฌ ClawChat
Desktop client for OpenClaw gateways and Claude Code channels.
No Node.js, no npm, no complexity โ just download and connect.

Why ClawChat?
ClawChat supports two backends:
OpenClaw Gateway
Connect to remote OpenClaw gateways over WebSocket. Full protocol v3 support including streaming deltas, session management, and SSH tunneling.
Claude Code Channels
Connect to a Claude Code instance running with a custom MCP channel server. Uses your Claude Max subscription โ no API billing. Claude Code runs on a server (e.g., Docker), and ClawChat connects via WebSocket to the channel server.
๐ฏ Quick Guide:
- Have an OpenClaw gateway? โ Select OpenClaw tab on connect screen
- Have Claude Code + channel server? โ Select Claude Channels tab
- Using Windows or Linux? โ ClawChat (only cross-platform option)
Download
Pre-built releases for macOS, Windows, and Linux are available on the Releases page.
- macOS โ
.dmginstaller - Windows โ
.exeinstaller - Linux โ
.AppImage(portable)
Or build from source (see Quick Start below).
Perfect for Remote Backends
ClawChat connects to backends running elsewhere โ whether that's a dedicated server, a home lab, or a cloud instance.
OpenClaw setup:
- Run OpenClaw gateway on a Linux server or remote Mac
- Install ClawChat on your laptop
- Connect via WebSocket (direct or SSH tunnel)
Claude Channels setup:
- Run Claude Code in a Docker container with a channel server (MCP)
- The channel server exposes a WebSocket endpoint
- Install ClawChat on your laptop and connect
Your conversations and credentials stay on your infrastructure. ClawChat is just a lightweight UI.
Features
- Full chat UI โ Send messages, receive streamed responses with live text updates
- Markdown rendering โ Code blocks with syntax highlighting, bold, italic, links, lists
- Image attachments โ Upload and view images inline
- Session management โ Switch between multiple chat sessions
- Slash commands โ Type
/to access commands like/new,/model,/thinking,/status, etc. - Auto-reconnect โ Resilient WebSocket connection with exponential backoff
- Persistent credentials โ Saved locally for auto-connect on launch
- Cross-platform โ macOS, Windows, and Linux support
- DevTools access โ F12 or Ctrl+Shift+I for debugging
๐ฎ Future: Node Mode
Node mode (camera, screen recording, system commands) is planned for a future release. This would allow ClawChat to act as an OpenClaw node, enabling the gateway to access your local machine's capabilities โ making ClawChat the only cross-platform node solution for Windows and Linux users.
Why it matters: Currently, only the macOS app can expose node capabilities. ClawChat would be the first cross-platform option, essential for Windows/Linux users who want their gateway to access camera, screen, or run system commands remotely.
Status: Proof-of-concept validated (see feature/node-mode-poc branch). Implementation paused pending further investigation into the protocol requirements. Contributions welcome!
Quick Start
Prerequisites
- Node.js 18+
- A running OpenClaw Gateway or Claude Code channel server
Install
git clone git@github.com:ngmaloney/clawchat.git
cd clawchat
npm install
Development
npm run dev
Production Build
npm run build
Outputs packaged binaries to release/ directory.
Connecting
OpenClaw Gateway
- Launch ClawChat
- Select the OpenClaw tab
- Enter your gateway URL (e.g.,
ws://localhost:18789) - Enter your gateway auth token
- Click Connect
For remote gateways, use the SSH Tunnel toggle to connect securely:
# Or manually from terminal:
ssh -N -L 18789:127.0.0.1:18789 your-gateway-host
Claude Code Channels
- Launch ClawChat
- Select the Claude Channels tab
- Enter your channel server URL (e.g.,
ws://your-server:9700) - Click Connect (token is optional if the server doesn't require one)
Setting up the channel server
The channel server is an MCP server that runs as a subprocess of Claude Code. It bridges WebSocket connections from ClawChat to Claude Code's channel notification system.
Prerequisites:
- A server with Docker
- Claude Max subscription
- OAuth token from
claude setup-token
1. Docker container setup:
Create a docker-compose.yml:
services:
claude-code:
image: node:22-slim
container_name: claude-code
env_file:
- .env
working_dir: /workspace
ports:
- "9700:9700"
volumes:
- /path/to/workspace:/workspace
- claude-cache:/root/.claude
environment:
- TERM=xterm-256color
- COLORTERM=truecolor
command: >
bash -c "
apt-get update && apt-get install -y git tmux vim ripgrep curl &&
npm install -g @anthropic-ai/claude-code &&
ln -sf /root/.claude/.claude.json /root/.claude.json &&
tail -f /dev/null
"
restart: unless-stopped
volumes:
claude-cache:
Create .env:
CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-your-token-here
2. Channel server:
Create /workspace/channel-test/package.json:
{
"name": "channel-test",
"version": "1.0.0",
"type": "module",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.12.1",
"ws": "^8.0.0",
"uuid": "^9.0.0"
}
}
Create /workspace/channel-test/server.mjs โ an MCP channel server that:
- Connects to Claude Code over stdio (channel capability)
- Exposes a WebSocket server on port 9700 for ClawChat
- Translates between ClawChat's protocol and MCP channel notifications
- Registers a
send_replytool for Claude to respond through
See the channel server source for the full implementation.
Create /workspace/.mcp.json:
{
"mcpServers": {
"channel-test": {
"command": "node",
"args": ["/workspace/channel-test/server.mjs"],
"env": { "CHANNEL_PORT": "9700" }
}
}
}
3. First-time setup inside the container:
# Install dependencies
cd /workspace/channel-test && npm install
# Set onboarding flags to skip the wizard
node -e "
const fs = require('fs');
const d = JSON.parse(fs.readFileSync('/root/.claude/.claude.json','utf8'));
d.hasCompletedOnboarding = true;
d.theme = 'dark';
fs.writeFileSync('/root/.claude/.claude.json', JSON.stringify(d, null, 2));
"
4. Start Claude Code with channels:
tmux new-session -d -s claude "claude --permission-mode default \
--allowedTools mcp__channel-test__send_reply \
--dangerously-load-development-channels server:channel-test"
Accept the development channels warning when prompted. Claude will show "Listening for channel messages from: server:channel-test" when ready.
5. Add personality (optional):
Create /workspace/CLAUDE.md with a system prompt / personality. Claude Code reads this automatically every session.
Using Slash Commands
ClawChat supports OpenClaw slash commands when connected to an OpenClaw gateway. Type / in the message input to see available commands:
/newโ Start a new session/modelโ Show or switch models/thinkingโ Toggle extended thinking mode/statusโ Show session status and token usage/stopโ Abort current generation/compactโ Summarize and compress session history/verboseโ Toggle verbose output/resetโ Reset the current session
Commands autocomplete as you type.
Tech Stack
- Electron โ Cross-platform desktop runtime
- React 18 โ UI framework with hooks
- TypeScript โ Type safety
- Vite โ Fast build tooling with HMR
- react-markdown + remark-gfm โ Markdown rendering
- react-syntax-highlighter โ Code syntax highlighting
- electron-store โ Local credential storage
Architecture
ClawChat implements the OpenClaw Gateway Protocol v3 and Claude Code channel protocol, including handshake, request/response correlation, and event streaming.
electron/ # Main process (Node.js)
main.ts # App lifecycle, IPC handlers
preload.ts # Secure context bridge
src/ # Renderer process (React)
lib/
gateway-client.ts # WebSocket protocol (OpenClaw + Channels)
hooks/
useGateway.ts # Connection state management
useChat.ts # Message & session state
components/
ConnectScreen.tsx # Backend selection + auth
Dashboard.tsx # Main UI layout
ChatView.tsx # Message list
MessageInput.tsx # Input with file upload
...
License
Private โ not yet published.
Website: clawchat.dev
