Channels
ClawVibe OpenClaw
OpenClaw channel plugin for ClawVibe apps — HTTP/SSE gateway
Install
openclaw plugins install openclaw-clawvibe
Configuration Example
{
"channels": {
"clawvibe": {
"enabled": true,
"accounts": {
"app": { "enabled": true }
}
}
},
"bindings": [
{ "agentId": "your-agent", "match": { "channel": "clawvibe", "accountId": "app" } }
]
}
README
# ClawVibe OpenClaw Channel
OpenClaw channel plugin for ClawVibe - thin HTTP/SSE relay with device pairing and presence tracking. ClawVibe apps own the smarts (fragment buffering, format directives, biometrics); plugin is a stable relay layer.
Fully self-contained - no external database or file-store service required.
## Install
```bash
openclaw plugins install openclaw-clawvibe
openclaw plugins enable clawvibe
```
## Configure
Add to `openclaw.json`:
```json
{
"channels": {
"clawvibe": {
"enabled": true,
"accounts": {
"app": { "enabled": true }
}
}
},
"bindings": [
{ "agentId": "your-agent", "match": { "channel": "clawvibe", "accountId": "app" } }
]
}
```
Optional config (in `channels.clawvibe`):
| Key | Default | Description |
|-----|---------|-------------|
| `pushToken` | (none) | Token for admin push endpoint |
## Endpoints
All routes prefixed with `/clawvibe/`.
### Pairing (unauthenticated)
| Route | Method | Description |
|-------|--------|-------------|
| `/clawvibe/pair/request` | POST | Initiate pairing (returns 6-char code) |
| `/clawvibe/pair/status` | GET | Poll pairing status |
### Admin (push token auth)
| Route | Method | Description |
|-------|--------|-------------|
| `/clawvibe/pair/pending` | GET | List pending pairing requests |
| `/clawvibe/pair/approve` | POST | Approve a pairing request |
| `/clawvibe/pair/revoke` | POST | Revoke a paired device |
| `/clawvibe/pair/devices` | GET | List all paired devices |
| `/clawvibe/push` | POST | Broadcast to all SSE clients |
### Device (device token auth via `X-Device-Token`)
| Route | Method | Description |
|-------|--------|-------------|
| `/clawvibe/agents` | GET | List allowed agents |
| `/clawvibe/chat` | POST | Main message handler |
| `/clawvibe/events` | GET | SSE stream for responses |
| `/clawvibe/presence` | POST | Presence state tracking |
| `/clawvibe/device-response` | POST | Device request response callback |
| `/clawvibe/pair/unpair` | POST | Self-unpair |
### Utility (unauthenticated)
| Route | Method | Description |
|-------|--------|-------------|
| `/clawvibe/health` | GET | Health check |
| `/clawvibe/infra-status` | GET | OpenClaw service probe |
## Storage
Device data stored locally in `data/devices/`:
```
data/
devices/{deviceId}.json # Paired device records
```
## Chat Request Format
```json
{
"lane": "voice",
"text": "complete transcribed speech",
"agentId": "main",
"instructions": "Split replies into short segments separated by ---\n[SPEAK] force TTS\n[TEXT] text-only",
"location": { "lat": -33.8, "lon": 151.2, "alt": 0, "speed": 0, "heading": null },
"context": { "datetime": "Wednesday 2026-03-26 14:30", "timezone": "AEST" },
"voiceData": [{ "speaker": "primary", "confidence": 0.92 }]
}
```
Key fields:
- `lane` - Required. `voice` or `text`
- `text` - Complete message (app handles fragment buffering)
- `instructions` - Optional. Format/segmentation directives passed through to agent
- `voiceData` - Optional. On-device voice matching summaries (passthrough to agent)
## Presence States
Apps report presence via `POST /clawvibe/presence` with a `state` field:
| State | Meaning |
|-------|---------|
| `active` | App is open and in foreground |
| `listening` | Microphone active, waiting for speech |
| `talking` | User is speaking |
| `typing` | User is typing a text message |
| `speaking` | Agent TTS is playing |
| `idle` | App is open but no activity |
| `away` | App is backgrounded or screen locked |
| `returned` | App returned from background (mapped to `active`) |
Presence is injected into agent instructions as `[USER_PRESENCE: state=..., app_connected=..., last_update=...]`.
## CLI Tool
`bin/clawvibe-pair` is a bash CLI for admin pairing management.
```bash
export CLAWVIBE_PUSH_TOKEN="your-push-token"
export OPENCLAW_URL="http://127.0.0.1:18789" # default
clawvibe-pair list # Show pending pairing requests
clawvibe-pair approve A3K7NP --agents main # Approve device with agent access
clawvibe-pair devices # List all paired devices
clawvibe-pair revoke <deviceId> # Revoke a paired device
```
## Session Keys
Each device-agent pair gets an isolated session. The key format is:
```
agent:{agentId}:clawvibe:app:{deviceId}
```
For example: `agent:main:clawvibe:app:AB12CD34-5678-EF90`
channels
Comments
Sign in to leave a comment