My ideas keep showing up when I'm away from my desk. On a walk, in a queue, right as I'm falling asleep. My coding sessions, on the other hand, only ever lived at the desk, on one machine, in one folder.
The hosted options can start a session from a phone, but they run in a cloud sandbox on a copy of your repo. Everything I've built up locally, the hooks, the rules, the profile, stays behind.
So three months ago I started building Claude Remote: a start button for Claude Code on my own PC. Yesterday it went public.
What it does
I open a small PWA on my phone and tap a project folder. A Claude Code session starts on the PC, in that folder, with my profile loaded and --remote-control on, so it shows up in the Claude app and I carry on there. STOP ends it.
It's deliberately not a terminal. A console on a phone screen is the wrong tool, and the Claude app already does the conversation well. The PWA only has to start things.
How it fits together
phone (PWA) --HTTPS over tailnet--> tailscale serve --> 127.0.0.1:8790 (Node agent) --> new Claude Code window
- The agent is plain Node with zero runtime dependencies and binds only to
127.0.0.1.tailscale serveterminates TLS with a real certificate and forwards to it, so nothing is exposed to the internet and no firewall rule is needed. - Every
/api/*route needs a token issued by a six-digit passcode. The hash is salted per install and guesses are rate-limited with a lockout. Being on the tailnet is not treated as proof it's you. - It starts at logon from a scheduled task. Updates install themselves at the next Claude Code start, restart the agent, check it actually came up, and put the previous version back if it didn't.
Three strangers changed what ships
The part I'm proudest of isn't mine.
I wrote up a Windows bug on r/PowerShell: Stop-ScheduledTask left my process running. In the comments, one person pointed out that my windowless launcher, conhost.exe --headless, swallowed exit codes and matched a technique security tools flag in attacker tooling. I measured it: exit 42 came back as 0. I'd have shipped that to every machine that installed this. Now the installer compiles a tiny launcher from source that hides the window and passes the real exit code back.
On r/Tailscale, someone mentioned their tailscale serve config disappearing after a reboot, the same thing I'd hit. Now the agent checks on every start and sends a push notification to the phone if the mapping is gone, instead of the app just saying it can't reach the PC.
All three are credited in the README, after I asked each of them.
The honest trade
A launched session runs with your user account's full permissions, and every device on your tailnet can reach the agent. On a single-user tailnet that you control, that's a reasonable trade. On a shared one it isn't. The README says this before it gives you the install command, because I'd rather lose a user than surprise one.
Try it
Windows 10/11, Node 24.2+, Tailscale and the Claude Code CLI. In Claude Code on the PC:
! npx.cmd -y github:MrTig-afk/claude-remote
It installs the plugin, sets itself up in the background and gives you a link to set a passcode.
Repo: https://github.com/MrTig-afk/claude-remote
Mac and Linux hosts come only if people ask for them in issues, so if that's you, ask.
Top comments (0)