How Wizzle works
Wizzle has three parts: the app on your phone, the bridge inside your NanoClaw or OpenClaw, and the relay between them. The app and the bridge encrypt everything they send each other, so the relay passes along data it can't read.
The app
The app makes its own keys, encrypts every message and file before it leaves the phone, and keeps a copy of your chats and files. It can pair with more than one bridge and switch between them.
The bridge
The install script adds the bridge to NanoClaw or OpenClaw. It holds the other side's keys, passes what you send to your agents and sends their replies back. Chat history comes from the bridge, and the app keeps a copy. The app shows the bridge's version and, on NanoClaw, can update it.
The relay
The app and the bridge both connect to the relay at wss://relay.wizzle.app, never to each other. The relay forwards each frame untouched and reads only its 17 byte header: the frame type, the epoch and the sequence number. With that it holds frames for a side that is offline, up to 256 frames or 64 MiB, and drops the ones the other side has confirmed.
Encryption
- Pairing gives the app and the bridge each a long-term X25519 key pair for that pairing, and both get a secret from the pairing code.
- Every connection starts with a handshake using fresh X25519 keys on both sides. The session keys come from three X25519 results (fresh to fresh, and each long-term key against the other side's fresh key) through HKDF-SHA256, salted with a value derived from the code's secret.
- Frames are encrypted with ChaCha20-Poly1305 under a random 12 byte nonce, and the header is authenticated with them. Sequence numbers only go up, and a frame at or below the last one accepted is dropped.
- A new handshake runs whenever both sides are online, which limits what a stolen key could open later.
- Only the holder of the app's key can act as the app, and only the holder of the bridge's key from the code can act as the bridge, so neither the relay nor anyone with a copy of the code can sit in the middle.
Limits
A file can be up to 16 MiB, and one message carries at most 4 files and 32 MiB in total.
Push
iPhone only. When the bridge has a message while the app is closed, it asks the relay to wake the app. The relay sends Apple one notification titled "Wizzle" that says "New message", at most once every 15 seconds per pairing. It carries the pairing id so the app opens the right bridge, and nothing about the message or the agent.