Remote Control: ExitPlanMode prompt stays on iOS after a PermissionRequest hook approves it
What happens
A PermissionRequest hook approves ExitPlanMode. The session acts on the approval right away, but the plan prompt stays on the iOS app's Remote Control view and never goes away.
Steps to reproduce
- Open a session with Remote Control on iOS, in plan mode.
- Have a
PermissionRequesthook answerExitPlanModewith{"hookSpecificOutput": {"hookEventName": "PermissionRequest", "decision": {"behavior": "allow"}}}. - Look at the phone.
Expected: the plan prompt on the phone closes, as it does when the plan is approved at the terminal.
Actual: the session goes ahead, but the phone keeps showing the plan with its Approve buttons. The transcript records all of this within the same second:
- the
tool_result"User has approved your plan…"; - an attachment
{"type": "plan_mode_exit", …}; - the next tool call.
Reopening the chat doesn't clear the prompt. Sending the session any message does.
Why it matters: someone who taps the stale Approve may approve twice. For a permission prompt, that could run a command twice.
Related: #32493 (the same bug for a plain tool approval, closed as a duplicate of #12176) and #12176 (closed as completed). The Remote Control view still shows the prompt in 2.1.296.
Environment: Claude Code 2.1.296 on macOS; Claude iOS app with Remote Control.