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:

  1. Subagents get the wrong mode. Subagents spawned via the Agent tool read settings.json to determine their permission mode. If the user toggled to bypassPermissions in the UI but the file still says dontAsk, subagents run in dontAsk mode and get blocked on tool calls they can't prompt for (especially background agents).
  1. Next session reverts. Restarting Claude Code reverts to the persisted mode, not the one the user selected.

Reproduction

  1. Set "defaultMode": "dontAsk" in ~/.claude/settings.json
  2. Launch Claude Code
  3. Press shift+tab to cycle to "bypass permissions on"
  4. Verify the status bar shows "bypass permissions on"
  5. Read ~/.claude/settings.json — it still says "dontAsk"
  6. Spawn a background agent — it runs in dontAsk mode 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

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗