Compared · September 2026
spawnd vs Happy
Two open-source answers to the same 9pm problem — the agent is asking, and you’re not at the desk. They differ on what travels, and on where the session lives.
Happy is the nearest thing to a peer.
Happy (happy.engineering) is a mobile and web client for Claude Code and Codex — its CLI wraps Gemini CLI as well — released under MIT. You install the app on iOS or Android, run npm install -g happy, then start happy claude or happy codex instead of the bare command. A QR code pairs the phone; from then on the session shows up as a conversation on the phone, with push notifications when the agent needs a permission or hits an error, and one keypress on the computer to take control back.
What it does well, it does genuinely well. The native apps are quick and feel native; a conversation view is a better shape than a terminal for reading an agent’s reasoning on a five-inch screen; voice is built in, so you can talk a request at Claude Code from a walk; and conversation history is readable on the phone even when the computer is off. The relay server is open source and self-hostable with one command, and the code that encrypts everything before it leaves your machine is there to audit. If your question is “can I approve Claude Code’s diff from the sofa?”, Happy answers it today.
The difference is what travels, and where the session lives.
Happy’s architecture is a wrapper and a relay. The happy command starts the agent through Happy’s own runner; when you take control from the phone it restarts the session in remote mode, and everything the app shows is a stream of encrypted blobs the phone decrypts and renders as chat. Those blobs travel through Happy’s server — hosted or yours — on every message, and the server stores them, which is how history survives the computer being off. By design the server is blind to content; what it keeps in the clear, per Happy’s privacy policy, is metadata: message IDs, timestamps, device and session IDs, push tokens. Voice, which goes to ElevenLabs, sits outside that encryption boundary.
spawnd’s architecture is a daemon and a terminal. One daemon on each host you own dials out; a worker process on the host owns each session’s PTY, so the session survives the closed tab, the dropped connection, the laptop lid, and a daemon restart, scrollback intact. What reaches your phone is the real terminal — your browser talks to each daemon peer-to-peer, end-to-end encrypted; when a relay is unavoidable it forwards ciphertext it cannot decrypt, and the server that introduces them never sees session content. Sessions live on the host. And because the unit is a shell rather than a message stream, any CLI is an agent — Claude Code, Codex, OpenCode and Aider are built-in shortcuts, anything else is a named command — and several hosts sit side by side in one workspace grid.
Row by row.
| spawnd | Happy | |
|---|---|---|
| What the phone shows | The real terminal — the same PTY the host is running | A conversation view: messages, tool calls, permission prompts |
| Agents | Any CLI; Claude Code, Codex, OpenCode, Aider built in | Claude Code and Codex; Gemini CLI through the wrapper |
| The path | Browser to daemon peer-to-peer, E2E; a relay only when unavoidable, ciphertext only | Every message through Happy’s relay as encrypted blobs, hosted or self-hosted |
| Where the session lives | On the host: a worker owns the PTY; survives tab, lid, daemon restart | In the wrapper, restarted in remote mode; history stored encrypted on the relay, readable while the computer is off |
| What the middle sees | Ciphertext, when a relay is used at all; the introducer never sees content | Ciphertext plus metadata: message IDs, timestamps, device and session IDs, push tokens |
| On the phone | Installable web app; no client app, no keys on the device | Native iOS and Android apps, a macOS app, a web app |
| Voice | None | Built in via ElevenLabs: a free allowance, then a subscription; outside the E2E boundary |
| Cost and provenance | Open source, MIT/Apache-2.0 | Open source, MIT; free app, optional voice subscription; self-hostable server |
Happy is the better chat. spawnd is the terminal.
If what you want is to read Claude Code’s reasoning and tap approve from a native app, with voice, on a phone that never needs to see a shell, Happy is the more comfortable product and there is no shame in choosing it. Its encryption is real, its relay is yours if you want it to be, and a conversation is the right shape for a thumb.
spawnd is for the person who wants the terminal itself — because the agent is OpenCode or Aider or a script Happy doesn’t wrap, because the session must outlive everything including the wrapper that started it, because three machines belong in one view, or because the only acceptable middle is one that never sees the session at all. It gives up the native app and the voice. It keeps the shell.
Choose spawnd when
- The agent is any CLI, not only Claude Code or Codex
- You want the real terminal, scrollback and all, on the phone
- Several hosts belong in one grid
- Session content should live on the host, not on a relay
Choose Happy when
- A chat view is what you want on a small screen
- Voice control matters
- History must be readable while the computer is off
- You want a native app from the store
Start
One line on any host you own.
curl -fsSL https://spawnd.dev/install.sh | shQuestions
- Is Happy really end-to-end encrypted?
- Yes, by its published design: content is encrypted on your devices with NaCl secretbox or AES-256-GCM before it reaches the relay, and the relay stores what it cannot read. The parts outside that boundary — metadata, and the voice feature — are set out in Happy’s own privacy policy.
- Can I run Happy and spawnd on the same machine?
- Yes. Happy wraps the agent command; spawnd gives you a persistent shell on the host. Start
happy claudeinside a spawnd session and you get both: the chat in Happy’s app, the terminal in your browser. - Does spawnd have a native app or voice?
- No. The console is your browser, installed to the home screen as a web app, and there is no voice feature. If those matter more than the terminal, Happy is the honest recommendation.