Skip to content

Remote Control

Drive a Claude Code session running on your own machine from a browser or the Claude mobile app, with setup, server mode flags, security, push notifications and fixes for common errors.

Remote Control lets you keep steering a Claude Code session that is running on your own computer from somewhere else: claude.ai/code in any browser, or the Claude app on iOS and Android. I start a refactor at my desk, leave for a client meeting, and approve the next step from my phone on the train.

The important point is that nothing moves to the cloud. Claude keeps running locally, with your files, your MCP servers, your tools and your project settings. The phone or browser is just a window onto that session, which means your computer has to stay on and the claude process has to keep running. If you want work that carries on while your laptop is closed, use a cloud session instead.

What you get:

  • Your full local environment, remotely. Typing @ on your phone autocompletes paths from your local project.
  • Several screens at once. The conversation, plus the progress of subagents and workflows, stays in sync across the terminal, browser and phone. Send messages from any of them.
  • Attachments from your phone. Photos are passed to Claude directly; other files are downloaded to your machine and handed over as @ references.
  • Resilience. If the laptop sleeps or the network drops, the session reconnects when the machine is back.

Before you start

RequirementDetail
PlanPro, Max, Team or Enterprise. API keys are not supported. On Team and Enterprise, an Owner must turn on the Remote Control toggle in Claude Code admin settings first
Sign-inLog in through claude.ai with /login. Without an eligible login, claude remote-control exits with an error; claude --remote-control still opens a normal session but shows a Remote Control failure shortly after
API routeNot available on Amazon Bedrock, Google Cloud's Agent Platform or Microsoft Foundry, when ANTHROPIC_BASE_URL points anywhere other than api.anthropic.com, or when signing in through a Claude apps gateway
Feature flagsCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC or DISABLE_GROWTHBOOK make it unavailable; unset them in your shell or settings env block. DISABLE_TELEMETRY or DO_NOT_TRACK alone are fine on v2.1.283 or later, unless your organisation requires Trusted Devices
Workspace trustIn an untrusted folder, claude remote-control explains what trust enables and asks Trust <directory>? [y/N]. The answer is saved, except in your home directory, where it asks every time. Without a terminal for input or output it exits with a Workspace not trusted error

Starting a session

There are five ways in.

Server mode (CLI)

cd ~/code/booking-api
claude remote-control

The first time, it explains what Remote Control does and asks Enable Remote Control? (y/n). Say y; say no and it exits and asks again next time.

The process then sits in your terminal waiting for connections. It prints a session URL and, if you press the spacebar, a QR code for your phone. While a remote session is active the terminal shows connection status and tool activity. Server mode can host many sessions at once, which is why I use it when I want to kick off several tasks from my phone.

FlagWhat it does
--name "Booking API"Session title shown at claude.ai/code
--remote-control-session-name-prefix <prefix>Prefix for auto-generated names (default: your hostname, giving names like myhost-graceful-unicorn). CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX does the same
-c, --continueBring back the session the last server in this folder started with (v2.1.200 or later)
--session-id <id>Bring back one session by ID (v2.1.200 or later)
--spawn <mode>same-dir (default; sessions share the folder and can clash), worktree (each on-demand session gets its own git worktree), or session (exactly one session, others rejected; startup only). Press w while running to toggle between same-dir and worktree
--capacity <N>Maximum concurrent sessions, default 32. Not allowed with --spawn=session
--[no-]create-session-in-dirPre-create one session in the current folder at startup (on by default). In worktree mode this one stays in the folder while new ones get worktrees. With --no-create-session-in-dir, sessions are archived when you stop the server, so there is nothing to resume
--permission-mode <mode>Starting permission mode for the server's sessions, such as acceptEdits. manual is accepted as an alias for default; an unknown mode stops the server and lists valid ones
--chrome / --no-chromeTurn Chrome on or off in sessions the server creates (v2.1.273 or later)
-d, --debug[=<filter>]Debug logging, optionally filtered, for example --debug=api,hooks (v2.1.282 or later)
--debug-file <path>Write debug logs to a file
--verboseDetailed connection and session logs

--continue and --session-id cannot be combined with each other or with --spawn, --capacity or --create-session-in-dir.

About Chrome: without either flag, the pre-created session and sessions you start from claude.ai/code or the app begin with Chrome off, even if you enabled it by default. Sessions started for a project thread follow your default instead, except in bypassPermissions mode.

Global claude flags placed before remote-control (perhaps by a wrapper script) are not passed on to the sessions the server creates. Harmless ones such as --verbose and --model are allowed through; for anything else, such as --settings, the server refuses to start and names the flag to remove. To sandbox the server's sessions, enable sandboxing in a settings file. claude remote-control --help checks eligibility first, so if you are not signed in properly it shows an error instead of the flag list.

Interactive session with Remote Control on (CLI)

claude --remote-control
claude --rc "Invoice export fix"

A normal terminal session that is also reachable remotely. You can type locally and remotely.

From a session you are already in (CLI)

/remote-control
/rc Invoice export fix

This carries your current conversation over. The first time, a dialog asks you to Enable Remote Control; choosing Never mind or pressing Esc cancels, and you will be asked again next time. --verbose is not available here.

VS Code

Type /remote-control or /rc in the prompt box. A Remote Control indicator appears in the prompt footer; once connected, click it to open the session, or find it at claude.ai/code. The URL is also posted into the conversation. Run the command again to disconnect. VS Code does not take a name argument or show a QR code; the title comes from your conversation.

Desktop app

In a local session on the Code tab, type /remote-control or /rc. The session then appears at claude.ai/code. Run it again to disconnect. To turn it on for every session, see Always on below.

Checking the connection

In an interactive session, an /rc active indicator (linking to claude.ai) shows while connected, unless the terminal is too narrow. Run /remote-control again to open a status panel with the URL, a QR code and a disconnect option that leaves your local session running.

If the connection fails, the indicator changes and you get a notification and a note in the conversation. Run /remote-control to reconnect, except when the reason says the session changed elsewhere:

  • Another connection took over this session. Another device or Claude Code instance has it. Reconnect only if you want it back.
  • This session was ended or archived from another device or app. Reconnecting reopens it, including unarchiving.
  • The server no longer reports this session. It may have been deleted elsewhere.

Connecting from another device

  • Open the session URL in any browser.
  • Scan the QR code to open it in the Claude app.
  • Open claude.ai/code or the app (tap Code in the mobile navigation) and find the session by name. Remote Control sessions show a computer icon with a green dot when online.

No app yet? Run /mobile in Claude Code for a QR code that sends your phone to the right app store.

On connecting, the device shows any subagents and workflows already running in the background, and stopping one there stops it on your machine.

The session title is chosen in this order: a name passed to --name, --remote-control or /remote-control; a /rename title; the last meaningful message in history; an auto-generated hostname-based name. Without an explicit name, the title updates once you send a prompt. Renaming from claude.ai or the app also updates the local title in claude --resume.

What the remote device sees

  • Compaction and /clear. The device shows compaction progress and where it happened; /clear resets the device's view too.
  • /resume in the terminal. The device does not get the other conversation's title or history, but new messages flow to whichever conversation is open in the terminal. Switch back with /resume to continue the original remotely.
  • /teleport. Pulling a cloud session into the terminal behaves the same way: new messages flow, earlier history does not appear on the device.
  • Cross-session messaging. The same connection carries messages between your sessions on different machines and from cloud sessions.
  • Diffs. In a git repo, the device's diff pane shows changes since your branch split from the default branch (including uncommitted edits), or just uncommitted changes when you are on the default branch or not ahead of it.
  • Model. Picking a model on the device switches the session (v2.1.238 or later). The device's model control affects only this session; sending /model <name> from the device to an interactive session also sets your default for new sessions.
  • Effort. Setting effort with /effort or the effort control applies on your machine (the control needs v2.1.234 or later). If CLAUDE_CODE_EFFORT_LEVEL pins a level, the session keeps it and refuses other picks from the control.
  • Reconnecting after failure. If compaction rewrote the conversation or you switched with /resume while disconnected, reconnecting archives the old server session rather than leaving it in the list (find it by filtering for archived sessions). Switching while still connected does not archive anything.

Always on

Remote Control is off unless you start it, or turn on auto-connect. In /config, Enable Remote Control for all sessions takes three values:

ValueEffect
trueEvery interactive session connects at startup
falseAuto-connect off (saved to user settings, so a managed true outranks it; a false in project or local settings beats even a managed true)
defaultClear your choice and follow your organisation's default, or Claude Code's

VS Code has the same toggle in the command menu's Settings section. In the desktop app it is Settings > Claude Code > Connect new sessions to Remote Control.

In a settings file, use remoteControlAtStartup. Set it to true in ~/.claude/settings.json or managed settings. In project or local settings only false is honoured; true is ignored so a checked-in file cannot switch it on for everyone who clones the repo.

{ "remoteControlAtStartup": true }

Auto-connect uses your own claude.ai account, so sessions appear only in your own apps. Each interactive process registers one remote session; for several sessions from one process, use server mode.

Coming back after stopping

Stopping claude remote-control with Ctrl+C takes its sessions offline but does not archive them (unless you used --no-create-session-in-dir or another server is running in the same folder). Within about four hours, in the same folder, run:

CommandBrings back
claude remote-controlEvery session that server was serving
claude remote-control --continueOnly its starting session, exiting when that ends. With no record in this folder, uses the newest from the repo's other worktrees
claude remote-control --session-id <id>One session by ID (the part of its claude.ai/code URL between /code/ and any ?), exiting when that ends

After four hours, start fresh. From v2.1.228, --continue and --session-id unarchive a session you archived in the meantime.

Sessions started with claude --remote-control or /remote-control come back via claude --continue or claude --resume (see sessions for which permission mode applies). If you resume such a conversation in a second terminal while the first still has Remote Control on, the second prints Remote Control not started here and leaves it alone; run /remote-control there to move it. Resuming in the desktop app or an IDE reattaches to the existing claude.ai session rather than adding another.

Security

  • Your machine only makes outbound HTTPS requests and never opens inbound ports. It registers with the Anthropic API and polls for work; messages between device and session are routed over a streaming connection.
  • Traffic goes through the Anthropic API over TLS, using several short-lived credentials, each limited to one purpose and expiring independently.
  • While connected, the transcript (messages, responses, tool activity) is stored on Anthropic's servers to keep devices in sync and allow reconnection. Execution and file access stay local. Retention follows data usage.
  • Disable it entirely with the disableRemoteControl setting. Organisations with zero data retention or the HIPAA configuration cannot enable it.

Trusted Devices (beta)

Trusted Devices ties Remote Control access to a verified device plus a recent sign-in, not just a logged-in account. It is off by default and available on all four plans: an Owner enables it for Team and Enterprise at Organization settings > Capabilities > Remote sessions; Pro and Max users turn on Require trusted devices themselves on the Cowork or Account settings page. It covers Remote Control in Claude Code and Cowork; ordinary chat, the terminal itself and API use are unaffected.

With it on, viewing or steering a session needs:

  • An enrolled device. Each browser, phone or desktop app enrols its own credential, and enrolment is only offered shortly after a full sign-in.
  • A sign-in under 18 hours old. Rather than signing in daily, members confirm with Face ID, Touch ID, Windows Hello or a passkey.

Biometrics stay on the device; Anthropic stores only the device's public key and basic metadata (name, platform, enrolment time). The terminal machine gets its credential automatically when the developer signs in to the CLI.

For admins: the setting applies to every member and only to sessions started after enabling it; there is no per-team scoping. Warn people, because the first remote interaction from each device prompts enrolment (with SSO sign-in first if needed). Devices without a platform authenticator can use a hardware key or sign in again.

Members manage devices under Trusted devices at claude.ai account settings; removing one revokes it immediately, and unused credentials expire on their own. For a lost device when the member cannot sign in, an admin can use Sign out everywhere in the admin console.

Push notifications to your phone

Claude can push to your phone while Remote Control is active, usually when a long task finishes or it needs a decision. You can also ask: "ping me when the migration finishes."

  1. Install the Claude app and sign in with the same account and organisation you use in the terminal.
  2. Allow notifications.
  3. In the terminal, run /config and enable Push when Claude decides, Push when actions required, or both.

There is no finer per-event control. If nothing arrives:

  • /config showing No mobile registered means the app needs to refresh its token: open it, and the warning clears next time Remote Control connects.
  • On iOS, check Focus modes and notification summaries under Settings, Notifications, Claude.
  • On Android, exempt the app from battery optimisation.

Pushes are skipped while you are typing in or focused on the connected terminal. To skip them whenever you are at the machine, set CLAUDE_CLIENT_PRESENCE_FILE to a marker path and have a screen-lock tool create the file on unlock and delete it on lock.

Limitations

  • One remote session per interactive process. Use server mode for more.
  • The local process must stay alive. Closing the terminal, desktop app or VS Code takes the session offline. On a remote server over SSH, run claude inside tmux or screen.
  • Crashed sessions in server mode come back if you send them a message from a device (v2.1.238 or later); no restart needed.
  • HTTP 403s (for example after a VPN change) are retried for up to three minutes, then the session disconnects with a reason naming what refused: a network edge, or a proxy, VPN or firewall on your side.
  • Long outages. Server mode gives up after roughly ten minutes offline and exits; an interactive session keeps retrying until the network returns.
  • Failed attachments. Claude still gets the message and whatever did download, plus a note such as [1 of 3 attachments did not arrive].
  • Heartbeat loss. A disconnect saying could not reach the Remote Control server for about 30 minutes is fixed with /remote-control.
  • Forwarded dialogs expire. Permission prompts and AskUserQuestion questions wait indefinitely. Other forwarded dialogs (such as the model choice after a safety refusal) close after five minutes with their no-action default; adjust with dialogExpiry (v2.1.224 or later).
  • The Fable usage-credits consent prompt appears only where the session runs. If nobody answers in the terminal before it closes, the turn ends without sending the request.

Commands from phone and browser

Terminal-only commands such as /plugin and /resume do not work remotely, and you cannot type /claude-api from mobile or web (Claude can still load that skill itself). These do work:

CommandRemote behaviour
/compact, /clear, /context, /usage, /exit, /recapAs normal, as text output
/usage-creditsPrints the billing URL. On Team and Enterprise it will not send a request to your admin, because that needs a confirmation only the CLI shows
/reload-pluginsOnly when the session runs in an interactive terminal
/model, /effort, /fast, /color, /renamePass the value as an argument, for example /effort high
/mcpMobile: a text status summary. Web: opens a directory of claude.ai connectors. reconnect, enable and disable work on both; /mcp reconnect alone retries every failed or unauthenticated server
/configMobile: key=value to set, nothing to list keys. Web: opens your Claude Code settings and ignores arguments
/autocompactv2.1.221 or later: pass a size such as /autocompact 400k; without one, prints the current value
/advisorv2.1.260 or later: /advisor opus or /advisor off for this session only; without an argument, prints the current advisor
/output-stylev2.1.269 or later: pass a built-in style name or list them. Custom styles must be selected in the session itself
/focusv2.1.281 or later: on, off, or toggle, for this session only

Remote Control or a cloud session?

Both use the claude.ai/code interface. Remote Control runs on your machine, with your local tools and configuration. A cloud session runs on Anthropic-managed infrastructure by default. Use Remote Control to keep going with local work from another device; use the cloud to start something with no local setup, on a repo you have not cloned, or to run several tasks in parallel. A project mixes both: threads run in the cloud, but you can ask for one to run on your computer through Remote Control.

Platforms compares Remote Control with Dispatch, channels, Slack and scheduled tasks.

Troubleshooting

MessageCause and fix
Remote Control requires a claude.ai subscription. (or the /remote-control variant), or You must be logged in to use Remote Control...Not signed in with claude.ai. Run claude auth login and choose claude.ai
Remote Control requires claude.ai subscription auth. naming ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN or apiKeyHelperAnother credential is winning. Remove it from your shell or the settings env block, or remove apiKeyHelper
Remote Control requires a full-scope login tokenYou are using a long-lived token from claude setup-token or CLAUDE_CODE_OAUTH_TOKEN, which can only call the model. Run claude auth login
Unable to determine your organization for Remote Control eligibilityStale account cache. Run claude auth login
Remote Control isn't enabled for this accountUsually stale entitlements after a plan change. claude auth logout, then claude auth login, and update Claude Code. claude doctor shows which check failed (before v2.1.239 the wording was "not yet enabled for your account")
Couldn't verify Remote Control eligibility, or Couldn't verify your organization's Remote Control policyThe flag service or policy could not be read, typically offline or blocked by a proxy. Retry when online; claude doctor explains
Remote Control requires feature-flag evaluationA flag-disabling variable is set; the message names it. Unset CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC or DISABLE_GROWTHBOOK. For DISABLE_TELEMETRY or DO_NOT_TRACK, update to v2.1.283 or later, and unset them only if Trusted Devices is required
Remote Control is only available when using Claude via api.anthropic.comBedrock, Google Cloud, Foundry or a custom ANTHROPIC_BASE_URL. The message names the cause; unset it and restart
Remote Control is disabled by your organization's policyCheck in order: a disableRemoteControl managed setting on this device; an old Team or Enterprise login lingering on a Pro or Max account (check /status, then log out and in); the HIPAA configuration (look for HIPAA on the Organization configuration line in /status); otherwise an Owner has not enabled the toggle
Remote Control was turned off by your organization's policyPolicy changed mid-session. Interactive and auto-connect sessions continue without it and are archived on claude.ai; server mode archives its sessions and exits. Re-run once allowed; open sessions refetch policy about hourly
Couldn't verify your organization's policy for remote controlPolicy could not be fetched and none is cached, often because you started offline or before a VPN. Fix the network and run the command again; claude doctor shows the Organization policy line
Remote credentials fetch failedRun claude remote-control --verbose. Usual causes: not signed in with claude.ai, a proxy blocking port 443, or (with Session creation failed) an inactive subscription
Couldn't reconnect to your Remote Control sessionA possibly temporary failure after --resume or --continue. Run /remote-control or start a new one with claude --remote-control
Previous session is unavailable (or Remote Control could not verify the signed-in account)Run /remote-control for a new session. Without restarting first, earlier messages are left out of the new remote session
Remote Control got an unexpected server responseYour version cannot read the server reply. Run claude update, then /remote-control
...requires Trusted Devices for Remote Control, but this device is not enrolledRun /login; enrolment happens during sign-in
session expired for trusted-device checkSign-in older than 18 hours. Run /login or confirm biometrically when prompted