bypassPermissions defaultMode and --permission-mode flag ignored; session stays in auto mode (since 2026-08-14 auto-mode rollout)
Description
Even with permissions.defaultMode: "bypassPermissions" correctly set in every settings file, and even when starting a brand-new session with the explicit flag claude --permission-mode bypassPermissions, the session still starts in (and stays in) auto mode, not bypass-permissions mode. This appears to have started on 2026-08-14, the day auto mode became the default permission mode for Pro/Max/Team plans.
Environment
- Claude Code version: 2.1.231
- OS: Linux
- Plan: Claude Max (
claude_max), personal org, account roleadmin(not an enterprise/managed account) - Install: native launcher (
~/.local/bin/claude->~/.local/share/claude/versions/2.1.231)
Steps to reproduce
- Confirm
permissions.defaultMode: "bypassPermissions"is set in all of:
~/.claude/settings.json~/.claude/settings.local.json<project>/.claude/settings.json<project>/.claude/settings.local.json
- Fully exit any running session (
/exit). - Start a brand-new session with the explicit enabling flag:
````
claude --permission-mode bypassPermissions
- Observe the mode indicator in the status line / prompt.
Expected behavior
Per the docs (https://code.claude.com/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode):
Enable it at launch withpermissions.defaultMode: "bypassPermissions"in settings or with an enabling flag:claude --permission-mode bypassPermissions
The session should start in bypassPermissions mode (showing the one-time warning dialog on first use), or at minimum the CLI flag should override any other default.
Actual behavior
- The session starts in auto mode regardless.
- Confirmed via the native mode indicator:
⏵⏵ auto mode on (shift+tab to cycle). - Also confirmed via a native permission prompt on a command with an explicit
Askrule (Bash(rm:*)):
> Ask rule Bash(rm:*) overrides auto mode for this command.
This message names the active mode as "auto mode", not "bypass permissions", confirming the mode itself (not just a display artifact) is auto.
- This happens both in a session resumed/continued from before, AND in a genuinely fresh session started with
--permission-mode bypassPermissionsexplicitly.
Things already ruled out
- No
managed-settings.jsonat any known path (/etc/claude-code/managed-settings.json,~/.claude/managed-settings.json). - No
disableAutoMode/disableBypassPermissionsModekeys found anywhere in the settings cascade or in~/.claude.json. - No shell alias/wrapper adding
--continue/--resumeor any other flag toclaude. - Only one
claudebinary on PATH (no npm-global/local shadow install). - Account is a personal Claude Max org where the user is the org admin — no external org policy should apply.
- All 4 relevant settings files are valid JSON and agree on
defaultMode: "bypassPermissions".
Suspicion
Given the exact timing (2026-08-14, the day auto mode became the default for Pro/Max/Team), this looks like a rollout-related regression where the server-side "auto mode is now default" push is overriding both local defaultMode settings and the --permission-mode / --dangerously-skip-permissions launch flags, rather than only applying when no other mode is configured.
3 Comments
Could not reproduce on v2.1.233 (macOS).
Steps tried:
~/.claude/settings.jsonwithpermissions.defaultMode: "auto"(so auto is the account-level default)..claude/settings.json={"permissions":{"defaultMode":"bypassPermissions"}}.claude --permission-mode bypassPermissionsin that directory; accepted the workspace-trust prompt.claudein the same directory (project setting only).Observed: both sessions start with
⏵⏵ bypass permissions on (shift+tab to cycle), not auto mode.Expected: the same, matching the docs.
Assessment: If a session really starts in auto mode with
--permission-mode bypassPermissionson the command line, that is a genuine bug — the docs (https://code.claude.com/docs/en/permission-modes#which-mode-a-session-starts-in) say the flag beats every settings file and the built-in default, and the built-in auto default is only meant to apply when nothing else picks a mode. We could not make it happen here, though. The one known way for a bypass request to end up in auto is when bypass permissions mode is disabled for the account (by an org policy orpermissions.disableBypassPermissionsMode); in that case Claude Code prints a startup notice like "Bypass permissions mode was disabled by your organization policy" and then falls through to the built-in default, which is now auto on Pro/Max/Team. Could you check whether that notice appears at the top of your session, and if not, share the first ~30 lines ofclaude --debug --permission-mode bypassPermissions(or a/sharelink)? That would show which mode source won at startup.🤖 Generated with Claude Code
We weren't able to reproduce this. Could you provide steps to trigger the issue — what you ran, what happened, and what you expected? This issue will be closed automatically if there's no activity within 7 days.
Seeing the same underlying bug, but with
manualas the configured default rather thanbypassPermissions.Environment
~/.local/bin/claude->~/.local/share/claude/versions/2.1.240)Steps to reproduce
/configshows "Default permission mode: Manual" (set via the Settings UI, not a settings file).claude(no flags) in a project directory.auto mode onat launch, not manual.Things ruled out
Checked the full settings cascade for a
defaultMode/permissionModeoverride:~/.claude/settings.json~/.claude/settings.local.json<project>/.claude/settings.json<project>/.claude/settings.local.json/Library/Application Support/ClaudeCode/managed-settings.json(absent)~/.claude.json(deep search of all keys, including per-project entries)~/.claude/sessions/<pid>.json(per-session state)~/Library/Application Support/Claude/config.json)No
defaultMode/permissionModekey exists anywhere with valuemanual, despite/configdisplaying "Manual" as the current setting. Also confirmed the parent process is a plain interactive shell (not a wrapper/alias, not a nested/bridged session), so this wasn't a launch-flag issue.One lead:
~/.claude.json's local feature-gate cache contains an entry nameddefault-permission-mode-config(gate/rule-version IDs218and15in two separate cache blocks), which suggests the effective default may be resolved via a server-side experiment gate rather than purely from the/config-displayed local preference — consistent with the 2026-08-14 auto-mode-default rollout mentioned in this issue overriding whatever the UI shows as configured.So the pattern in this issue (configured mode not respected at session start) reproduces for
manualtoo, not justbypassPermissions— and in my case it also flips mode mid-session with no user action, which might be a related but distinct symptom worth separating out if useful.