Spotlight / Raycast-style macOS client for OpenClaw
Talk to your OpenClaw gateway from a global hotkey — without leaving your current app.
MacClaw is a native macOS desktop client for OpenClaw. Press a global hotkey, type a prompt, and get a streaming AI answer — powered by your OpenClaw gateway.
| Feature | Description | |
|---|---|---|
| ⌨️ | Global hotkeys | Summon the panel from anywhere with Cmd+Shift+Space, Cmd+Shift+K, or Alt+Space |
| ⚡ | Compact idle strip | Minimal floating bar that stays out of the way |
| 💬 | Streaming responses | Auto-resizing panel with live markdown rendering via OpenClaw chat protocol |
| 🔌 | Slash commands | /connect, /status for quick OpenClaw gateway management |
| 🎨 | macOS vibrancy | Native blur-through glass effect (HUD window material) |
| 🔒 | Secure credentials | Tokens saved via Tauri filesystem; localStorage fallback never stores secrets |
| 🔄 | Auto-reconnect | Re-establishes OpenClaw connection each time the panel is shown |
| 📋 | Copy to clipboard | One-click copy of any response |
| Dependency | Version |
|---|---|
| Node.js | >= 18 |
| Rust | >= 1.77.2 |
| macOS | >= 11.0 (Big Sur) |
| Running OpenClaw gateway | any |
# 1. Install dependencies
npm install
# 2. Launch in dev mode
npm run tauri devThe panel starts hidden. Press Cmd+Shift+Space to toggle it.
npm run tauri buildThe .app bundle will be in src-tauri/target/release/bundle/.
- Make sure your OpenClaw gateway is running
- Press the hotkey to open the panel
- Type
/connectand press Enter - Enter your OpenClaw gateway URL (e.g.
ws://127.0.0.1:19819) and optional token - Click Connect
The status dot in the input bar shows connection state:
| Color | State |
|---|---|
| ⚪ Gray | Disconnected |
| 🟡 Yellow | Connecting to OpenClaw |
| 🟢 Green | Connected |
| 🔴 Red | Error |
| Shortcut | Action |
|---|---|
| Cmd+Shift+Space | Toggle panel |
| Cmd+Shift+K | Toggle panel (alt) |
| Alt+Space | Toggle panel (alt) |
| Enter | Send prompt / submit form |
| Escape | Hide panel |
| Arrow Up / Down | Navigate command hints |
| Tab | Autocomplete slash command |
| Command | Description |
|---|---|
/connect |
Open OpenClaw gateway connection form |
/status |
Show current gateway URL, connection state, and token status |
src/ # React + TypeScript frontend
App.tsx # Orchestration and UX flow
components/
CommandInput.tsx # Input bar with status indicator
CommandHints.tsx # Autocomplete dropdown for slash commands
ConnectForm.tsx # OpenClaw gateway URL + token form
ResponsePanel.tsx # Streaming markdown response display
lib/
ws-client.ts # WebSocket client (OpenClaw JSON-RPC protocol)
commands.ts # Slash command parsing and matching
settings.ts # Settings persistence (Tauri + localStorage fallback)
panel-window.ts # Window resize helpers
__tests__/ # Unit tests (Vitest)
src-tauri/ # Rust backend (Tauri v2)
src/main.rs # Global shortcuts, vibrancy, credentials, window lifecycle
Cargo.toml
tauri.conf.json
npm run lint # ESLint
npm run typecheck # TypeScript type check
npm run test # Vitest unit tests
npm run format:check # Prettier check
npm run check # lint + test + build (all-in-one)Rust checks:
npm run rust:fmt:check # cargo fmt
npm run rust:clippy # cargo clippy
npm run check:all # frontend + Rust (full CI)Contributions are welcome! Please read CONTRIBUTING.md before submitting a PR.
Found a vulnerability? See SECURITY.md for responsible disclosure guidelines.
This project is licensed under the MIT License.
