一行要約

6つのモードは「確認なしに何が走るか」の一次元で並んでおり、auto mode だけは分類器による審査という別の仕組みで動く。そしてどのモードでも protected paths への書き込みは自動承認されないbypassPermissions を除く)。

要点

6つのモード

モード確認なしに走るもの向く場面
default(CLI 表示は Manual読み取りのみ使い始め、機微な作業
acceptEdits読み取り + ファイル編集 + よくあるファイルシステムコマンド(mkdirtouchmvcp など)レビューしながら反復する作業
plan読み取り + auto mode が使えるなら分類器が承認したコマンド変更前のコードベース探索
autoすべて(バックグラウンドの安全チェック付き)長いタスク、プロンプト疲れの軽減
dontAsk事前承認したツールのみロックダウンした CI とスクリプト
bypassPermissionsすべて隔離されたコンテナと VM でのみ

Writes to protected paths are never auto-approved except in bypassPermissions mode and in planning sessions with bypass permissions available. **保護されたパスへの書き込みが自動承認されることはない。**例外は bypassPermissions モードと、bypass permissions が使える計画セッションだけである。

モードは基準線を決めるだけ。 その上に permission rule を重ねる。次の3つはどのモードでも効くbypassPermissions を含む)。

  • deny rule と明示的な ask rule
  • 組織が設定したコネクタツールの ask
  • requiresUserInteraction マーカー

allow rule は bypassPermissions では意味がない(すでに全部承認されているため)。

モードの切り替え

Shift+TabdefaultacceptEditsplan を巡回する。ステータスバーの表示:

⏸ manual mode on          (グレー)
⏵⏵ accept edits on
⏸ plan mode on
⏵⏵ auto mode on
⏵⏵ don't ask on
⏵⏵ bypass permissions on

巡回に入らないモードがある:

  • auto — アカウントが要件を満たすと現れる
  • bypassPermissions--permission-mode bypassPermissions などで起動した後に現れる。--allow-dangerously-skip-permissions は巡回に加えるが有効化はしない
  • dontAsk巡回には決して現れない--permission-mode dontAsk で設定する

acceptEdits の詳細

自動承認されるファイルシステムコマンド: mkdirtouchrmrmdirmvcpsedLANG=C のような安全な環境変数の前置や、timeout / nice / nohup のようなプロセスラッパー越しでも自動承認される

ただし作業ディレクトリまたは additionalDirectories の中のパスに限る。 それ以外のパス、protected paths への書き込み、組み込みの読み取り専用セット以外の bash コマンドは依然として確認を求める。

plan mode の詳細

  • Shift+Tab または単発のプロンプトに /plan を前置して入る
  • useAutoModeDuringPlan 設定(既定でオン)があり、auto mode が使えるなら、計画中のシェルコマンドは確認ではなく分類器が審査する
  • Shift+Tab をもう一度押すと、計画を承認せずに抜けられる
  • Ctrl+G で提案された計画をエディタで開いて直接編集できる
  • 計画を承認するとセッション名が計画の内容から自動命名される--name/rename で既に付けていない場合)

承認時の選択肢:

  • Yes, and use auto mode — 承認して auto mode で開始(auto mode が使えないときは “Yes, auto-accept edits”)
  • Yes, manually approve edits — 承認して各編集を個別にレビュー
  • No, keep planning — plan mode に留まり、変更点を伝える

auto mode

A separate classifier model reviews actions before they run, blocking anything that escalates beyond your request, targets unrecognized infrastructure, or appears driven by hostile content Claude read. 別の classifier モデルが実行前に行為を審査し、依頼の範囲を超えて権限を広げるもの、認識されていないインフラを対象とするもの、Claude が読んだ敵対的な内容に駆動されていると見えるものをブロックする

分類器が信頼するのは、作業ディレクトリと、セッション開始時点で設定されていたリモート。 セッション中に git remote add / git remote set-url で追加・変更されたリモートは信頼されない

既定でブロックされるもの(抜粋):

  • curl | bash のようなコードのダウンロードと実行
  • 機微データの外部エンドポイントへの送信
  • 本番デプロイとマイグレーション、クラウドストレージの大量削除
  • IAM やリポジトリ権限の付与、共有インフラの変更
  • セッション開始前から存在したファイルの不可逆な破壊
  • force push
  • git reset --hardgit checkout -- .git restore .git clean -fdgit stash dropgit stash clear未コミットの変更を捨てると推定されるため
  • トンネルやリバースシェルを開いてローカルサービスを公開インターネットに晒す
  • 生の認証情報やトークンを transcript やファイルに出力する
  • --insecure のような安全機構を無効化するフラグ付きの実行
  • --dangerously-skip-permissions--no-sandbox で人間の承認もサンドボックスもない自律エージェントループを起動する
  • /tmp$TMPDIR のファイルを、具体的なパス名ではなくワイルドカード・glob・経過時間フィルタで削除する
  • Claude Code 自身の tmux ペインにキーストロークを送って自分のインターフェースを操作する(自分の権限や監督を変更する行為と見なされる)
  • セキュリティ挙動(認証、アクセス制御、入力検証、サンドボックス)を守るテストやアサーションのコメントアウト・削除・強制通過
  • ~/.claude/projects/ 配下の .jsonl transcript への書き込み(読み取りはブロックされない)
  • 代入がどこにも見えないシェル変数を対象とする rm -rf "$VAR"(値がコマンド出力由来で、分類器には検証できないため)

既定で許可されるもの:

  • 作業ディレクトリ内のローカルファイル操作
  • lock ファイルや manifest に宣言済みの依存関係のインストール
  • .env を読んで、対応する API に認証情報を送ること
  • 読み取り専用の HTTP リクエスト
  • 作業中のリポジトリの任意のブランチへの push(デフォルトブランチを含む)。ただし productiongh-pages のようにデプロイ / 公開先と分かる名前のブランチは別途判断される
  • エージェント同士のメッセージ
  • environment に列挙した信頼済みドメイン・バケット・サービスへのデータ送信

会話で述べた境界

The classifier treats boundaries you state in the conversation as a block signal. If you tell Claude “don’t push” or “wait until I review before deploying”, the classifier blocks matching actions even when the default rules would allow them. A boundary stays in force until you lift it in a later message. Claude’s own judgment that a condition was met does not lift it. classifier は、会話の中であなたが述べた境界をブロックの信号として扱う。「push するな」「レビューするまでデプロイを待て」と Claude に伝えると、classifier は該当する動作を、既定のルールなら許可する場合であってもブロックする。この境界は、後のメッセージであなたが解除するまで効力を持ち続ける。条件が満たされたという Claude 自身の判断では解除されない。

ただし境界はルールとして保存されない。 分類器は毎回 transcript から読み直すので、context compaction でその発言が消えると境界も失われる。確実にしたいなら deny rule を書く。

auto mode のフォールバック

連続3回、または合計20回ブロックされると auto mode が一時停止し、確認プロンプトに戻る。この閾値は設定できない。 許可された操作があると連続カウンタはリセットされるが、合計カウンタはセッション中持続する

非対話モード(-p)では、確認する相手がいないのでセッションが中断される

拒否された操作は /permissionsRecently denied タブに出て、r を押すと手動承認でリトライできる

dontAsk

確認を求めるはずのツール呼び出しをすべて自動拒否する。走るのは permissions.allow にマッチするもの、読み取り専用 bash コマンド、PreToolUse hook が承認したもののみ。AskUserQuestion も拒否される。

bypassPermissions

bypassPermissions offers no protection against prompt injection or unintended actions. bypassPermissions は、prompt injection や意図しない動作に対して何の防御にもならない。

それでも確認が出るもの:

  • 明示的な ask rule、組織が ask にしたコネクタツール、requiresUserInteraction の MCP ツール
  • rm -rf /rm -rf ~(モデルのエラーに対する circuit breaker)。コマンド置換 $(...) やプロセス置換 <(...) の中に入っていても発火する
  • cross-session messaging の isolatePeerMachines 承認

制約:

  • 有効化せずに始めたセッションから途中で入ることはできない
  • 初回は責任を引き受ける警告ダイアログが出る(断ると Claude Code は終了する
  • Linux / macOS で root や sudo の下では起動を拒否する(認識されたサンドボックス内ではスキップされる)
  • Claude Code on the web は設定ファイルの bypassPermissions / dontAsk を honor しない(リポジトリにコミットされた設定でクラウドセッションを bypass にできないようにするため)

protected paths

モードprotected path への書き込み
default, acceptEdits確認
plan確認(bypass 可能なセッションでは許可、auto mode が使えるなら分類器へ)
auto分類器へ
dontAsk拒否
bypassPermissions許可

permissions.allow rules in settings files do not pre-approve protected-path writes. The safety check runs before Claude Code evaluates allow rules. 設定ファイル内の permissions.allow ルールは、保護されたパスへの書き込みを事前承認しない。安全性のチェックは、Claude Code が allow ルールを評価する前に走る。

保護ディレクトリ: .git, .config/git, .vscode, .idea, .husky, .cargo, .devcontainer, .yarn, .mvn, .claude.claude/worktrees は除く

保護ファイル: .gitconfig, .gitmodules / シェル起動ファイル各種(.bashrc, .zshrc, .profile, .envrc ほか)/ パッケージマネージャ設定(.npmrc, .yarnrc, bunfig.toml ほか)/ .bazelrc 系 / .pre-commit-config.yaml, lefthook.* / gradle-wrapper.properties, maven-wrapper.properties / .devcontainer.json / .ripgreprc, pyrightconfig.json / .mcp.json, .claude.json

そのまま使える具体例

起動時にモードを指定する:

claude --permission-mode plan
claude --permission-mode acceptEdits
claude --permission-mode dontAsk
claude --permission-mode bypassPermissions   # == --dangerously-skip-permissions

プロジェクトの既定を plan にする(.claude/settings.json):

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

auto を既定にするなら ~/.claude/settings.json に置く.claude/settings.json からは無視される — リポジトリが自分に auto mode を付与できないようにするため):

{
  "permissions": {
    "defaultMode": "auto"
  }
}

分類器の既定ルール全文を見る:

claude auto-mode defaults

組織として無効化する(managed settings):

{
  "permissions": {
    "disableAutoMode": "disable",
    "disableBypassPermissionsMode": "disable"
  }
}

会話で境界を宣言する(分類器がブロック信号として扱う):

don't push
wait until I review before deploying

原典で言及されている関連文書

未取得の派生リンク