Skip to content
Security & Permissions Simple

Permission Modes Comparison

Choose the right permission mode for your use case: default, acceptEdits, plan, dontAsk, or bypassPermissions

Command

"color:#9CA3AF;font-style:italic"># Interactive development (default)
$ "color:#7C5CFC">claude
  
"color:#9CA3AF;font-style:italic"># Trusted editing sessions
$ "color:#7C5CFC">claude "color:#d97757">--permission-mode acceptEdits
  
"color:#9CA3AF;font-style:italic"># Safe code review (read-only)
$ "color:#7C5CFC">claude -p "Review code" "color:#d97757">--permission-mode plan "color:#d97757">--output-format json
  
"color:#9CA3AF;font-style:italic"># CI/CD pipelines (no prompts)
$ "color:#7C5CFC">claude -p "Task" "color:#d97757">--permission-mode bypassPermissions "color:#d97757">--output-format json

Response

| Mode              | File edits | Shell commands | Use case           |
|-------------------|-----------|---------------|--------------------|
| default           | Ask       | Ask           | Interactive dev    |
| acceptEdits       | Auto      | Ask           | Trusted editing    |
| plan              | Blocked   | Blocked       | Code review        |
| dontAsk           | Deny*     | Deny*         | Lockdown           |
| bypassPermissions | Auto      | Auto          | CI/CD only         |

Parsing Code

059669">">// Set permission mode programmatically
059669">">const data = JSON.parse(execFileSync(059669059669">">'claude', [
  059669059669">">'-p', prompt,
  059669059669">">'--permission-mode', 059669059669">">'plan', 059669">">// or 059669059669">">'bypassPermissions'
  059669059669">">'--output-format', 059669">'json'
], opts));

Gotchas

! bypassPermissions should ONLY be used in isolated environments (CI, containers, VMs)
! dontAsk silently denies tools with no matching allow rule — designed for headless operation

Related Recipes