I’ve been using Claude Code a lot lately and wanted to be able to use it from my phone as well — not just from my desk. Here’s how I set it up.
Architecture
The whole system is made up of a few components connected over Tailscale, so there’s no port forwarding or public exposure involved:
┌─────────────────────────────────────────────────┐
│ Tailscale │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Claude │ │ Happy │ │ │ │
│ │ Code VM │◄──►│ Server │◄──►│ Phone │ │
│ │ (Zellij) │ │ VM │ │ (Happy) │ │
│ └────▲─────┘ └──────────┘ └──────────┘ │
│ │ │
│ │ Mutagen sync │
│ │ │
│ ┌────▼─────┐ │
│ │ Mac │ │
│ │ (editor) │ │
│ └──────────┘ │
└─────────────────────────────────────────────────┘
- Claude Code VM — runs Claude Code inside Zellij (like tmux but more user-friendly). Sessions persist, so I can disconnect and reconnect without losing context.
- Happy Server VM — runs happy-server-light, a lighter fork of the official
happy-serverthat replaces Postgres with SQLite, drops Redis, and uses local file storage instead of S3. Much simpler to selfhost as a single instance. It didn’t build out of the box, so I forked it and made minimal fixes to get it running. - Phone — Happy mobile app to interact with Claude Code. It connects to the selfhosted server and switches seamlessly between remote and local sessions. I can also use Termius to SSH directly into the Claude VM for full terminal access.
- Mac — Mutagen provides two-way file sync between the Claude VM and my local machine in real time, so I can review and edit code on desktop while Claude works in the VM.
How it works in practice
I can start a task on my phone via Happy, then pick it up on desktop — or the other way around. Happy handles the transition without any manual reconnection.
When I need full terminal access from my phone (to run bash commands or interact with Claude directly), I SSH into the Zellij session via Termius.
It’s a small setup but it makes Claude Code genuinely usable on the go.
Both the setup described here and this blog post were written with the help of Claude Code.