SpyBara
Go Premium

permission-modes.md 2026-10-24 22:59 UTC to 2026-10-25 23:58 UTC

This page contains 1 addition and 1 deletion.

2026
Thu 1 23:59 Fri 2 22:59 Sat 3 23:57 Sun 4 23:58 Mon 5 23:58 Tue 6 23:59 Wed 7 23:59 Sat 10 23:01 Sun 11 23:57 Wed 14 22:58 Sat 17 23:57 Mon 19 23:58 Tue 20 23:00 Wed 21 23:02 Thu 22 22:58 Fri 23 22:59 Sun 25 23:58 Mon 26 22:57 Tue 27 22:59 Fri 30 23:01

Choose a permission mode

Control whether Claude asks before acting. Switch permission modes with Shift+Tab in the CLI, the mode indicator in VS Code, or the mode selector in Desktop.

A permission mode sets which actions Claude can take in a session without asking you first. In Manual mode, Claude Code stops and asks you before most actions that edit files, run shell commands, or reach the network. In auto mode, a second model, the classifier, reviews actions instead of you; how the classifier evaluates actions lists which actions it reviews and which skip it.

With Claude Code v2.1.283 or later, auto mode is the built-in starting permission mode for interactive terminal and VS Code sessions. On earlier versions, it's the built-in starting permission mode only on Pro, Max, and Team plans. Which mode a session starts in covers the surfaces and settings that change the starting permission mode. You can also change a running session's permission mode at any time.

Available modes

Each mode makes a different tradeoff between convenience and oversight. The table below shows what Claude can do without a permission prompt in each mode. Manual mode appears under its config value, default.

Mode What runs without asking Best for
default Reads only Reviewing every action yourself, sensitive work
acceptEdits Reads, file edits, and common filesystem commands (mkdir, touch, mv, cp, etc.) Iterating on code you're reviewing
plan Reads, plus classifier-approved commands when auto mode is available Exploring a codebase before changing it
auto Everything, with background safety checks Long tasks, reducing prompt fatigue
dontAsk File reads inside your working directories and pre-approved tools; anything that would prompt is denied, though a mod you installed can still approve some of those calls Locked-down CI and scripts
bypassPermissions Everything Isolated containers and VMs only

The mode that reviews every action is named Manual in the CLI, in claude --help, in the VS Code and JetBrains extensions, and in the desktop app. Its config value is default, which is what hooks and SDK integrations use. The CLI accepts manual as an alias wherever you type the value, for example claude --permission-mode manual or "defaultMode": "manual".

Writes to protected paths are never auto-approved except in bypassPermissions mode and in plan-mode sessions where bypass permissions are available, meaning interactive terminal sessions started in a way that puts bypassPermissions in the mode cycle.

Modes set the baseline. Layer permission rules on top to pre-approve or block specific tools. Deny rules block in every mode, including bypassPermissions. Deny and ask rules don't apply to EndConversation as long as Claude still has at least one other tool it can call. Allow rules have no effect in bypassPermissions.

Actions no mode auto-approves

Claude Code doesn't auto-approve the following in any mode, including bypassPermissions. Each bullet links to the section that says what happens instead in each mode:

  • Tools matched by an explicit ask rule

  • Connector tools your organization set to ask, in sessions where that setting reaches Claude Code

  • Tools that require user interaction: the built-in AskUserQuestion tool and MCP tools marked requiresUserInteraction

  • Recognized rm and rmdir critical-path removals, which no allow rule or PreToolUse hook "allow" approves

  • The cross-session messaging safeguards

  • Reads outside the working directories while permissions.blockReadsOutsideWorkingDirectories is on: recognized file-reading Bash commands prompt even in auto mode and bypassPermissions mode, and so does any unsandboxed retry that needs approval to run outside the sandbox. Requires Claude Code v2.1.257 or later.

    A command the shell parser can't trace, such as one that changes directory more than once or runs a subshell, prompts the same way even when it names no outside path. This prompt doesn't apply when the command runs in the sandbox and the sandbox enforces the block.

Common setups

Permission modes decide whether Claude asks before an action, and the Bash sandbox and outer isolation boundaries decide what an action can reach once it runs. Each row below pairs a goal with the flags or settings that get you there and the isolation it needs, as a starting point. Available modes lists what runs without a prompt in each mode.

You want to Start with Isolation needed Notes
Review every action yourself Manual mode: claude --permission-mode default None Sensitive work, unfamiliar code
Iterate locally with fewer prompts, without a classifier Manual mode plus the Bash sandbox in auto-allow mode: claude --permission-mode default, then run /sandbox and select auto-allow The built-in Bash sandbox, on macOS, Linux, and WSL2 Deny rules still apply, and ask rules that name a command, such as Bash(git push *), still prompt. Auto-allow mode covers other commands that can prompt. To turn the sandbox on from a settings file instead, set sandbox.enabled to true
Explore before changing anything claude --permission-mode plan None Claude Code blocks edits until you approve a plan
Work hands-off in auto mode claude --permission-mode auto, the built-in starting permission mode with v2.1.283 or later None; a sandbox or container adds defense in depth Requires a supported model, and your organization can turn auto mode off
Run in CI with an exact allowlist claude -p "run the test suite" --permission-mode dontAsk --allowedTools "Bash(npm test)" "Read" None beyond what your CI runner provides Cloud sessions ignore dontAsk from settings files
Run fully unattended inside a container claude -p "<prompt>" --dangerously-skip-permissions Required: a container, VM, or the sandbox runtime; on Linux and macOS, run it as a non-root user Cloud sessions ignore this mode from settings files. In this -p run, the few calls that would still prompt are denied instead

The Bash sandbox and auto mode work independently and combine, with the exceptions listed under Sandbox modes. For the full interaction, see How sandboxing relates to permissions and permission modes and How isolation relates to permission modes.

Which mode a session starts in

When you start a new session in a terminal, Claude Code takes the permission mode from the first of these that applies:

  1. The --permission-mode flag, or --dangerously-skip-permissions

  2. permissions.defaultMode in a settings file

    If you set "auto" in .claude/settings.json or .claude/settings.local.json, the value doesn't take effect, and Claude Code then uses the built-in default rather than a defaultMode from ~/.claude/settings.json. If you set "bypassPermissions" in those two files, it doesn't take effect either, and the session starts in Manual mode. The other values apply from any settings file.

  3. The built-in default

Conversations the VS Code extension starts follow the extension's own list in Switch permission modes. For the permission mode Claude Code starts a resumed session in, see permission mode on resume.

The built-in auto default requires Claude Code v2.1.228 or later on macOS, Linux, and WSL, and v2.1.233 or later on native Windows. On earlier versions, the built-in default is Manual.

The built-in default depends on how you run Claude Code. The first row that matches your session applies. The table covers sessions you start in a terminal or through the VS Code extension; for the desktop app and claude.ai, see the Desktop and Web tabs in Switch permission modes.

How you run Claude Code Built-in starting permission mode
Any settings file sets disableAutoMode to "disable" default
claude -p or the Agent SDK default
Your organization has the HIPAA configuration applied and the session is eligible for it default with Claude Code v2.1.285 or later; auto mode stays available to switch to
In a terminal or through the VS Code extension auto with Claude Code v2.1.283 or later; on earlier versions, auto on Pro, Max, or Team plans in sessions that fetch feature flags, and default otherwise

When the flag, a settings file, or the built-in default selects auto but auto mode isn't available to the session, Claude Code starts the session in Manual instead. Auto mode is unavailable when the session doesn't meet the availability requirements, such as a settings file turning it off or a model that doesn't support it, or when Anthropic has temporarily turned it off server-side.

The first time the built-in default starts one of your sessions in auto mode, Claude Code shows a notice that links to this page:

  • In a terminal, once, at the top of the session
  • In the VS Code extension, as a card on the new-conversation screen that stays until you dismiss it

If your ~/.claude/settings.json sets a defaultMode other than auto and no other settings file sets one, your sessions keep starting in that mode. On Pro, Max, and Team plans, and in sessions that don't fetch feature flags, Claude Code asks once, in the terminal or in the VS Code extension, whether to change the setting to auto mode. If you decline, your setting stays as it is.

Tool calls denied in claude -p and Agent SDK runs

In Claude Code v2.1.302 or later, claude -p and Agent SDK runs with no permission mode set start in Manual mode. This mode appears as default in SDK options and settings. Calls needing approval are denied unless you approve them with an allow rule, hook, canUseTool callback, or --permission-prompt-tool.

To get these calls approved, add allow rules or start in auto mode:

These examples show the auto mode form for the CLI and each SDK:

CLI

claude -p "Run the test suite and fix any failures" --permission-mode auto

TypeScript

const options = {
  permissionMode: "auto"
};

Python

from claude_agent_sdk import ClaudeAgentOptions

options = ClaudeAgentOptions(permission_mode="auto")

Before v2.1.302, these runs could start in auto mode if they didn't fetch feature flags, for example on a third-party provider or with DISABLE_TELEMETRY.

Start in a different permission mode

You can set the starting permission mode for one session, or as a default for every session on a machine, in a project, or in an organization. When more than one settings file sets permissions.defaultMode, settings precedence decides, so a project or managed value outranks ~/.claude/settings.json. To change the permission mode of a session that's already running, see Switch permission modes.

To set the starting permission mode for Do this
One session you're about to start Pass the permission mode as a flag, for example claude --permission-mode default
Every terminal session you start on this machine Set permissions.defaultMode in ~/.claude/settings.json. For what the VS Code extension reads, see Switch permission modes
Every terminal session you start in one project Set permissions.defaultMode in the project's .claude/settings.json. Sessions you start in a terminal honor every value except auto and bypassPermissions; sessions the VS Code extension starts don't read project settings for the starting permission mode
Every terminal session in your organization Set permissions.defaultMode in managed settings. Terminal sessions start in that mode and people can still switch to auto mode; for what the VS Code extension reads, see Switch permission modes. To remove auto mode so nobody can select it, set permissions.disableAutoMode to "disable" instead

This example makes every terminal session on your machine start in Manual mode, whose config value is default. Save it in ~/.claude/settings.json:

{
  "permissions": {
    "defaultMode": "default"
  }
}

The next session you start shows ⏸ manual mode on in the status bar.

Permission modes with the HIPAA configuration

In an organization with the HIPAA configuration applied, the built-in auto default doesn't apply. A terminal or VS Code session starts in Manual mode when nothing else chooses its starting permission mode. A terminal session also shows Auto mode isn't the default for your organization · Shift+Tab to switch, and the VS Code extension shows no notice. Check how developers sign in and connect lists the sessions this applies to.

Auto mode and bypassPermissions stay available:

Requires Claude Code v2.1.285 or later, the minimum version for the HIPAA configuration.

Switch permission modes

Each interface has its own control for switching permission modes during a session and its own way of choosing the permission mode new sessions start in. Select your interface to see its controls.

CLI

During a session: press Shift+Tab to cycle permission modes. From auto, the first press switches to default, and the cycle then runs default → acceptEdits → plan. Optional modes slot in after plan. The status bar shows the active mode as a gray ⏸ manual mode on for default, or as ⏵⏵ accept edits on, ⏸ plan mode on, ⏵⏵ auto mode on, ⏵⏵ don't ask on, or ⏵⏵ bypass permissions on.

Watch the status bar in this clip of a session that started in auto mode. Each time you press Shift+Tab, it changes from auto mode on to manual mode on, accept edits on, plan mode on, and back to auto mode on.