何のためのものか
Claude がファイル編集・シェルコマンド実行・ネットワークリクエストの前に確認を求める頻度を決めるモード。モードは基準を決めるだけで、permission rule を重ねて特定のツールを事前承認・ブロックできる。
触る
Shift+Tab を押して一周させる。既定の循環は default → acceptEdits → plan。
| モード | 確認なしで実行されるもの |
|---|---|
default | 読み取りのみ |
acceptEdits | 読み取り、ファイル編集、mkdir / touch / mv / cp などの一般的なファイルシステムコマンド |
plan | 読み取り。auto mode が利用可能な場合は classifier が承認したコマンドも |
auto | すべて(バックグラウンドの安全チェック付き) |
dontAsk | 事前承認済みのツールのみ |
bypassPermissions | すべて |
default は UI 上 Manual と表示される。設定値は default で、hooks と SDK 統合はこちらを使う。
入れる
作業の種類ごとに、どこから始めるかを決める。
- 調査・設計から入るとき —
plan。Claude は調べて提案するが変更しない。Shift+Tab、プロンプト先頭の/plan、claude --permission-mode planのどれでも入れる。計画提示時に Yes, and use auto mode / Yes, manually approve edits / No, keep planning から選ぶ - 書かせると決めたあと —
acceptEdits。自動承認は作業ディレクトリまたはadditionalDirectories内のパスに限られる - 既定を固定する — settings の
permissions.defaultMode、1 セッションだけなら--permission-mode
auto は classifier モデルが実行前に行動をレビューする。defaultMode: "auto" を .claude/settings.json や .claude/settings.local.json に書いても無視される(リポジトリが自分自身に auto mode を与えられないようにするため)。~/.claude/settings.json に置く。
効かせる
モードでは緩められないものを知る。ここが分かると、勝手に止まる理由が読める。
- protected paths —
.git、.claude、.vscode、.bashrc、.npmrc、.mcp.jsonなどへの書き込みは、bypassPermissionsを除いて自動承認されない。permissions.allowルールを書いても事前承認にならない(安全チェックが allow ルール評価より前に走る) - deny ルールと明示的な ask ルール —
bypassPermissionsを含むすべてのモードで適用される - 会話で述べた境界 — 「push しないで」のような発言を classifier はブロック信号として扱う。ただし保存されず、context compaction で失われる。確実に守らせたいなら deny ルールにする
- 止まったときの辿り方 — 拒否された行動は
/permissionsの Recently denied タブに出る。rで手動承認して再試行できる
auto mode には自動停止がある。classifier が 3 回連続、または累計 20 回ブロックすると一時停止してプロンプトを出す状態に戻る(閾値は設定できない)。
落とし穴
bypassPermissionsは prompt injection への保護を提供しない。 分離されたコンテナ・VM・インターネットに接続しない dev container でのみ使う。root /sudoでの起動は拒否されるbypassPermissionsには後から入れない。 起動時にpermissions.defaultMode: "bypassPermissions"かフラグで有効にしたセッションでのみ循環に現れる- auto mode に入ると広い allow ルールが落ちる。
Bash(*)やワイルドカード付きインタプリタは無効化され、Bash(npm test)のような狭いルールだけが引き継がれる(抜けると復元される) - auto mode が「使えない」と言われたら要件未達で、待っても直らない。 一方 "cannot determine the safety" は classifier リクエストの失敗で、通常は一時的
dontAskは循環に現れない。--permission-mode dontAskで入る。本来プロンプトを出す呼び出しはすべて自動拒否される