# Running Claude Code and Codex from an iPad or iPhone

The SSH, mosh and tmux setup that keeps an agent running while you walk away — how it compares to Claude's own Remote Control, and when each one is the right tool.

*updated 2026-08-25*

A coding agent changes what a phone is for. The work happens on a machine
somewhere else and takes minutes at a time, which means the useful mobile action
is not *typing* — it is checking whether the thing is stuck, answering the one
question it is blocked on, and putting the phone away again.

There are two good ways to do that, and they are not really competitors.

## The short version

- **Use the Claude app's Remote Control** if you want to steer a Claude Code
  session and nothing else. It is first-party, it is free, and it requires no
  setup beyond enabling it. Anthropic documents it at
  [code.claude.com/docs/en/mobile](https://code.claude.com/docs/en/mobile).
- **Use a terminal over SSH** if you want the machine, not just the agent — a real
  shell where you can also read logs, check `git diff`, restart a service, run a
  second agent, or kill the process that is wedged. That is what this guide sets
  up.

Plenty of people use both. The setup below is also what Anthropic's own guidance
suggests running an agent inside: a terminal multiplexer, so the session survives
you disconnecting.

## The setup

Three pieces, and only the middle one is unusual.

### 1. Reach the machine

Your agent runs on a Mac, a VPS or a box under a desk. You need to be able to SSH
to it from outside your network. Either forward a port, or — much better — put
both devices on a private network like Tailscale so nothing is exposed publicly.

Use key authentication, not a password. In Tessera, generate a key on device and
install the public half on the host; the private key stays in the iOS Keychain and
can be locked behind Face ID.

### 2. Put the agent inside tmux

This is the piece that makes the whole thing work.

iOS suspends apps aggressively. The moment your screen locks, a plain SSH session
is on borrowed time — and if the connection dies, whatever was running in it dies
too. `tmux` moves the lifetime of your work off your phone and onto the server:

```sh
tmux new -A -s agent
claude          # or: codex
```

Now the agent is running inside a tmux session named `agent`, on the server. Close
the app, lose signal, reboot the iPad — the agent keeps going. Reconnect and
`tmux attach -t agent` puts you back exactly where you were.

Tessera can do that attach for you automatically when it connects, so reopening the
app *is* the reattach.

### 3. Use mosh for the ride

SSH assumes a stable IP. Phones do not have one — you walk out of the house and
Wi-Fi becomes cellular, and the SSH connection is dead.

[mosh](/docs/mosh/) survives that. It authenticates over SSH, then hands the
session to a UDP protocol keyed to the session rather than the address, so
switching networks or sleeping the device doesn't break anything. Paired with tmux
you get both halves: mosh keeps the *connection* alive across roaming, tmux keeps
the *work* alive across everything else.

## Why a real terminal, and not just a chat client

The first-party mobile clients are good at what they do, and if steering the
conversation is all you need, use them. The gap shows up in the moments around the
agent:

- The agent finished, and you want to see the diff before it goes anywhere.
- The dev server it started fell over, and you want the last forty lines of the log.
- It has been "working" for six minutes and you want to know if it is actually
  waiting on a prompt.
- You are running Codex on one project and Claude Code on another and want both.
- Something is wedged and needs `Ctrl-C` and a restart.

All of those are shell, not chat. A terminal gives you the same environment you
will sit back down to at your desk — same directory, same session, same scrollback.

## Watching several agents at once

Once more than one agent is running, the problem stops being access and becomes
attention: which of these is blocked on me?

Tessera's [agent center](/docs/agent-center/) is built for that. It collects Claude
Code and Codex sessions from across every connection — tmux windows, panes and
plain sessions — into one page, grouped by state: **needs input**, **just
finished**, **working**, **idle**. A blocked agent shows its actual prompt with its
options as buttons, so you can answer without hunting for the pane, and answers are
re-checked against the live prompt before they are sent, so you never reply to a
question the agent already moved past.

It is experimental and off by default — turn it on in **settings → experimental →
agent center**.

## A note on cost and honesty

This setup runs the agent on *your* machine, on *your* API usage, through a
terminal that connects directly to it. Nothing routes through bambouville — there
is no bambouville server to route through. That is a design constraint as much as a
privacy claim: an app with no backend cannot relay your session even if it wanted
to.

## Questions

### Can I run Claude Code from an iPad?

Yes, in two ways. The Claude app's Remote Control steers a session on a machine you
have enabled it on. Or you can SSH into that machine from a terminal app and run
`claude` inside tmux, which gives you the full shell alongside the agent. The
second approach also works with Codex, opencode and anything else that runs in a
terminal.

### How do I keep Claude Code running when I close the app on my phone?

Run it inside tmux on the server: `tmux new -A -s agent` then `claude`. The session
belongs to the server, not to your phone, so suspending or killing the terminal app
does not stop the agent. Reconnect and reattach to pick it up.

### What is the best iOS terminal for monitoring coding agents?

If you want a purpose-built agent cockpit with an approval inbox and Apple Watch
actions, Moshi is the most developed. If you want a real shell underneath — logs,
git, services, any agent — Tessera's agent center does that and the app is free
with every feature included. Secure ShellFish has also added agent detection and
push notifications.

### Do I need mosh, or is SSH enough?

SSH is enough if you stay on one network and keep the app open. If you move between
Wi-Fi and cellular, or lock the device, mosh is what stops the connection dying.
Use mosh for the connection and tmux for the work — they solve different halves of
the problem.

### Is this better than Claude Code's own Remote Control?

Not better — different. Remote Control is first-party, free and requires no setup,
and it is the right tool for steering a Claude conversation. A terminal gives you
the whole machine and every agent on it, at the cost of setting up SSH access. Many
people run both.
