Home / Fundamentals and the agent loop
Permissions and plan mode
The permission mode decides which actions Claude Code carries out without asking: since September 2026, an interactive terminal or VS Code session with no configured mode starts in auto mode, on every plan, rather than default mode, and auto mode acts broadly under the background watch of a second model.
The permission mode decides which actions Claude Code carries out without asking, and which ones stop in front of a confirmation prompt. Since September 2026, an interactive terminal or VS Code session starts in auto mode when no mode is configured, on every plan. The starting mode is therefore no longer the one that asks before every action.
Six modes, a different safety net each time
The default mode, shown as manual mode on in the status bar, only reads: every edit and every shell command wait for a reply. The acceptEdits mode edits files and runs common file system commands, but stops in front of the rest. The plan mode stays read only while it produces a plan. The auto mode acts broadly under the background watch of a classifier, a second model that blocks a few categories outright: downloading and then running code, exfiltrating sensitive data, deploying to production, deleting in bulk on cloud storage, running git reset --hard or terraform destroy. The dontAsk mode does not go beyond the tools approved in advance. The bypassPermissions mode removes the entire safety net.
When a session does not start in auto
The disableAutoMode setting, an unsupported model, an organization under a HIPAA configuration or a server-side shutdown put the session back in manual mode. claude -p and the Agent SDK also start in default since October 2026: a call that needs approval is refused there until an allow rule or a hook grants it. A task launched without checking the active mode can therefore run further than planned, with the classifier as the only safety net. This classifier reacts: after a run of close together refusals, auto mode pauses and asks for confirmation again, and the figure gives the two thresholds.
claude --permission-mode plan
# launches the session directly in plan mode,
# read only until the plan is approved
Shift+Tab cycles through the available modes without leaving the conversation: default, acceptEdits, plan, bypassPermissions if it is enabled, auto if it is available, then back to default. The --dangerously-skip-permissions flag is equivalent to bypassPermissions mode.
Tuning what auto mode lets through
Before a read outside the working directories, auto mode raises a prompt: the answer "Yes, but ask again next time" allows that read without opening the door to the next ones. The /auto-mode-setup command reads the project and recent sessions to teach auto mode about your environment, which cuts needless refusals without switching to bypass. On the rules side, mcp__a now covers only a server named a, not a__b or a_: write mcp__server__* for a whole server. A Bash rule with :* in the middle of the pattern, skipped until now in settings files, now applies there: reread yours.
Plan mode, a read only pass before writing
Claude reads, explores, proposes a sequence of actions, and nothing touches the disk before the plan is approved, except in an interactive terminal where bypassPermissions mode is available: edits there no longer wait for approval. Outside that case, plan mode remains truly read only, even against a PreToolUse hook that would allow a write. If an approved plan heads in the wrong direction, the Esc key interrupts the current turn without losing the work already done.
Six permission modes compared on three real consequences
| Claude Code permission modes | Asks before writing a file | Asks before a new shell command | Safety net remaining |
|---|---|---|---|
| default | Yes | Yes | Full, everything is confirmed |
| acceptEdits | No | Yes, except common file commands | Partial |
| plan | No, proposes a plan first | No for already approved commands | The plan itself |
| auto | No | No, except blocked categories | A second model watching |
| dontAsk | No | No, outside pre-approved tools | Reduced to the listed tools |
| bypassPermissions | No | No | None |
The two thresholds that pause auto mode
A developer launches Claude Code on a new repository with his Pro subscription. The permission mode at startup is auto. He asks for a refactor touching three files. Claude edits the files, then attempts to run the command git reset --hard, and a block notification appears, listed in /permissions under the Recently denied tab.
Write in one sentence what this situation establishes, and in one sentence what it does not establish.
What this establishes: This case establishes that auto mode does not let every command through without a safety net, since a command from the category blocked by default, git reset --hard, was blocked with a notification even under this mode, with no execution.
What this does not establish: It does not establish that every git command triggers a block in auto mode, since only a specific category of commands blocked by default, including git reset --hard, produces this behaviour.
The three most common miscalibrations
- Too broad Auto mode now asks for confirmation before every git command, whatever it is.
- Too narrow This case proves nothing beyond this specific repository, since nothing guarantees that the same command would trigger the same prompt there a second time.
- Off target This case shows that the developer's Pro subscription grants unlimited access to shell commands.
- Claude Code distinguishes six permission modes: default, acceptEdits, plan, auto, dontAsk and bypassPermissions.
- Since September 2026, an interactive terminal or VS Code session with no configured mode starts in auto, on every plan, while claude -p starts in default.
- Auto mode acts broadly under the watch of a second model that blocks specific categories by default, such as git reset --hard or terraform destroy.
- The /auto-mode-setup command and the answer "Yes, but ask again next time" cut refusals without switching to bypass.
- An mcp__a rule now covers only server a: write mcp__server__* to allow a whole server.
Launch Claude Code, check the permission mode shown on screen, press Shift+Tab once, and note the name of the mode that displays instead.
Every datable claim in this lesson links here to the public text behind it. A source that does not open proves nothing.
- Claude Code, permission modes: starting mode, claude -p, plan mode consultée le 2026-10-24
- Claude Code changelog: /auto-mode-setup, mcp__ rules, Bash rules with :*, plan mode consultée le 2026-10-24