Say you start a task in your terminal and want to keep steering it from your phone or from a browser on another computer. Anthropic documents two ways to do this, and the real difference between them is where the work runs. Remote Control connects claude.ai/code, or the Claude app for iOS and Android, to a Claude Code session running on your own machine. Code execution, your files, your MCP servers (the tool integrations Claude Code connects to) and your project settings all stay local. The phone or browser is only a window into that session, so your computer has to stay on and the claude process has to keep running. A cloud session runs on cloud infrastructure instead (Anthropic-managed by default) and keeps going after you close your laptop. It’s a separate session, though: from the CLI you can’t push an existing terminal conversation up to the cloud. Anthropic’s rule of thumb is to use Remote Control to continue local work that’s already in progress. Use a cloud session when you have no local setup, haven’t cloned the repository, or want several tasks running in parallel.

Remote Control vs cloud sessions: where the session runs

Both features use the same claude.ai/code interface, so on your phone they can look alike. The docs say the key difference is where the session runs. Remote Control runs on your machine, so your local MCP servers, tools and project configuration stay available. A cloud session starts in a fresh cloud environment and gets its code from GitHub or from an uploaded bundle of your repository.

Neither feature moves an existing terminal conversation into the cloud from the CLI. With Remote Control, the same session keeps running on your machine. claude --cloud starts a new, separate cloud session from your pushed branch. From the CLI, handoff only goes one way: claude --teleport pulls a cloud session down into your terminal. To send a local session up, the cloud-session docs point to the Continue in menu in the Claude Desktop app.

The flag names are easy to mix up. According to the cloud-session docs, --cloud creates cloud sessions and --remote is an older, deprecated alias for it. --remote-control is a different feature: it lets you monitor and steer a local session.

Documented differences, from Anthropic’s Remote Control and cloud-session pages (checked 27 September 2026)

| | Remote Control | Cloud session |

| — | — | — |

| Where it runs | Your machine (CLI, Desktop app or VS Code) | Cloud infrastructure, Anthropic-managed by default |

| What must stay running | Your computer and the claude process | Nothing local; it keeps going after you close your laptop |

| Start from a terminal | claude remote-control, claude --remote-control, or /remote-control inside a session | claude --cloud "task" (starts a new session) |

| Plans listed | Pro, Max, Team, Enterprise; API keys not supported | Pro, Max, Team; Enterprise users with premium or Chat + Claude Code seats |

| Team/Enterprise admin step | An Owner turns on the Remote Control toggle at claude.ai/admin-settings/claude-code | The org’s allow_remote_sessions policy must be on; an Owner enables it at claude.ai/admin-settings/claude-code |

| Zero Data Retention orgs | Can’t enable it | Can’t use cloud session features |

Remote Control docs

Claude Code in the cloud docs

Check these Remote Control requirements first

Anthropic lists the conditions below. When some of them aren’t met, Claude Code shows a specific error message, and the troubleshooting section at the end lists those messages with their documented fixes.

  • Sign in with a claude.ai account: run claude, then /login. Long-lived tokens from claude setup-token or CLAUDE_CODE_OAUTH_TOKEN can only make model requests, so they can’t open a Remote Control session. Run claude auth login instead.
  • Connect to the Anthropic API directly. Remote Control isn’t available on Amazon Bedrock, Google Cloud’s Agent Platform or Microsoft Foundry. It also doesn’t work when ANTHROPIC_BASE_URL points at a gateway or proxy, or when you sign in through an enterprise Claude apps gateway.
  • Check your environment variables. Setting CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC or DISABLE_GROWTHBOOK makes Remote Control unavailable. If only DISABLE_TELEMETRY or DO_NOT_TRACK is set, you need Claude Code v2.1.283 or later, and you must unset them if your org requires Trusted Devices.
  • Accept workspace trust: run claude once in the project directory and accept the trust dialog. Trust is never saved for your home directory, so start from a project folder.
  • Allow outbound access to the Anthropic API on port 443. This matters behind corporate firewalls and proxies.
  • On Team and Enterprise, an Owner must first turn on the Remote Control toggle at claude.ai/admin-settings/claude-code. Organizations with a HIPAA configuration, a compliance setup for handling health data, are blocked. For them, /status shows HIPAA in its Compliance row and the admin toggle is grayed out, and the docs say to contact Anthropic support.

Step 1: start Remote Control in one of three CLI modes

Interactive mode (claude --remote-control, or --rc) starts a normal terminal session that you can also steer remotely, so you can type from both places.

If you’re already in a conversation, /remote-control (or /rc) connects that session and carries its history over. That’s the direct answer to “move this conversation to my phone.”

Outside the terminal, type /remote-control in the prompt box of the VS Code extension, or in a local session in the Desktop app’s Code tab. In VS Code, a footer indicator appears and the session URL is posted in the chat, but the command takes no name and shows no QR code. In both apps, running the command again disconnects.

Server mode (claude remote-control) runs as a dedicated host. The first time you run it, it explains what it does and asks you to confirm with y/n. If you decline, it exits and asks again next time. After you accept, it prints a session URL and waits for connections. You can’t type into it locally, but pressing the spacebar shows a QR code for your phone.

Put server-mode flags after remote-control. Global claude flags placed before the subcommand, including ones a wrapper script adds, are not passed on to the sessions the server creates. Claude Code lets a few through, such as --verbose and --model, because dropping them doesn’t change what those sessions can do. Any other flag in that position, for example --settings, makes it refuse to start, and the error names the flag to remove. These are the main server-mode flags:

  • --spawn same-dir (the default): all sessions share the current directory, so they can clash if they edit the same files.
  • --spawn worktree: each on-demand session gets its own git worktree, a separate checkout of the repository.
  • --spawn session: serves exactly one session and rejects further connections.
  • --capacity <N>: maximum number of concurrent sessions, 32 by default.
  • --name, --permission-mode and --sandbox/--no-sandbox: set the session title, the starting permission mode, and sandboxing.
# Server mode: waits for remote connections; press spacebar for a QR code
claude remote-control

# Interactive session you can also type into locally (name is optional)
claude --remote-control "My Project"

# Inside a running session: keeps the current conversation history
/remote-control

Step 2: connect from your phone or a browser

There are three ways in. You can open the session URL in any browser, scan the QR code with the Claude app, or find the session by name in claude.ai/code or in the app’s Code tab. Sessions that are online show a computer icon with a green dot. If you don’t have the app yet, /mobile shows a QR code that opens the right app store.

From your phone or browser you can send messages and attach files. Claude sees photos directly. Other files are downloaded to your machine and passed to Claude as @ file references. Progress from subagents and workflows stays in sync, and stopping a task from your phone stops it on your computer. While connected, the terminal shows an /rc active indicator. Running /remote-control again opens a panel with the URL, a QR code, and an option to disconnect that leaves the local session running.

Not every command works remotely. Terminal-only commands such as /plugin and /resume run only in the local CLI. Commands that print text, such as /compact, /clear, /context and /usage, work from the phone. Commands that normally open a picker take an argument instead, for example /model sonnet or /effort high.

To have every session connect automatically, turn on “Enable Remote Control for all sessions” in /config, or set remoteControlAtStartup in your user settings. A settings file checked into a repository can turn auto-connect off but not on.

For push notifications, sign in to the app with the same account and organization you use in the terminal and allow notifications. Then enable “Push when Claude decides”, “Push when actions required”, or both in /config.

Limits, reconnects and data handling

Outside server mode, each Claude Code instance supports one remote session at a time. If you close the terminal, quit VS Code or the Desktop app, or stop claude, the session goes offline. On a remote machine, the docs recommend starting the session inside tmux or screen so it survives an SSH disconnect.

After you stop server mode with Ctrl+C, running claude remote-control, claude remote-control --continue or claude remote-control --session-id <id> in the same directory brings the sessions back. This works for about four hours. Sessions started with --remote-control or /remote-control come back through claude --continue or claude --resume.

How network problems are handled depends on the mode. A connected interactive session keeps retrying HTTP 403 refusals for up to three minutes, which can happen after a VPN change. During a longer outage, interactive mode keeps retrying until the network returns. Server mode gives up after roughly 10 minutes and exits.

Permission prompts and questions forwarded to your phone stay open until you answer them. Other forwarded dialogs close after five minutes by default, and the dialogExpiry setting changes that.

On security, the docs say the local session makes only outbound HTTPS requests and opens no inbound ports. Traffic goes over TLS through the Anthropic API, using short-lived credentials that each serve a single purpose. One caveat: while you’re connected, the transcript (your messages, Claude’s responses and tool activity) is stored on Anthropic servers under the Data usage policy.

The disableRemoteControl setting turns the feature off entirely. Organizations with compliance requirements such as Zero Data Retention, which restricts what data Anthropic keeps, can’t enable Remote Control at all. Trusted Devices, currently in beta and off by default, adds two checks: the device must be enrolled, and its sign-in must be no more than 18 hours old.

The changelog lists one related addition, without a version or date: you can fork a session started with --remote-control or /remote-control from the Claude app, and the fork runs as a background session on your computer.

Claude Code changelog

When to use claude –cloud instead, and how to start one

You can start a cloud session from claude.ai/code (also called Claude Code on the web), from the Code tab in the mobile app, from the Desktop app (choose Cloud instead of Local), or from the terminal with claude --cloud. To clone from GitHub, it needs access to your repositories, either through the Claude GitHub App or through /web-setup, which sends your local gh token. On Team and Enterprise plans, /web-setup stays hidden until an Owner turns on Quick web setup. The org’s allow_remote_sessions policy must also be on, and an Owner enables it at claude.ai/admin-settings/claude-code.

Each claude --cloud call starts a new session. It clones your GitHub remote at your current branch, not your local checkout, so the docs say to push local commits first. Your current terminal conversation doesn’t move; it stays local. Each call works with one repository, and because every call creates its own session, this is how you run tasks in parallel.

In two cases Claude Code uploads your repository as a bundle automatically instead of cloning it: when the repository has no git remote at all, and when it’s a github.com repository that the Claude GitHub App isn’t installed on. GitLab, Bitbucket and other non-GitHub remotes are not bundled automatically. You have to set CCR_FORCE_BUNDLE=1, and a session created that way can’t push results back to that remote.

A bundle includes your full history across all branches plus uncommitted changes to tracked files. Untracked files are left out, so git add anything the session needs. On macOS, Linux and WSL, uncommitted changes to credential-like files such as .env or *.pem are also left out. The repository needs at least one commit, and the bundle must be under 100 MB. Larger repositories fall back to bundling only the current branch, then to a single squashed snapshot of the working tree, and the upload fails only if that snapshot is still too large.

To pull a cloud session into your terminal, use claude --teleport. It needs a clean git state, a checkout of the same repository, the session’s branch pushed to the remote, and the same claude.ai account. After you teleport, new work stays local, so run /remote-control if you still want to steer it from your phone.

Plan around these documented limits. Cloud sessions stop after a period of inactivity, and their VM is reclaimed. Reopening one restores the conversation but not any background work that was still running. Cloud sessions share rate limits with the rest of your Claude usage, and Anthropic says there’s no separate compute charge for the VM. If your organization uses IP allowlisting, every Anthropic-hosted cloud session fails with an authentication error until Anthropic support exempts them. /clear doesn’t work in cloud sessions; start a new session from the sidebar instead.

git push   # --cloud clones the pushed branch, not your local checkout
claude --cloud "Fix the flaky test in auth.spec.ts"

# GitLab, Bitbucket or other non-GitHub remote: force a bundle upload
CCR_FORCE_BUNDLE=1 claude --cloud "Run the test suite and fix any failures"

# Queue a follow-up into a running cloud session and exit
claude -p "your message" --cloud <session-id>

# Pull a cloud session into this terminal (opens a picker)
claude --teleport

Remote Control error messages and their documented fixes

Several of these messages name the variable or credential causing the problem. Anthropic’s troubleshooting guide maps them to these fixes:

  • “Requires a claude.ai subscription”: run claude auth login and choose claude.ai. If the message names ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN or apiKeyHelper, remove it.
  • “Requires a full-scope login token”: you’re signed in with a setup-token; run claude auth login.
  • “Isn’t enabled for this account”: log out and back in, update Claude Code, and run claude doctor to see which check failed.
  • “Requires feature-flag evaluation”: the message names the variable. Unset CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC or DISABLE_GROWTHBOOK. If it names DISABLE_TELEMETRY or DO_NOT_TRACK, update to v2.1.283 or later, and unset the variable if your org requires Trusted Devices.
  • “Only available when using Claude via api.anthropic.com”: unset the provider variable or ANTHROPIC_BASE_URL that the message names, then restart.
  • “Disabled by your organization’s policy”: check for disableRemoteControl, a stale Team or Enterprise login on a Pro or Max plan (run /status), a HIPAA configuration, or an Owner toggle that’s off.
  • “Remote credentials fetch failed”: rerun with claude remote-control --verbose, then check your sign-in and access on port 443.
  1. In your project folder, run claude once and accept the trust dialog. Then run /login with your claude.ai account, not an API key or setup-token. On Team or Enterprise, ask an Owner to turn on the Remote Control toggle first. 2. Already in a conversation? Type /remote-control to carry it over. Starting fresh? Use claude --remote-control if you also want to type locally, or claude remote-control for a host that serves several sessions. 3. On your phone, scan the QR code, or open the Code tab in the Claude app and pick the session with the green dot. 4. Keep the machine awake and the process running. Over SSH, start it inside tmux or screen. 5. If the laptop needs to close, or the work doesn’t depend on local tools, push your branch and run claude --cloud "task". This starts a separate cloud session from the pushed branch; your current terminal conversation stays local and doesn’t move.

Sources