Remote Control (CCR v2): new session requests never reach the registered environment's poll loop — client stuck on "Allocating sandbox" forever
Claude Code version: 2.1.220 (npm @anthropic-ai/claude-code, latest as of report)
Platform: macOS (Apple Silicon), Node/CLI installed via Homebrew npm global
Feature: claude remote-control (Remote Control), connecting from Claude mobile app and from claude.ai/code in a browser
Summary
Once a claude remote-control session is registered and its pre-created default session is running normally, any client-initiated new session request (from the Claude mobile app's Code tab, or from claude.ai/code in a browser, on any device) gets stuck indefinitely on "Allocating sandbox" in the client UI. This happens both for brand-new sessions and for reopening previously-created sessions.
What works
claude remote-control --name <name>registers fine:POST /v1/environments/bridge→ 200, environment created.- The pre-created default session (the one automatically created in the working directory on startup, shown as "Attached"/named after
--name) spawns and runs correctly — confirmed via--verbose --debug-file: [bridge:work] Starting poll loop ...GET .../work/poll -> 200 workId=cse_... type=sessionPOST .../work/cse_.../ack -> 200CCR v2: registered worker sessionId=... epoch=1 attempt=1- Child process spawns (
--sdk-url .../v1/code/sessions/cse_...), runs, and later archives cleanly after idle timeout (end_session/archive/ exit_code=0).
What doesn't work
- Tapping "new session" in the Claude mobile app's Code tab, targeting the live registered environment, never produces a new
workIdin the local poll loop.GET .../work/pollkeeps returning200 (no work, N consecutive empty polls)— the request from the client apparently never reaches this environment's work queue at all. - Same result reopening an older, previously-working session (created days earlier under an older environment registration for the same directory/
--name) — the client shows the session, sends a message into it, and gets no response, with zero corresponding activity in the local bridge's debug log. - Confirmed independently across: (a) Claude mobile app, (b) claude.ai/code in a phone browser, (c) multiple fresh
remote-controlrestarts producing brand-newenvironment_ids each time (ruling out any local caching/stale-pointer explanation on the CLI side — see below).
Local-side issue also found (fixed on our end, documenting since it compounded the debugging)
Separately, we found that running claude remote-control as a macOS launchd LaunchAgent (WorkingDirectory pointed at a folder inside ~/Library/Mobile Documents/com~apple~CloudDocs/... — i.e. iCloud Drive) reliably fails with:
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Operation not permitted
job-working-directory: error retrieving current directory: getcwd: cannot access parent directories: Operation not permitted
Error: timeout of 15000ms exceeded
repeating in a loop, apparently because the LaunchAgent's process context doesn't carry the iCloud/File Provider access that an interactively-spawned (Terminal/login-session) process has. Running the identical command outside launchd (foreground, or nohup from a normal login shell) has zero such errors. This is a macOS/TCC quirk, not necessarily an Anthropic bug, but worth noting since it produces very similar symptoms (hangs / no progress) and could mislead other users debugging Remote Control issues into thinking it's a local permissions problem when the actual blocker (this issue) is server-side. We also found a local bridge-pointer.json (under ~/.claude/projects/<hashed-dir>/bridge-pointer.json) that caches sessionId/environmentId per directory; if the referenced environment goes stale/dead server-side, it keeps getting reused/retried. Deleting it forces a fresh environment registration, but did not resolve the core issue above (new client-initiated sessions still never reach the poll loop, even against a brand-new environment_id).
Steps to reproduce
claude remote-control --name test --permission-mode acceptEditsin any directory (works fine, confirmed via debug log).- From the Claude mobile app (or claude.ai/code in a browser), open the Code tab, select the registered environment, and create a new session (or reopen any existing one).
- Client shows "Allocating sandbox" and never progresses.
- Local
--debug-filelog shows no correspondingworkIdever appearing inGET .../work/pollresponses.
Expected
A client-initiated new session request should show up as a queued work item (workId=cse_...) in the environment's poll loop within a few seconds, matching the behavior already seen for the auto pre-created default session.
Impact
Remote Control is currently unusable for its core purpose (starting/continuing coding sessions from a phone or browser against a Mac session) — the only session that ever actually runs is the one auto-created locally on startup.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗