# Remote Control from your phone

import { Callout } from "nextra/components";

Claude Code has a built-in feature called [Remote Control](https://code.claude.com/docs/en/remote-control). It lets the Claude app on your phone, or claude.ai in a browser, talk to a Claude Code session that's running on your computer. Turn it on inside the [Pane Chat](/docs/pane-chat) tab and your phone talks to the one session that manages all your other agents.

What you'll see on the phone is a chat with Pane Chat. You won't see your terminals or diffs. If you want those on your phone, that's a different Pane feature called Remote Pane, which shows the full Pane UI in your phone's browser. Its setup guide is [Remote VM Setup](/docs/remote-daemon); despite the name, any machine works as the host, no VM needed. You can use both at once.

For why this works, and what Claude Code and Codex offer natively, read [remote-control your whole Pane workspace from your phone](/use-cases/remote-control).

<Callout type="info">
  Remote Control is a Claude Code feature, so Pane Chat has to be running Claude Code, not Codex. Use the Claude/Codex toggle in the top right of the Pane Chat tab. The panes Pane Chat manages can still run Codex, Aider, Goose, or anything else.
</Callout>

Where each thing on this page gets typed:

- Commands starting with `/` go into the Pane Chat tab on your computer. Pane Chat is its own tab in the Pane window, not inside any pane, and it's a Claude Code session, so `/config` and `/remote-control` work there.
- Sentences in quotes are what you type on your phone, in the Claude app.
- `sudo` and `caffeinate` commands go into a normal terminal window, not into the chat.
- `runpane` commands in backticks are what Pane Chat runs for you. You don't type them. The one exception is the self-test under Troubleshooting.

## Before you start

- A claude.ai plan that includes Remote Control. Anthropic's [requirements](https://code.claude.com/docs/en/remote-control#requirements) list Pro, Max, Team, and Enterprise. API keys don't work. On Team and Enterprise an Owner turns it on first in [Claude Code admin settings](https://claude.ai/admin-settings/claude-code).
- Pane installed with at least one repo added, and the Pane Chat tab open on Claude Code.
- The Claude app on your phone ([iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) or [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude)), signed in to the same account. Type `/mobile` into the Pane Chat tab for a download QR code.
- A computer that's awake whenever you want the agents to make progress. Remote Control is a process on your machine. If Pane quits or the Pane Chat tab closes, Anthropic's [limitations](https://code.claude.com/docs/en/remote-control#limitations) say the session shows as offline in the app within seconds. Sleep is covered below.

## Enable it

1. Open the Pane Chat tab and wait until it finishes its startup check. On a fresh launch it checks Pane's health and lists your panes on its own, then sits at a prompt.
2. Type this into the Pane Chat tab and press Enter. The name is optional and can have spaces; it's the name you'll look for in the app. `/rc` is the short form.

   ```text
   /remote-control Pane Chat
   ```

   Claude Code prints a session URL and a QR code in the tab.

3. Leave the tab open. Setup on the computer is done.

Each Claude Code session gets its own remote session. You could turn this on in other panes too, but each one would show up as a separate conversation in the app. Pane Chat is the one worth having on your phone, because it can reach every other pane for you.

## Connect from your phone

Pick one:

- Open the Claude app, tap **Code**, and tap the session named Pane Chat. If you skipped the name, look for one named after your computer, like `myhost-graceful-unicorn`. Sessions on your own machine show a computer icon with a green dot when online.
- Point your phone's camera at the QR code in the Pane Chat tab. It opens the session in the Claude app.
- On any other computer, open [claude.ai/code](https://claude.ai/code) in a browser and pick the same session from the list.

Messages you send from the phone appear in the Pane Chat tab on your computer, and the other way round.

## Turn on push notifications

Type `/config` into the Pane Chat tab and enable one or both of these rows, named as they appear in [Anthropic's docs](https://code.claude.com/docs/en/remote-control#mobile-push-notifications):

- **Push when Claude decides**: a push when a long task finishes.
- **Push when actions required**: a push when Claude has a question for you.

You can also ask for one from the phone: "notify me when the PR is open". Per the same docs, Claude Code skips pushes while you're typing in the Pane Chat tab, so you won't get buzzed at your desk.

## What to say from the phone

Pane Chat is the same orchestrator you talk to at your desk. An orchestrator is an agent that manages other agents: it creates panes, starts agents in them, checks on them, and tells you what needs you. Say what you want in plain words.

Three words you'll see below. A **pane** is a workspace on its own branch, in its own folder. A **panel** is a tab inside a pane, usually the terminal an agent runs in. A panel's **screen** is what's showing in that terminal right now. Pane Chat drives all of this with the [runpane CLI](/docs/runpane-cli), and it keeps a live stream of pane events open, which the rest of this page calls the watcher. That stream is `runpane watch --follow` with the cost-conscious cadence flags, which Pane Chat arms for you at startup so an overnight run isn't woken by events it can't act on. The flags and the reasoning are in [runpane watch](/docs/runpane-cli#runpane-watch).

| You say | What Pane Chat does on your computer |
| --- | --- |
| "status" | Lists your panes, reads the screen of any panel that changed, and answers with one line per piece of work: what state it's in, what's blocking it, what happens next. |
| "what did I finish today?" | Reads branches, pull requests, and agent logs, not just pane names. See [ask what you worked on](/docs/pane-chat#ask-what-you-worked-on). |
| "start a pane on the website repo with Codex, plan issue 161, stop before editing" | Runs `runpane panes create` with the repo, agent, and prompt. That one command makes the branch and folder, starts Codex, and sends the prompt. Pane Chat waits until the agent is ready, then tells you the pane is running. The pane opens in the background so your desk view doesn't jump. |
| "what is the website pane waiting on?" | Reads that panel's screen (`runpane panels screen`) and sends you the question the agent is asking. |
| "tell it yes", or the actual answer | Types your text into that panel (`runpane panels submit`) and checks the agent picked it up. |
| "continue" | For a pane whose agent stopped mid-response after the machine slept or lost network: reads the panel, then tells the agent to pick up from the last step it didn't finish. |
| "you can merge PR 161" | Merging is one of the actions Pane Chat is told to wait for you on. Any wording that clearly grants that one step works. |

Pane Chat is told to stop before merge, deploy, release, publishing, version changes, destructive changes, deleting data, and doing work you didn't ask for. Those are instructions in its skill file that the model follows, not a permission system enforced by Pane. It's told not to treat "continue" as permission for any of them.

## Keep the machine awake

Three separate things happen when the machine sleeps, and it helps to keep them apart:

1. **The connection** comes back on its own. When the machine wakes with network, Claude Code reconnects and delivers whatever queued while it was out. Nothing for you to do.
2. **Progress** only happens while the machine is awake. A sleeping machine runs nothing.
3. **An agent's turn** can die during a pause. The agent prints something like "Can't reach the API server" and stops. The connection recovers, but that agent sits idle until it's told to go on. Pane Chat can do that itself when it reads the error on the panel; the [story on the use-case page](/use-cases/remote-control#what-happened-last-night) is one such recovery with no person involved. If Pane Chat's status shows a pane sitting on that error instead, "continue" from your phone does the same thing.

The recommended setup is plugged in with the lid open and automatic sleep turned off. Two different sleeps need turning off on a Mac:

- **Idle sleep** (screen dark for a while): run `caffeinate -dims` in a normal terminal window and leave it running, or turn off automatic sleep for the power adapter in System Settings.
- **Lid-closed sleep**: closing the lid sleeps a MacBook even with idle sleep off, unless it's set up for clamshell use with an external display. `caffeinate` doesn't stop it. What does is `sudo pmset -c disablesleep 1` in a normal terminal window, which turns off sleep for the power-adapter profile only. Undo it with `sudo pmset -c disablesleep 0`. While it's on, the Mac stays fully awake whenever it's on the charger with the lid shut, including in a bag, so revert it when you're done.

On Windows and Linux, set the power plan so the machine doesn't sleep while plugged in.

**On battery with the lid closed**, the machine sleeps and the agents pause. In our testing, macOS wakes a closed MacBook for a minute or two every five to fifteen minutes for background work. Agents retry their API calls in those windows, and the run crawls forward. This is the setup in the [story on the use-case page](/use-cases/remote-control#what-happened-last-night). It works, but each pause can end an agent's turn, which is case 3 above.

Pane Chat also has an opt-in unattended resilience mode ([PR #609](https://github.com/dcouple/Pane/pull/609), merged September 2026). It asks at startup whether to enable it, runs `caffeinate` for you while the lid is open, and makes resuming panes whose turn died from a sleep or network error a standard behavior rather than a judgment call.

## Troubleshooting

**The session shows offline in the app.** Either Pane isn't running or the machine is asleep. If you're running on battery with the lid closed, offline is the normal state between wakes; the session flips online for a minute or two at a time, and you can't wake the machine from the phone. If the machine is awake and Pane is running but the Pane Chat tab shows a connection failure, type `/remote-control Pane Chat` into it again; that's the [documented fix](https://code.claude.com/docs/en/remote-control#check-connection-status). If the tab is gone, reopen Pane Chat and run the command again, then pick whichever session the app now shows as online.

**Claude Code says Remote Control requires a claude.ai subscription.** You're signed in with an API key or through a third-party provider. Remote Control needs a claude.ai login on a supported plan.

**A pane is waiting and nothing moves.** Pane Chat reports a pane as BLOCKED when the agent in it is waiting on a person. Ask "what is it waiting on?", then answer. Pane Chat is told never to answer those on your behalf.

**Pane Chat says the watcher failed.** The event stream exited with an error, or printed a `WATCH ERROR` line, and restarting it once didn't help, so Pane Chat stopped and told you. Silence on its own is never treated as a failure: the stream's heartbeat is filtered out so it can't wake Pane Chat, and a long quiet stretch usually just means every pane is busy or the machine was asleep. Check the machine is awake and Pane is running, then say "re-arm the watcher", which asks it to start the stream again. To check the stream yourself, run this in a normal terminal on the computer (the `runpane` command is installed alongside Pane); a healthy answer looks like the second line:

```text
runpane watch --self-test --json
{"kind":"_ok","generation":1218,"epoch":"a3ad489e-2750-4d5b-9e15-06228d08b597"}
```

**You're on Codex.** Switch Pane Chat to Claude Code with the toggle. Codex's own phone feature, called [Remote](https://learn.chatgpt.com/docs/remote), pairs the ChatGPT desktop app with the ChatGPT mobile app. It doesn't reach a Codex session running in a terminal.

## Related docs

- [Pane Chat](/docs/pane-chat)
- [runpane CLI](/docs/runpane-cli)
- [Agent Loops](/docs/agent-loops)
- [Remote VM Setup](/docs/remote-daemon) for seeing terminals and diffs on your phone through Remote Pane
- Anthropic: [Remote Control](https://code.claude.com/docs/en/remote-control) and [Claude Code on mobile](https://code.claude.com/docs/en/mobile)
