Bug Description
When starting Claude Code with --dangerously-skip-permissions and then manually toggling into plan mode via Shift+Tab, the ExitPlanMode confirmation flow fails to transition back to act mode. Responding "yes" to the exit plan mode prompt does not actually exit plan mode — the session remains stuck in read-only plan mode.
Steps to Reproduce
- Start Claude Code with
claude --dangerously-skip-permissions
- Press Shift+Tab to toggle into plan mode
- Give Claude a task — it creates a plan and calls
ExitPlanMode
- Respond "yes" to confirm exiting plan mode
- Expected: Claude exits plan mode and begins implementation (act mode with bypass-permissions)
- Actual: Claude remains in plan mode. System reminders continue showing "Plan mode still active"
Environment
- Claude Code version: 2.1.72
- Terminal: Ghostty (minimal config,
window-padding-y = 0,24 only)
- Shell: zsh (macOS Darwin 23.6.0)
- Alias used:
claude --dangerously-skip-permissions (via shell alias)
skipDangerousModePermissionPrompt: true in ~/.claude/settings.json
Notes
- No custom keybindings configured (
~/.claude/keybindings.json does not exist)
- No Ghostty input keybindings that could intercept the "yes" response
- The issue appears to be in how Claude Code handles the permission mode state transition when plan mode was entered via Shift+Tab toggle (as opposed to starting with
--permission-mode=plan)
Bug Description
When starting Claude Code with
--dangerously-skip-permissionsand then manually toggling into plan mode via Shift+Tab, theExitPlanModeconfirmation flow fails to transition back to act mode. Responding "yes" to the exit plan mode prompt does not actually exit plan mode — the session remains stuck in read-only plan mode.Steps to Reproduce
claude --dangerously-skip-permissionsExitPlanModeEnvironment
window-padding-y = 0,24only)claude --dangerously-skip-permissions(via shell alias)skipDangerousModePermissionPrompt:truein~/.claude/settings.jsonNotes
~/.claude/keybindings.jsondoes not exist)--permission-mode=plan)