~/infra · brief

Control Claude Code from your phone

Three ways to drive Claude Code on the Mac Studio from your phone, easiest first. One of them — the Telegram bot — is already running. Pick by how much control you want versus how much setup you'll tolerate. All three run Claude on the Mac; nothing moves to the cloud.

The three options at a glance

"Mac awake" applies to all of them — the catch they share is covered at the bottom, and in full in the always-on brief.

OptionSetupWhat you getMac awake?
1. Remote Control (native)~2 minFull Claude Code UI in the Claude app — approve tools, see diffs, steerYes
2. Telegram bot (you have this)doneText Claude, get replies. No diff view.Yes
3. Tailscale + SSH + tmux~20 minA real terminal on the Mac from your phone. Total control.Yes

Option 1 — Remote Control (recommended)

Anthropic shipped this in February 2026. It connects the Claude mobile app to a Claude Code session running on the Mac. This box is on v2.1.159, so it's already available — the one piece not yet set up. It's the full experience (file tree, tool approvals, push notifications) with zero networking setup, and it's the one to use day-to-day.

One-time setup
Install the Claude app on your phone and sign in with the same account as the terminal. Run /login once if you aren't already signed in via claude.ai — Remote Control needs claude.ai OAuth, not an API key.
Each time you want phone access
In your project directory, run claude remote-control. Press spacebar to show a QR code, scan it with your phone, and you're in. Or open the Code tab in the Claude app and pick the session by name.
Make every session phone-reachable automatically
Run /config in Claude Code and set Enable Remote Control for all sessions to true. Then any claude you start is reachable from your phone with no extra command.
Good to know. Survives laptop sleep and network drops — reconnects when the Mac is back (within ~10 min). Push notifications: /configPush when Claude decides, or say "notify me when done" in a prompt. Limitation: if the claude process actually exits (terminal closed), the session dies — run it inside tmux (Option 3) so it survives. Interactive pickers like /mcp and /resume are local-only; text commands work from the phone.

Option 2 — Telegram bot (already running)

The tools/telegram-claude-bot (bot "Sol", @Superglasspadbot), managed by launchd. Text it, it runs Claude on the Mac and texts back. Good for fire-and-forget asks — "pause the worst Google campaign", "what did the WSB tracker find today".

Behaviour
Pinned to Opus, keeps one persistent session, /clear resets it. Locked to a single Telegram user ID.
⚠ Access
Runs with --dangerously-skip-permissions — full unconfirmed access, guarded only by the single-user lock. Keep Telegram 2-step + phone lock on. Kill switch: launchctl unload ~/Library/LaunchAgents/com.johnlabs.telegram-claude-bot.plist.
When to use
Remote Control for real work sessions (you see what it's doing); Telegram for quick one-liners when you don't want to open the app. They don't conflict.

Option 3 — Tailscale + SSH + tmux (the power path)

This gives you a real terminal on the Mac from your phone — not just Claude, any command. Tailscale is a zero-config VPN: phone and Mac join a private network ("tailnet") and reach each other from anywhere, with nothing exposed to the public internet. The CLI shim exists at /usr/local/bin/tailscale, but the app was uninstalled — so this needs a reinstall.

A
On the Mac (one-time)
Reinstall the standalone Tailscale (not the App Store one — it's sandboxed and can't expose SSH the same way): brew install --cask tailscale. Launch it, log in via the menu-bar icon, allow the VPN profile. Then enable SSH — either System Settings → General → Sharing → Remote Login, or better, let the tailnet handle auth with tailscale up --ssh (no password or Remote Login needed).
get the Mac's tailnet IP (100.x.y.z) with: tailscale ip -4
B
On the phone (one-time)
Install Tailscale from the App Store and sign in with the same account as the Mac — this is the #1 mistake; two different logins = two separate tailnets that can't see each other. Install an SSH client (Termius, Blink, or Prompt). Optionally enable MagicDNS so you can use ssh john@mac-studio instead of the IP.
C
Connect and persist
tmux is the key — it keeps the session alive even when your phone disconnects or locks. SSH in, start a named session, run Claude inside it; reconnect later and pick up exactly where you left off. Pairs perfectly with Remote Control: run claude remote-control inside tmux and you get both a terminal and the rich mobile UI, both surviving disconnects.
# from the phone's SSH app ssh john@mac-studio # or ssh john@100.x.y.z tmux new -s phone # persistent named session claude # run Claude Code inside it # later — reconnect and resume ssh john@mac-studio tmux attach -t phone

The one catch: the Mac must stay awake

All three run on the Mac

Every option above runs locally, so the Mac has to be awake, online, and logged in. To stop it sleeping right now: caffeinate -d -i & (prevents display and idle sleep until you kill it or reboot).

For a permanent fix that survives reboot, and for the broader question of running data-pulling loops 24/7, see the always-on loops brief.

Recommendation

Now
Set up Remote Control (2 minutes, biggest payoff) — the missing piece given the bot already exists.
Keep
The Telegram bot for quick one-liners.
Add later
Tailscale + SSH + tmux when you want a full terminal away from the desk, or before leaning on always-on loops you may need to debug remotely.