Bypass mode clamps to Accept Edits even with the toggle ON (Claude Code Desktop 1.9255.2 / CC 2.1.149)
Summary
In Claude Code Desktop, sessions consistently clamp from bypassPermissions → acceptEdits at start, showing the error:
Bypass Permissions mode isn't enabled. The session started in Accept Edits — enable Bypass Permissions in Settings to use it.
The Settings → "Allow bypass permissions mode" toggle is ON, and ~/.claude/settings.json has permissions.defaultMode: "bypassPermissions". Toggling off/on and full app quit do not fix it.
Environment
- Claude.app: 1.9255.2
- Bundled Claude Code: 2.1.149
- macOS: 26.5 (Darwin 25.5.0)
- Account: personal (Pro/Max), not running as root
- No managed-settings.json on the system
Repro
- Set
~/.claude/settings.json→permissions.defaultMode: "bypassPermissions". - In Claude Desktop → Settings, ensure "Allow bypass permissions mode" is ON.
- Start a new chat.
Expected: session runs in Bypass Permissions.
Actual: session briefly shows Bypass, then clamps to Accept Edits with errors
"permission mode couldn't be changed" and
"Bypass Permissions mode isn't enabled …"
Root cause (from inspecting app.asar + renderer bundle)
The main process emits permission_mode_clamped with errorCategory: "pref_disabled", logging verbatim:
bypassPermissionsModeEnabled pref is off
i.e. it consults the legacy bypassPermissionsModeEnabled flag.
The Settings UI toggle, however, writes to the newer per-account key bypassPermissionsOptInByAccount[<accountUUID>] whenever that object exists (see renderer asset c71860c77-DiRkFGDx.js):
const _ = void 0 !== r?.bypassPermissionsOptInByAccount;
// ...
_ ? setPreference("bypassPermissionsOptInByAccount", {...}) : setPreference("bypassPermissionsModeEnabled", e);
So once the per-account schema exists, the toggle never updates bypassPermissionsModeEnabled again, but the main process still reads only that legacy flag — the toggle becomes a no-op for the actual session gate.
Suggested fix
Either (a) have the main process check bypassPermissionsOptInByAccount[currentAccountUUID] with bypassPermissionsModeEnabled as fallback, or (b) have the UI write both keys until the legacy one is retired.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗