Skip to main content

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, and permissions.disableAutoMode: "disable" removes auto.

Example​

~/.claude/settings.json
{
"permissions": {
"defaultMode": "acceptEdits",
"disableBypassPermissionsMode": "disable"
}
}

New sessions start in acceptEdits, and 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.

ItemStatusWhat it doesHow it worksWhere to set it
defaultDocumentedStandard behaviorPrompts for dangerous operations. The picker text is default (ask each time)--permission-mode, defaultMode, /permissions
acceptEditsDocumentedAuto-accepts file editsPicker text: accept edits (auto-approve file edits and common file commands). It allows edits inside the workspace. A Bash check says would be allowed in acceptEdits modeSame
planDocumentedAnalysis only, no editsPicker text: plan mode (research and propose changes without making them). With auto mode available, plan mode uses auto mode semantics unless useAutoModeDuringPlan is falseSame
autoDocumentedA classifier screens each actionPicker text: auto (no routine prompts, a reviewer model screens actions). See Auto ModeSame. Not from project or local defaultMode
dontAskDocumentedDenies what would promptPicker text: don't ask (auto-deny anything that would prompt). The deny reason says Claude Code is running in don't ask modeSame
⚠️ bypassPermissionsDocumentedSkips permission checksPicker text: BYPASS PERMISSIONS (no further prompts). Explicit deny rules still apply. Safety checks marked bypass-immune still askNeeds --dangerously-skip-permissions or --allow-dangerously-skip-permissions. Not from project or local defaultMode

Captured system prompts for some modes: Plan, Accept Edits, and Don't Ask.

Choosing and Cycling a Mode​

  • permissions.defaultMode sets the start mode. --permission-mode wins for one session.
  • Project and local settings cannot set auto or bypassPermissions as the default. Source: the program.
  • permissions.disableBypassPermissionsMode stops bypassPermissions. So does a bypass dialog that you did not accept. The program texts are bypassPermissions mode is disabled by settings and Cannot 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, and auto. 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 TypeStatusWhat it meansText or detailSeen In
ruleUndocumentedA permission rule decidedText such as Denied by a permission ruleEach tool
modeUndocumentedThe mode decidedFor example dontAsk deniesEach tool
subcommandResultsUndocumentedParts of a compound command decidedEach sub-command has its own reasonBash, PowerShell
permissionPromptToolUndocumentedAn MCP permission prompt tool decidedSet with --permission-prompt-toolPrint mode
hookUndocumentedA hook decidedPreToolUse or PermissionRequestHooks
asyncAgentUndocumentedA background agent has no prompt surfaceDenies with no approval surface in this sessionBackground agents
sandboxOverrideUndocumentedA command runs outside the sandboxThe text is Run outside of the sandboxBash
workingDirUndocumentedThe path is outside the working directoriesText Path is outside allowed working directoriesFile tools
safetyCheckUndocumentedA built-in safety check firedSee the next tableEach tool
classifierUndocumentedThe auto mode classifier decidedText Denied by auto mode classifier or Allowed by auto mode classifierauto mode
otherUndocumentedAnything elseFor example a closed permission streamHosts

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.

CheckStatusWhat it coversBehaviorSeen In
dangerousRemovalUndocumentedCritical-path rm promptsBypass-immune, classifier-routed. A time limit applies unless CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT=1Bash
backgroundOperatorUndocumentedBackground operator callsClassifier-routedBackground sessions
suspiciousWindowsPathUndocumentedOdd Windows pathsClassifier-routedWindows
isolatePeerMachinesDocumentedPeer machine isolationBypass-immune. Setting isolatePeerMachinesManaged
restrictedModeUndocumented--restrictedBypass-immuneCLI
outsideReadsBlockedUndocumentedblockReadsOutsideWorkingDirectoriesBypass-immuneFile tools, Bash
claudeSettingsFileUndocumentedWrites to settings filesOnly a person answersFile tools
internalHardDenyUndocumentedBuilt-in hard denyCannot be placed on a served classifierEach tool
unfinishedCheckUndocumentedA check did not finishBypass-immune, person onlyEach tool

How It Works​

Permission Flow shows the order of the checks and where the mode decides.