[BUG] Desktop + Remote Control: preview_start permission prompt never reaches the phone, and the unanswered prompt blocks later preview_start calls
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?
In a Claude Desktop Code-tab session that I control from my phone with Remote Control, the permission prompt for mcp__Claude_Browser__preview_start appears only in the desktop app. It never appears in the Claude mobile app, nor in claude.ai/code opened in the phone's browser. From the phone, the session just looks frozen.
Permission prompts for other tools in the same session do reach the phone and can be approved there: Bash, Edit, Read, WebFetch, and the desktop-provided mcp__terminal__list_terminal_tabs.
A second problem follows. If I interrupt the turn from the phone while the preview_start prompt is pending, the prompt is not dismissed in the desktop app. It stayed there for about two hours, and every later preview_start call in that session hung: no prompt anywhere (not even on the desktop) and no server start. Adding mcp__Claude_Browser__preview_start to permissions.allow did not help in that state. Denying the stale prompt in the desktop app cleared it, and the next call showed a new prompt at once.
What Should Happen?
- The
preview_startpermission prompt is forwarded to Remote Control clients (the Claude mobile app and claude.ai/code) like other tool permission prompts, so I can approve it from the phone. - If this prompt is meant to be answered only on the desktop, the tool call should fail right away with a message that says so, instead of leaving the session waiting.
- Interrupting the turn from a remote client dismisses the pending prompt in the desktop app, so a later
preview_startcall shows a new prompt.
Error Messages/Logs
# ~/Library/Logs/Claude/main.log (local time, UTC+9; IDs shortened)
# 1) Bash prompt approved from the phone: the desktop copy is withdrawn ("aborted")
12:58:10 [info] Emitted tool permission request 7c564a9a… for Bash in session local_…
12:58:14 [info] Permission request 7c564a9a… for Bash aborted
# 2) Desktop-provided MCP tool, also approved from the phone
13:13:08 [info] Emitted tool permission request b5449954… for mcp__terminal__list_terminal_tabs in session local_…
13:13:28 [info] Permission request b5449954… for mcp__terminal__list_terminal_tabs aborted
# 3) preview_start: shown only on the desktop, never answered or withdrawn.
# The turn was interrupted from the phone at 11:30:14.
11:27:52 [info] Emitted tool permission request 0aae3a48… for mcp__Claude_Browser__preview_start in session local_…
# 4) Later preview_start calls at 11:30:35, 11:44:01 (with the allow rule) and 13:19:18:
# no log lines at all, no prompt anywhere, no server start
# 5) Stale prompt denied in the desktop app. The next call prompts at once,
# but again only on the desktop (not in the mobile app, not in claude.ai/code on the phone).
13:28:17 [info] LocalSessions.respondToToolPermission: requestId=0aae3a48…, decision=deny, hasUpdatedInput=true
13:29:55 [info] Emitted tool permission request 9ade215a… for mcp__Claude_Browser__preview_start in session local_…
13:31:11 [info] LocalSessions.respondToToolPermission: requestId=9ade215a…, decision=once, hasUpdatedInput=true
13:31:11 [info] [Preview] Starting server with config { … }
Steps to Reproduce
- In Claude Desktop (macOS), open a local Code-tab session in a project that has a dev server configuration in
.claude/launch.json. - Turn on Remote Control for the session. Open the session in the Claude mobile app, and also at claude.ai/code in the phone's browser.
- From the phone, ask Claude to start the dev server, so that it calls
preview_start. - The approval card appears only in the desktop app. Nothing appears on the phone, and the session keeps waiting.
- Interrupt the turn from the phone, then ask Claude to call
preview_startagain. No approval card appears anywhere, no server starts, and the call hangs until interrupted. This repeats until the stale card from step 4 is denied in the desktop app. - For comparison, ask for a Bash command or
mcp__terminal__list_terminal_tabs: its prompt appears on the phone and can be approved there.
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.284 (bundled with Claude Desktop 2.9939.4)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Other
Additional Information
- Environment: Claude Desktop 2.9939.4 on macOS 15.7.9; Code tab, local session; permission mode acceptEdits; model Opus 5.5. Remote Control was on for the session.
- Phone: Android, Claude app 1.260923.20. Browser: Chrome.
- The bundled CLI runs with
--permission-prompt-tool stdio, and themcp__Claude_Browser__*tools are not in its--allowedTools. So preview_start goes through the normal permission request, and the desktop log shows the request being emitted. - In my desktop log, preview_start is the only Browser pane tool that has ever asked for permission (
tabs_context, for example, runs without a prompt). So a dev server preview can never be started from the phone. - Same kind of problem as #87340 (computer use access requests can't be approved from the phone). Related: #35637, #69482.
- Screenshot attached: the stale preview_start approval card in the desktop app, about two hours after the turn was interrupted from the phone.
<img width="2386" height="1904" alt="Image" src="https://github.com/user-attachments/assets/e32c2210-842f-42be-a4c5-7015fd3bf3b8" />