clawgo/README.md
2026-01-05 11:44:33 +01:00

92 lines
2.9 KiB
Markdown

# Clawgo (Go Node)
Minimal headless node client for Raspberry Pi / Linux. Connects to the gateway bridge, handles pairing, streams `voice.transcript` events (stdin/FIFO), subscribes to chat, and can speak responses via local TTS.
## Build
```bash
cd clawgo
go build ./cmd/clawgo
```
Cross-compile for Pi:
```bash
GOOS=linux GOARCH=arm64 go build -o /tmp/clawgo-linux-arm64 ./cmd/clawgo
```
## Key flags
| Flag | Description |
| --- | --- |
| `-session-key` | Session for outgoing `voice.transcript` events (default `main`). |
| `-chat-session-key` | Session to subscribe for chat replies (default mirrors `-session-key`). |
| `-chat-subscribe` | Enable chat stream+TTS (default `true`). |
| `-tts-engine` | `system`, `piper`, `elevenlabs`, or `none` (system = `espeak-ng`). |
| `-tts-system-voice` | espeak voice id (default `en-us`). |
| `-tts-system-rate` | Speech rate (wpm). |
| `-mdns-service` | Bonjour service type (default `_clawdbot-node._tcp`). |
| `-stdin` | Read transcripts from stdin (pipe/FIFO). |
| `-stdin-file` | Read transcripts from a FIFO/file instead of stdin. |
| `-agent-request` | Send transcripts as `agent.request` (uses agent + deliver). |
| `-deliver` | Deliver agent responses to a provider (requires channel + to). |
| `-deliver-channel` | Delivery provider (telegram/whatsapp/signal/imessage). |
| `-deliver-to` | Delivery destination id. |
| `-quick-actions` | Enable built-in quick actions (default true). |
| `-ping-message` | Message used for telegram ping quick action. |
| `-router` | Routing plugin name (default `default`). |
## Pair
```bash
./clawgo pair \
-bridge 100.88.46.29:18790 \
-display-name "Razor Pi"
```
Approve via `clawdbot nodes approve <requestId>`.
## Run (FIFO + TTS example)
```bash
mkfifo /tmp/voice.fifo
# in one terminal
tail -f /tmp/voice.fifo | ./clawgo run \
-bridge 100.88.46.29:18790 \
-stdin \
-chat-subscribe \
-tts-engine system
# elsewhere
printf hey computer turn on the lights
> /tmp/voice.fifo
```
Each line on the FIFO becomes a `voice.transcript`; chat responses from the `main` session are spoken via `espeak-ng`.
## systemd example
Minimal steps:
1. Install the binary as `/home/pi/clawgo`.
2. Create a wrapper script that keeps a FIFO (`/home/pi/.cache/clawdbot/voice.fifo`) open and pipes it into `clawgo run -stdin`.
3. Create `/etc/systemd/system/clawgo.service` pointing to that wrapper.
## mDNS advertising
The node advertises `_clawdbot-node._tcp` by default.
```bash
dns-sd -B _clawdbot-node._tcp local.
```
Override to `_clawdbot-bridge._tcp` if you intentionally want it to show up as a gateway beacon:
```bash
./clawgo run -mdns-service _clawdbot-bridge._tcp
```
## Notes
- Node state (`nodeId` + token) lives in `~/.clawdbot/clawgo.json`.
- Caps default to `voiceWake`; override via `-caps` if you expose more commands.
- Set `bridge.bind: "tailnet"` on the gateway to restrict the bridge to Tailscale.