Claude Code from the Beach

emirb1 pts0 comments

Claude Code from the beach: My remote coding setup with mosh, tmux and ntfy - rogsClaude Code from the beach: My remote coding setup with mosh, tmux and ntfy<br>Posted on Feb 10, 2026<br>Last updated on Feb 10, 2026

The view two blocks from my apartmentI recently read this awesome post by Granda about running Claude Code from a<br>phone, and I thought: I need this in my life. The idea is simple: kick off a<br>Claude Code task, pocket the phone, go do something fun, and get a notification<br>when Claude needs your help or finishes working. Async development from anywhere.<br>But my setup is a bit different from his. I&rsquo;m not using Tailscale or a cloud VM.<br>I already have a WireGuard VPN connecting my devices, a home server, and a<br>self-hosted ntfy instance. So I built my own version, tailored to my<br>infrastructure.<br>Here&rsquo;s the high-level architecture:<br>┌──────────┐ mosh ┌─────────────┐ ssh ┌─────────────┐<br>│ Phone │───────────────▶ │ Home Server │───────────────▶ │ Work PC │<br>│ (Termux) │ WireGuard │ (Jump Box) │ LAN │(Claude Code)│<br>└──────────┘ └─────────────┘ └──────┬──────┘<br>▲ │<br>│ ntfy (HTTPS) │<br>└─────────────────────────────────────────────────────────────┘<br>The loop is: I&rsquo;m at the beach, I type cc on my phone, I land in a tmux session<br>with Claude Code. I give it a task, pocket the phone, and go back to whatever I<br>was doing. When Claude has a question or finishes, my phone buzzes. I pull it<br>out, respond, pocket it again. Development fits into the gaps of the day.<br>And here&rsquo;s what the async development loop looks like in practice:<br>📱 Phone 💻 Work PC 🔔 ntfy<br>│ │ │<br>│──── type 'cc' ────────────▶│ │<br>│──── give Claude a task ───▶│ │<br>│ │ │<br>│ ┌─────────────────┐ │ │<br>│ │ pocket phone │ │ │<br>│ └─────────────────┘ │ │<br>│ │ │<br>│ │── hook fires ────────────▶│<br>│◀── "Claude needs input" ───────────────────────────────│<br>│ │ │<br>│──── respond ──────────────▶│ │<br>│ │ │<br>│ ┌─────────────────┐ │ │<br>│ │ pocket phone │ │ │<br>│ └─────────────────┘ │ │<br>│ │ │<br>│ │── hook fires ────────────▶│<br>│◀── "Task complete" ────────────────────────────────────│<br>│ │ │<br>│──── review, approve PR ───▶│ │<br>│ │ │<br>Why not just use the blog post&rsquo;s setup?<br>Granda&rsquo;s setup uses Tailscale for VPN, a Vultr cloud VM, Termius as the mobile<br>terminal, and Poke for notifications. It&rsquo;s clean and it works. But I had<br>different constraints:<br>I already have a WireGuard VPN running wg-quick on a server that connects all my devices. No need<br>for Tailscale.<br>I didn&rsquo;t want to pay for a cloud VM. My work PC is more than powerful enough to<br>run Claude Code.<br>I self-host ntfy for notifications, so no need for Poke or any external<br>notification service.<br>I use Termux (open-source), not Termius.<br>If you don&rsquo;t have this kind of infrastructure already, Granda&rsquo;s approach is<br>probably simpler. But if you&rsquo;re the kind of person who already has a WireGuard<br>mesh and self-hosted services, this guide is for you.<br>The pieces<br>ComponentPurposeAlternativesWireGuardVPN to reach home networkTailscale, Zerotier, NebulamoshNetwork-resilient shell (phone leg)Eternal Terminal (et), plain SSHSSHSecure connection (LAN leg)mosh (if you want it end-to-end)tmuxSession persistencescreen, zellijClaude CodeThe actual work—ntfyPush notificationsPushover, Gotify, Poke, TelegramTermuxTerminal emulatorTermius, JuiceSSH, ConnectBotfish shellShell on all machineszsh, bashThe key insight is that you need two different types of resilience : mosh<br>handles the flaky mobile connection (WiFi to cellular transitions, dead zones,<br>phone sleeping), while tmux handles session persistence (close the app, reopen<br>hours later, everything&rsquo;s still there). Together they make mobile development<br>actually viable.<br>Why the double SSH? Why not make the work PC a WireGuard peer?<br>You might be wondering: if I already have a WireGuard network, why not just add<br>the work PC as a peer and mosh straight into it from my phone?<br>The short answer: it&rsquo;s my employer&rsquo;s machine . It has monitoring software<br>installed: screen grabbing, endpoint policies, the works. Installing WireGuard<br>on it would mean running a VPN client that tunnels traffic through my personal<br>infrastructure, which is the kind of thing that raises flags with IT security. I<br>don&rsquo;t want to deal with that conversation.<br>SSH, on the other hand, is standard dev tooling. An openssh-server on a Linux<br>machine is about as unremarkable as it gets.<br>So instead, my home server acts as a jump box. My phone connects to the home<br>server over WireGuard (that&rsquo;s all personal infrastructure, no employer<br>involvement), and then the home server SSHs into the work PC over the local<br>network. The work PC only needs an SSH server, no VPN client, no weird tunnels,<br>nothing that would make the monitoring software blink.<br>┌──────────────────────────────────────────────────┐<br>│ My Infrastructure │<br>│ │<br>│ ┌───────────┐ WireGuard ┌──────────────┐ │<br>│ │ Phone │◀──────────────▶│ WG Server │ │<br>│ │ (peer) │ tunnel │ │ │<br>│ └─────┬─────┘ └──────┬───────┘ │<br>│ │ │ │<br>│ │ mosh...

rsquo phone claude wireguard server code

Related Articles