[BUG] `/remote-control` fails in desktop-app-embedded Claude Code with "no org UUID", and there is no user-facing remediation
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Got fresh evidence — identical failure at 22:51:46 (post-restart) to the original at 21:17:37. Reliably reproducible. Here's the bug report — copy/paste:
---
Bug: /remote-control fails in desktop-app-embedded Claude Code with "no org UUID", and there is no user-facing remediation
Summary
Running /remote-control inside Claude Code embedded in the macOS desktop app fails with Remote Control failed to connect: /login. The debug log shows the bridge is bailing because no organization UUID is present. The user cannot fix this themselves — /login is disabled in this environment, and restarting the desktop app does not repopulate oauthAccount in ~/.claude.json.
Environment
- macOS Claude desktop app: 1.8555.2
- Claude Code (embedded): 2.1.149 (build suffix seen in attribution:
2.1.149.59dand2.1.149.8c8) cc_entrypoint=claude-desktop- Relevant env vars present:
CLAUDE_CODE_SDK_HAS_OAUTH_REFRESH=1CLAUDE_CODE_SDK_HAS_HOST_AUTH_REFRESH=1ANTHROPIC_API_KEY=(empty)ANTHROPIC_BASE_URL=https://api.anthropic.com- User state: signed in to Claude on the desktop app (chat history, projects, Claude Dispatch all work normally); mobile app signed in to the same account, Code tab shows "No sessions found" with prompt to "Run /remote-control from Claude Code".
Reproducer
- Open Claude desktop app, sign in as a Pro/Max user, open Claude Code.
- Run
/remote-controlat the prompt.
Expected
Bridge enrolls the device, pairs with the mobile app's Code tab, and the session appears under "No sessions found".
Actual
The prompt returns:
Remote Control failed to connect: /login
The trailing /login is the failure-state label from [bridge:sdk], not a runnable command. /login itself is disabled in this environment:
/login
<local-command-stdout>/login isn't available in this environment.</local-command-stdout>
Debug log (~/.claude/debug/<session>.txt) — two attempts, same pattern
2026-05-26T21:17:37.918Z [DEBUG] [bridge:repl] Skipping: no org UUID
2026-05-26T21:17:37.918Z [DEBUG] [bridge:sdk] State change: failed — /login
...
2026-05-26T22:51:46.926Z [DEBUG] [bridge:repl] Skipping: no org UUID
2026-05-26T22:51:46.926Z [DEBUG] [bridge:sdk] State change: failed — /login
The second occurrence is from after a full quit-and-relaunch of the desktop app.
Root cause (from inspection)
~/.claude.json is missing oauthAccount:
keys: ['cachedExperimentFeatures','cachedExtraUsageDisabledReason',
'cachedGrowthBookFeatures','firstStartTime','migrationVersion',
'opusProMigrationComplete','projects','seenNotifications',
'skillUsage','sonnet1m45MigrationComplete',
'unpinOpus47LaunchEffort','userID']
oauthAccount: None
So the embedded Claude Code has a userID but no OAuth grant carrying an organization_uuid. The Remote Control bridge requires that org UUID to enroll the device, so it short-circuits with Skipping: no org UUID.
The host app advertises the capability to provide it (CLAUDE_CODE_SDK_HAS_HOST_AUTH_REFRESH=1), but the org UUID never actually arrives in the embedded Claude Code's state — neither at startup nor after a quit-and-relaunch.
Why the user can't fix this
/loginwould be the obvious remediation, but it's blocked inclaude-desktopentrypoint (/login isn't available in this environment).- Restarting the desktop app does not trigger the host → embedded OAuth/org handoff (
oauthAccountstaysNoneand the next/remote-controlproduces the sameSkipping: no org UUIDline). - There is no Settings UI in the desktop app to sign Claude Code in separately, or to manually pick an org.
Suggested fixes
- On desktop-app launch (or on entry into Claude Code), have the host actually forward the signed-in account's
organization_uuidinto the embedded Claude Code's state (oauthAccount) instead of just setting theHAS_HOST_AUTH_REFRESH=1flag. - Alternatively, make the bridge proactively request the org UUID from the host via the host-auth-refresh channel when it encounters
no org UUID, rather than failing silently. - Improve the user-facing error:
"Remote Control failed to connect: /login"should not surface an internal reason label that looks like a command the user can run, especially when that command is disabled in this environment.
Workaround
Install the standalone Claude Code CLI (outside the desktop app), run /login there to populate ~/.claude.json → oauthAccount, then return to the desktop app.
---
Anything you want me to tighten before you send it?
What Should Happen?
I should be able to connect to a remote-control session on my phone.
Error Messages/Logs
2026-05-26T21:17:37.918Z [DEBUG] [bridge:repl] Skipping: no org UUID
2026-05-26T21:17:37.918Z [DEBUG] [bridge:sdk] State change: failed — /login
...
2026-05-26T22:51:46.926Z [DEBUG] [bridge:repl] Skipping: no org UUID
2026-05-26T22:51:46.926Z [DEBUG] [bridge:sdk] State change: failed — /login
The second occurrence is from after a full quit-and-relaunch of the desktop app.
### Root cause (from inspection)
`~/.claude.json` is missing `oauthAccount`:
keys: ['cachedExperimentFeatures','cachedExtraUsageDisabledReason',
'cachedGrowthBookFeatures','firstStartTime','migrationVersion',
'opusProMigrationComplete','projects','seenNotifications',
'skillUsage','sonnet1m45MigrationComplete',
'unpinOpus47LaunchEffort','userID']
oauthAccount: None
So the embedded Claude Code has a `userID` but no OAuth grant carrying an `organization_uuid`. The Remote Control bridge requires that org UUID to enroll the device, so it short-circuits with `Skipping: no org UUID`.
The host app *advertises* the capability to provide it (`CLAUDE_CODE_SDK_HAS_HOST_AUTH_REFRESH=1`), but the org UUID never actually arrives in the embedded Claude Code's state — neither at startup nor after a quit-and-relaunch.
Steps to Reproduce
Reproducer
- Open Claude desktop app, sign in as a Pro/Max user, open Claude Code.
- Run
/remote-controlat the prompt.
Claude Model
None
Is this a regression?
No, this never worked
Last Working Version
_No response_
Claude Code Version
Claude Code (embedded): 2.1.149 (build suffix seen in attribution: 2.1.149.59d and 2.1.149.8c8)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗