Permission Modes
A permission mode sets which tool calls run without a prompt.
The modes go from plan, which only reads, to bypassPermissions, which skips most checks.
For example, claude --permission-mode acceptEdits starts a session that edits files with no prompt.
Run /permissions in the chat. Or start with --permission-mode, which wins for one session. Set permissions.defaultMode for the start mode. permissions.disableBypassPermissionsMode: "disable" removes bypassPermissions. permissions.disableAutoMode: "disable" removes auto.
Example
{
"$schema": "https://clawdipedia.cc/schemas/claude-code-settings.json",
"permissions": {
"defaultMode": "acceptEdits",
"disableBypassPermissionsMode": "disable"
}
}
New sessions start in acceptEdits. Nobody can switch the session to bypassPermissions.
The Six Modes
The program accepts acceptEdits, auto, bypassPermissions, default, dontAsk, and plan.
The word manual is an alias of default.
The error text is Cannot set permission mode: must be one of acceptEdits, auto, bypassPermissions, default, dontAsk, plan.
Official pages: Configure Permissions and Choose a Permission Mode.
| Item | Status | What it does | How it works | Where to set it |
|---|---|---|---|---|
default | Documented: An official docs page names this item. | Standard behavior | Prompts for dangerous operations. The picker text is default (ask each time) | --, default, / |
accept | Documented: An official docs page names this item. | Auto-accepts file edits | The picker text is accept edits (auto-. It allows edits inside the workspace. A Bash check says would be allowed in accept | Same |
plan | Documented: An official docs page names this item. | Analysis only, no edits | The picker text is plan mode (research and propose changes without making them). With auto mode available, plan mode uses auto mode semantics unless use is false | Same |
auto | Documented: An official docs page names this item. | A classifier screens each action | The picker text is auto (no routine prompts, a reviewer model screens actions). See Auto Mode | Same. Not from project or local default |
dont | Documented: An official docs page names this item. | Denies what would prompt | The picker text is don't ask (auto-. The deny reason says Claude Code is running in don't ask mode | Same |
bypass | Documented: An official docs page names this item. Caution: It deletes data, skips a safety check, or sends data off your machine. | Skips permission checks | The picker text is BYPASS PERMISSIONS (no further prompts). Explicit deny rules still apply. Safety checks marked bypass-immune still ask | Needs -- or --. Not from project or local default |
Captured system prompts for some modes: Plan, Accept Edits, and Don't Ask.
Choosing and Cycling a Mode
permissions.defaultModesets the start mode.--permission-modewins for one session.- Project and local settings cannot set
autoorbypassPermissionsas the default. Source: the program. permissions.disableBypassPermissionsModestopsbypassPermissions. So does a bypass dialog that you did not accept. The program texts arebypassPermissions mode is disabled by settingsandCannot set permission mode to bypassPermissions because the session was not launched with --dangerously-skip-permissions.- A cloud session cannot use
bypassPermissions. Source: the program error text. - The IDE host cycles through
acceptEdits,plan,default, andauto. The order in the terminal is not documented.
Decision Reasons
Every permission decision carries a decisionReason with one of these types.
Source: the program. Hooks and SDK hosts can see these types.
| Reason Type | Status | What it means | Text or detail | Seen In |
|---|---|---|---|---|
rule | Undocumented: Only the program shows this item. It can change without notice. | A permission rule decided | An example of the text is Denied by a permission rule | Each tool |
mode | Undocumented: Only the program shows this item. It can change without notice. | The mode decided | For example dont denies | Each tool |
subcommand | Undocumented: Only the program shows this item. It can change without notice. | Parts of a compound command decided | Each sub-command has its own reason | Bash, Power |
permission | Undocumented: Only the program shows this item. It can change without notice. | An MCP permission prompt tool decided | Set with -- | Print mode |
hook | Undocumented: Only the program shows this item. It can change without notice. | A hook decided | Pre or Permission | Hooks |
async | Undocumented: Only the program shows this item. It can change without notice. | A background agent has no prompt surface | Denies with no approval surface in this session | Background agents |
sandbox | Undocumented: Only the program shows this item. It can change without notice. | A command runs outside the sandbox | The text is Run outside of the sandbox | Bash |
working | Undocumented: Only the program shows this item. It can change without notice. | The path is outside the working directories | The text is Path is outside allowed working directories | File tools |
safety | Undocumented: Only the program shows this item. It can change without notice. | A built-in safety check fired | See the next table | Each tool |
classifier | Undocumented: Only the program shows this item. It can change without notice. | The auto mode classifier decided | The text is Denied by auto mode classifier or Allowed by auto mode classifier | auto mode |
other | Undocumented: Only the program shows this item. It can change without notice. | Anything else | For example a closed permission stream | Hosts |
Safety Checks
A safetyCheck reason carries a circuitBreaker name. Three flags describe the check.
bypassImmune means bypassPermissions cannot skip it. classifierRouted means auto mode sends it to the classifier.
hostPersonOnly means only a person can answer it.
| Check | Status | What it covers | Behavior | Seen In |
|---|---|---|---|---|
dangerous | Undocumented: Only the program shows this item. It can change without notice. | Critical-path rm prompts | Bypass-immune, classifier-routed. A time limit applies unless CLAUDE_. Since 2., in bypass mode in the desktop app and VS Code, a dangerous rm or rmdir is denied at once with a hint to rewrite it, so unattended sessions keep going (v2.1.309 release notes) | Bash |
background | Undocumented: Only the program shows this item. It can change without notice. | Background operator calls | Classifier-routed | Background sessions |
suspicious | Undocumented: Only the program shows this item. It can change without notice. | Odd Windows paths | Classifier-routed | Windows |
isolate | Documented: An official docs page names this item. | Peer machine isolation | Bypass-immune. Setting isolate | Managed |
restricted | Undocumented: Only the program shows this item. It can change without notice. | -- | Bypass-immune | CLI |
outside | Undocumented: Only the program shows this item. It can change without notice. | block | Bypass-immune | File tools, Bash |
claude | Undocumented: Only the program shows this item. It can change without notice. | Writes to settings files | Only a person answers | File tools |
internal | Undocumented: Only the program shows this item. It can change without notice. | Built-in hard deny | Cannot be placed on a served classifier | Each tool |
unfinished | Undocumented: Only the program shows this item. It can change without notice. | A check did not finish | Bypass-immune, person only | Each tool |
How It Works
Permission Flow shows the order of the checks and where the mode decides.
Related Pages
- Permission Rules for the
allow,ask, anddenylists. - Auto Mode for the classifier behind
auto. - Sandbox for the operating-system wall around
Bash. - All Flags for the permission flags.