What does acceptEdits allow?

claude --permission-mode acceptEdits

Or press Shift+Tab once from Manual mode.

Answer

acceptEdits lets Claude create and edit files without asking, plus seven filesystem commands: mkdir, touch, rm, rmdir, mv, cp, and sed. Auto-approval covers only paths inside your working directory or additionalDirectories. Everything else, meaning other shell commands, paths outside that scope and writes to protected paths, still prompts.

What it does

acceptEdits removes the prompt from file edits. Claude creates and changes files in your working directory directly.

claude --permission-mode acceptEdits

It also auto-approves a fixed set of filesystem commands:

mkdir  touch  rm  rmdir  mv  cp  sed

A prefix does not necessarily break the match. These stay approved when wrapped in an environment variable that only affects output formatting such as LANG=C or NO_COLOR=1, or in a process wrapper such as timeout, nice, or nohup.

The scope limit matters more than the list. Auto-approval applies only to paths inside your working directory, or to directories you added with --add-dir or the additionalDirectories setting. Four things still prompt:

  • paths outside that scope
  • writes to protected paths such as .git and .claude
  • rm or rmdir aimed at a critical path, such as /, your home directory or the working directory itself, even though rm is on the list
  • every other Bash command

That last one has one exception, and it applies in every mode: a built-in set of read-only commands runs without asking: ls, cat, grep and about a dozen more, listed in full under why Claude Code keeps asking. The set is not configurable. To make one of them prompt, add an ask or deny rule for it.

With the PowerShell tool enabled, the mode also covers Set-Content, Add-Content, Clear-Content, and Remove-Item on in-scope paths, under the same rules. Remove-Item gets a check of its own, and a positional argument containing a quote character still prompts even on an in-scope path; pass the content through -Value instead.

When to use it

The mode fits work where you review the result rather than each step:

  • a batch of mechanical edits you have already scoped
  • refactors where you will read git diff afterwards
  • any task where per-edit approval is noise, not oversight

The review still happens. It moves from inline prompts to your editor or your diff. That trade is good when the edits are numerous and individually boring.

When not to use it

Skip it when you want to see the plan before any file changes. That is plan mode, which blocks edits until you approve.

It is also the wrong tool if what you want is fewer prompts on *commands*. acceptEdits covers seven filesystem commands and nothing else; a build, a test run, or a git push still prompts. Named permissions.allow rules solve that directly.

Example

Start a session with edits pre-approved:

claude --permission-mode acceptEdits

Make it the default for a project in .claude/settings.json:

{
  "permissions": {
    "defaultMode": "acceptEdits"
  }
}

Give Claude a second directory to treat as in-scope:

claude --permission-mode acceptEdits --add-dir ../shared-lib

Without that flag, an edit to ../shared-lib prompts even in this mode.

Common mistakes

Reading it as "approve everything". It approves edits and seven filesystem commands. A curl, an npm install, or a git commit still prompts.

Forgetting the scope boundary. The mode is defined by *where*, not just *what*. An mv inside the project runs; the same mv targeting a path outside it asks.

Expecting it to touch protected paths. Writes to .git, .claude, and the rest of the protected set prompt in this mode. bypassPermissions writes them, and auto hands them to the classifier instead of you.

Setting it as a project default and forgetting. Every future session in that project starts with edits pre-approved, including ones you open months later for unrelated work.