Skip to content

robbyczgw-cla/opencami

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

288 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

OpenCami 🦎

A beautiful web client for OpenClaw.

npm License: MIT

OpenCami Chat Interface

Install

Option 1 (recommended)

curl -fsSL https://opencami.xyz/install.sh | bash

Option 2

npm install -g opencami

Run

βœ… Recommended (OpenCami runs on the same machine as the OpenClaw Gateway)

opencami --gateway ws://127.0.0.1:18789 --token <GATEWAY_TOKEN>

Then open: http://localhost:3000

🌐 Remote access over Tailscale (keep Gateway local)

This is the safest setup: Gateway stays on loopback, you access OpenCami via https://<magicdns>:<port>.

  1. In OpenClaw, allowlist the exact OpenCami URL (no trailing slash):
{
  "gateway": {
    "controlUI": {
      "allowedOrigins": ["https://<magicdns>:3001"]
    }
  }
}
  1. Restart the gateway:
openclaw gateway restart
  1. Start OpenCami with the same origin:
opencami \
  --gateway ws://127.0.0.1:18789 \
  --token <GATEWAY_TOKEN> \
  --origin https://<magicdns>:3001

⚠️ Note: --gateway must be ws:// or wss:// (not https://).

CLI options

opencami [--port <n>] [--host <addr>] [--gateway <ws(s)://...>] [--token <token>] [--password <pw>] [--origin <url>] [--no-open]

--port <n>        Port to listen on (default: 3000)
--host <addr>     Host to bind to (default: 127.0.0.1)
--gateway <url>   OpenClaw gateway WS URL (default: ws://127.0.0.1:18789)
--token <token>   Gateway token (sets CLAWDBOT_GATEWAY_TOKEN)
--password <pw>   Gateway password (sets CLAWDBOT_GATEWAY_PASSWORD)
--origin <url>    Origin header for backend WS (sets OPENCAMI_ORIGIN)
--no-open         Don't open browser on start
-h, --help        Show help

Configuration

You can also set env vars instead of flags:

CLAWDBOT_GATEWAY_URL=ws://127.0.0.1:18789
CLAWDBOT_GATEWAY_TOKEN=...
OPENCAMI_ORIGIN=https://<magicdns>:3001   # only needed for remote HTTPS

Troubleshooting (quick)

  • "origin not allowed" β†’ add the exact URL to gateway.controlUI.allowedOrigins and pass the same value as --origin / OPENCAMI_ORIGIN (exact match, no trailing /).
  • Pairing required β†’ approve the device in OpenClaw (openclaw devices list/approve).
  • Fallback (only if needed): OPENCAMI_DEVICE_AUTH_FALLBACK=1

Security notes

  • Prefer wss:// for remote connections.
  • Prefer token auth (CLAWDBOT_GATEWAY_TOKEN) over password.
  • Keep allowedOrigins minimal (exact origins only, no wildcards).
  • Treat OPENCAMI_DEVICE_AUTH_FALLBACK=true as temporary compatibility mode.
  • Do not expose OpenCami directly to the public internet without TLS + access controls.
  • For Tailnet deployments, limit Tailnet device/user access.

Troubleshooting

"origin not allowed"

Cause: gateway rejected browser origin.

Fix:

  1. Add origin to gateway.controlUI.allowedOrigins (exact match, no trailing /)
  2. Set identical OPENCAMI_ORIGIN (or --origin) in OpenCami
  3. Restart gateway (openclaw gateway restart)

Missing scope operator.admin

Cause: gateway auth succeeded but the device was paired with insufficient scopes.

Fix (v1.8.5+): delete the device identity and let OpenCami re-pair automatically:

rm ~/.opencami/identity/device.json
# then restart OpenCami β€” it will re-pair with full scopes

Pairing required / device pending approval

On first connect, OpenCami registers itself as a device on the gateway. Starting with v1.8.5, this happens automatically with full scopes (operator.admin, operator.approvals, operator.pairing) β€” no manual config required.

If you see a "device pending" error:

openclaw devices list    # find the pending device
openclaw devices approve <deviceId>

After approval, OpenCami reconnects and stores a deviceToken for future sessions (no shared token needed).

Can’t connect to gateway at all

Checks:

openclaw gateway status
echo "$CLAWDBOT_GATEWAY_URL"
echo "$CLAWDBOT_GATEWAY_TOKEN"

Also verify URL scheme (ws:// local, wss:// remote).


Docker

docker build -t opencami .
docker run -p 3000:3000 opencami

Features

πŸ’¬ Chat & Communication

  • ⚑ Real-time streaming β€” persistent WebSocket + SSE, token-by-token
  • πŸ“Ž File attachments β€” upload PDFs, text, code, CSV, JSON via attach button or drag & drop (/uploads/ + read tool workflow)
  • πŸ“„ File cards β€” uploaded files render as clickable cards (filename, icon, size) and open in File Explorer
  • πŸ–ΌοΈ Image attachments β€” drag & drop with compression (images stay Base64 for vision)
  • πŸ”Š Voice playback (TTS) β€” ElevenLabs β†’ OpenAI β†’ Edge TTS fallback
  • 🎀 Voice input (STT) β€” ElevenLabs Scribe β†’ OpenAI Whisper β†’ Browser
  • πŸ”” Browser notifications β€” background tab alerts when assistant replies

🧠 Smart Features

  • 🏷️ Smart titles β€” LLM-generated session titles
  • πŸ’‘ Smart follow-ups β€” contextual suggestions after each response
  • 🧠 Thinking level toggle β€” reasoning depth (off/low/medium/high) per message
  • πŸ”Ž Search sources badge β€” see which search engines were used
  • πŸ“Š Context window meter β€” visual token usage indicator

πŸ”§ Workspace

  • πŸ“‚ File explorer β€” browse & edit 30+ file types with built-in editor
  • 🧠 Memory viewer β€” browse and edit MEMORY.md and daily memory files
  • πŸ€– Agent manager β€” create, edit, delete agents from the sidebar
  • 🧩 Skills browser β€” discover and install skills from ClawHub
  • ⏰ Cron jobs panel β€” manage scheduled automations
  • πŸ”§ Workspace settings β€” toggle each tool on/off in Settings

🎨 Customization

  • 🎨 Model selector β€” switch AI models per message
  • 🎭 Persona picker β€” 20 AI personalities
  • 🦎 Chameleon theme β€” light/dark/system with accent colors
  • πŸ”€ Text size β€” S / M / L / XL
  • πŸ”Œ Multi-provider LLM β€” OpenAI, OpenRouter, Ollama, or custom

πŸ“ Organization

  • πŸ“ Session folders β€” grouped by kind (chats, subagents, cron, other)
  • πŸ“Œ Pin sessions β€” pinned always on top
  • πŸ—‘οΈ Bulk delete β€” select multiple sessions, delete at once
  • πŸ›‘οΈ Protected sessions β€” prevent accidental deletion
  • πŸ“₯ Export β€” Markdown, JSON, or plain text

πŸ“± Platform

  • πŸ“± PWA β€” installable, offline shell, auto-update
  • πŸ–₯️ Tauri desktop app (Beta) β€” native wrapper for macOS/Windows/Linux
  • ⌨️ Keyboard shortcuts β€” full power-user navigation
  • πŸ’¬ Slash commands β€” inline help and actions
  • πŸ” Conversation search β€” current (⌘F) and global (βŒ˜β‡§F)

Development

git clone https://github.com/robbyczgw-cla/opencami.git
cd opencami
npm install
cp .env.example .env.local
npm run dev

Then open the URL printed by Vite in your terminal.

Dev port notes: this repo's npm run dev script uses port 3002. If you run Vite directly with the config default, it targets 3003 and auto-falls back to the next free port.

πŸ–₯️ Desktop App (Tauri)

Note: The desktop app is experimental and under active development. The primary focus of OpenCami is the web app. Native builds (desktop & mobile) are secondary.

OpenCami can also run as a native macOS/Windows/Linux desktop wrapper built with Tauri v2. The app loads your self-hosted OpenCami web instance.

Prerequisites

  • Node.js 18+
  • Rust toolchain (rustup)

Build

# Install dependencies (if not already done)
npm install

# Build web assets first
npm run build

# Build desktop app
npm run tauri:build

Custom Gateway URL

By default, the desktop app connects to http://localhost:3003.

To override at build time:

OPENCAMI_REMOTE_URL="https://your-server.example.com" npm run tauri:build

Output

Built installers/bundles are written to src-tauri/target/release/bundle/:

  • macOS: .app, .dmg
  • Windows: .exe, .msi
  • Linux: .deb, .AppImage

Desktop Features

  • Tray icon (hide to tray on close)
  • Native notifications
  • Auto-start on login
  • Custom titlebar
  • Multiple windows (⌘N)
  • Clipboard integration

Dev Mode

npm run tauri:dev

Requires a display/GUI environment.

Documentation

Credits

Built on top of WebClaw by @ibelick.

File Explorer by @balin-ar (PR #2).

Dockerfile by @deblanco (PR #7).

Powered by OpenClaw.

Links

License

MIT

About

Web chat client for OpenClaw – AI chat interface with PWA support, smart titles, follow-ups & more 🦎

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors