Permission mode toggle (shift+tab) does not persist to settings.json
Resolved 💬 3 comments Opened Apr 16, 2026 by SalesforceRocks Closed Apr 20, 2026
Description
When toggling the permission mode via shift+tab in the Claude Code CLI, the runtime mode changes correctly (visible in the status bar) but the change is not persisted to ~/.claude/settings.json. This causes:
- Subagents get the wrong mode. Subagents spawned via the Agent tool read
settings.jsonto determine their permission mode. If the user toggled tobypassPermissionsin the UI but the file still saysdontAsk, subagents run indontAskmode and get blocked on tool calls they can't prompt for (especially background agents).
- Next session reverts. Restarting Claude Code reverts to the persisted mode, not the one the user selected.
Reproduction
- Set
"defaultMode": "dontAsk"in~/.claude/settings.json - Launch Claude Code
- Press
shift+tabto cycle to "bypass permissions on" - Verify the status bar shows "bypass permissions on"
- Read
~/.claude/settings.json— it still says"dontAsk" - Spawn a background agent — it runs in
dontAskmode and fails on Edit/Write tools
Expected behavior
Toggling the permission mode via shift+tab should persist the new value to settings.json so that subagents and future sessions use the same mode.
Workaround
Manually edit ~/.claude/settings.json to set "defaultMode": "bypassPermissions".
Environment
- Claude Code CLI (desktop app, macOS)
- Claude Opus 4.6 (1M context)
- macOS Darwin 24.6.0
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗