OpenClaw and the Rabbit R1

I got my Rabbit R1 talking to my Pinata-hosted agent. The agent did most of the work.

I’ve been at Pinata for almost a year, and OpenClaw has been the most exciting thing I’ve worked on. It connects AI agents to the apps you already use — Telegram, WhatsApp, Discord, iMessage — and if you host one on Pinata it’s always on.

The Rabbit R1 pairs with OpenClaw as a hardware node. Bright orange Teenage Engineering design with a scroll wheel that does nothing useful, but you push the button, talk to your agent, and get a response through the speaker. AI in your pocket with a fun form factor.

I wanted mine talking to my Pinata-hosted agent.

The auth mismatch

Pinata’s platform requires HTTP auth on every request, including WebSocket upgrades. The R1 sends its token inside the WebSocket connect frame, after the HTTP handshake completes, so Pinata’s ingress rejects the upgrade before the OpenClaw gateway ever sees it.

I tried hacking the QR payload with tokens as query params and full URLs in the ips field. The R1 firmware mangles all of it — strips protocols, garbles ports, discards query strings.

The fix

I worked through this with my agent over a few sessions and broke the gateway config twice along the way. Third attempt I started a fresh session with notes from the failures and one rule: don’t touch your own gateway.

The agent used Pinata’s port forwarding to expose a WebSocket proxy on an unauthenticated endpoint that forwards to the gateway over localhost, where the gateway validates the token from the connect frame like normal. It wrote the proxy, started it, registered a custom domain via the Pinata API, generated the QR code, and sent me the image over Telegram. I scanned it from the R1 and it paired.

My contribution to the fix was scanning a QR code.

What it’s like

Hold the button, ask a question, get an answer out loud. The agent has memory and pulls context from earlier conversations — knows my calendar, my notes, what we talked about yesterday.

It wrote the technical sections of the full writeup on the Pinata blog from its own logs. That post has all the code if you want to set this up yourself.