一行要約
6つのモードは「確認なしに何が走るか」の一次元で並んでおり、auto mode だけは分類器による審査という別の仕組みで動く。そしてどのモードでも protected paths への書き込みは自動承認されない(bypassPermissions を除く)。
要点
6つのモード
| モード | 確認なしに走るもの | 向く場面 |
|---|---|---|
default(CLI 表示は Manual) | 読み取りのみ | 使い始め、機微な作業 |
acceptEdits | 読み取り + ファイル編集 + よくあるファイルシステムコマンド(mkdir、touch、mv、cp など) | レビューしながら反復する作業 |
plan | 読み取り + auto mode が使えるなら分類器が承認したコマンド | 変更前のコードベース探索 |
auto | すべて(バックグラウンドの安全チェック付き) | 長いタスク、プロンプト疲れの軽減 |
dontAsk | 事前承認したツールのみ | ロックダウンした CI とスクリプト |
bypassPermissions | すべて | 隔離されたコンテナと VM でのみ |
Writes to protected paths are never auto-approved except in
bypassPermissionsmode 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+Tab で default → acceptEdits → plan を巡回する。ステータスバーの表示:
⏸ 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 の詳細
自動承認されるファイルシステムコマンド: mkdir、touch、rm、rmdir、mv、cp、sed。LANG=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 --hard、git checkout -- .、git restore .、git clean -fd、git stash drop、git stash clear(未コミットの変更を捨てると推定されるため)- トンネルやリバースシェルを開いてローカルサービスを公開インターネットに晒す
- 生の認証情報やトークンを transcript やファイルに出力する
--insecureのような安全機構を無効化するフラグ付きの実行--dangerously-skip-permissionsや--no-sandboxで人間の承認もサンドボックスもない自律エージェントループを起動する/tmpや$TMPDIRのファイルを、具体的なパス名ではなくワイルドカード・glob・経過時間フィルタで削除する- Claude Code 自身の tmux ペインにキーストロークを送って自分のインターフェースを操作する(自分の権限や監督を変更する行為と見なされる)
- セキュリティ挙動(認証、アクセス制御、入力検証、サンドボックス)を守るテストやアサーションのコメントアウト・削除・強制通過
~/.claude/projects/配下の.jsonltranscript への書き込み(読み取りはブロックされない)- 代入がどこにも見えないシェル変数を対象とする
rm -rf "$VAR"(値がコマンド出力由来で、分類器には検証できないため)
既定で許可されるもの:
- 作業ディレクトリ内のローカルファイル操作
- lock ファイルや manifest に宣言済みの依存関係のインストール
.envを読んで、対応する API に認証情報を送ること- 読み取り専用の HTTP リクエスト
- 作業中のリポジトリの任意のブランチへの push(デフォルトブランチを含む)。ただし
productionやgh-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)では、確認する相手がいないのでセッションが中断される。
拒否された操作は /permissions の Recently denied タブに出て、r を押すと手動承認でリトライできる。
dontAsk
確認を求めるはずのツール呼び出しをすべて自動拒否する。走るのは permissions.allow にマッチするもの、読み取り専用 bash コマンド、PreToolUse hook が承認したもののみ。AskUserQuestion も拒否される。
bypassPermissions
bypassPermissionsoffers 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.allowrules 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原典で言及されている関連文書
- claude-code-auto-mode — 分類器の内部設計と実測値
- how-claude-code-works — permission mode の概観と checkpoint
- claude-code-sandboxing — sandbox によるもう一方のアプローチ
- how-we-contain-claude — 環境層での封じ込め
- sub-agents — subagent の
permissionModeと親の優先
未取得の派生リンク
- https://code.claude.com/docs/en/permissions — permission rule の構文
- https://code.claude.com/docs/en/auto-mode-config — 信頼インフラの設定
- https://code.claude.com/docs/en/settings — 設定ファイル
- https://code.claude.com/docs/en/sandboxing — sandbox mode