Which Claude Code version changed this permission behaviour?

claude --version

Find your row first. Most "it works differently for me" reports are a version, not a setting.

Answer

The permissions documentation records what changed in which version as inline "before v2.1.x" notes, spread over a dozen sections. This page collects them, oldest first, from auto mode arriving on Bedrock in 2.1.158 to bypassPermissions being dropped from project settings in 2.1.257. Run claude --version, find the rows above yours, and you know which of the behaviours on this site you do not have yet.

What it does

The official documentation describes current behaviour and marks older behaviour inline: "before v2.1.211, only pushes to the branch you started on were allowed". Those notes are accurate and scattered. Collected in one place, they answer a question the documentation itself does not pose: is the difference between what I see and what the page says my version?

Everything below is taken from those notes, with the version the docs name. A row says what changed at that version and what held before it. Rows about the auto mode classifier's block list are summarised; the full lists are on the documentation page this site cites.

VersionWhat changedBefore
2.1.158Auto mode reached Bedrock, Google Cloud's Agent Platform, Foundry and the Claude apps gateway, but only with CLAUDE_CODE_ENABLE_AUTO_MODE=1 set, through 2.1.206Not available on those providers
2.1.178The classifier evaluates a subagent's task description before the subagent startsOnly its actions and its final history were reviewed
2.1.193Some sessions run a classifier that writes a short explanation for a block; autoMode.classifyAllShell recognisedEarlier versions ignore the key and carry narrow shell allow rules into auto mode
2.1.195The classifier blocks more by default: secret managers, DNS and TLS, merging unapproved PRs, feature flags, protected IaC scopes, tunnels, printing live credentials, registry bypass, --insecure, launching an unattended agent loop. It also allows more: deleting jobs it created, security work, inter-agent messages, data flow to trusted infrastructureShorter block list
2.1.198Blocks wildcard deletes in shared scratch directories, sensitive details in outbound content, keystrokes to its own tmux pane, and git commit --amend on a pushed commit; reuses a network verdict per host instead of re-checking every connectionEach connection was checked; amend of a pushed commit was not singled out
2.1.199dontAsk denies MCP tools marked requiresUserInteractionThe tool's approval card had no answer and the mode did not deny it explicitly
2.1.200The mode that asks is labelled Manual and manual is accepted as an alias for default; a remote added mid-session with git remote add is no longer trusted; new blocks for tampering with security tests, deleting stateful resources, repointing API base URLs, changing push remotes, pushing secrets to public repositories, PRs against other repositoriesMid-session remotes were trusted; the mode had no Manual label
2.1.202Remote Control sessions report their permission mode to claude.ai and the mobile appThe app could show a mode the session was not in; prompts were still correct
2.1.203Blocks content from sensitive local stores, session transcripts and credential folders among them, entering a commit, push, PR, gist or package publish; a dotfiles repository is the one exception for personal dataPersonal data was grouped with confidential material; any direct push to the default branch was blocked
2.1.205Blocks writes to Claude Code's own session transcripts and recursive forced deletes whose target is an unresolved shell variableNot blocked
2.1.207The classifier stops reading autoMode from .claude/settings.local.json; CLAUDE_CODE_ENABLE_AUTO_MODE has no effect, auto mode is on by default on the cloud providersThe local file was read; the variable was required on those providers
2.1.208The block reason is the fixed text Blocked by classifier in most sessions; claude auto-mode defaults --label reads one ruleA written reason, where the classifier produced one
2.1.211Pushes to any branch of the working repository are allowed by default, and the secrets check applies on every branch; the protected-branch environment entry is removedOnly your branch, branches Claude created and routine pushes to the default branch; the secrets check was scoped to the default branch
2.1.212 to 2.1.217Plan mode prompted for every command outside the read-only set, whether or not auto mode was availableThe classifier reviewed planning commands; restored after 2.1.217
2.1.218rm and rmdir on a critical path go to the classifier in auto mode even when an allow rule matchesAn allow rule could approve them
2.1.222The classifier reviews each SendMessage to another agent before deliveryNot reviewed
2.1.228Pro, Max and Team terminal sessions start in auto mode by built-in default on macOS, Linux and WSL; /auto-mode-setup drafts environment entriesThe built-in default was Manual everywhere
2.1.229The classifier-unavailable message names the failure category, such as (rate-limited)It read "Wait briefly and then try this action again"
2.1.233The built-in auto default and /auto-mode-setup on native WindowsManual on Windows
2.1.234A deny caused by the classifier's context overflowing is reused until new content arrives or compaction shrinks itRe-evaluated on every connection
2.1.236Monitor allow rules are dropped on entering auto mode, like Bash(*)A whole-tool Monitor rule approved its commands without review
2.1.246A session that ended in plan mode resumes in plan mode on the -p and VS Code paths, under conditionsPlan mode was not restored there
2.1.247A Bash permission prompt in Manual or acceptEdits offers Yes, and switch to auto modeAuto mode was reached only through Shift+Tab, the flag or a setting
2.1.248--restricted: refuses bypassPermissions and stops the classifier approving protected-path writesNo such flag
2.1.251A running auto-mode session leaves the mode when a managed disableAutoMode reaches it, with auto mode disabled by settingsIt kept the mode until it ended
2.1.257bypassPermissions no longer takes effect from .claude/settings.json or .claude/settings.local.json; blockReadsOutsideWorkingDirectories prompts even in auto and bypass; new blocks for instance-metadata credentials, tunnels and reverse shells, host credentials, sibling containersThe mode applied from any file

Two rows are not on the permissions page but change what it describes: 2.1.229 is from the error reference, and 2.1.246 from the sessions page.

How to check

Your version first:

claude --version

Then read the table from your row upwards. Everything above your version is behaviour you do not have, however the documentation phrases it. Two rows deserve a second look because they are the ones people report as bugs: the 2.1.212 to 2.1.217 window, where plan mode prompted for everything, and 2.1.257, where a bypassPermissions default in a project file stopped working.

For the current behaviour of any row, the documentation's own "before" note sits next to it; this site's pages link to the section each time they rely on one.

Example

You are on 2.1.240. A colleague says the Bash prompt now offers to switch into auto mode. The table says that arrived in 2.1.247; you are seven versions short, not misconfigured.

You are on 2.1.257 and the project's .claude/settings.json has "defaultMode": "bypassPermissions", which worked last month. The 2.1.257 row says it no longer applies from that file; the not-applied page says where to move it.

Common mistakes

Reading the documentation as your version. It describes the newest one. Every "before v2.1.x" note is a version boundary, and this table is nothing but those boundaries.

Reporting a 2.1.212 to 2.1.217 symptom on a later version. Plan mode prompting for every command was that window. On a later version the cause is elsewhere: auto mode unavailable, or useAutoModeDuringPlan turned off.

Assuming the block list only grows. 2.1.211 removed a default, the protected-branch entry, and made pushes to any branch allowed. A block you relied on may have moved to something you now have to configure, with an ask rule or an environment entry.

Treating this page as the changelog. It is the permissions documentation's version notes, nothing else. Release notes cover everything; this covers one topic, with the "before" preserved.