{"id":48554264,"url":"https://github.com/robbyczgw-cla/opencami","last_synced_at":"2026-04-08T10:01:27.113Z","repository":{"id":336659341,"uuid":"1150571194","full_name":"robbyczgw-cla/opencami","owner":"robbyczgw-cla","description":"Web chat client for OpenClaw – AI chat interface with PWA support, smart titles, follow-ups \u0026 more 🦎","archived":false,"fork":false,"pushed_at":"2026-04-08T09:20:03.000Z","size":4036,"stargazers_count":24,"open_issues_count":5,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-08T09:31:59.531Z","etag":null,"topics":["ai","chat","openclaw","react","tailwindcss","tanstack","typescript","vite","web-client"],"latest_commit_sha":null,"homepage":"https://opencami.xyz","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ibelick/webclaw","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robbyczgw-cla.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-05T12:43:43.000Z","updated_at":"2026-04-08T09:18:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/robbyczgw-cla/opencami","commit_stats":null,"previous_names":["robbyczgw-cla/opencami","robbyczgw-cla/webclaw-fork","robbyczgw-cla/webclaw-upstream-pr"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/robbyczgw-cla/opencami","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbyczgw-cla%2Fopencami","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbyczgw-cla%2Fopencami/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbyczgw-cla%2Fopencami/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbyczgw-cla%2Fopencami/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robbyczgw-cla","download_url":"https://codeload.github.com/robbyczgw-cla/opencami/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbyczgw-cla%2Fopencami/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31549900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"online","status_checked_at":"2026-04-08T02:00:06.127Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","chat","openclaw","react","tailwindcss","tanstack","typescript","vite","web-client"],"created_at":"2026-04-08T10:01:26.365Z","updated_at":"2026-04-08T10:01:27.107Z","avatar_url":"https://github.com/robbyczgw-cla.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenCami 🦎\n\nA beautiful web client for [OpenClaw](https://github.com/openclaw/openclaw).\n\n[![npm](https://img.shields.io/npm/v/opencami)](https://www.npmjs.com/package/opencami)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n![OpenCami Chat Interface](docs/screenshots/opencami-chat.jpg)\n\n## Install\n\n### Option 1 (recommended)\n\n```bash\ncurl -fsSL https://opencami.xyz/install.sh | bash\n```\n\n### Option 2\n\n```bash\nnpm install -g opencami\n```\n\n## Run\n\n### ✅ Recommended (OpenCami runs on the same machine as the OpenClaw Gateway)\n\n```bash\nopencami --gateway ws://127.0.0.1:18789 --token \u003cGATEWAY_TOKEN\u003e\n```\n\nThen open: `http://localhost:3000`\n\n### 🌐 Remote access over Tailscale (keep Gateway local)\n\nThis is the safest setup: **Gateway stays on loopback**, you access **OpenCami** via `https://\u003cmagicdns\u003e:\u003cport\u003e`.\n\n1) In OpenClaw, allowlist the exact OpenCami URL (**no trailing slash**):\n\n```json5\n{\n  \"gateway\": {\n    \"controlUI\": {\n      \"allowedOrigins\": [\"https://\u003cmagicdns\u003e:3001\"]\n    }\n  }\n}\n```\n\n2) Restart the gateway:\n\n```bash\nopenclaw gateway restart\n```\n\n3) Start OpenCami with the same origin:\n\n```bash\nopencami \\\n  --gateway ws://127.0.0.1:18789 \\\n  --token \u003cGATEWAY_TOKEN\u003e \\\n  --origin https://\u003cmagicdns\u003e:3001\n```\n\n\u003e ⚠️ Note: `--gateway` must be `ws://` or `wss://` (not `https://`).\n\n## CLI options\n\n```text\nopencami [--port \u003cn\u003e] [--host \u003caddr\u003e] [--gateway \u003cws(s)://...\u003e] [--token \u003ctoken\u003e] [--password \u003cpw\u003e] [--origin \u003curl\u003e] [--no-open]\n\n--port \u003cn\u003e        Port to listen on (default: 3000)\n--host \u003caddr\u003e     Host to bind to (default: 127.0.0.1)\n--gateway \u003curl\u003e   OpenClaw gateway WS URL (default: ws://127.0.0.1:18789)\n--token \u003ctoken\u003e   Gateway token (sets CLAWDBOT_GATEWAY_TOKEN)\n--password \u003cpw\u003e   Gateway password (sets CLAWDBOT_GATEWAY_PASSWORD)\n--origin \u003curl\u003e    Origin header for backend WS (sets OPENCAMI_ORIGIN)\n--no-open         Don't open browser on start\n-h, --help        Show help\n```\n\n## Configuration\n\nYou can also set env vars instead of flags:\n\n```bash\nCLAWDBOT_GATEWAY_URL=ws://127.0.0.1:18789\nCLAWDBOT_GATEWAY_TOKEN=...\nOPENCAMI_ORIGIN=https://\u003cmagicdns\u003e:3001   # only needed for remote HTTPS\n```\n\n## Troubleshooting (quick)\n\n- **\"origin not allowed\"** → add the exact URL to `gateway.controlUI.allowedOrigins` *and* pass the same value as `--origin` / `OPENCAMI_ORIGIN` (exact match, no trailing `/`).\n- **Pairing required** → approve the device in OpenClaw (`openclaw devices list/approve`).\n- **Fallback (only if needed):** `OPENCAMI_DEVICE_AUTH_FALLBACK=1`\n\n---\n\n## Security notes\n\n- Prefer `wss://` for remote connections.\n- Prefer token auth (`CLAWDBOT_GATEWAY_TOKEN`) over password.\n- Keep `allowedOrigins` minimal (exact origins only, no wildcards).\n- Treat `OPENCAMI_DEVICE_AUTH_FALLBACK=true` as temporary compatibility mode.\n- Do **not** expose OpenCami directly to the public internet without TLS + access controls.\n- For Tailnet deployments, limit Tailnet device/user access.\n\n---\n\n## Troubleshooting\n\n### \"origin not allowed\"\n\nCause: gateway rejected browser origin.\n\nFix:\n1. Add origin to `gateway.controlUI.allowedOrigins` (exact match, no trailing `/`)\n2. Set identical `OPENCAMI_ORIGIN` (or `--origin`) in OpenCami\n3. Restart gateway (`openclaw gateway restart`)\n\n### Missing scope `operator.admin`\n\nCause: gateway auth succeeded but the device was paired with insufficient scopes.\n\nFix (v1.8.5+): delete the device identity and let OpenCami re-pair automatically:\n\n```bash\nrm ~/.opencami/identity/device.json\n# then restart OpenCami — it will re-pair with full scopes\n```\n\n### Pairing required / device pending approval\n\nOn 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.\n\nIf you see a \"device pending\" error:\n```bash\nopenclaw devices list    # find the pending device\nopenclaw devices approve \u003cdeviceId\u003e\n```\n\nAfter approval, OpenCami reconnects and stores a `deviceToken` for future sessions (no shared token needed).\n\n### Can’t connect to gateway at all\n\nChecks:\n\n```bash\nopenclaw gateway status\necho \"$CLAWDBOT_GATEWAY_URL\"\necho \"$CLAWDBOT_GATEWAY_TOKEN\"\n```\n\nAlso verify URL scheme (`ws://` local, `wss://` remote).\n\n---\n\n## Docker\n\n```bash\ndocker build -t opencami .\ndocker run -p 3000:3000 opencami\n```\n\n---\n\n## Features\n\n### 💬 Chat \u0026 Communication\n- ⚡ **Real-time streaming** — persistent WebSocket + SSE, token-by-token\n- 📎 **File attachments** — upload PDFs, text, code, CSV, JSON via attach button or drag \u0026 drop (`/uploads/` + `read` tool workflow)\n- 📄 **File cards** — uploaded files render as clickable cards (filename, icon, size) and open in File Explorer\n- 🖼️ **Image attachments** — drag \u0026 drop with compression (images stay Base64 for vision)\n- 🔊 **Voice playback (TTS)** — ElevenLabs → OpenAI → Edge TTS fallback\n- 🎤 **Voice input (STT)** — ElevenLabs Scribe → OpenAI Whisper → Browser\n- 🔔 **Browser notifications** — background tab alerts when assistant replies\n\n### 🧠 Smart Features\n- 🏷️ **Smart titles** — LLM-generated session titles\n- 💡 **Smart follow-ups** — contextual suggestions after each response\n- 🧠 **Thinking level toggle** — reasoning depth (off/low/medium/high) per message\n- 🔎 **Search sources badge** — see which search engines were used\n- 📊 **Context window meter** — visual token usage indicator\n\n### 🔧 Workspace\n- 📂 **File explorer** — browse \u0026 edit 30+ file types with built-in editor\n- 🧠 **Memory viewer** — browse and edit MEMORY.md and daily memory files\n- 🤖 **Agent manager** — create, edit, delete agents from the sidebar\n- 🧩 **Skills browser** — discover and install skills from ClawHub\n- ⏰ **Cron jobs panel** — manage scheduled automations\n- 🔧 **Workspace settings** — toggle each tool on/off in Settings\n\n### 🎨 Customization\n- 🎭 **Persona picker** — 20 AI personalities\n- 🦎 **Chameleon theme** — light/dark/system with accent colors\n- 🔤 **Text size** — S / M / L / XL\n- 🔌 **Multi-provider LLM** — OpenAI, OpenRouter, Ollama, or custom\n\n### 📁 Organization\n- 📁 **Session folders** — grouped by kind (chats, subagents, cron, other)\n- 📌 **Pin sessions** — pinned always on top\n- 🗑️ **Bulk delete** — select multiple sessions, delete at once\n- 🛡️ **Protected sessions** — prevent accidental deletion\n- 📥 **Export** — Markdown, JSON, or plain text\n\n### 📱 Platform\n- 📱 **PWA** — installable, offline shell, auto-update\n- 🖥️ **Tauri desktop app** (Beta) — native wrapper for macOS/Windows/Linux\n- ⌨️ **Keyboard shortcuts** — full power-user navigation\n- 💬 **Slash commands** — inline help and actions\n- 🔍 **Conversation search** — current (⌘F) and global (⌘⇧F)\n\n## Development\n\n```bash\ngit clone https://github.com/robbyczgw-cla/opencami.git\ncd opencami\nnpm install\ncp .env.example .env.local\nnpm run dev\n```\n\nThen open the URL printed by Vite in your terminal.\n\n\u003e 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.\n\n## 🖥️ Desktop App (Tauri)\n\n\u003e **Note:** The desktop app is experimental and under active development. The primary focus of OpenCami is the **web app**. Native builds (desktop \u0026 mobile) are secondary.\n\nOpenCami can also run as a native macOS/Windows/Linux desktop wrapper built with Tauri v2. The app loads your self-hosted OpenCami web instance.\n\n### Prerequisites\n\n- Node.js 18+\n- Rust toolchain (`rustup`)\n\n### Build\n\n```bash\n# Install dependencies (if not already done)\nnpm install\n\n# Build web assets first\nnpm run build\n\n# Build desktop app\nnpm run tauri:build\n```\n\n### Custom Gateway URL\n\nBy default, the desktop app connects to `http://localhost:3003`.\n\nTo override at build time:\n\n```bash\nOPENCAMI_REMOTE_URL=\"https://your-server.example.com\" npm run tauri:build\n```\n\n### Output\n\nBuilt installers/bundles are written to `src-tauri/target/release/bundle/`:\n- macOS: `.app`, `.dmg`\n- Windows: `.exe`, `.msi`\n- Linux: `.deb`, `.AppImage`\n\n### Desktop Features\n\n- Tray icon (hide to tray on close)\n- Native notifications\n- Auto-start on login\n- Custom titlebar\n- Multiple windows (⌘N)\n- Clipboard integration\n\n### Dev Mode\n\n```bash\nnpm run tauri:dev\n```\n\nRequires a display/GUI environment.\n\n## Documentation\n\n- [Features](docs/features.md)\n- [Desktop App (Tauri)](docs/desktop-app.md)\n- [Architecture](docs/architecture.md)\n- [Deployment](docs/deployment.md)\n- [FAQ](docs/faq.md)\n- [Contributing](docs/contributing.md)\n- [Changelog](https://github.com/robbyczgw-cla/opencami/blob/main/CHANGELOG.md)\n\n## Credits\n\nBuilt on top of [WebClaw](https://github.com/ibelick/webclaw) by [@ibelick](https://github.com/ibelick).\n\n### Contributors\n\n- [@maciejlis](https://github.com/maciejlis) — Dark mode palette, dark mode visibility fixes, metadata stripping improvements\n- [@balin-ar](https://github.com/balin-ar) — File Explorer ([upstream PR #2](https://github.com/ibelick/webclaw/pull/2))\n- [@deblanco](https://github.com/deblanco) — Dockerfile ([upstream PR #7](https://github.com/ibelick/webclaw/pull/7))\n\nPowered by [OpenClaw](https://github.com/openclaw/openclaw).\n\n## Links\n\n- 🌐 [opencami.xyz](https://opencami.xyz)\n- 📦 [npm](https://www.npmjs.com/package/opencami)\n- 💻 [GitHub](https://github.com/robbyczgw-cla/opencami)\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobbyczgw-cla%2Fopencami","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobbyczgw-cla%2Fopencami","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobbyczgw-cla%2Fopencami/lists"}