Skip to content

Driving Agents from Your Phone: Remote Control, Happy, CloudCLI and Orca Mobile

Remote and mobile clients steer a coding agent from a phone or browser while the agent keeps running on the developer’s own machine. Claude Code ships Remote Control, Codex ships the experimental codex remote-control, and Happy, CloudCLI, Orca and Nimbalyst add push notifications, remote approvals and multi-agent views.

This page is for the developer who starts a two-hour refactor at 4 p.m. and does not want to sit beside it, and the tech lead who decides which clients may touch company code. The agent stalls on a permission prompt the moment you leave the room, or it keeps going and you find a surprise in the diff the next morning. You need the agent to ask you, reach you wherever you are, and hand you evidence rather than a story.

What you get from supervising agents on a phone

Section titled “What you get from supervising agents on a phone”
  • A decision table that maps your agent, plan and network to the right client.
  • A worked example: a permission request from happy claude approved on the phone.
  • A framework-level workflow: plan at the desk, supervise from the phone, review at the desk.
  • Three copy-paste prompts for the hand-off, the status check and the return review.
  • The security picture: where each client relays traffic, what it stores, and how to turn it off.

How Claude Code’s Remote Control and channels work in depth is on channels and Remote Control. Running many agents at once from a desktop is on agent shells.

Which remote client fits your agent and setup?

Section titled “Which remote client fits your agent and setup?”

Start from the agent you run and how it authenticates. The vendor’s own path is the default; a third-party client earns its place with several agents, a gateway, or a full phone UI.

Your situationPickWhy
Claude Code on a Pro, Max, Team or Enterprise login, talking to api.anthropic.comRemote Control (claude --remote-control)Built in; the Claude app and claude.ai/code connect to the local session; push notifications for permission prompts
Codex CLI on your machinecodex remote-controlBuilt into codex-cli; marked experimental in 0.157.1
Claude Desktop user who wants to message a new task from the phone, not steer a running oneDispatch in the Claude appPro and Max only; pair the mobile app with Claude Desktop; the task runs on your machine
Claude Code and Codex from one phone appHappyOne wrapper for both agents, end-to-end encrypted, push when an agent needs permission
Claude Code behind an API key, a gateway, Bedrock, Google Cloud’s Agent Platform or FoundryHappy (test it first)Remote Control is unavailable in all of these; Happy wraps the local CLI and relays through its own server
A full web UI on a phone or tablet: files, git, shell, every past session; includes Cursor CLICloudCLISelf-hosted web UI on your machine; discovers existing sessions; all Claude Code tools disabled by default
You already run agents in parallel worktrees in a desktop appOrca mobile companion or Nimbalyst iOSThe phone app pairs with the desktop app you already use
You found an old guide that uses Omnara as a phone remoteNone of the above: Omnara pivotedIt is now a managed-agents platform; pip install omnara is a deprecated redirect

Popularity (GitHub stars, read from each repository on 2026-09-26): Orca 78,410; Happy 23,913; CloudCLI 13,811; Omnara 2,870; Nimbalyst 1,777. Remote Control and codex remote-control ship inside the vendors’ CLIs, so they have no star count. Stars measure attention, not whether a relay is safe for your code.

Every option keeps execution on your machine. They differ in what crosses the network and who operates the relay, which is the first question security will ask.

ClientRelayWhat leaves your machineLicenceAgents
Remote ControlAnthropic API, outbound HTTPS only, no inbound portsThe session transcript (messages, responses, tool activity), stored on Anthropic servers under its data-usage policyPart of Claude CodeClaude Code
codex remote-controlOpenAI’s app-server remote controlNot stated in codex-cli 0.157.1 help; OpenAI’s Codex Remote docs describe starting, guiding and reviewing tasks from the phonePart of codex-cliCodex
HappyHappy’s sync server (default https://api.cluster-fluster.com), replaceable with HAPPY_SERVER_URLEnd-to-end encrypted session data; keys stay on your devicesMITClaude Code, Codex, and others through ACP
CloudCLI (self-hosted)None: the phone opens your machine’s portNo third party sees it, but the server is a remote shell that listens on every network interface over plain HTTP (CloudCLI 1.37.3), so anyone on that network reaches its login page and can read the trafficAGPL-3.0-or-laterClaude Code, Cursor CLI, Codex
Orca mobileOrca’s pairing relay (source in the repository’s cloud/ directory)Agent status and the follow-ups you sendMITWhatever runs in Orca
Nimbalyst iOSNot described in the READMESession status, questions and diffs, which the app showsMITCodex, Claude Code, OpenCode and others

None of these clients is an MCP server or a plugin, so none adds tool schemas to the agent’s context window.

Approve a permission from your phone with Happy

Section titled “Approve a permission from your phone with Happy”

This example uses Happy because it works the same way for Claude Code and Codex. The commands come from the Happy README and the happy CLI README (npm happy 1.2.5, checked 2026-09-26).

  1. Install the phone app (iOS App Store or Google Play, both linked from github.com/slopus/happy), or open the web app at https://app.happy.engineering.

  2. Install the CLI on the machine where the agent runs. It needs Node.js 20 or later, and the agent’s own CLI installed and logged in:

    Terminal window
    npm install -g happy # not happy-coder, which is deprecated
    claude --version # Claude Code must already work in this terminal
  3. Start the agent through the wrapper, in your repository, on a feature branch:

    Terminal window
    git switch -c fix/flaky-invoice-tests
    happy claude --permission-mode default # or: happy codex

    --permission-mode default pins Claude Code to Manual explicitly, so a change in Claude Code’s starting mode (auto from v2.1.283 on the latest channel) cannot silently turn phone approvals off. Happy 1.2.5 accepts the config value default, not manual (Happy 1.2.5 source, checked 2026-09-26). The session shows a QR code. Scan it with the Happy app to connect the phone. Happy authenticates with a key pair whose private key stays on the laptop; happy auth login and happy auth logout manage that sign-in.

  4. Give the agent a task that will need approval, for example the hand-off prompt further down this page, and walk away.

  5. When the agent asks for approval (Manual mode in Claude Code, the approval policy in Codex), Happy sends a push notification. Open it, read the exact command, and approve or deny it. Approve a bounded command such as npm test -- invoices; deny anything that pushes, deploys, deletes or touches files outside the repository.

  6. Back at the laptop, press any key in the terminal. Control returns to the local session.

You should see the agent continue within seconds of your approval, and the phone show the same conversation as the terminal. If nothing arrives on the phone, run happy doctor on the laptop before you leave next time.

When your setup allows it, the built-in path is one less relay to review.

Remote Control requires a claude.ai login on Pro, Max, Team or Enterprise; on Team and Enterprise an Owner must first switch it on in the Claude Code admin settings. It is unavailable with API keys, Amazon Bedrock, Google Cloud’s Agent Platform, Microsoft Foundry, an enterprise Claude apps gateway, or an ANTHROPIC_BASE_URL that points anywhere other than api.anthropic.com. Run claude once in the project to accept the workspace trust dialog first.

Terminal window
# An interactive session you can also drive from the phone
claude --remote-control "invoice tests" # alias: --rc
# Or server mode: several phone sessions, each in its own worktree
claude remote-control --spawn worktree --name "invoice tests"

Inside a running session, /remote-control (or /rc) connects the conversation you already have. Connect from the phone by scanning the QR code (in server mode, press the spacebar to show it) or by opening the session in the Claude app under Code. /mobile shows a QR code that leads to the app store.

For approvals on the phone, run /config and turn on Push when actions required. Permission prompts and questions stay open until you answer them. Other forwarded dialogs close after five minutes by default (dialogExpiry changes that).

claude --help in 2.1.283 does not list the remote-control subcommand, and claude remote-control --help errors unless you are signed in with an eligible account. The full flag list is on channels and Remote Control.

If you already run agents in Orca or Nimbalyst, pair their phone apps instead of adding another tool; setup and a comparison are on agent shells.

Start at the desk, supervise from the phone, review at the desk

Section titled “Start at the desk, supervise from the phone, review at the desk”

The phone is good at answering a question, approving a bounded action and redirecting a wandering agent. It is poor at reading a diff, so planning and review stay at the desk.

  1. Plan at the desk. Write the task with a definition of done that a status line can prove: the exact test command, the files in scope, and what must not change. Put the acceptance criteria in the prompt, not in your head.

  2. Isolate the run. Create a branch or a worktree for the task. With Remote Control server mode, --spawn worktree gives each phone session its own worktree; in Codex, see worktrees.

  3. Set the permission boundary before you leave. Start the session in Manual mode (claude --remote-control --permission-mode manual, or happy claude --permission-mode default) so every command outside the allowlist becomes a phone prompt. From v2.1.283 (the latest channel), auto mode is the starting mode, and its classifier approves actions without asking you. Do not start an unattended run with --dangerously-skip-permissions or a full-access mode; those belong only in a disposable, network-restricted sandbox.

  4. Hand off with the prompt below, confirm that one push reaches your phone, then leave. Close the lid only if the session runs in tmux or screen on a machine that stays awake.

  5. Supervise from the phone. Answer questions, approve bounded commands, and ask for the status prompt when a push arrives. Deny pushes, merges, deploys and anything outside the repository, and say why so the agent can adapt.

  6. Review at the desk. Run the return-review prompt, push the branch, and let CI and agent PR review judge it. A human reviewer signs off on the pull request, as for any desk work.

How do you prove phone-steered work is right?

Section titled “How do you prove phone-steered work is right?”

The session has to produce evidence a status line can carry, and the desk checks it before anything ships.

CheckWherePass condition
Done is definedHand-off promptA named test command and a file scope, written before you leave
Scope heldPhone diff pane (Remote Control) or swipe-through diffs (Nimbalyst), then git diff --stat at the deskOnly the files in scope changed; no lockfile, CI config or unrelated module
Tests passStatus reply, then rerun at the deskThe same command, exit code 0, run by you, not only reported by the agent
Remote approvals are accounted forReturn-review promptEvery command you approved from the phone is listed with its result
Gates passCI on the pushed branchType check, lint, tests and review automation green; see the evidence bundle
A human signs offPull requestThe reviewer approves the evidence, not the agent’s summary

A bad run costs one git reset on the branch or one deleted worktree, because nothing was pushed or merged without review.

Copy-paste prompts for phone-supervised agents

Section titled “Copy-paste prompts for phone-supervised agents”

What breaks when you drive agents from a phone?

Section titled “What breaks when you drive agents from a phone?”
  • “Remote Control requires claude.ai subscription auth”. An ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN or apiKeyHelper outranks your login. Recovery: remove it from the shell and from the settings env block, then claude auth login. If the key must stay, use Happy instead.
  • “Remote Control is only available when using Claude via api.anthropic.com”. LiteLLM, OpenRouter, Claude Code Router, a corporate gateway, Bedrock, Google Cloud’s Agent Platform or Foundry routes the session. Recovery: unset the variable the message names for this session, or use Happy; the gateway trade-offs are on gateways and local models.
  • “Remote Control requires feature-flag evaluation”. CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC or DISABLE_GROWTHBOOK is set. Recovery: unset it. claude doctor names the eligibility check that failed. If the message names DISABLE_TELEMETRY or DO_NOT_TRACK, update to v2.1.283 (the latest channel); on stable 2.1.274, unset them.
  • The session went offline when you closed the lid. Recovery: run the agent inside tmux or screen on a machine that stays awake. To bring the conversation back, match how you started it. For an interactive --remote-control or /remote-control session, run claude --continue (or claude --resume), which reconnects Remote Control. For server mode, run claude remote-control --continue within about four hours of the server stopping; it cannot be combined with --spawn or --capacity.
  • Server mode exited during a train ride. It gives up after roughly 10 minutes without network, while an interactive --remote-control session keeps retrying. Recovery: prefer the interactive form on flaky networks.
  • No push notification arrives. For Remote Control, /config shows No mobile registered until the Claude app refreshes its token; iOS Focus modes and Android battery optimisation delay pushes. Recovery: open the app once, exempt it from battery optimisation, and test with a prompt such as “notify me when the tests finish”. For Happy, run happy doctor.
  • The Happy daemon fails with “API Error: 401” after a reboot on macOS. A launchd agent cannot reach the keychain. Recovery: start the daemon from your shell profile, as the Happy CLI README shows, not from a LaunchAgent.
  • The agent waits on a dialog the phone never shows, or a turn ends on its own. The Fable usage-credits consent prompt appears only where the session runs; other forwarded dialogs (not permission prompts or questions) close after five minutes; /plugin and /resume are local-only. Recovery: pick the model and install plugins at the desk, set dialogExpiry, and run one trial prompt before you leave.
  • Two phone sessions edited the same file. Remote Control server mode defaults to --spawn same-dir. Recovery: restart with --spawn worktree, or press w in the server terminal.
  • You approved something you should not have. Recovery: stop the session, git reset --hard to the last good commit on the branch (or delete the worktree), and tighten the hand-off scope.

What a tech lead should set before the team uses phone clients

Section titled “What a tech lead should set before the team uses phone clients”

A phone client is a new way to approve shell commands on company machines; decide it once for the team.

ControlHowEffect
Turn Remote Control off on a device or fleetdisableRemoteControl setting (managed settings for a fleet)No session can be driven remotely
Allow Remote Control on Team or EnterpriseOwner toggle in the Claude Code admin settingsOff until an Owner enables it
Require a verified deviceRequire trusted devices (beta) under Organization settings, Capabilities, Remote sessionsSteering needs an enrolled device and a biometric or passkey sign-in no older than 18 hours
Keep a repository from auto-connectingremoteControlAtStartup: false in the project’s .claude/settings.jsonHonoured; a project-level true is ignored, so a checked-in file cannot turn Remote Control on for everyone
Constrain Codex remote controlallow_remote_control in a managed requirements.tomlAdmin-level limit for Codex
Keep phone approvals per commandpermissions.disableAutoMode: "disable" in managed settingsSessions start in Manual, so commands outside the allowlist reach the phone as prompts
Zero Data Retention organisationsNothing to setRemote Control cannot be enabled, because the transcript is stored on Anthropic servers
Third-party clientsAn allowlist in your engineering policyReview the relay, the licence (CloudCLI is AGPL) and the permission defaults first

Where to go next with remote and mobile agents

Section titled “Where to go next with remote and mobile agents”

Frequently asked questions

Can I use Claude Code Remote Control with an API key or an LLM gateway?

No. Remote Control needs a claude.ai login on a Pro, Max, Team or Enterprise plan and a session that talks to api.anthropic.com. With an API key, a cloud provider or a gateway, use Happy instead.

How do I approve an agent's permission request from my phone?

With Happy, start the agent as happy claude or happy codex, pair the phone app, and answer the request when the push notification arrives. With Remote Control, turn on Push when actions required in /config; permission prompts stay open until you answer them.

Is Omnara still a phone remote for Claude Code?

No. Omnara pivoted to a managed-agents platform. The PyPI package omnara is a deprecated redirect, and the current tool is used through npx omnara commands.

Should I merge from my phone?

No. Use the phone to steer and approve bounded actions. Push, merge and deploy from the desk, after tests, CI and review have produced evidence.