Claude Code を1ヶ月以上使っていて、毎回出る確認ダイアログのリズムを最初から調整したい人向け
OSS を clone した直後にまず読むだけ session で構造把握したい時は plan で起動する、長時間のバグ修正作業で確認疲れを減らしたい時は auto で起動する(要account資格)、CI スクリプトで事前承認したコマンドと読むだけの Bash しか動かしたくない時は dontAsk で起動する、といった『この session を最初からどの確認粒度で始めたいか』が決まっている場面で使う。Shift+Tab で途中切り替えする手間を省ける
Claude Code を起動するとき後ろに --permission-mode を書き足すと、その session 中、Claude が「ファイル編集していい?」「このコマンド叩いていい?」と聞いてくる頻度を最初から指定できます。受け付ける値は default acceptEdits plan auto dontAsk bypassPermissions の6種類。確認ダイアログのリズムを場面ごとに切り替えるための、起動時の入り口です。
毎回 Shift+Tab で切り替えてもいいんですが、それだと session の初手で必ず一度は default で止まる。最初から「今日は計画だけ」「今日はファイル書き換えゴリゴリ」と決まっているなら、起動時に宣言した方が早い。
噛み砕くと
家電のコンセントの「強・中・弱」スイッチみたいなものです。普段は「中」で動くドライヤーを、最初から「強」で起動するか「弱」で起動するかを、起動時に決められる。
Claude Code でいうところの「強・中・弱」は、Claude がどこまで自分の判断で動いてよくて、どこで人間に確認を取るかの粒度のこと。読むだけ許す弱が default と plan、ファイル書き換えまで黙って許す中が acceptEdits、全部黙って動いていい強が auto と bypassPermissions。段階が並んでいて、起動時にどこから始めるか宣言します。
後で Shift+Tab 押して途中で切り替えるのも当然できます。ただ「最初の1手目から計画モードで入って欲しい」みたいな session を毎回作りたいなら、起動時に書き足すのが効率的。
大事な前提:auto と bypassPermissions は事前に有効化されていないと起動できない
6つの値のうち、auto と bypassPermissions はそのまま叩いても受け付けてもらえません。
auto は Max / Team / Enterprise / API プランの account が必要で、対応 model でないと使えない。具体的には Sonnet 4.6・Opus 4.6・Opus 4.7 のいずれか。Pro プランでは出てきません。bypassPermissions は --dangerously-skip-permissions か --allow-dangerously-skip-permissions を一緒に渡すか、隔離環境で起動しないと弾かれます。隔離環境というのはコンテナや VM や dev container のこと。Mac / Linux で sudo や root で起動した場合も弾かれます。
つまり auto と bypassPermissions は「使える状態が整った人だけが入れる扉」。それ以外の4値である default acceptEdits plan dontAsk は、その日から誰でも使えます。
「料理ブログサイトの記事テンプレ差し替え」を例に、実際の手順を見る
料理ブログサイトの仮プロジェクトを動かしている前提で書きます。articles/ の下に既存記事が100本あって、各記事の冒頭メタデータと本文の構造を新テンプレに揃えたい。いきなり全件書き換えさせるのは怖いので、最初に計画だけ立てさせて、レビューしてから一気に編集する流れで進めます。
ステップ1: plan モードで起動して、まず計画だけ立てさせる
文字のコマンドを打ち込む黒い画面を開いて、プロジェクトのフォルダに入り、こう叩きます。
$ claude --permission-mode plan
起動するとステータス表示に plan mode on と出ます。この状態で Claude にこう投げる。
articles/ 配下の既存記事100本を見て、現在のフロントマター構造と
本文セクション構造を把握してほしい。
そのうえで、新テンプレに揃えるための変更計画を提案してほしい。
plan モードは Read 系のファイル読みやディレクトリ走査しか動かないので、Claude は articles/*.md を全部読んで、計画 markdown を書いて返してきます。ファイルは1文字も書き換わりません。ここで「あ、思ってたのと違う」と思ったら計画を書き直してもらえばいい。
ステップ2: 計画をレビューする
提案された計画 markdown を読み込んで、自分で OK / NG を判断します。例えばこんな計画が返ってくる。
提案:
- 全100本のフロントマターから `category` を削除し、新規 `tags: []` に統合
- 各記事の冒頭「## はじめに」セクションを「## この記事で作る料理」に統一
- 末尾「## まとめ」を削除し、代わりに「## 関連レシピ」へ置換
- 影響範囲: 100本中98本(2本は新構造済み)
「category 削除はやめて欲しい、残したまま tags 追加にして」みたいに直したいところがあれば、その場で Claude に修正させる。
ステップ3: 計画を承認して acceptEdits に切り替える
計画 markdown に納得したら、Claude のプロンプトから「Approve and accept edits」を選ぶか、Shift+Tab を押して acceptEdits モードに切り替えます。ステータスバーに ⏵⏵ accept edits on と出れば成功。
これで Claude は articles/ 配下のファイル書き換えを、いちいち確認せず一気に進めてくれます。
ステップ4: ここで初心者がやりがちな勘違い
「acceptEdits にしたから、これで全部黙って動くな」と思って Bash 系コマンドを投げると、ちゃんと止まります。acceptEdits が黙って通すのはファイル編集と mkdir touch rm rmdir mv cp sed の基本ファイル操作だけ。しかも自動承認されるのは、いま作業しているフォルダ working directory か、事前に additionalDirectories で許可したフォルダの中だけ。作業フォルダの外を書き換えようとしたり、保護対象フォルダ protected paths に書き込もうとしたら、ちゃんと確認が出ます。
さらに細かい話として、LANG=C rm tmp.txt や NO_COLOR=1 sed -i 's/a/b/' x.md のように先頭に LANG=C や NO_COLOR=1 のような設定値プレフィックスを付けて叩いた場合や、timeout 5 mv a b nice rm tmp nohup cp src dst のように timeout nice nohup でラップした場合も、中身が許可リストの基本操作なら同じく確認なしで通ります。逆に「途中で git diff --stat を見せて」と頼んでも、それは許可リストにない Bash 系なので確認が出ます。「git commit -am '...' までやって」も同様。承認が要るところは要るので、放置はできません。
ステップ5: 編集後の git diff で確認
100本書き換えた後、別の黒い画面で git diff --stat を叩いて、変更量と影響ファイル数を目視確認します。意図と違う変更が混じっていれば、その時点で git checkout -- articles/問題のファイル.md で個別に戻せます。Claude Code を抜けてからやってもいい。
ステップ6: 区切りを手動で打つ
確認が済んだら自分で git add → git commit を叩いて区切りを入れる。区切りメッセージは Claude に下書きしてもらってもいいし、手で書いてもいい。
この一連の流れの肝は「起動時の --permission-mode plan で『最初は読むだけ』を強制したこと」です。default で起動して途中で Shift+Tab を押す方法だと、起動直後の1手目をうっかり編集系で投げると、もう書き換わってしまう。plan で起動すれば、その事故が構造的に起きない。
つまり --permission-mode は何をしてくれるのか
- やってくれる: 起動した瞬間から、指定したモードで session を開始してくれる。default で起動した後に毎回
Shift+Tabを押す手間が消える - やってくれる:
settings.jsonのdefaultMode設定を、その session 限定で上書きしてくれる。普段はacceptEditsがデフォの人が、今日だけplanで入りたい時に便利 - やってくれる:
dontAskを指定して、CI スクリプトや制限環境で「事前承認したものと、読むだけの Bash しか動かさない」厳しい session を作れる - やってくれない:
autoやbypassPermissionsの利用資格そのものは付与してくれない。account 要件や追加の起動指定が別で要る - やってくれない: session 開始後にモードを「永続的に」変える役目ではない。
Shift+Tabでの途中切り替えも普通にできるので、起動時宣言と矛盾しない - 意味が薄い場面:
settings.jsonのdefaultModeで十分間に合っている、毎回同じモードでしか使わない人。それなら設定ファイル1回書けば終わる
使いどころ3シナリオ
シナリオ1: OSS を clone してきた直後、まず構造把握だけしたい
GitHub から知らない OSS を clone してきて、「コードベースを読み解いてから手を入れたい」場面。claude --permission-mode plan で起動すれば、最初の session 中は読むだけ。Claude に「全体の構造を把握して、どこから手をつけるか案を出して」と投げて、計画レビューしてから next session で acceptEdits に切り替える、という二段構えが作れます。
普段 defaultMode を acceptEdits にしている人ほど効果が大きい。起動直後のうっかり編集事故が防げます。
シナリオ2: 家計簿アプリのバグ調査で長丁場になりそうな夜
自分で作っている家計簿アプリで、3日前から「月末計算が1日ずれる」バグを追っている。原因の見当がついてきて、これから2〜3時間ぶっ通しで Claude と対話しながら修正していく場面。
account が auto 要件を満たしているなら、claude --permission-mode auto で起動すると、確認プロンプトの中断が大幅に減ります。裏で安全判定の classifier が常に走っていて、curl | bash や本番デプロイや main ブランチへの push みたいな危険操作だけはブロックされる。
普通のローカル編集・テスト実行はノンストップで進む。長時間タスクで確認疲れを減らしたい場面の主力モードです。
シナリオ3: CI スクリプトで Claude Code を呼ぶ、制限された自動実行
夜間バッチで「プロジェクトの Markdown ファイル一式のリンク切れチェックだけを Claude にやらせたい」みたいな、自動実行で叩く場面。claude -p --permission-mode dontAsk で起動して、settings.json の permissions.allow に事前承認したコマンドだけ列挙しておく。
こうすると Claude は事前承認リストにあるツールと、読み取り専用の Bash コマンドだけが動かせて、それ以外は黙って拒否される。読み取り専用の Bash コマンドというのは ls cat grep といった、ファイルを書き換えない種類のコマンドのこと。明示的な ask ルールも全部拒否扱いになるので、ノンインタラクティブの自動実行で「予期しない書き換え系コマンドを叩かれる」事故が起きません。
初心者が踏みやすい落とし穴
- 「Shift+Tab で6モード全部を順番に切り替えられる」と思い込む。違います。標準の cycle は
default→acceptEdits→planの3つだけ。autoは account 要件を満たした上で、cycle で初めてautoに行き当たった瞬間に「auto を cycle に加えていいか」のオプトイン確認が出ます。そこで承諾すれば追加、「No, don't ask again」を選べば cycle から外れて二度と出てこなくなる。dontAskは絶対に cycle に出てこない。公式ドキュメントも「never appears in the cycle」と明言しています bypassPermissionsを cycle に加える方法は2通りある。違いを知らないと混乱します。1つ目は--dangerously-skip-permissionsまたは--permission-mode bypassPermissionsで起動するパターン。この場合 session の開始モードが即bypassPermissionsになり、同時に cycle にも追加される。2つ目は--allow-dangerously-skip-permissionsで起動するパターン。こちらは cycle にbypassPermissionsが追加されるけど、開始時のモードは別のまま。例えばplanで起動して、後からShift+TabでbypassPermissionsに切り替える、みたいな使い方ができる起動指定です- 「acceptEdits は全コマンド自動と勘違い」。違います。
acceptEditsが黙って通すのはファイル編集と、mkdirtouchrmrmdirmvcpsedの基本ファイル操作だけ。しかもその自動承認は、いま作業しているフォルダ working directory と、事前にadditionalDirectoriesで許可したフォルダの中の書き換えに限られます。作業フォルダの外を書き換えようとした場合や、保護対象フォルダ protected paths への書き込みは、ちゃんと確認が出る。LANG=CやNO_COLOR=1を先頭につけたコマンド、timeoutnicenohupで囲んだコマンドも、中身が許可リストの基本操作なら同じく自動承認の対象。逆にgit commitやnpm installやcurlは依然として確認が出ます - 「auto は何でも黙って通す」と勘違い。違います。auto は裏で classifier が常時判定していて、
curl | bashや本番デプロイ、クラウドストレージの一括削除、IAM や権限の変更、mainへの直 push、force push 等はデフォルトでブロックされます。「全部スルー」が欲しいならbypassPermissionsですが、これは隔離環境専用 dontAskを「acceptEdits の制限版」と誤解する。違います。dontAskモードで動けるのは、permissions.allowルールに合致する操作と、読み取り専用の Bash コマンドlscatgrepといったファイルを書き換えない系のものだけ。それ以外は全部拒否されます。CI や制限環境向け。手元で気軽に使うと「書き換え系を何やっても動かない」状態になります。「ちょっとだけ厳しくしたい」用途ではなく「完全に閉じた自動実行」用途settings.jsonのdefaultModeと一致しないと困ると誤解する。一致は不要です。--permission-modeはその session 限定でdefaultModeを上書きする仕組み。普段acceptEditsがデフォの人が、今日だけplanで入っても、設定ファイルは何も変わりませんbypassPermissionsをローカルの普通の作業フォルダで使う。これはやってはいけません。bypassPermissionsはファイル削除も含めて全部黙って通すので、隔離環境専用です。dev container や VM や、ネットワーク無しのコンテナで使う前提。普通の作業フォルダで使うと、rm -rf系の暴発を誰も止めてくれません- plan モードで「ファイル少し書き換えていい?」が通ると勘違い。通りません。plan は Read 系のみで、ファイル編集はゼロ。計画 markdown を書くだけ。「ちょっとだけ直したい」と思ったら
Shift+Tabでモードを切り替える必要があります - Mac / Linux で
sudoや root で--permission-mode bypassPermissionsを起動しようとする。弾かれます。「--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons」というエラーが出て起動しません。dev container 等の認識された sandbox 内なら通ります
書き方
claude --permission-mode <モード値>
やってみるとこうなる
入力
claude --permission-mode plan
出力例
起動するとステータスバーに `plan mode on` と表示され、その session は読むだけモードで開始する。指定できる値は default / acceptEdits / plan / auto / dontAsk / bypassPermissions の6種類。auto と bypassPermissions は account 資格や追加の起動指定(--dangerously-skip-permissions / --allow-dangerously-skip-permissions 等)が別途必要
このページに出てきた言葉
- session
- Claude Code を1回起動してから抜けるまでの、1回ぶんの会話の単位
- default モード
- 起動時の標準モード。Claude がやろうとする操作1つ1つに確認が出る
- acceptEdits モード
- ファイル編集と <code>mkdir</code> <code>touch</code> <code>rm</code> <code>rmdir</code> <code>mv</code> <code>cp</code> <code>sed</code> の基本ファイル操作だけ確認なしで通すモード。ただし対象は working directory と additionalDirectories の中に限る
- plan モード
- 読むだけ許可するモード。Claude はファイル読みと計画 markdown 作成のみ行い、編集はゼロ
- auto モード
- ほぼ全部確認なしで通すが、裏で classifier が危険操作を判定するモード。Max/Team/Enterprise/API プラン + 対応 model が要件
- dontAsk モード
- permissions.allow ルールに合致する操作と、読み取り専用 Bash コマンドだけを通すモード。それ以外は全部拒否。CI や制限環境向け
- bypassPermissions モード
- 全部黙って通す危険モード。隔離環境(コンテナ・VM・dev container)専用
- classifier
- auto モードの裏で動いている、別の AI model のこと。Claude が次にやろうとしている操作を見て、危険判定する判定役
- Shift+Tab
- session 中にモードを順送りで切り替えるキー操作。標準では default → acceptEdits → plan の3つを cycle する
- defaultMode (settings.json)
- <code>~/.claude/settings.json</code> や <code>.claude/settings.json</code> に書ける設定項目。普段デフォルトで起動したいモードを指定する。<code>--permission-mode</code> で session 限定で上書き可能
- working directory
- <code>claude</code> を起動した時点で「作業中」とみなされているフォルダ。acceptEdits の自動承認はこのフォルダの中の書き換えに限定される
- additionalDirectories
- settings.json で「working directory の外だけど、ここも自動承認の対象に含めていい」と事前に追加で許可しておけるフォルダ一覧
- protected paths
- Claude Code 側で「ここへの書き込みは常に確認を取る」と決められている特別なフォルダ。acceptEdits でも自動承認されない