Working on a laptop at dusk above a city — the glowing screen the one persistent point as the session follows you on the go

Claude Code on the Go

Claude Code is a long-running interactive process. Mobile networks are not. The fix is a persistent shell on a VPS, tmux, and Blink Shell on iOS.

Category Workflow
Posted on May 17, 2026
Read Time 6 min

TL;DR

Claude Code is a long-running interactive process. Mobile networks are not. The fix is not a mobile app. It is a persistent shell on a cheap Linux VPS, tmux to keep the session alive across disconnects, and Blink Shell on iOS to reconnect quickly with a real keyboard. Once that loop is wired up, an iPad becomes a serious second workstation for the same session that was running on the laptop earlier.


The Problem

Claude Code is not a request/response chat box. A real session has long-running tool calls, file edits in flight, a model thinking through a multi-step plan. If the shell that hosts it dies, you do not just lose a connection. You lose context.

Mobile networks die constantly. Cell tower handoffs, elevator dead zones, wifi-to-LTE flips, an iPad sleeping for two minutes while you take a call. Each one of those events kills a plain SSH session. If Claude Code is running directly inside that SSH session, it goes with it.

So the question is not “how do I run Claude Code on my phone.” It is: how do I keep one session alive across whatever the network does, and pick it up from whichever device is closest.


The Setup, From Far to Near

The setup has three layers. Each one solves a specific failure mode.

  1. A cheap Linux VPS. Any small instance from any provider works. The VPS is the only machine that needs a stable network. It runs Claude Code. It holds the repo. It is the source of truth for the session.
  2. tmux on the VPS. tmux owns the shell that Claude Code runs inside. When SSH drops, tmux does not care. It keeps the process group alive, the scrollback intact, and the cursor exactly where it was.
  3. Blink Shell on iOS. Blink speaks mosh as well as SSH. mosh tolerates network changes. Combined with Blink’s hardware-keyboard handling, an iPad with a Magic Keyboard or a Bluetooth mechanical becomes a usable terminal, not a toy one.

Why tmux Is the Load-Bearing Piece

If you take one thing from this post, take this. tmux is the reason any of this works.

tmux is a terminal multiplexer. The relevant property here is detachment. A tmux session keeps running after the client disconnects. Reattach later and you get the exact same shell, with the same processes still running, the same scrollback, the same working directory.

Without tmux: SSH drops → shell dies → Claude Code dies → next session starts cold.

With tmux: SSH drops → tmux keeps the shell → Claude Code keeps running → reattach → resume.

The tmux commands worth memorizing for this workflow are small.

# Start a named session for Claude Code work
tmux new -s claude

# Detach on purpose (Claude Code keeps running)
# Inside tmux: Ctrl-b then d

# List sessions
tmux ls

# Reattach to the named session
tmux attach -t claude

Named sessions matter because once you are in the habit, you will have one tmux session for Claude Code, another for general shell work, maybe a third for htop or log tailing. Naming them means tmux attach -t claude always lands you in the right place.


Most iOS SSH clients are fine for one-off connections. They are not fine for a workflow you do every day. Two Blink properties carry the experience.

Mosh-style reconnection. Plain SSH over a flaky link feels like SSH over a flaky link. Mosh is built for this exact case. The connection survives IP changes, sleep, and long pauses. Blink integrates mosh as a first-class option. Open the app after the iPad has been asleep for an hour and the session is already there.

Hardware-keyboard ergonomics. Blink lets you remap the keys that matter on iOS hardware keyboards. Caps Lock to Control is the obvious one. Without that remap, tmux’s Ctrl-b prefix is a two-hand contortion. With it, the iPad starts to feel like the laptop.

Remaps worth doing in Blink’s settings:

  • Caps Lock → Control
  • Globe (or Function) → Escape, if your keyboard does not have a dedicated Escape
  • Disable the iOS shortcut bar above the keyboard — it steals vertical space and offers nothing useful in a terminal

A Day in the Life

Morning, laptop. Open the terminal. SSH to the VPS. tmux attach -t claude. Start a Claude Code session. Work through the morning.

Lunch, leave the laptop. The SSH connection drops or gets suspended. That is fine. tmux on the VPS keeps the Claude Code session alive.

Afternoon, iPad in the bag. Sit down. Open Blink. mosh user@vps. tmux attach -t claude. Same session. Same scrollback. Same prompt position. Continue.

Evening, back at the laptop. Detach from Blink. Reattach on the laptop. Same session again.

The session is the artifact. The device is just a window into it.


Security Note

The VPS holds an SSH key authorized to your git provider, the repo with whatever code you are working on, and an interactive session that can read and write files in that repo. Treat it accordingly:

  • SSH key auth only. Disable password login.
  • Scope the git credential the VPS holds. Use a repo-scoped deploy key, not your personal git key. A VPS compromise should not also mean a git-account compromise.
  • mosh listens on its own UDP port range alongside SSH. Firewall it to known source IPs if your provider supports it, the same way you would restrict SSH.
  • Keep the VPS patched. Unattended-upgrades is a reasonable baseline, but kernel security patches eventually force a reboot, and a reboot kills the tmux session this whole setup depends on. Note where you are before a planned reboot, and use claude --resume after. Continuity here is a habit, not a guarantee.
  • The Claude Code session can run shell commands. Anyone with shell access to the VPS effectively has the same authority Claude Code does. Restrict who can log in.
  • Rotate the SSH key on a schedule, the same as any production key.

© 2026 Uzi Ashkenazi