# Claude Code plan mode: when to plan first and when not to

> Claude Code plan mode reads your code and writes a plan, but blocks edits until you approve it. Shift+Tab gets you there; skip it for a typo fix.

Source: https://shuriken.sh/guides/claude-code-plan-mode

Claude Code plan mode reads your code and writes a plan, but blocks edits until you approve it. Shift+Tab gets you there; skip it for a typo fix.

By Shuriken Updated 27 October 2026 5 min read

**Contents**

Claude Code plan mode lets Claude read your code and run commands to look around, then write a plan, while every edit stays blocked until you approve it. Turn it on when the work is unfamiliar, risky or spans many files. Leave it off for small, obvious edits, where reviewing a plan costs more than the change.

For us it is a review gate, not a habit. Shift+Tab until the status bar under the prompt reads ⏸ plan mode on; press it again to leave without approving anything.

## What plan mode does, exactly #

Anthropic's [permission modes page](https://code.claude.com/docs/en/permission-modes) says plan mode "tells Claude to research and propose changes without making them". In its words, Claude "reads files, runs shell commands to explore, and writes a plan, but does not edit your source."

Shell commands still run while Claude plans. Which ones run without asking depends on the session:

- With auto mode available and useAutoModeDuringPlan on (the default), a classifier reviews each command instead of prompting you.
- Without auto mode, commands from the built-in read-only set run, and anything else asks first.

When the plan is ready, Claude shows it with three answers:

- Yes, and use auto mode approves and lets it run. Where auto mode isn't available, the same option reads Yes, auto-accept edits.
- Yes, manually approve edits approves, and you review each edit as it comes.
- No, keep planning keeps Claude in plan mode while you say what should change.

Ctrl+G at that prompt opens the plan in your editor, so you can change a step before Claude starts.

One exception: if you started an interactive terminal session with bypass permissions available (--dangerously-skip-permissions, for example), plan mode's blocks aren't enforced. Claude is still told to plan without editing, but an edit or command it tries runs without a prompt, apart from what your deny and ask rules catch. In claude -p runs, Agent SDK sessions and the VS Code chat panel the blocks always hold.

## How to switch to plan mode #

- During a session, press Shift+Tab. From auto the first press goes to the default (Manual) mode, and the cycle then runs default → acceptEdits → plan.
- For one prompt, start it with /plan.
- From the start, run claude --permission-mode plan.
- As a project default, set defaultMode in .claude/settings.json:

json
{
"permissions": {
"defaultMode": "plan"
}
}

VS Code sessions don't read the project file for their starting mode. There, set claudeCode.initialPermissionMode to plan in your user settings.

## When to plan first, and when to skip it #

| The work | Plan first? | Why |
| --- | --- | --- |
| Code you don't know: a new repo, a module you've never opened, someone else's service | Yes | The plan lists what Claude found before it acts on it |
| A rename across packages, a new data model, a migration | Yes | A wrong assumption shows up once, in the plan, instead of in twenty diffs |
| Auth, payments, deletion, anything near production data | Yes | Rejecting a plan costs one message |
| A vague ask such as "make the dashboard faster" | Yes | It has ten readings, and the plan says which one Claude picked |
| A run you'll leave alone for an hour | Yes | You agree on the route before you walk away |
| A typo, a renamed variable, a test case you've already described | No | Planning adds a round trip, and reading the plan takes longer than the change |
| A prompt that already lists the steps | No | Plan mode reads them back to you |
| A question such as "where is the retry logic?" | No | Claude edits nothing to answer it |

Planning isn't free, either. Every file Claude reads to plan goes into its context, so a plan on a big codebase can use a good share of a session before any code changes. Where those tokens go is broken down in [why Claude Code uses so many tokens](https://shuriken.sh/guides/why-claude-code-burns-tokens).

Shuriken runs your coding agents on your own computers and keeps them going when an account hits its limit.

[Download](https://shuriken.sh/download)

## How we keep the plan and let the agent run #

A plan for a big change shouldn't live only in a chat. Once it reads right, we have Claude write it to a Markdown file next to the code: the goal, the steps in order, what "done" means for each step, and the checks to run. Then we approve, and Claude works through the file.

- The file survives the session. Compaction, /clear or a closed chat leave it alone, and a fresh session can pick it up with "work through plan.md from step 4".
- You can read it in your editor, change a step, and commit it with the work.
- Independent steps can go to separate chats working in parallel, each in its own branch. Keeping those chats from colliding is the subject of [running Claude Code agents in parallel](https://shuriken.sh/guides/run-claude-code-agents-in-parallel).

Claude Code keeps its own plan files too, in ~/.claude/plans/ unless the plansDirectory setting points somewhere else. A file in the repo is still easier to share and review.

## How Shuriken fits in #

Shuriken runs Claude Code (and 66 other agents) on your own computers, so plan mode works the way it does in the terminal. Each Claude Code chat has a mode picker, and each mode carries a one-line hint:

| Mode | Hint in the picker |
| --- | --- |
| Plan | Reads and plans; changes nothing |
| Always ask | Asks before each new tool |
| Accept edits | Edits files without asking |
| Auto-approve | A model approves the safe requests |

The message box also has a chat mode, Default or Planning. Planning ("Plans first and asks before it changes anything") starts the chat in the agent's own plan mode, for Claude Code and the other agents that have one, and after the plan the chat carries on in the mode you were in.

When Claude calls its ExitPlanMode tool to ask to run the plan, the chat shows the plan with Approve, Keep planning and Reject, and you get a [notification on your computer](https://shuriken.sh/blog/desktop-notifications) that a chat needs you. Keep planning asks "What should change?", and Claude reads your answer and goes on planning in the same turn.

The part we use most: you don't have to wait for the plan to finish to say what comes next. Type the follow-ups ("then add tests for the edge cases", "then update the changelog") while it plans. They wait in the chat's queue and run in order once the plan is approved and done. Every chat also gets its own branch and git worktree, so two plans can run side by side without touching each other's files; the [parallel agents page](https://shuriken.sh/features/parallel-agents) shows how.

If you want plan, approve and queue across every project in one window, [download Shuriken](https://shuriken.sh/download).

Share

[X](https://x.com/intent/post?url=https%3A%2F%2Fshuriken.sh%2Fguides%2Fclaude-code-plan-mode&text=Claude%20Code%20plan%20mode%3A%20when%20to%20plan%20first%20and%20when%20not%20to)[LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fshuriken.sh%2Fguides%2Fclaude-code-plan-mode)[Hacker News](https://news.ycombinator.com/submitlink?u=https%3A%2F%2Fshuriken.sh%2Fguides%2Fclaude-code-plan-mode&t=Claude%20Code%20plan%20mode%3A%20when%20to%20plan%20first%20and%20when%20not%20to)[Reddit](https://www.reddit.com/submit?url=https%3A%2F%2Fshuriken.sh%2Fguides%2Fclaude-code-plan-mode&title=Claude%20Code%20plan%20mode%3A%20when%20to%20plan%20first%20and%20when%20not%20to)[E-mail](mailto:?subject=Claude%20Code%20plan%20mode%3A%20when%20to%20plan%20first%20and%20when%20not%20to&body=https%3A%2F%2Fshuriken.sh%2Fguides%2Fclaude-code-plan-mode)

## Sources

- [Permission modes (Claude Code docs)](https://code.claude.com/docs/en/permission-modes) (accessed 22 October 2026)
- [Configure permissions (Claude Code docs)](https://code.claude.com/docs/en/permissions) (accessed 22 October 2026)
- [Settings reference (Claude Code docs)](https://code.claude.com/docs/en/settings-reference) (accessed 22 October 2026)

## Frequently asked questions

**How do I turn on plan mode in Claude Code?**

Press Shift+Tab until the status bar reads plan mode on, start a single prompt with /plan, or launch it with claude --permission-mode plan.

**Can Claude edit files in plan mode?**

No. It can read files and run commands to explore, but every edit waits until you pick one of the Yes answers under the plan. The exception is a terminal session started with bypass permissions available: there plan mode only asks Claude not to edit.

**How do I make plan mode the default for a project?**

Put defaultMode: plan under permissions in the project's .claude/settings.json. The VS Code extension ignores that file for its starting mode and reads claudeCode.initialPermissionMode from your user settings instead.

**Can I edit the plan before Claude starts?**

Yes. Press Ctrl+G when the plan is shown to open it in your editor, change it, and Claude works from your version.

Shuriken

The harness for your coding agents.

Run Claude Code, Codex and Gemini CLI on your own computers, move chats to your next account at a limit, and follow every chat from any device.

[Download](https://shuriken.sh/download)

[Other platforms](https://shuriken.sh/download#main)

## Keep reading

- [How to change the model in Claude Code: Guide 27 Oct 2026 3 min read Change the model in Claude Code with /model, claude --model, an environment variable or settings.json. /model wins; Enter in its picker sets your default.](https://shuriken.sh/guides/change-model-in-claude-code)
- [Claude Code API Error 400 on tool_use: what to do: Guide 27 Oct 2026 4 min read A Claude Code API Error 400 about tool use means the saved history has a tool call out of step with its result. Update, then rewind past the broken turn.](https://shuriken.sh/guides/claude-code-api-error-400-tool-use)
- [Claude Code custom slash commands: make your own: Guide 27 Oct 2026 3 min read Make your own Claude Code slash commands: one Markdown file in .claude/commands or a skill, with arguments, shell output and allowed tools. With examples.](https://shuriken.sh/guides/claude-code-custom-slash-commands)
- [Claude Code thinking and effort levels, explained: Guide 27 Oct 2026 4 min read Claude Code's effort levels, low to max, set how much Claude thinks before it acts. What each level is for, the defaults, ultrathink, and how to set it.](https://shuriken.sh/guides/claude-code-effort-levels)
- [Claude Code chat history deleted? Set cleanupPeriodDays: Guide 27 Oct 2026 5 min read Claude Code deletes session transcripts after 30 days by default. Raise cleanupPeriodDays in settings.json to keep them, and back up what you can't lose.](https://shuriken.sh/guides/claude-code-history-deleted-after-30-days)
- [Claude Code hooks not working? Why they don't fire: Guide 27 Oct 2026 6 min read A Claude Code hook that never fires is either not loaded (missing from /hooks) or loaded with a matcher that matches nothing. The causes and their fixes.](https://shuriken.sh/guides/claude-code-hooks-not-working)
- [Claude Code keyboard shortcuts and commands cheat sheet: Guide 27 Oct 2026 5 min read Every Claude Code keyboard shortcut worth knowing, for Mac and Windows, plus the slash commands that matter. One page, checked against Anthropic's docs.](https://shuriken.sh/guides/claude-code-keyboard-shortcuts)

## Free tools

- [Claude limit reset tracker](https://shuriken.sh/tools/limit-resets/claude)
- [Codex limit reset tracker](https://shuriken.sh/tools/limit-resets/codex)
