--permission-mode(パーミッションモード)

起動オプション
--permission-mode
パーミッションモード
Claude Code を起動するとき後ろに書き足して、その session 中の確認ダイアログの粒度を最初から指定するための起動時の指定。default / acceptEdits / plan / auto / dontAsk / bypassPermissions の6種類のモードのうち、どれで session を始めるかを宣言する。settings.json の defaultMode 設定をその session 限定で上書きする

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 がどこまで自分の判断で動いてよくて、どこで人間に確認を取るかの粒度のこと。読むだけ許す弱が defaultplan、ファイル書き換えまで黙って許す中が acceptEdits、全部黙って動いていい強が autobypassPermissions。段階が並んでいて、起動時にどこから始めるか宣言します。

後で Shift+Tab 押して途中で切り替えるのも当然できます。ただ「最初の1手目から計画モードで入って欲しい」みたいな session を毎回作りたいなら、起動時に書き足すのが効率的。

大事な前提:autobypassPermissions は事前に有効化されていないと起動できない

6つの値のうち、autobypassPermissions はそのまま叩いても受け付けてもらえません。

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 で起動した場合も弾かれます。

つまり autobypassPermissions は「使える状態が整った人だけが入れる扉」。それ以外の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.txtNO_COLOR=1 sed -i 's/a/b/' x.md のように先頭に LANG=CNO_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 addgit commit を叩いて区切りを入れる。区切りメッセージは Claude に下書きしてもらってもいいし、手で書いてもいい。

この一連の流れの肝は「起動時の --permission-mode plan で『最初は読むだけ』を強制したこと」です。default で起動して途中で Shift+Tab を押す方法だと、起動直後の1手目をうっかり編集系で投げると、もう書き換わってしまう。plan で起動すれば、その事故が構造的に起きない。

つまり --permission-mode は何をしてくれるのか

  • やってくれる: 起動した瞬間から、指定したモードで session を開始してくれる。default で起動した後に毎回 Shift+Tab を押す手間が消える
  • やってくれる: settings.jsondefaultMode 設定を、その session 限定で上書きしてくれる。普段は acceptEdits がデフォの人が、今日だけ plan で入りたい時に便利
  • やってくれる: dontAsk を指定して、CI スクリプトや制限環境で「事前承認したものと、読むだけの Bash しか動かさない」厳しい session を作れる
  • やってくれない: autobypassPermissions の利用資格そのものは付与してくれない。account 要件や追加の起動指定が別で要る
  • やってくれない: session 開始後にモードを「永続的に」変える役目ではない。Shift+Tab での途中切り替えも普通にできるので、起動時宣言と矛盾しない
  • 意味が薄い場面: settings.jsondefaultMode で十分間に合っている、毎回同じモードでしか使わない人。それなら設定ファイル1回書けば終わる

使いどころ3シナリオ

シナリオ1: OSS を clone してきた直後、まず構造把握だけしたい

GitHub から知らない OSS を clone してきて、「コードベースを読み解いてから手を入れたい」場面。claude --permission-mode plan で起動すれば、最初の session 中は読むだけ。Claude に「全体の構造を把握して、どこから手をつけるか案を出して」と投げて、計画レビューしてから next session で acceptEdits に切り替える、という二段構えが作れます。

普段 defaultModeacceptEdits にしている人ほど効果が大きい。起動直後のうっかり編集事故が防げます。

シナリオ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.jsonpermissions.allow に事前承認したコマンドだけ列挙しておく。

こうすると Claude は事前承認リストにあるツールと、読み取り専用の Bash コマンドだけが動かせて、それ以外は黙って拒否される。読み取り専用の Bash コマンドというのは ls cat grep といった、ファイルを書き換えない種類のコマンドのこと。明示的な ask ルールも全部拒否扱いになるので、ノンインタラクティブの自動実行で「予期しない書き換え系コマンドを叩かれる」事故が起きません。

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

  • 「Shift+Tab で6モード全部を順番に切り替えられる」と思い込む。違います。標準の cycle は defaultacceptEditsplan の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+TabbypassPermissions に切り替える、みたいな使い方ができる起動指定です
  • 「acceptEdits は全コマンド自動と勘違い」。違います。acceptEdits が黙って通すのはファイル編集と、mkdir touch rm rmdir mv cp sed の基本ファイル操作だけ。しかもその自動承認は、いま作業しているフォルダ working directory と、事前に additionalDirectories で許可したフォルダの中の書き換えに限られます。作業フォルダの外を書き換えようとした場合や、保護対象フォルダ protected paths への書き込みは、ちゃんと確認が出る。LANG=CNO_COLOR=1 を先頭につけたコマンド、timeout nice nohup で囲んだコマンドも、中身が許可リストの基本操作なら同じく自動承認の対象。逆に git commitnpm installcurl は依然として確認が出ます
  • 「auto は何でも黙って通す」と勘違い。違います。auto は裏で classifier が常時判定していて、curl | bash や本番デプロイ、クラウドストレージの一括削除、IAM や権限の変更、main への直 push、force push 等はデフォルトでブロックされます。「全部スルー」が欲しいなら bypassPermissions ですが、これは隔離環境専用
  • dontAsk を「acceptEdits の制限版」と誤解する。違います。dontAsk モードで動けるのは、permissions.allow ルールに合致する操作と、読み取り専用の Bash コマンド ls cat grep といったファイルを書き換えない系のものだけ。それ以外は全部拒否されます。CI や制限環境向け。手元で気軽に使うと「書き換え系を何やっても動かない」状態になります。「ちょっとだけ厳しくしたい」用途ではなく「完全に閉じた自動実行」用途
  • settings.jsondefaultMode と一致しないと困ると誤解する。一致は不要です。--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 でも自動承認されない

関連項目

公式ドキュメント

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

-

← 戻る