Guides ·
Claude Code permission modes — Manual, acceptEdits, plan, auto, dontAsk and bypassPermissions compared
Permission modes decide what Claude Code does without asking you. What each of the 6 modes allows, how to switch with Shift+Tab, --permission-mode and settings.json, and which mode we use for which job.
Claude Code has 6 permission modes. default (shown as Manual) only reads without asking; acceptEdits also edits files and runs common file commands like mkdir and mv; plan reads and analyzes only; auto does almost everything after a background safety check; dontAsk runs only pre-approved tools and denies the rest; bypassPermissions runs everything without asking. Switch with Shift+Tab during a session, --permission-mode at launch, or permissions.defaultMode in settings.json, and use bypassPermissions only in isolated containers or VMs without internet access.
Claude Code: A Hands-On Guide · Part 2 of 10
A permission mode is the range of things Claude Code may do without asking you first. Start with Manual, which asks the most, and widen the range only for work you trust. This guide compares all 6 modes, shows the three ways to switch, and lists which mode we use for which job. It was written by AI (Claude) and checked against the official Permission modes docs. At hiio, we run a one-person app studio on Claude Code and switch between these modes every day.
The 6 modes at a glance
| Config value | Runs without asking | Best for |
|---|---|---|
default (shown as Manual) |
File reads only | Checking every action yourself |
acceptEdits |
Reads, file edits and common file commands (mkdir, touch, mv, cp, etc.) |
Editing code while you watch |
plan |
Reads (analysis only, a plan before changes) | Looking around before changing anything |
auto |
Almost everything, after background safety checks | Long tasks, too many approval prompts |
dontAsk |
Reads inside your working directory and pre-approved tools. Anything that would prompt is denied | Unattended CI and scripts |
bypassPermissions |
Everything | Isolated containers and VMs only |
In settings files you can write manual instead of default. They mean the same thing.
Three ways to switch modes
1. During a session: Shift+Tab
Press Shift+Tab in the terminal to cycle modes. According to the official docs, the cycle is default → acceptEdits → plan, and auto joins the cycle only where it is available. bypassPermissions only appears if you enabled it at launch. dontAsk never appears in the cycle.
2. At launch: --permission-mode
claude --permission-mode plan
claude -p "run the tests" --permission-mode dontAsk --allowedTools "Bash(npm test)" "Read"
As in the second line, dontAsk is only useful together with --allowedTools. Anything you did not allow is denied without a prompt.
3. As a default: settings.json
{
"permissions": {
"defaultMode": "default"
}
}
Put this in ~/.claude/settings.json and every session on this machine starts in that mode. A project setting takes priority if one exists. But according to the official docs, auto or bypassPermissions in a project's .claude/settings.json or .claude/settings.local.json does not take effect. This stops a repository someone else wrote from quietly turning on a risky mode.
The starting mode is chosen in this order: the --permission-mode flag, then defaultMode in a settings file, then the built-in default.
How we use them
| Job | Mode | Why |
|---|---|---|
| Exploring a repository for the first time | plan |
We need to be sure nothing changes |
| Editing blog posts and docs | acceptEdits |
It only edits files, and approving every edit is tedious |
| Shipping an app or submitting to the App Store | default (Manual) |
Anything hard to undo gets a human look |
| Scheduled daily automation | dontAsk + allowlist |
Nobody is watching, so it must not stop to ask |
bypassPermissions |
Never | Our Mac is not an isolated environment |
auto is convenient, but the official docs also say it "reduces permission prompts but does not guarantee safety." For things that are hard to undo, like payments, deletions and public posts, it is safer to block them or get notified with hooks no matter which mode you use.
What to watch out for
- bypassPermissions: the official docs say to use it only "in isolated environments like containers, VMs, or dev containers without internet access, where Claude Code cannot damage your host system." Deny rules still apply in this mode, but allow rules no longer mean anything. On Linux and macOS, it refuses to start as root or under sudo.
- Protected paths: writes to places like
.git,.vscode,.claude,.bashrcand.mcp.jsonare not auto-approved, except in a few cases such as bypassPermissions. - auto requirements: it only turns on with supported models (per the official docs, Opus 4.6 or later, Sonnet 4.6 or later, and others). Team and enterprise admins can turn it off.
FAQ
Which Claude Code permission mode should a beginner use?
Start in Manual (default) and watch what Claude wants to do a few times. Once you trust its file edits, widen to acceptEdits. If you want to see a plan before any change, use plan.
Can Claude Code change files in plan mode?
plan mode reads and analyzes, then proposes a plan. Per the table in the official docs, it runs reads without asking (plus classifier-approved commands where auto mode is available). To start editing, switch modes or approve the plan.
What is the difference between dontAsk and bypassPermissions?
Neither one asks. But dontAsk denies instead of asking, and bypassPermissions runs instead of asking. For scripts that run without a person, dontAsk plus an allowlist is much safer.
Why doesn't auto mode turn on from my project settings.json?
According to the official docs, auto and bypassPermissions in .claude/settings.json or .claude/settings.local.json do not take effect. Turn them on from your user settings (~/.claude/settings.json) or with the --permission-mode flag.
Sources
Written with AI (Claude) and checked against the linked sources.