Skip to main content
Claude Code checks with you before taking actions that could have side effects — running shell commands, writing files, or making network requests. This gives you visibility and control over what Claude does on your machine.

What requires approval

Not every tool call requires a prompt. Read-only operations (file reads, searches, glob patterns) generally run without asking. Actions that change state require approval by default:
Any shell command run via BashTool requires approval. Claude shows you the exact command before executing it. You can edit the command before approving.
Creating a new file (FileWriteTool) or modifying an existing one (FileEditTool, FileWriteTool) requires approval. Claude shows you a diff of the proposed change.
Fetching URLs via WebFetchTool requires approval. WebSearchTool queries also go through the permission system.
Tools provided by connected MCP servers follow the same permission flow as built-in tools.

Permission modes

Claude Code supports several permission modes that control how approvals are handled.

default

Claude asks for approval before every tool call that requires it. This is the default behavior.

plan

Claude proposes a full plan before executing anything. You review the plan and approve it as a whole before any tools run.

acceptEdits

File edits are auto-approved, but shell commands and network requests still require manual approval.

bypassPermissions

All tool calls are auto-approved without prompting. Use this only in trusted, sandboxed environments.
You can set the default mode in your settings file under defaultMode, or pass --permission-mode when starting a session.
bypassPermissions mode skips all approval prompts. Only use it in environments where you have full control over what Claude can access and modify.

Responding to a permission prompt

When Claude requests approval, you have three options: When you deny a request, you can provide a reason. Claude uses that feedback to decide how to proceed.

Always-allow and always-deny rules

When you approve with “don’t ask again”, Claude Code saves a permission rule scoped to a specific tool and input pattern. Rules can be stored at different levels:
  • User settings — applies across all your projects
  • Project settings — applies to the current project for all users
  • Local settings — applies to the current project on your machine only
  • Session — applies only for the current session
To review and manage your saved rules, run /config.

Trust and session scope

Approvals you give without saving a permanent rule apply only to the current session. When you start a new session, Claude will ask again for the same actions. Permanent rules (saved via “don’t ask again”) persist across sessions in your settings files. Project-level rules committed to your repository apply to everyone who uses Claude Code in that project.
Use project-level permission rules to pre-approve safe, repetitive operations (like running your test suite) so your whole team doesn’t need to approve them individually.

Why permissions exist

Claude Code can read and write files, run commands, and make network requests — actions that are powerful but carry real risk if misused. The permission system ensures you always know what Claude is doing and can stop it at any point. Even in auto-approve modes, every tool call is logged in your terminal so you have a full record of what ran.