EnterPlanMode / ExitPlanMode(エンタープランモード・エグジットプランモード)

組み込みツール
EnterPlanMode / ExitPlanMode
エンタープランモード・エグジットプランモード
Claude Code が plan mode(プランモード=コードを触らずに計画だけ立てる動作モード)に出入りする時に内部的に使う2兄弟ツール。EnterPlanMode で plan mode に入り、ExitPlanMode で計画をユーザーに提示して承認を求める。ユーザーが直接叩くものではなく、Shift+Tab でのモード切り替えや /plan スラッシュコマンドの裏で動く。

Claude Codeで既存コードを大きく変更する前に計画を立てさせたい人向け

WordPress 既存テーマに新機能を追加する時や、cloneしてきた OSS の構造を把握させたい初日に、Shift+Tab で plan mode に切り替えてから依頼を投げる。Claude が裏で EnterPlanMode を呼んで読み取りだけで調査し、ExitPlanMode で「この計画で進めていい?」と聞いてくる。承認時に5択の選択肢(auto mode で続行 / acceptEdits で続行 / 1編集ごとに確認 / フィードバックしてさらに計画 / Ultraplan でレビュー)から選ぶことで、いきなりコードを大きく書き換えられる事故を避ける場面で使う。

EnterPlanModeExitPlanMode は、Claude Code が plan mode(プランモード)の出入りに使う内部ツールの2兄弟です。plan mode は「とりあえず触らずに調べて、計画だけ立てて」と Claude に指示するモードで、入る時に EnterPlanMode、計画を出してユーザーの判断を仰ぐ時に ExitPlanMode が呼ばれます。

ユーザーが直接叩くことはまずありません。Shift+Tab でモードを切り替えたり、/plan を頭につけて1回だけ計画してもらうと、Claude が裏でこの2つを使います。

噛み砕くと

建築現場の打ち合わせに似ています。いきなり壁を壊し始めるんじゃなく、まず図面を見て「ここをこう変える、配管はこう逃がす、工期は何日」と紙に書き出して、施主に「これで進めていい?」と確認を取る。あの「紙に書き出すフェーズ」が plan mode、紙を施主に渡す瞬間が ExitPlanMode です。

plan mode 中は Claude は読み取りしかしない(自動承認の範囲が読み取り限定)ので、コードを勝手に壊される心配がありません。だから既存のコードを大きく変える時、まず Shift+Tab で plan mode に切り替えてから依頼するのが安全です。

大事な前提:plan mode は「読み取りしかしない」だが「permission prompt は出る」

公式ドキュメントは plan mode について Reads only(読み取りのみ)と書いています。ただこれは「自動で承認される範囲が読み取り限定」という意味で、書き込みを止めるわけではありません。

たとえば plan mode 中に Claude が「ファイル一覧を取るために find を実行したい」と言うと、これは読み取り系なので自動で通ります。一方「設定ファイルを上書きしたい」と言われたら、plan mode 中でも通常通りユーザーに確認のポップアップが飛んできます。「plan mode に入ったから全部止まる」と誤解すると、想定外の操作が走って驚くことになります。

「料理ブログにコメント機能を追加する」を例に、実際の流れを見る

料理ブログを WordPress で運営していて、「読者からのコメント機能を追加したい」と Claude Code に頼む場面を想定します。コメント機能はテーマファイル、CSS、スパム対策プラグイン連携といろんなところを触るので、いきなり編集に入られると怖い。ここで plan mode の出番です。

ステップ1: ターミナルで Claude Code を起動

料理ブログのプロジェクトフォルダで、いつも通り Claude Code を起動します。

$ cd ~/projects/cooking-blog
$ claude

起動した時点ではモードは default。画面下に default と表示されているはずです。

ステップ2: Shift+Tab を2回押して plan mode に切り替える

Shift+Tab を1回押すと acceptEdits、もう1回押すと plan に切り替わります。順番は default → acceptEdits → plan の巡回。画面下のステータスバーに plan と出れば成功です。

ステップ3: 依頼を投げる

plan mode のまま、いつも通りプロンプトを投げます。

このサイトにコメント機能を追加したい。
スパム対策込みで、既存テーマと壊れない方法で。

ここで Claude が裏で EnterPlanMode を呼んで plan mode に入る…のですが、Shift+Tab で先に切り替え済みなので、すでに plan mode の中。ここで初心者がやりがちな勘違いがあります。「EnterPlanMode は Shift+Tab 押した時に呼ばれるんでしょ?」と思いがちですが、これは Claude が /plan を頭につけたプロンプトに反応して内部的に使う側面が強いツールです。Shift+Tab での切り替えはモード変更の操作で、内部ツール呼び出しとは別の経路。

ステップ4: Claude が調査・計画を作る

Claude はテーマフォルダの中身を読み始めます。functions.php を開いて既存のフックを確認、style.css を見て使われている色やフォントを把握、single.php でテンプレートの構造を確認…という感じで、読み取りを繰り返します。この間に編集は走りません。

ステップ5: 計画を提示してくる。これが ExitPlanMode の出番

調査が終わると Claude が ExitPlanMode を呼んで、計画を画面に出します。だいたいこんな形です。

提案:
1. single.php に <?php comments_template(); ?> を追加(記事末尾)
2. comments.css を新規作成して style.css から @import
3. Akismet プラグインを推奨(手動インストール)
4. WordPress 管理画面のディスカッション設定で
   「コメントの手動承認」をオンにする手順を案内

この計画で進めていい?

ここで Claude は止まり、ユーザーの判断を待ちます。ExitPlanModePermission Required: Yes なのはこのため。計画を提示する=編集に移る判断をユーザーに委ねる、なので人間の承認が必須です。

ステップ6: 承認方法を選ぶ

提示されると、次の選択肢が出てきます。

  • Approve and start in auto mode - 承認して、以降は auto mode(自動実行)で進める
  • Approve and accept edits - 承認して、編集だけ自動承認の acceptEdits モードに切り替える
  • Approve and review each edit manually - 承認するけど、1編集ごとに確認させる。default mode に戻るイメージ
  • Keep planning with feedback - まだ承認しない、フィードバックを返してさらに計画を練る
  • Refine with Ultraplan - ブラウザ版の Ultraplan で計画をレビュー・編集する

初めて触る読者には Approve and review each edit manually が無難。ファイル1つ書き換えるごとに確認が入ります。

もし計画自体を手で書き換えたければ、提示された段階で Ctrl+G を押すと、計画が $EDITOR で開いて編集できます。「手順3の Akismet は使わない、JetPack の方を使う」みたいな修正をその場で入れられる。意外と知られていない機能。

つまり EnterPlanMode / ExitPlanMode は何をしてくれるのか

  • やってくれる: コードを触る前に Claude に「読んで計画だけ作って」と指示する状態を作り、計画を人間レビューに回す
  • やってくれる: 承認時に5択の選択肢を提示する(auto mode で続行 / acceptEdits で続行 / 1編集ごとに確認 / フィードバックしてさらに計画 / Ultraplan でレビュー)
  • やってくれない: plan mode 中の書き込み系操作の自動ブロック。書き込みを頼まれたら通常通り permission prompt が出る
  • 意味が薄い場面: 「console.log を1個追加して」「タイポを1文字直して」レベルの小さい変更。計画を立てる手間が変更そのものより重い

使いどころ3シナリオ

シナリオ1: WordPress の既存テーマに新機能を足す時

料理ブログにコメント機能、家計簿アプリにグラフ表示機能、みたいに既存コードベースを大きく拡張する場面。どのファイルを触るか、どの順番で進めるかを先に固めてから編集に入りたい時、Shift+Tab で plan mode → 依頼 → 計画レビュー、の流れが効きます。

シナリオ2: cloneしてきた OSS の構造を理解させる初日

GitHub から見知らぬOSS、たとえば Astro 製のブログテンプレートを git clone してきて、「これに英語版ページを追加したい」と頼む時。Claude Code はまずコードベースの全体構造を把握する必要があります。plan mode で「まず全体を読んで、英語版を足すならどこをどう触るか計画して」と頼めば、いきなり編集に入る事故を避けられます。

シナリオ3: 本番反映前の最終チェック用

すでに何度かやり取りして方針が固まっているけど、本番ブランチに反映する直前にもう一度俯瞰させたい時。/plan を1プロンプトだけ頭につけて「いまの状態をもとに、本番反映までの手順を計画して」と投げると、その1回だけ plan mode で計画が返ってきます。継続的にモード変えたくない時に便利。

初心者が踏みやすい落とし穴

  • 「Approve and start in auto mode」を軽い気持ちで選ぶと、以降ずっと auto mode で編集が走り続ける。承認の選択肢は「次のモードを何にするか」を決めるスイッチでもあります。「都度確認に戻したい」なら明示的に Approve and review each edit manually を選ぶ
  • Ctrl+G で計画を手編集できることを知らない。Claude の提案にちょっとだけ違和感がある時、計画ごと突き返して練り直すより早い。覚えておくと得
  • 計画を承認するとセッション名が計画から自動命名される--name/rename を先に使っていない時に限ります。気づいたら「Add comment system to cooking blog」みたいな名前になっていて驚く
  • showClearContextOnPlanAccept を有効にしていないと、長い planning context のまま編集に入ってしまう。調査でファイルを大量に読ませた後だと、その読み込み内容ごと編集フェーズに引き継がれてトークンを消費します。設定ファイルで有効化しておくと、承認時に「コンテキストを消してから編集に入る?」と聞いてくれる
  • plan mode 中でも bash の書き込み系コマンドは permission prompt が出る。「Reads only」を「全部止まる」と誤解しがち。書き込み系を呼ばれた時は普通にユーザー確認が走るので、計画段階のつもりで放置すると待ち状態のまま動かない
  • .claude/settings.jsondefaultMode: "plan" をチーム共有してしまうと、全員がプロジェクトに入った瞬間 plan mode 開始になる。「自分はいつも default で始めたい」というメンバーが混じっていると不評なので、チーム合意してから入れる
  • /plan スラッシュコマンドと plan permission mode は別物/plan はその1プロンプトだけ plan mode で動かす単発スイッチ、Shift+Tab は継続モードに入れる切り替え。「/plan 打ったから以降ずっと安全」と勘違いすると、次のプロンプトで普通に編集が走る

書き方

# モード切り替え(CLI内)
Shift+Tab        # default → acceptEdits → plan で巡回

# 1プロンプトだけ plan mode
/plan このプロジェクトに〇〇機能を追加したい

# 起動時に plan mode で始める
claude --permission-mode plan

# プロジェクトの既定モードを plan にする
# .claude/settings.json
{
  "permissions": {
    "defaultMode": "plan"
  }
}

やってみるとこうなる

入力

Shift+Tab を2回押して plan mode に切り替えた状態で、料理ブログのフォルダで次のプロンプトを投げる:

このサイトにコメント機能を追加したい。
スパム対策込みで、既存テーマと壊れない方法で。

出力例

Claude が plan mode で調査を始める(functions.php、style.css、single.php などを読み込み、書き込みはしない)。調査後に ExitPlanMode で次の計画を提示する:

提案:
1. single.php に <?php comments_template(); ?> を追加(記事末尾)
2. comments.css を新規作成して style.css から @import
3. Akismet プラグインを推奨(手動インストール)
4. ディスカッション設定で「コメントの手動承認」をオンにする手順を案内

この計画で進めていい?

→ 5つの選択肢が表示される:
  - Approve and start in auto mode
  - Approve and accept edits
  - Approve and review each edit manually
  - Keep planning with feedback
  - Refine with Ultraplan

このページに出てきた言葉

plan mode(プランモード)
Claude Code の動作モードの1つ。Claude にコードを触らせず、調べて計画だけ立てさせる状態
permission mode(パーミッションモード)
Claude が何をする時にユーザー確認を取るかを決める動作モードの総称。default、acceptEdits、plan、auto、dontAsk、bypassPermissions の6種類
Shift+Tab
Claude Code のターミナル画面で permission mode を切り替えるキー操作。<code>default → acceptEdits → plan</code> の順に巡回する
/plan スラッシュコマンド
そのプロンプト1回だけ plan mode で動かす単発スイッチ。継続モードに入れる Shift+Tab とは別物
permission prompt(パーミッションプロンプト)
Claude が操作する前に「これをやっていいですか」とユーザーに確認を求める表示
Ctrl+G
ExitPlanMode が出した計画を <code>$EDITOR</code> で開いて直接書き換えるためのキー操作
showClearContextOnPlanAccept
<code>.claude/settings.json</code> で有効化する設定。計画承認時に「調査で溜まったコンテキストを消してから編集に入る?」と聞いてくれる
Ultraplan(ウルトラプラン)
Claude Code on the web のブラウザ画面で計画をレビュー・編集する機能。ローカルではなくクラウド側で動く
auto mode(オートモード)
ユーザー確認なしで Claude が自動実行するモード。裏で別の分類モデルが安全性チェックをかける(Claude Code v2.1.83 以降、Max・Team・Enterprise・API プラン限定)
acceptEdits(アクセプトエディッツ)モード
ファイルの編集や <code>mkdir</code> <code>mv</code> <code>cp</code> などの基本的な操作を自動承認するモード

関連項目

公式ドキュメント

https://code.claude.com/docs/en/permission-modes

-

← 戻る