Connect to your OpenClaw server 🦞 with your Rokid Glasses 🕶️. Bring the power of OpenClaw with you anywhere you go. Give it voice command, send it photos of what you're looking at and see the answers stream in on the screens inside the glasses and hear your molty speak.
Latest published source release: Clawsses 1.3.120 / Build 129. The current
mainbranch is 1.3.123 / Build 132 and remains unreleased. Builds 130–132 add bounded long dictation, an experimental localHEY CLAWSSESwake word, and an OpenClaw 2.0-compatible native-client handshake and model selection through canonicalsessions.patch. Public releases contain source only; APKs built with Rokid credentials are private device artifacts.
For the current verified engineering checkpoint and new-session handoff, see
docs/CURRENT_STATE.md.
Clawsses connects your Rokid glasses to an OpenClaw Gateway, via your Android phone, giving you a wearable AI interface:
- Voice-first interaction - Long-press to speak, enable Talk Mode for automatic follow-ups, use bounded Phone-only long dictation, or opt into the experimental local
HEY CLAWSSESwake word - Live streaming - AI responses stream token-by-token onto the glasses display
- Camera input - Send a 1280x720 photo by itself or attach it to a later message; optionally save captures to Android Gallery
- Agent, session, and model management - Browse and switch OpenClaw agents, sessions, and configured models from the phone or glasses
- Cross-client transcript sync - Reconcile active-session messages and history from Clawsses, WebChat, and other OpenClaw clients
- Text-to-speech - Hear responses through ElevenLabs or OpenAI, with stop and replay controls
- Run control - See thinking/streaming status and cancel the exact active OpenClaw run
- Wake-on-message - Glasses display wakes automatically when new messages arrive
- Deep-sleep recovery - Detect and retry an unresponsive CXR session without deleting the Android Bluetooth bond; optional Always Ready mode trades battery life for faster availability
- Slash commands - Quick access to OpenClaw commands (
/model,/clear,/status, etc.)
The system is three components: a phone app that bridges everything, a glasses app that runs the HUD, and an OpenClaw Gateway that provides the AI backend.
OpenClaw Gateway ←─ WebSocket ──→ Phone App (Android) ←─ Bluetooth CXR ──→ Glasses App (Rokid)
│ │ │
AI sessions Bridge + voice HUD + gestures
Chat streaming TTS playback Camera capture
Tool execution Wake management Session picker
| Module | Description |
|---|---|
| phone-app/ | Android companion app. Connects to OpenClaw Gateway via WebSocket and to glasses via Rokid CXR-M SDK (Bluetooth). Handles voice recognition, TTS playback, wake signal coordination, and glasses APK sideloading. |
| glasses-app/ | HUD app running on Rokid glasses. Renders chat UI with Jetpack Compose on the 480x640 monochrome green micro-LED display. Handles touchpad gestures and camera capture. |
| shared/ | Protocol definitions (Gson-serialized data classes) used by both apps. |
| benchmark/ | Android Macrobenchmark and baseline-profile tests for isolated Phone startup and chat-rendering measurements. |
Intimidated by the instructions below? Ask your OpenClaw agent to help.
- Git
- Android Studio
- Rokid Glasses (or emulator - see Emulator Testing)
- A Rokid developer account for CXR SDK credentials (client secret + access key)
- A running OpenClaw Gateway
To install and debug the app on your Android phone:
- Go to Settings → About Phone and tap Build Number 7 times to enable Developer Options
- Go to Settings → Developer Options and enable USB Debugging
- Connect your phone via USB cable
- Accept the "Allow USB Debugging?" prompt on your phone
Copy the ignored template and edit the resulting file in an editor:
cp local.properties.example local.properties
chmod 600 local.propertiesEnter your Rokid CXR SDK credentials in local.properties:
rokid.clientSecret=your-client-secret
rokid.accessKey=your-access-keyThese values are available only to explicitly opted-in private hardware builds. Ordinary debug and
release APKs receive empty BuildConfig fields even when local.properties contains credentials.
The paired hardware-test release enables both data-preserving debug signing and credential embedding:
./gradlew -Pclawsses.hardwareTestSigning=true :phone-app:assembleRelease
local.propertiesis git-ignored, but Rokid requires these values inside the Android client. They therefore cannot be treated as confidential after compilation. APKs built with production Rokid credentials are private-device artifacts and must never be published or attached to public releases. Run./gradlew :phone-app:verifyPublicReleaseHasNoRokidCredentialsin every public release environment. The verification task builds and scans the public APK. Rotate a credential immediately after suspected APK or Logcat exposure.
The phone app connects to your OpenClaw Gateway via WebSocket. A few things to configure:
Set a gateway token (used by the app to authenticate):
openclaw config set gateway.auth.token <your-token>Provide a private TLS endpoint. This hardened client rejects ws:// and requires wss://. Keep the gateway private and expose it through Tailscale Serve or another authenticated TLS reverse proxy. For OpenClaw's integrated Tailscale route:
openclaw config set gateway.tailscale.mode serve
openclaw gateway restartEnter the resulting MagicDNS host in Clawsses (for example machine.tailnet.ts.net) and port 443. Do not expose the raw gateway port to the public internet.
Device approval: The first connection from the app will fail — this is expected. OpenClaw requires you to approve new devices:
# After the first connection attempt, list pending devices
openclaw devices list
# Approve the device
openclaw devices approve <requestId>After approval, the app will automatically reconnect.
Make sure to select the phone-app module (not app) in the run configuration dropdown at the top of Android Studio.
# Build both apps (glasses APK is bundled into phone app assets automatically)
./gradlew assembleDebug
# Install phone app via command line...
adb install phone-app/build/outputs/apk/debug/phone-app-debug.apk
# ...or just click the green ▶ Play button in Android StudioThe phone app bundles the glasses APK and can push it to the glasses over WiFi P2P - no developer cable needed.
- Open the phone app and configure your private WSS OpenClaw Gateway host, port, and token in Settings. A Tailscale Serve hostname normally uses port
443. - The first time you connect, the gateway will reject the connection because your device isn't paired yet. On the gateway, approve the pending device:
After approval, the app will automatically reconnect and receive a device token for future sessions.
# List pending pairing requests openclaw devices list # Approve the pending request (use the requestId from the gateway logs) openclaw devices approve <requestId>
- Fold the right leg, and triple click the camera button to start pairing mode on the glasses.
- Scan for and connect to your Rokid glasses via Bluetooth
- Use the Install to glasses button in the settings screen to load the app onto the glasses via Wifi
- Put on the glasses and find the app in the last position of your apps screen
- The glasses HUD will show the connection status and your current session
Note: The app uses Ed25519 device identity for authentication. On first launch, it generates a keypair that uniquely identifies your device. The gateway must approve this device before allowing connections. This is the same security model used by the OpenClaw CLI and Control UI.
Long-press on the glasses temple to start voice recognition.
The manual input path supports these modes:
- OpenAI Realtime API (primary) - streaming transcription with
gpt-live-transcribe, local speech-end detection, and audio pre-buffering for immediate capture. The final text appears after you stop speaking. - OpenAI long dictation (optional) - Phone-microphone recording streamed to a temporary WAV file, limited to five minutes, then uploaded for batch transcription. Tap the Phone microphone button once to record and again to transcribe.
- Android SpeechRecognizer (fallback) - used automatically when no OpenAI API key is configured; shows speech while you talk, but recognition isn't as great.
Configure your OpenAI API key in Settings → Voice to enable the OpenAI modes. Long dictation is an explicit Phone-only option; Talk Mode, live captions, and direct Rokid voice input continue to use the realtime path.
Enable Settings → Voice → Experimental local wake word to validate HEY CLAWSSES on the
Phone with the bundled sherpa-onnx model. Recognition is processed locally and the feature is off
by default. It releases the microphone before starting normal OpenAI recognition and pauses for
Talk Mode, live captions, long dictation, TTS, and active runs. Accuracy, false accepts, battery
cost, and long-soak behavior are still experimental.
Enable Settings → Voice → Talk Mode or choose Talk Mode in the glasses More menu.
- Hi Rokid-style follow-up is the default and is activation-gated. Press the glasses AI key to start; after each spoken answer, Clawsses opens a 12-second follow-up window and ends the conversation on silence, error, standby, or disconnect.
- Always listening preserves the original Permanent Talk behavior. Recognition restarts while the selected source remains available.
In both modes recognized text is sent immediately, and the OpenClaw answer streams to the HUD and is spoken when TTS is configured.
Press the glasses AI key while an answer is running to stop TTS, cancel the exact active OpenClaw run, and begin the next utterance. Disable Talk Mode with the settings toggle, the More menu, or the voice command “stop talk mode” / “Talk Modus aus”.
The glasses touchpad has two focus areas that change what gestures do:
| Gesture | Message History | Menu Bar |
|---|---|---|
| Swipe forward (→ eyes) | Scroll down | Previous menu item |
| Swipe backward (→ ear) | Scroll up | Next menu item |
| Tap | Scroll to bottom | Execute menu action |
| Double-tap | Jump to menu | Exit app |
| Long-press | Voice input | Voice input |
| Item | Action |
|---|---|
| 📷 Photo | Capture a photo to attach to your next message (up to 4) |
| ◎ Session | Open session picker - browse, switch, or create sessions |
| █ Size | Cycle HUD position: Full → Bottom Half → Top Half |
| … More | Talk Mode, agent and model selection, font size, slash commands, TTS stop/replay, and active-run cancellation |
Tap the Photo menu item to capture a 1280x720 image through the glasses camera. Queue up to four images for the next message, or use Take and Send Photo to send an image without additional text. Settings → Glasses → Save captures to Gallery stores an additional copy under Pictures/Clawsses.
The voice commands “take photo”, “take and send photo”, “Foto aufnehmen”, and “Foto aufnehmen und senden” call the same camera actions.
Choose ElevenLabs or OpenAI in the phone app TTS settings, then enable voice responses from the glasses More menu. OpenAI uses gpt-4o-mini-tts and shares the encrypted OpenAI key configured for transcription. Both providers support stop and replay controls on the phone and glasses.
When new content arrives (streaming responses, proactive messages, cron notifications), the phone automatically wakes the glasses display via the CXR SDK and delivers buffered messages once the glasses acknowledge readiness. A keep-alive mechanism prevents the display from sleeping during long streaming responses.
Rokid firmware can put the proprietary CXR path into deep sleep even while Android still shows the glasses as paired. Clawsses detects a connected-but-unresponsive session, runs a bounded recovery sequence, and exposes an explicit retry action instead of deleting the Bluetooth bond or retrying indefinitely.
If recovery asks you to wake the glasses, fold the right leg and triple-press the camera button to advertise the CXR beacon, then retry. Settings → Glasses → Always Ready keeps the display/CXR path refreshed independently of Talk Mode, but increases glasses battery use.
The Rokid AR Lite uses JBD 0.13" micro-LED displays:
- Resolution: 480x640 (portrait)
- Color: Monochrome green on transparent AR waveguide
- Brightness: 1500 nits
- Font: JetBrains Mono
- Font sizes: Compact / Normal / Comfortable / Large (configurable from glasses)
You can develop without physical glasses by using the built-in debug mode. In debug builds, Bluetooth is replaced with a local WebSocket connection:
- Create a glasses AVD: 480x640, 5" screen
- Run the phone emulator - it starts a WebSocket server on port 8081
- Run the adb command as specified in the settings screen
- Run the glasses emulator - it auto-connects to
10.0.2.2:8081
# Phone app (includes glasses APK in assets)
./gradlew :phone-app:installDebug
# Glasses app
./gradlew :glasses-app:installDebugThe phone app implements the OpenClaw Gateway protocol:
- Transport: TLS-only
wss://; plaintext WebSocket endpoints are rejected - Authentication: Token auth + Ed25519 device identity (keypair stored in Android Keystore), identifying as the canonical
openclaw-androidnative UI client - Chat: Sends
chat.send, receives streamingchatevents, and reconciles authoritativechat.history - Run control: Cancels only the frozen active
sessionKey+runIdthroughchat.abort - Agents, sessions, and models: Uses
agents.list,sessions.list,models.list, and canonical write-scopedsessions.patch; subscribes to broad session changes and active-session messages for cross-client synchronization - Auto-reconnect: 3-second backoff on disconnect
Communication between phone and glasses uses JSON messages over the CXR SDK bridge (or WebSocket in debug mode):
Phone → Glasses: chat/history and stream updates; privacy-filtered agent progress; connection and paired-build state; paged session, agent, and model catalogs; voice, caption, wake, TTS, run, Talk Mode, photo, and ambient-card state
Glasses → Phone: typed commands for text/photo input; session create/switch/history; agent and model selection; slash commands; voice, captions, TTS, Talk Mode, run cancellation, wake acknowledgements, and ambient-card actions
- Runtime OpenClaw, Rokid pairing, OpenAI, and ElevenLabs settings use Android Keystore-backed encrypted preferences.
- Android backup is disabled for both apps so credentials and device identity are not copied to cloud backups.
- Logs contain connection metadata, not chat text, transcripts, device payloads, or credentials.
- Keep
local.propertiesprivate and publish source only; production Rokid credentials are embedded in locally built phone APKs.
See the full screenshot gallery for more images of the glasses HUD and phone app.
- Verify the OpenClaw Gateway is running and the correct private TLS hostname, port, and token are entered in Settings
- Confirm the endpoint opens as
https://and the WebSocket route is available aswss:// - Check that Tailscale or your VPN is connected on both the phone and gateway host
- Plaintext
ws:///http://endpoints are intentionally rejected
This is normal! OpenClaw requires device approval before allowing connections:
- The first connection attempt will be rejected
- Run
openclaw devices listto see the pending device - Run
openclaw devices approve <requestId>to approve it - The app will automatically reconnect
- Ensure
local.propertiesexists in the project root with valid Rokid CXR SDK credentials - Try a clean build: Build → Clean Project, then Build → Rebuild Project
- Keep the existing Android Bluetooth bond; do not unpair the glasses as the first recovery step
- Enable and foreground Hi Rokid, fold the right leg, and triple-press the camera button to advertise the CXR beacon
- Wait until Hi Rokid reports a live glasses connection, then retry installation from Clawsses
- If the integrated route still fails and the standalone Rokid CXR-L installer is available, install the exact matching glasses APK through that route
- Without an OpenAI API key, the app falls back to Android's built-in speech recognition
- For better results, add your OpenAI API key in Settings → Voice
- Configure either an ElevenLabs or OpenAI API key in phone app Settings → TTS
- On the glasses, make sure TTS is enabled via the More menu (… → toggle voice responses)
This fork is based on dweddepohl/clawsses. Features were selectively reimplemented after reviewing ideas in YNCK000/clawsses (photo/history and scrolling), Steven0706/clawsses (TTS, agent/session UI, gallery and camera), and Massif-5279/clawsses (Talk Mode and run cancellation). The forks were not merged wholesale; security and current OpenClaw/OpenAI protocol behavior were retained independently.
Copyright (C) 2026 Pohlster BV
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
You are free to use, modify, and distribute this software under the terms of the AGPL-3.0. Any modified versions must also be made available under the same license.
Commercial licensing: If you want to use Clawsses in a commercial / closed-source product, a commercial license is available. Contact Daan Weddepohl on Linkedin.
Third-party components: This project uses the Rokid CXR SDK, which is proprietary and licensed separately by Rokid Corporation. It is not redistributed as part of this source code.








