Press Shift+Tab to cycle into plan mode, prefix a single prompt with /plan, or start a session with claude --permission-mode plan. Claude then reads, searches, and explores but does not edit your source. When the plan is ready it asks how to proceed, and approving switches the session into an editing mode with the research still in context. Set it permanently with permissions.defaultMode in settings.json.
- Plan mode is one of six permission modes. It restricts writes; it does not restrict reading or thinking.
- Three ways in: Shift+Tab,
/planas a one-prompt prefix, orclaude --permission-mode plan. - The status bar shows
⏸ plan mode onwhile it is active. Press Shift+Tab again to leave without approving. - The approval prompt offers three answers, and one of them keeps you planning. Rejecting a plan is cheap; reverting forty files is not.
- Ctrl+G opens the proposed plan in your editor so you can rewrite it before Claude proceeds.
- A session started with bypass permissions does not enforce plan mode’s blocks. Plan mode is a permission gate, not a promise from the model.
What plan mode actually restricts
In plan mode Claude keeps every read tool and loses the ability to write to your source. It can still run shell commands, which is what makes the research useful: it can run git log, list a directory, or grep for a symbol. What it cannot do is leave a change behind.
Behaviour in plan mode, checked against the Claude Code permission-modes documentation in August 2026.
| Action | In plan mode |
|---|---|
| Reading files, searching, globbing | Runs freely |
| Reading git history and diffs | Runs freely |
| Built-in read-only shell commands | Runs freely |
| Other shell commands | Prompts you, or goes to the auto-mode classifier if your account has auto mode |
| Editing, creating, deleting source files | Blocked until you approve the plan |
Writes to protected paths (.git, .claude, shell rc files) | Prompted, never silently auto-approved |
Three ways to enter it
Mid-session: Shift+Tab
The cycle runs default (labelled Manual) to acceptEdits to plan. Optional modes slot in after plan when your account has them. The status bar changes to ⏸ plan mode on. Press Shift+Tab again to cycle out without approving anything.
For one prompt: /plan
Prefix a single message with /plan and that turn runs in plan mode. This is the right tool when most of your session is ordinary editing and one question deserves a proposal first.
At startup: a flag
Start the session already gated. The same flag works with -p for non-interactive runs, which is how you get a plan out of a script without letting it edit anything.
# Interactive, already gated
claude --permission-mode plan
# Non-interactive: produce a plan, change nothing
claude -p --permission-mode plan "how would you add rate limiting to the public API?"
Making it the default
If you want plan mode to be the starting posture for a repository rather than a habit you have to remember, set it in that project’s settings file. Put it in ~/.claude/settings.json instead to make it your personal default everywhere.
{
"permissions": {
"defaultMode": "plan"
}
}
Plan mode is one rung on a ladder
People conflate plan mode with permissions in general. They are the same system: plan is one of the permission modes, and the mode sets the baseline that your allow, ask, and deny rules then layer on top of.
Claude Code permission modes, as documented in August 2026. The mode named Manual in the CLI has the config value default.
| Mode | Runs without asking | Use it for |
|---|---|---|
default (Manual) | Reads only | Sensitive work, or getting a feel for a new repo |
acceptEdits | Reads, file edits, and common filesystem commands | Iterating on code you are reviewing after the fact |
plan | Reads, plus classifier-approved commands where auto mode is available | Exploring before changing anything |
auto | Everything, with a classifier checking each action first | Long tasks where prompt fatigue is the real cost |
dontAsk | Only pre-approved tools; everything else is denied, never prompted | CI and scripts that must never block on input |
bypassPermissions | Everything | Containers and VMs you can throw away |
The other thing worth knowing: permissions.allow rules do not pre-approve writes to protected paths. The protected-path check runs before allow rules are evaluated, so an Edit(.claude/**) entry in your settings does not change what happens when Claude tries to edit its own configuration mid-plan.
The approval prompt
When the plan is ready, Claude presents it and asks how to proceed. The choices are not yes and no.
- Yes, and use auto mode. Approves and starts executing with the classifier reviewing actions rather than prompting you. Where auto mode is unavailable this option reads Yes, auto-accept edits instead.
- Yes, manually approve edits. Approves the approach and puts you back in the loop on each change.
- No, keep planning. Stays in plan mode and takes your objection as input. This is the option people forget exists, and it is the one that makes plan mode a negotiation instead of a gate.
Approving exits plan mode and switches the session into whichever mode the option describes, with the plan and all the research still in context. Claude does not re-explore, which is a large part of why plan mode is cheaper than it looks on paper.
Edit the plan before you approve it
Press Ctrl+G at the approval prompt to open the proposed plan in your default text editor. You can delete a step, add a constraint, or rewrite the whole thing, and Claude proceeds from your version. This is faster than three rounds of "no, not like that" and it produces a plan you actually own.
When it earns its keep
| Use plan mode | Skip it |
|---|---|
| Changes touching several files or modules | A typo, a constant, a one-line fix |
| Code you do not know well | Code you wrote last week |
| Anything with a schema, migration, or public API in it | Adding a test to an existing suite |
| Refactors where "which pattern" is the real question | Mechanical work with one obvious approach |
| Work you will hand to a reviewer | Throwaway scripts |
| The first task in an unfamiliar repository | The fifth task in a repository you know |
The failure it prevents
The expensive failure with agents is not bad syntax, it is a plausible wrong approach executed thoroughly. An agent that decides to add a caching layer where you wanted a query fix will write clean, tested, well-named code that solves the wrong problem. You then have to read all of it to discover that.
The honest cost
Plan mode adds a research and proposal round trip before any work happens. On a one-line fix that round trip is pure overhead: you pay tokens and wall-clock time to be told what you already knew. The break-even is roughly the point where you would not be able to review the resulting diff in one sitting.
Getting plans worth approving
A vague request produces a vague plan, which is worse than no plan because it looks like agreement.
State the constraint, not just the goal
"Add rate limiting" invites invention. "Add rate limiting to the public API using the existing Redis client, no new dependencies, 100 requests per minute per key" gives it a shape to fit.
Point at the relevant code
Naming two or three files with @ saves several search turns and sharply improves the plan, because it starts from your code rather than from a generic pattern. An @ reference also pulls in the CLAUDE.md files from that file’s directory and its parents.
Ask for the alternatives it rejected
The plan tells you what it will do. Asking what it considered and discarded tells you whether it understood the problem. This one question catches most wrong approaches before they cost anything.
Ask for the blast radius
"Which files does this touch, and which of them are covered by tests?" turns a prose plan into something you can sanity-check in ten seconds against what you know about the repo.
Push back in the same session
Choose No, keep planning and say what is wrong. "The approach is right but do not touch the migration files" produces a revised plan without losing the research you already paid for.
/plan Add idempotency keys to the payments endpoint in @internal/payments/handler.go.
Constraints: reuse the existing Redis client, no new dependencies, 24h key TTL.
Before the steps, list the two approaches you considered and why you dropped one.
End with the files you will touch and which are covered by tests.
After approval
Two habits are worth building around the approval boundary.
- Commit at plan boundaries. If the plan had four steps, four commits give you somewhere to roll back to that is not "the beginning". Ask for this in the plan itself and it happens without you watching.
- Re-plan on surprise. If step two reveals the codebase is not what the plan assumed, cycling back to plan mode with Shift+Tab beats letting the agent improvise its way out. The improvisation is where the plausible-wrong-approach failure comes back.
The Codex equivalent
Codex has no feature called plan mode, but it reaches the same place from the other direction. Where Claude Code gates the write tools, Codex gates the filesystem: start it with a read-only sandbox and it can research and propose without the ability to modify anything.
codex -s read-only "how would you restructure the billing package? do not change anything"
The difference in feel is that Claude Code produces a discrete plan artefact with an approval prompt attached, while Codex produces a message you then act on yourself by restarting with a writable sandbox. The Claude flow is better when you want the plan reviewed by somebody else; the Codex flow is better when you were going to make the call yourself anyway.
Questions people ask
Press Shift+Tab in a session to cycle into it, prefix a single prompt with /plan, or start with claude --permission-mode plan. The status bar shows a plan mode indicator while it is active.
No. Reading, searching, and inspecting git history stay available, and read-only shell commands run freely, but edits to your source are blocked until you approve the plan. The one exception is a session started with bypass permissions available, where plan mode’s blocks are not enforced.
Press Shift+Tab again. That cycles the session to the next permission mode and discards the gate without executing the plan.
Set "permissions": { "defaultMode": "plan" } in .claude/settings.json for one project, or in ~/.claude/settings.json for every session on your machine.
Yes. Press Ctrl+G at the approval prompt to open the plan in your default text editor. Claude proceeds from your edited version. You can also choose "No, keep planning" and describe the change in the chat instead.
It adds a research and proposal round trip. In practice it often costs less overall, because the research carries into the execution phase and you avoid paying for an implementation you were going to throw away.
Plan mode is one of the permission modes. The mode sets the baseline for what runs without a prompt; allow, ask, and deny rules then layer on top and apply in every mode. Plan governs whether Claude may act at all before you approve an approach.
Not by that name. Running Codex with a read-only sandbox achieves the same shape: it can research and propose but cannot modify anything until you restart it with a writable sandbox.
Sources
Every figure above was read from these pages on August 2026. Vendors reprice without notice; if you find a stale number, tell us.
- Claude Code: choose a permission mode mode list, approval prompt, protected paths
- Claude Code: common workflows plan before editing, Shift+Tab cycle
- Claude Code: settings permissions.defaultMode