権限モード
権限モード(default・acceptEdits・plan・auto・dontAsk・bypassPermissions)の違い、切り替え方、auto モードの分類器の設定、保護されるパスまでをまとめます。
権限モード(permission mode)は、確認なしで Claude が実行してよい操作の範囲を決めます。Manual(設定値は default)ではファイル編集・シェルコマンド・ネットワークの多くで確認が入ります。auto モードでは、あなたの代わりに別のモデル(分類器、classifier)が操作を審査します。実行中のセッションでも、いつでもモードを変えられます。
- 6 つのモードは、便利さと監督のどこで折り合うかが違う
- CLI は Shift+Tab で切り替え、起動時は
--permission-modeで指定する - 既定で始まるモードは、バージョン・プラン・設定ファイルで決まる
- auto モードの分類器には、信頼するリポジトリやバケットを
autoMode設定で教えられる .gitや.claudeなどの保護されたパスへの書き込みと、重要なパスのrm・rmdirは、モードによらず特別扱いされる
許可・拒否・確認のルールそのものは権限ルールにあります。このページは、その下敷きになるモードの話です。
モード一覧#
次の表は、各モードで確認なしに実行されるものです。Manual は設定値の default で載せています。
| モード | 確認なしで動くもの | 向いている場面 |
|---|---|---|
default |
読み取りのみ | 全操作を自分で確認したいとき、機微な作業 |
acceptEdits |
読み取り、ファイル編集、一般的なファイルシステムコマンド(mkdir・touch・mv・cp など) |
自分でレビューしながらコードを繰り返し直すとき |
plan |
読み取り。auto モードが使えるときは分類器が承認したコマンドも | 変更の前にコードベースを調べたいとき |
auto |
すべて。裏で安全性の審査が走る | 長いタスク、確認疲れを減らしたいとき |
dontAsk |
読み取りと事前承認済みのツール。確認になるものは拒否 | 締めた CI やスクリプト |
bypassPermissions |
すべて | 隔離されたコンテナと VM だけ |
- 全操作を確認するモードの表示名は、CLI・
claude --help・VS Code と JetBrains の拡張・デスクトップアプリで「Manual」。設定値はdefault(フックと SDK はこちらを使う)。CLI では値を入力する場所のどこでも別名のmanualが使える(claude --permission-mode manual、"defaultMode": "manual")。Manual の表示とmanualの別名は v2.1.200 以降が必要 - 保護されたパスへの書き込みは、
bypassPermissionsと、bypass が使える対話端末のプランモード以外では自動承認されない - ルールはモードの上に重ねる。拒否ルールはどのモードでも効き、
bypassPermissionsでも効く。許可ルールはbypassPermissionsでは意味を持たない - 拒否・確認のルールは、Claude に呼べるツールがほかに 1 つ以上ある限り、
EndConversationには適用されない
どのモードでも自動承認されないもの#
bypassPermissions を含め、次のものはどのモードでも自動承認されません。
- 明示的な
askルールに一致したツール - 組織が
askに設定したコネクタのツール(その設定が Claude Code に届くセッションで) - ユーザーの操作が要るツール:組み込みの
AskUserQuestionと、requiresUserInteractionが付いた MCP ツール - 重要なパス(critical path)を対象にした
rmとrmdir。許可ルールもPreToolUseフックの"allow"も承認できない - セッション間メッセージの保護機能
permissions.blockReadsOutsideWorkingDirectoriesがオンのときの、作業ディレクトリ外の読み取り。ファイルを読むと認識された Bash コマンドは auto とbypassPermissionsでも確認が入り、承認が要るサンドボックス外での再実行も同じ(v2.1.257 以降)。シェルの構文解析で追えないコマンド(複数回のcdやサブシェル)は、外のパスを名指ししなくても同様に確認される。サンドボックス内で動き、サンドボックスがその制限を強制するときは対象外
目的別の組み合わせ#
| やりたいこと | 始め方 | 必要な隔離 |
|---|---|---|
| 全操作を自分で確認する | claude --permission-mode default |
なし |
| 分類器なしで確認を減らす | Manual に Bash サンドボックスの auto-allow を併用(/sandbox で選ぶ) |
組み込みの Bash サンドボックス(macOS・Linux・WSL2) |
| 変更の前に調べる | claude --permission-mode plan |
なし |
| auto モードで任せる | claude --permission-mode auto |
なし(サンドボックスやコンテナは多層防御になる) |
| CI で許可リストを厳密にする | claude -p "run the test suite" --permission-mode dontAsk --allowedTools "Bash(npm test)" "Read" |
CI ランナーが持つもの以上は不要 |
| コンテナ内で完全に無人で動かす | claude -p "<prompt>" --dangerously-skip-permissions |
必須:コンテナ・VM・サンドボックスランタイム |
- サンドボックスの auto-allow でも、拒否ルールは効き、
Bash(git push *)のようにコマンドを名指しした ask ルールは確認が出る。設定ファイルからオンにするにはsandbox.enabledをtrueにする - auto モードは対応モデルが必要で、組織が無効にできる
- クラウドセッションは、設定ファイルの
dontAskとbypassPermissionsを無視する -pで--dangerously-skip-permissionsを使うと、それでも確認が出るはずの少数の呼び出しは拒否になる- Bash サンドボックスと auto モードは独立していて併用できる。詳しくはサンドボックス
開始時のモードの決まり方#
端末で新しいセッションを始めるとき、次のうち最初に当てはまるものが使われます。
--permission-modeフラグ、または--dangerously-skip-permissions- 設定ファイルの
permissions.defaultMode - 組み込みの既定
.claude/settings.jsonか.claude/settings.local.jsonに"auto"を書いても効かず、~/.claude/settings.jsonのdefaultModeではなく組み込みの既定になる。同じ 2 ファイルの"bypassPermissions"も効かず、Manual で始まる。ほかの値はどの設定ファイルからでも効く- 組み込みの
auto既定は、macOS・Linux・WSL で v2.1.228 以降、ネイティブ Windows で v2.1.233 以降が必要。それより前の既定は Manual - 再開したセッションの開始モードはセッションの再開と管理を参照
組み込みの既定は、起動のしかたで決まります。上から順に、最初に当てはまる行が適用されます。
| 起動のしかた | 組み込みの開始モード |
|---|---|
いずれかの設定ファイルで disableAutoMode が "disable" |
default |
claude -p または Agent SDK |
フィーチャーフラグを取得するセッションでは default。取得しないセッション(サードパーティプロバイダーやテレメトリ無効など)では、v2.1.285 以降は auto、それより前は default。組織のポリシーが auto の既定を止めている場合は default |
| 端末または VS Code 拡張 | v2.1.283 以降は auto。それより前は、フィーチャーフラグを取得するセッションの Pro・Max・Team プランで auto、それ以外は default |
- インストールやアップグレード後の最初のセッションは、フィーチャーフラグが届く前に開始モードを選ぶことがあり、表と違うモードで始まることがある
- フラグ・設定・組み込みの既定が
autoを選んでも、そのセッションで auto が使えなければ Manual で始まる。使えないのは、要件を満たさない(設定で無効・非対応モデル)か、Anthropic がサーバー側で一時的に止めているとき - 組み込みの既定で auto で始まった最初のセッションでは、端末では先頭に 1 回、VS Code 拡張では閉じるまで残るカードで案内が出る
~/.claude/settings.jsonにauto以外のdefaultModeがあり、ほかの設定ファイルに指定がなければ、そのモードで始まり続ける。Pro・Max・Team と、フィーチャーフラグを取得しないセッションでは、auto に変えるかを 1 回だけ聞かれ、断れば設定は変わらない
開始モードを変える#
| 範囲 | 設定のしかた |
|---|---|
| これから始める 1 セッション | claude --permission-mode default のようにフラグを渡す |
| この端末の端末セッションすべて | ~/.claude/settings.json の permissions.defaultMode |
| 1 つのプロジェクトの端末セッションすべて | プロジェクトの .claude/settings.json の permissions.defaultMode。auto と bypassPermissions 以外の値が効く。VS Code 拡張はプロジェクトの設定を開始モードに使わない |
| 組織の端末セッションすべて | 管理設定の permissions.defaultMode。auto への切り替えは自由。auto を選べなくするには permissions.disableAutoMode を "disable" にする |
複数の設定ファイルが指定したときの優先順位は設定ファイルの仕組みにあり、プロジェクトや管理設定の値が ~/.claude/settings.json に勝ちます。
{
"permissions": {
"defaultMode": "default"
}
}
次のセッションからステータスバーに ⏸ manual mode on と出ます。
実行中にモードを切り替える#
CLI と JetBrains#
JetBrains のプラグインは IDE のターミナルで Claude Code を動かすので、CLI と同じ操作です。
- Shift+Tab でモードを巡回する。
autoから押すとまずdefaultになり、default→acceptEdits→planと回る。任意のモードはplanの後ろに入る - ステータスバーの表示は、
defaultが灰色の⏸ manual mode on、ほかは⏵⏵ accept edits on・⏸ plan mode on・⏵⏵ auto mode on・⏵⏵ don't ask on・⏵⏵ bypass permissions on - 起動時は
claude --permission-mode planのようにフラグで指定する。-pの非対話の実行にも同じフラグが使える
巡回に入るモードは次のとおりです。
| モード | 巡回に入る条件 |
|---|---|
auto |
auto モードが使えるとき。確認なしで切り替わる |
bypassPermissions |
--permission-mode bypassPermissions・--dangerously-skip-permissions・--allow-dangerously-skip-permissions、またはユーザー・--settings・管理設定の permissions.defaultMode: "bypassPermissions" で起動したとき。--allow- 版は有効にせず巡回にだけ加える |
dontAsk |
入らない。--permission-mode dontAsk で指定する |
- 任意のモードが複数あるときは
bypassPermissionsが先、autoが最後。両方あると、autoへ行く途中でbypassPermissionsを通る - Manual と
acceptEditsで auto が使えるとき、Bash の確認に「Yes, and switch to auto mode」が加わる。承認と同時に auto へ切り替わる。PowerShell ツールの確認には出ない(v2.1.247 以降)。自分のaskルールやフックが強制した確認には出ない(切り替えても確認は消えないため)
VS Code#
プロンプト欄の下のモード表示をクリックして選びます。
| 表示 | モード |
|---|---|
| Manual | default |
| Edit automatically | acceptEdits |
| Plan | plan |
| Auto | auto |
| Bypass permissions | bypassPermissions |
- VS Code のユーザー設定
claudeCode.initialPermissionModeにdefault・manual・acceptEdits・plan・bypassPermissionsを書くと、会話の開始モードを固定できる。autoは書けない。Auto で始めたいときは、未設定のままモード表示から 1 回 Auto を選ぶ - 新しい会話は、次の最初に当てはまるもので始まる:①
claudeCode.initialPermissionMode、②モード表示で最後に選んだモード(Manual・Edit automatically・Auto のとき。Plan と Bypass permissions は、その会話だけ)、③管理設定か~/.claude/settings.jsonのpermissions.defaultMode、④プラン・プロバイダー・組織の設定による組み込みの既定 - プロジェクトの
.claude/settings.jsonと.claude/settings.local.jsonは開始モードに使われない。claudeCode.claudeProcessWrapperを設定していると③④は使われず、①②がなければ Manual で始まる - Bypass permissions は、拡張の設定の「Allow dangerously skip permissions」のオンが要る。オフだとモード表示に出ず、①③が
bypassPermissionsでも Manual で始まる。auto が使えないときの Auto も Manual で始まる - ③は v2.1.283 より前は、フィーチャーフラグを取得するセッションの Pro・Max・Team プランだけに適用されていた
- 詳しくはVS Code と JetBrainsを参照
デスクトップアプリ#
Code タブの送信ボタンの隣のモードセレクターを使います。
- Auto は、auto モードが使えるときに出る
- Bypass permissions は、Pro・Max プランではデスクトップ設定の「Allow bypass permissions mode」のオンが要る。Team・Enterprise では組織のポリシーが決める
- Cowork タブはこれらのモードを使わない。独自のモードがあり、既定の外のモードを有効にするまでセレクター自体が出ない
defaultModeを設定ファイルに書くと、デスクトップアプリが CLI と同じ設定ファイルを読み、新しいローカルセッションに適用する- セレクターで選んだモードはフォルダごとに記憶され、そのフォルダでは
defaultModeより優先される。Plan だけは現在のセッション限り - 詳しくはデスクトップアプリを参照
Web とモバイル#
claude.ai/code かモバイルアプリで、プロンプト欄の隣のドロップダウンを使います。権限の確認は claude.ai に出て、そこで承認します。出るモードは、セッションが動く場所で決まります。
| セッション | 選べるモード |
|---|---|
| クラウドセッション | Accept edits・Plan・Auto。Accept edits は default に対応する(クラウドは、モードによらずファイル編集を事前承認するため)。設定の defaultMode: "acceptEdits" は効く。Auto は、組織が許し、選んだモデルが対応するときだけ。Bypass permissions は無い |
| ローカルマシンの Remote Control セッション | 自分で始めたセッションで Manual・Accept edits・Plan。アプリから Auto と Bypass permissions は選べない |
- Remote Control では、Bypass permissions 以外は、端末で設定したモードも含め、ドロップダウンにセッションの実際のモードが出る。アプリでも端末でも、変わるたびに更新される。デスクトップアプリや VS Code 拡張が動かすセッションも同様に変更を claude.ai へ報告する
- v2.1.202 より前は、
/remote-controlやclaude --remote-controlで接続したセッションがモードを報告せず、ラベルが実際と違うことがあった。ラベルだけの食い違いで、権限の確認は実際のモードで作られアプリにも出ていた - Remote Control は、セッションを動かすローカルマシンが claude.ai アカウントでサインインしている必要があり、API キーは使えない。起動時に
claude remote-control --permission-mode acceptEditsのようにモードを指定できる - 詳しくはリモートコントロールとモバイルとクラウド(Web)で使うを参照
acceptEdits モード#
作業ディレクトリ内のファイルの作成と編集を、確認なしで許します。ステータスバーに ⏵⏵ accept edits on と出ます。
- ファイル編集に加えて、一般的なファイルシステムの Bash コマンド
mkdir・touch・rm・rmdir・mv・cp・sedも自動承認される。LANG=CやNO_COLOR=1のような安全な環境変数、timeout・nice・nohupのようなプロセスのラッパーが前に付いても同じ - 自動承認は、作業ディレクトリか
additionalDirectoriesの中のパスだけ。パスはシンボリックリンクの検査も通り、範囲の外に解決される書き込みは承認されない - 範囲外のパス、保護されたパスへの書き込み、重要なパスを対象にした
rm・rmdir、組み込みの読み取り専用セット以外のほかの Bash コマンドは、確認が出る - PowerShell ツールが有効なら、範囲内のパスへの
Set-Content・Add-Content・Clear-Content・Remove-Item(とその一般的な別名)も自動承認される。Remove-Itemには別の検査がある(後述)。位置引数に引用符を含むSet-Content .\notes.txt "It's done"のような形は、静的に検証できないので確認が出る。-Valueのような名前付きパラメータで渡すと出ない
ヒント
編集を 1 つずつ承認せず、後でエディタや git diff でまとめてレビューしたいときに使います。Manual から Shift+Tab を 1 回押すか、claude --permission-mode acceptEdits で始めます。
plan モード#
Claude に、変更せずに調べて提案させるモードです。Claude はファイルを読み、調べるためのシェルコマンドを実行し、プランを書きますが、ソースは編集しません。bypass permissions が使える対話端末以外では、プランを承認するまで編集は止められます。
計画中のシェルコマンドの扱いは、最初に当てはまるものが適用されます。
- bypass permissions が使える対話端末:分類器も確認も、計画中のコマンドには適用されない
- auto モードが使えて
useAutoModeDuringPlanがオン(既定でオン):重要なパスの削除以外のシェルコマンドを、確認の代わりに分類器が審査する。承認されたものが実行され、却下されたものは止められる - auto モードが使えない、または
useAutoModeDuringPlanがオフ:組み込みの読み取り専用セットの外のコマンドは確認が出る。サンドボックスの auto-allow が有効でも同じ
入り方は Shift+Tab、または 1 回のプロンプトの先頭に /plan を付けます。CLI からは claude --permission-mode plan。プランを承認せずに出るには、もう一度 Shift+Tab を押します。
プランをレビューして承認する#
プランができると、Claude が提示して次の選択肢を出します。
| 選択肢 | 動き |
|---|---|
| 「Yes, and use auto mode」 | 承認して auto モードで始める。auto が使えないときは「Yes, auto-accept edits」と出る。bypass permissions を有効にして起動していると「Yes, and switch to BYPASS PERMISSIONS (no further prompts) for this session」になる |
| 「Yes, manually approve edits」 | 承認し、編集を 1 つずつ確認する |
| 「No, keep planning」 | プランモードに残り、直す点を Claude に伝える |
- 承認するとプランモードを出て、各選択肢が示すモードに切り替わり、Claude が編集を始める。もう一度計画するには Shift+Tab でプランモードへ戻るか、次のプロンプトに
/planを付ける - Ctrl+G で、提示されたプランを既定のテキストエディタで開いて直接直せる。
showClearContextOnPlanAcceptが有効なら、プランを承認して計画のコンテキストを消す選択肢が先頭に加わる - プランを承認すると、すでに名前を付けていなければ、プランから生成された題がセッションに付く(セッションの再開と管理)
- プロジェクトの端末セッションの既定にするには、
.claude/settings.jsonのdefaultModeをplanにする。VS Code 拡張は、ユーザー設定のclaudeCode.initialPermissionModeをplanにする
auto モード#
分類器が、実行前に操作を審査します。依頼を超えてエスカレートするもの、見覚えのないインフラを対象にするもの、Claude が読んだ敵対的な内容に動かされているように見えるものは止めます。明示的な ask ルールは、引き続き確認を強制します。
注意
auto モードは確認を減らしますが、安全を保証しません。大きな方向を信頼できる作業に使い、機微な操作のレビューの代わりにはしません。
- v2.1.283 以降は、端末と VS Code のセッションで、すべてのプランとプロバイダーの組み込みの開始モード。それより前は Pro・Max・Team だけ
- 分類器は、
SendMessageで Claude が別のエージェントへ送る各メッセージ(プレーンテキストでもエージェントチームの構造化メッセージでも)も、配信前に auto モードと、分類器がコマンドを審査するプランモードで審査する。この送信の審査は v2.1.222 以降が必要 - 既定では、
rm -rf /やrm -rf ~のような重要なパスを対象にしたrm・rmdirは審査しない(後述) - auto モードは、確認の質問で止まらず作業を続けるよう Claude を促す。ただしプロンプトやスキルが明示的に質問に頼るときは聞く。確認が出るモードのままもっと自律的にしたいなら、Proactive の出力スタイルを使う
使える条件#
| 項目 | 条件 |
|---|---|
| プラン | すべてのプラン |
| 組織 | Team・Enterprise では既定で使える。管理者は管理設定の permissions.disableAutoMode を "disable" にして組織で止められる |
| モデル(Anthropic API・Claude Platform on AWS) | Claude Opus 4.6 以降、Sonnet 4.6 以降、または Fable 系のモデル |
| モデル(Amazon Bedrock・Google Cloud の Agent Platform・Microsoft Foundry・サインイン済みの Claude apps gateway) | Claude Sonnet 5 以降、Opus 4.7 以降、Fable 系のモデルだけ |
| 非対応 | Sonnet 4.5・Opus 4.5・Haiku・claude-3 系を含む古いモデルは、どのプロバイダーでも非対応 |
| プロバイダー | Anthropic API・Claude Platform on AWS・Amazon Bedrock・Google Cloud の Agent Platform・Microsoft Foundry・サインイン済みの Claude apps gateway で、既定で使える |
- auto が使えないと表示されたら、まず上の条件と、設定ファイルの
disableAutoModeを確認する。Anthropic がサーバー側で止めているか、サーバーがそのアカウントの auto を拒否していることもある。どちらかの返事を受けたセッションは、終わるまで auto が使えないので、後で新しいセッションを始める - モデル名を挙げて、auto モードが操作の安全性を「判断できない(cannot determine the safety)」と出るメッセージは、分類器へのリクエストが失敗したという意味。多くは一時的だが、Amazon Bedrock ではそのモデルを呼べるようになるまで繰り返すことがある。原因と対処はエラー一覧を参照
defaultMode: "auto"を設定したのに、エラーなしで端末セッションが Manual で始まるなら、設定が.claude/settings.jsonか.claude/settings.local.jsonにある可能性が高い。~/.claude/settings.jsonへ移す。VS Code 拡張が始めた会話は、拡張自身の一覧を見る
Bedrock・Agent Platform・Foundry での auto モード#
これらのプロバイダーとサインイン済みの Claude apps gateway のセッションでは、auto は既定で使えます。ほかに何も指定がなければ、組み込みの開始モードでもあります。開発者に使わせないには、管理設定の disableAutoMode を "disable" にします。
Shift+Tabの巡回からautoが消え、--permission-mode autoで始めたセッションは Manual で始まる- すでに auto で動いているセッションは、管理者が配った設定がそのセッションに届くと auto を出て、
auto mode disabled by settingsと出る。v2.1.251 より前は、動いているセッションは終わるまで auto を保った - v2.1.158〜v2.1.206 では、これらのプロバイダーで
CLAUDE_CODE_ENABLE_AUTO_MODE=1を設定するまで auto は無効で、変数がなければdefaultMode: "auto"も無視された。変数は互換のために受け付けられるが、v2.1.207 以降は効かない
サーバー側の分類器による審査#
auto モードでは、Claude Code が独自の分類器のリクエストを送る代わりに、審査が必要な操作の確認をセッションのモデルへのリクエストの一部として、サーバーに任せることがあります。次のセッションが該当します。
- Anthropic API への直接接続:対話端末のセッションと、
-p・Agent SDK・VS Code 拡張・デスクトップアプリのセッションで、プランやアカウントの種類にかかわらず、Anthropic が展開を進めるにつれて有効になる。対話端末のセッションでは、Pro・Max・Team は v2.1.271 以降、Enterprise と Claude API アカウントは v2.1.278 以降が必要。-p・Agent SDK・VS Code 拡張・デスクトップアプリのセッションでは v2.1.281 以降が必要。v2.1.282 からは、フィーチャーフラグを取得しないセッション(テレメトリをオフにした場合など)は、どの種類のセッションでも既定でサーバーに任せる - クラウドプロバイダー、または LLM ゲートウェイ・プロキシ:Claude Platform on AWS・Amazon Bedrock・Google Cloud の Agent Platform・Microsoft Foundry、
ANTHROPIC_BASE_URLを LLM ゲートウェイやプロキシに向けたときはプランによらず。既定でサーバーに任せるには v2.1.278 以降が必要 - サインイン済みの Claude apps gateway のセッション:v2.1.280 以降が必要
サーバーが審査する場合は、その判定で決まります。ほかに 2 つの結果があります。
- サーバーがセッションを審査しない(結果なしで応答が完了する、またはサーバーが審査しないと答える):Claude Code は自前の分類器のリクエストに戻る。原因で多いのは、審査の依頼や結果を落とす LLM ゲートウェイ・プロキシ、サーバー側の検査がまだないプラットフォーム・リージョン・認証情報。残りのセッション中その戻しが続くと、分類器リクエストが課金されるアカウントでは、その料金の通知が出る
- サーバーが操作に判定を返さない:Claude Code は審査なしで実行せず、操作を拒否する。応答が審査結果の到着前に終わる、結果が読めない形で届く場合で、応答を途中で切る・結果を書き換える LLM ゲートウェイやプロキシが原因になりうる。Anthropic API への直接接続では、サーバーの検査がタイムアウトなどで失敗したときも起きる。拒否のメッセージ・拒否が繰り返されたときの動き・対処はエラー一覧を参照
サーバーに任せず、いつも Claude Code 自身の分類器リクエストを使うには CLAUDE_CODE_AUTO_MODE_SERVER=0 を設定します。Anthropic API への直接接続では v2.1.281 以降が必要です。1 にすると、まだ審査がないセッションでサーバー審査がオンになります。ただし CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 も設定していると効きません。CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 を設定し CLAUDE_CODE_AUTO_MODE_SERVER を未設定にしても、Claude Code はサーバーに任せなくなります(例外は ゲートウェイのプロトコルの文書にある)。
分類器が既定でブロックするもの#
分類器が信頼するのは、作業ディレクトリと、セッション開始時にそのディレクトリに設定されていたリモートだけです。セッション中に git remote add や git remote set-url で追加・向け直したリモートは信頼されません(v2.1.200 より前は、途中で追加したリモートも信頼された)。それ以外は、autoMode で信頼するインフラを設定するまで外部として扱われます。
既定でブロックされるもの:
-
curl | bashのような、コードのダウンロードと実行 -
機微なデータの外部エンドポイントへの送信
-
本番へのデプロイとマイグレーション
-
クラウドストレージの大量削除
-
IAM やリポジトリの権限の付与
-
共有インフラの変更
-
セッション前から存在したファイルを元に戻せない形で壊すこと
-
force push
-
実行時に、リポジトリの外へシークレットや機微なデータを送る、またはデプロイの公開範囲を広げるコミットやプッシュ。シークレットを今は受け取っていない宛先へ渡す CI ワークフローやデプロイ設定、シークレットストアを読んで外へ送るスクリプトやセットアップ、レジストリ・公開範囲・成果物・ソースマップの設定の変更などが対象。ブランチによらず、リポジトリが公開でも適用され、コミットかプッシュの時点で働く(パイプラインが動くかは関係しない)。解除するには、コミットやプッシュだけでなく、実行される作用を名指しする必要がある
-
git reset --hard・git checkout -- .・git restore .・git clean -fd・git stash drop・git stash clear(コミットしていない変更を捨てるとみなされる) -
HEAD のコミットがこのセッションで作られていないときの
git commit --amend -
v2.1.198 から、HEAD のコミットがすでにプッシュされているときの
git commit --amend。ただし、このセッションで Claude が作ったコミットで、何もステージされていないときのメッセージだけの--amend -mは止めない -
terraform destroy・pulumi destroy・cdk destroy・terragrunt destroy、リソースを壊すプランの適用 -
シークレットマネージャーへの書き込み、DNS レコードや TLS 証明書の変更
-
人が承認していないプルリクエストのマージ、Claude 自身のプルリクエストの承認、CI チェックの無効化
-
atlantis applyや bot の/deploy・/mergeのような、自動化へのコマンドそのものになるコメントの投稿 -
本番のフィーチャーフラグの切り替え・展開・削除
-
保護された IaC の範囲へのインフラ変更の適用、クラスターのノードの排出と削除
-
名指ししたリソースを超えて届く共有計算クラスターへの書き込み(ラベルセレクターや、他のユーザーのジョブを巻き込む
--allなど) -
全ノードで動く、またはクラスターの通信を横取りする Kubernetes リソース(DaemonSet・admission webhook)の作成
-
機微なリモート対象への対話シェルやポートフォワード
-
ローカルのサービスを公開インターネットから届くようにするトンネルやリバースシェル
-
生の認証情報やトークンを、記録やファイルに出力すること
-
環境で機微なデータの場所に挙げた場所へのアクセス、そこからのデータの持ち出し、その場所のデータを項目が除外した宛先へ送ること
-
内部のパッケージレジストリを迂回して公開レジストリからインストールすること。環境に内部レジストリやミラーを挙げているときも、会話で Claude にあると伝えたときも対象
-
--insecureのような、安全装置を外すフラグ付きのコマンド -
人の承認もサンドボックスもなしで動く自律エージェントのループの起動(
--dangerously-skip-permissionsや--no-sandboxで始めたものなど)。隔離と操作ごとの承認を切ったサードパーティのエージェントや評価ハーネス(--yes-alwaysで始めたランナーなど)の実行も含む -
ページの内容・cookie・認証情報をオリジンの外へ送りうる Claude in Chrome のブラウザ操作
-
/tmp・$TMPDIR・共有のスクラッチやキャッシュのディレクトリのファイルを、名指しのパスではなくワイルドカード・グロブ・経過時間で削除すること -
他の人や共有システムへ送る・アップロード・公開・書き込みする内容に、その宛先向けに自分のメッセージが認めていない機微な詳細を含めること。リポジトリが信頼の境界の外か公開(組織自身の公開リポジトリも含む)なら、PR・Issue の本文・コミットメッセージ・コメントも対象で、内部のファイルパス・コードネーム・メールやアカウント識別子のような API の実データ・インフラの識別子が機微な詳細にあたる。PR・Issue・コミットメッセージへの絞り込みは v2.1.200 以降が必要
-
Claude Code 自身の tmux ペインへキー入力を送って自分の画面を操作すること(Claude が自分の権限や監督を変えるものとして扱われる)
これらの一部は、機微なリモート対象や保護された IaC の範囲のように、環境の項目で具体的な名前に絞れます。
v2.1.200 以降で、さらに次もブロックされます。
- セキュリティの挙動(認証・アクセス制御・入力検証・サンドボックス)を守るテストやアサーションのコメントアウト・削除・強制パス
- セッション中に Claude が作っていない、状態を持つリソースの削除や解体(より具体的な削除ルールがなく、あなたが名指ししていないとき)
- API のベース URL・プロキシのエンドポイント・webhook の受け口・レジストリのミラーを、作業に合わないサードパーティのホストへ向け直すこと(
.env.exampleのような例のファイルも含む) git remote set-urlやgit remote addでプッシュ先を変えること(新しいリモートを名指ししたときを除く)- シークレットや個人・預かりのデータを、公開と分かっているリポジトリへプッシュすること、そのリポジトリ自身の作業ではない機密を公開リポジトリへプッシュすること。dotfiles のリポジトリでは、その内容自体にあたる個人・預かりのデータは例外で、非公開リポジトリの内容が公開の場に届くのも同様にブロックされる(この 2 点の細分化は v2.1.203 以降)。リポジトリの公開・非公開が分からないときは、それだけではブロックせず、内容をほかのルールで判断する
- 別のリポジトリや組織へのプルリクエスト、
gh repo forkでのフォーク、サードパーティのリポジトリへのプッシュ(その外部の対象を名指ししたときを除く)
v2.1.203 以降で、さらに次もブロックされます。
- 機微なローカルの保管場所の内容、または名前・パス・種類で機微と分かるファイルの内容を、コミット・プッシュ・PR や Issue の文面・gist やペースト・パッケージの公開に入れること(取得元と宛先の両方を名指ししたときを除く)。セッションの記録や会話ログ、SSH 鍵・クラウドの認証情報・ブラウザのプロファイル・シェル履歴のような認証情報や設定のドットフォルダ、ユーザーデータのエクスポートがすべて対象で、リポジトリが非公開でも解除されない
v2.1.205 以降で、さらに次もブロックされます。
~/.claude/projects/か設定した設定ディレクトリの下の Claude Code のセッション記録(.jsonl)への書き込み。直接でもシェルコマンド経由でも、各エントリに足すメタデータ行も含む。読み取りは止めない- 対象が、会話の中で割り当てられていないシェル変数(またはそれを根にしたグロブ)である再帰的な強制削除(
rm -rf "$VAR"やRemove-Item -Recurse -Force $dir)。値が以前のコマンド出力にしかなく、分類器はそれを受け取らないので、削除の対象を確かめられない。ブロックは、削除するパスを名指ししたとき、または Claude が解決済みの実パスをコマンドに書いてやり直したときに解ける。分類器が対象を解決できる削除には影響しない。rm -rf "$VAR"/*のように変数の直下のグロブは重要なパスとして扱われ、Remove-Itemで対象が単独の*か/*・\*で終わるものは分類器に届かず拒否される
v2.1.257 以降で、さらに次もブロックされます。
- クラウドのインスタンスメタデータのエンドポイント(
169.254.169.254など)から認証情報を取ること、マシン自身のサービスアカウントやノードの ID でクラウド・クラスター・レジストリの呼び出しを明示的に認証すること - トンネル・リバースシェル・外へ向けて書き換えたリゾルバーやプロキシの設定のような、直接のリクエスト以外の経路で公開ホストへ届くこと
- ノードの証明書やノードのコンテナレジストリの認証のような、あなたのタスクではなくホストに属する認証情報の読み取り
- Claude が起動していない隣のコンテナ・Pod・VM、またはコンテナの下のノードへの接続やスキャン
これらのどれかを許すはずの環境で動かしているなら、autoMode.environment の「Host containment」の項目にその構成を書きます。
v2.1.261 以降で、さらに次もブロックされます。
- URL 自体が共有する内容を運んでいる、公開のペースト・図・データ共有サービスへのリンクを、メッセージ・PR や Issue の文面・文書など、開かれたり取得されたりする場所に書くこと(そのサービスを名指ししたときを除く)
既定で許可されるもの:
-
作業ディレクトリ内のローカルのファイル操作
-
ロックファイルやマニフェストに宣言された依存関係のインストール
-
.envの読み取りと、対応する API への認証情報の送信 -
読み取り専用の HTTP リクエスト
-
作業中のリポジトリのどのブランチ(既定ブランチを含む)へのプッシュ。
productionやgh-pagesのように、デプロイや公開の対象と分かる名前の既定以外のブランチは除き、分類器がそのプッシュを個別に判断する。内容はほかのルールで検査され、permissions.denyルールは書かれたとおりのプッシュのコマンドを全モードで止められ、リモートのブランチ保護も効く。v2.1.211 より前は、開始時のブランチ・Claude が作ったブランチ・既定ブランチへの通常のプッシュだけが既定で許可されていた -
同じセッションで Claude が以前に作ったジョブの削除
-
依頼の一部としてのセキュリティ関連のコード・設定・脅威モデルの読み取り・レビュー・作成
-
同じマルチエージェントのセッションで協力するエージェント同士のメッセージ
-
environmentに挙げた信頼するドメイン・バケット・サービスへのデータ送信(データの流れだけで、同じインフラへの破壊的な操作や認証情報の操作は含まない) -
信頼する内部ドメイン・localhost・名指ししたURLへの Claude in Chrome のナビゲーション
-
サンドボックス内のコマンドは、既定ではネットワークに出られない。Claude がコマンドに必要なホストを名指しし、分類器がそれをコマンドと一緒に審査し、承認された一覧がそのコマンドだけのためにホストを開く。詳しくはサンドボックス
-
全ルールの一覧を JSON で見るには
claude auto-mode defaults。日常の操作がブロックされるなら、管理者がautoMode.environmentに信頼するリポジトリ・バケット・サービスを足せる -
作業中のリポジトリへのプッシュと、依頼に沿ったプルリクエストの作成は確認なしで動く。ただし、シークレットの流出や別のリポジトリ・組織へのプルリクエストなど、ブロックの一覧に当たるものは別。この 2 つの前に人の確認を挟みたいなら、書かれたとおりのコマンドに一致する
permissions.askルールを足す
作業ディレクトリの外での最初の読み取り#
permissions.blockReadsOutsideWorkingDirectories がオフの間、auto モードのファイル読み取りは、作業ディレクトリの外でも確認なしで動きます。ただし、Read・Grep・Glob ツールが外のパスを初めて使うときは、その読み取りを許すかを聞かれます。-p の非対話の実行とバックグラウンドのセッションには出ず、そこでの読み取りは今までどおり動きます。どう答えても Claude は作業を続けます。
| 選択肢 | 動き |
|---|---|
| 「Yes, and keep allowing any reads outside the working directories」 | 読み取りが動き、以降の外の読み取りも今までどおり動く。答えが記録され、再び聞かれない |
| 「No, and block reads outside the working directories from now on」 | 読み取りは拒否され、ユーザー設定の permissions.blockReadsOutsideWorkingDirectories が true になる。以降のすべてのセッション・モードで、ファイルツールが外の読み取りを拒む。後で読ませたければ /add-dir でそのディレクトリを足すか、設定を外す |
| 「No, and ask again next time」 | 拒否され、次の外の読み取りでまた聞かれる |
| 「Yes, but ask again next time」 | 読み取りが動き、何も保存されず、次の外の読み取りでまた聞かれる |
会話で伝える境界と承認#
- 境界:「push しないで」「レビューするまでデプロイを待って」のように会話で伝えた境界は、分類器がブロックの合図として扱う。既定のルールが許す操作でも、一致するものは止められ、後のメッセージで解くまで続く。Claude 自身が条件が満たされたと判断しても解けない。境界はルールとして保存されず、分類器が毎回記録から読み直すので、圧縮でそのメッセージが消えると失われうる。確実に守るなら拒否ルールを使う
- 承認:ブロックされた操作を許すと Claude に伝えると、分類器がそれを承認として読み、ブロックを解けることがある。操作と、それを危険にしている具体的な点(force push なら対象のブランチなど)の両方を名指しする必要がある(動詞だけの「force-push していい」では解けない)。承認は、名指しした破壊的な操作 1 回分にしか及ばず、継続的な承認として与えない限り、次の操作はまたブロックされる。日常のパターンを 1 つずつ承認しなくて済むように、
autoMode.allowに足す。承認が届かないブロックもあるので、その手順を動かすには auto モードを出て、権限の確認に答える
auto モードが後退するとき#
- ブロックされた操作:通知が出て、
/permissionsの「Recently denied」タブに載る。r で、手動承認つきの再試行ができる - 繰り返しのブロック:分類器が同じ操作を連続 3 回、または合計 20 回ブロックすると、auto モードは止まって確認が戻る。確認された操作を承認すると auto モードに戻る。数え方は次のとおり
- 分類器の判定なし:auto モードとは別の安全検査が分類器自身のリクエストを拒む、または分類器の応答が解釈できないときは、通知も「Recently denied」の記録もなしで操作を拒否する。メッセージと対処はエラー一覧を参照
- サーバーの判定なし:サーバー側の審査では、判定がない操作は拒否され、判定なしの応答が 10 回続くとターンが止まる
- 確認中のモード切り替え:分類器の確認の最中にモードを切り替えると、新しいモードが求めない判定は捨てられる。確認が出る、
dontAskなら自動で拒否される
3 回連続・合計 20 回のしきい値は変えられません。合計の回数はセッションを通じて残り、その上限が後退を起こしたときだけ戻ります。auto モードとは別の安全検査が分類器自身のリクエストを拒んだ場合の拒否は、どちらにも数えません。--permission-prompt-tool のない非対話の -p の実行には、戻れる確認がないので、しきい値に達すると操作は実行されず、Claude は作業を続けます(実行は止まりません)。
ヒント
ブロックが繰り返されるなら、分類器があなたのインフラについて知らないことがほとんどです。誤検知は /feedback で報告し、管理者は信頼するインフラを設定します。
判定の順序とサブエージェント、コスト#
各操作は決まった順序で判定され、最初に一致した段階が勝ちます。
-
許可・確認・拒否のルールに一致した操作は、その場で決まる。例外:
- 保護されたパスへの書き込みは、許可ルールに一致しても分類器へ回る
- 重要なパスの
rm・rmdirは、どの許可ルールも承認しない requiresUserInteractionの MCP ツールと、組織がaskにしたコネクタのツールは、許可ルールに一致してもあなたに直接確認する- コマンドごとの許可ドメインを持つシェルコマンドも、許可ルールに一致しても分類器へ回る(ルールが承認するのはコマンドで、そのホストではないため)
- コマンドの内容に一致する ask ルール(
Bash(git push *)など)は、権限の確認に戻る - シンボリックリンクの検査で保護されたパスに解決される書き込みは、要求されたパス自体が保護されていないとき、確認が出る
-
読み取り専用の操作と、作業ディレクトリ内のファイル編集は自動承認される。ただし保護されたパスへの書き込みと、作業ディレクトリの外での最初の読み取り(確認が出る)は除く
- サーバー側の審査があるセッションでは、読み取り専用とサンドボックス内のシェルコマンドは、その審査を待ち、フラグが立てば止められる
- 作業ディレクトリ内の書き込みがシンボリックリンクの検査で外に解決されると、確認が出る
- Claude が他の人が作ったアーティファクトを読むときは、そのページに挙げた承認の場合が当てはまる
-
それ以外はすべて分類器へ。既定の扱いの重要なパスの削除は除く。ステップ 1 で直接確認が出たコネクタのツールと
requiresUserInteractionの MCP ツールも分類器には届かない -
分類器がブロックしたら、Claude に理由が渡る。多くのセッションで、理由は文章による説明ではなく、一致したルール名(
[Data Exfiltration]など)インストールした Mod(モッド) が
tool.checkを扱うと、ステップ 3 の前に操作を承認でき、Mod が承認した操作を分類器は確認しない。フックで権限を拡張するを参照VS Code 拡張では、Claude in Chrome のブラウザ操作がどう承認されるかは、セッションがブラウザにどう接続したかで決まる。Chrome とコンピュータ操作を参照
auto モードに入るとき、任意のコード実行を許す広い許可ルールは外されます。
- 単独の
Bash(*)とPowerShell(*) Bash(python*)のようなインタープリターのワイルドカード- パッケージマネージャーの run コマンド
Agentの許可ルールMonitorの許可ルール(Claude Code が Monitor のコマンドをシェル経由で実行するため)
Bash(npm test) のような絞ったルールは有効なままで、auto モードを出ると外したルールが戻ります。v2.1.236 より前は Monitor の許可ルールが auto モードで有効なままで、ツール全体に一致するルールが分類器の審査なしに Monitor のコマンドを承認していました。
- Claude Code は、
git reset --hardやrm -rfのように未コミットの作業を捨てうるコマンドの前に自分でgit statusを実行し、ステージ済み・変更済み・未追跡の作業があるかを分類器に見せる。リポジトリの git 設定がstatus.showUntrackedFiles=noでも、この検査では未追跡ファイルを報告する - Claude Code 自身が送る分類器のリクエストでは、分類器が見るのはユーザーのメッセージ、ファイル読み取りや検索のような読み取り専用の参照以外のツール呼び出し、CLAUDE.md の内容。ツールの結果は取り除かれるので、ファイルや Web ページの敵対的な内容は分類器を直接操作できない
- PostToolUse フックの
classifierContextフィールドで、呼び出しの結果に注釈を付けられる。分類器はアプリが与えた文脈として読む(v2.1.236 以降)。詳しくはフックのリファレンス - 別のサーバー側のプローブが、届くツールの結果を走査し、Claude が読む前に怪しい内容へ印を付ける
サブエージェントの作業は 3 か所で審査されます。
- 起動前:委任するタスクの説明が評価され、危険そうなタスクは生成の時点でブロックされる
- 実行中:各操作が親と同じ判定の順序とブロック・許可のルールを通る。サブエージェントの frontmatter の
permissionModeは無視される - 終了時:親が報告を読む前に、分類器がその作業と最終報告を審査する。分類器が作業や報告にフラグを立てるか、別の API 安全検査が審査を拒むと、報告は先頭にセキュリティ警告を付けて渡される。審査に分類器が使えないときは、行動する前にサブエージェントの作業を確かめるよう添えて渡される
コストと遅延:
- 分類器は既定で、
/modelの選択ではなく Claude Sonnet 5 で動く。Anthropic がサーバー側で設定した分類器のモデルがあれば、既定より優先される。セッションのモデルが Claude Sonnet 4.6 のとき、またはavailableModelsが Sonnet 5 を除いているときは、セッションのモデルで動く。セッションが Fable 系のモデルなら Opus。Anthropic API 以外のプロバイダーでは、その Opus はANTHROPIC_DEFAULT_OPUS_MODELに設定したモデルで、設定していなければ Opus 5 - セッション最初の auto モードのリクエストが Sonnet 5 の既定を確かめる。成功すれば Sonnet 5 が分類器のモデルのままで、モデルが使えず失敗したらフォールバックを使う
- Enterprise プランと、Claude API・Claude Platform on AWS・Amazon Bedrock・Google Cloud の Agent Platform・Microsoft Foundry を使うアカウントでは、分類器の呼び出しがトークン使用量に数えられる。各検査は記録の一部と保留中の操作を送るので、実行前に往復が 1 回増える。読み取りと、保護されたパス以外の作業ディレクトリ内の編集は分類器を通らないので、オーバーヘッドの大半はシェルコマンドとネットワーク操作から来る。サーバーがセッションのモデルへのリクエストの一部として審査する場合は、数えるべき別の分類器の呼び出しはない
- サンドボックスのネットワークアクセスは、接続ごとの分類器リクエストを増やさない。分類器はコマンドが名指しするホストをコマンドと合わせて 1 回で審査し、Claude Code は各接続を承認済みの一覧と照らすだけ
auto モードを設定する(autoMode)#
分類器は既定で、作業ディレクトリと現在のリポジトリのリモートだけを信頼します。自社のソース管理の組織や、チームのクラウドバケットへの書き込みは、autoMode.environment に足すまでブロックされます。auto モードのオン・オフの操作は、上の各節にあります。
人の確認を足す#
最も直接的なのは permissions.ask です。コマンドの内容を絞った ask ルールは、分類器より先に評価され、auto モードでも必ず確認を出します。
{
"permissions": {
"ask": [
"Bash(git push *)",
"Bash(gh pr create *)"
]
}
}
- 一致するのは
git pushかgh pr createで始まるコマンド。git -C <dir> pushやgit -c <key>=<value> pushのような書き方は一致しないので、確認の対象にならない。コマンド全文を検査する確認が要るなら PreToolUse フックを足す(フックのリファレンス) - 既定では、auto モードは作業中のリポジトリのどのブランチ(既定ブランチを含む)へのプッシュと、プルリクエストの作成を許す。
production・release・gh-pagesのように、デプロイや公開の対象と分かる名前の既定以外のブランチは、その既定の対象外で、分類器が本番デプロイを含めて個別に判断する。内容も検査されるので、force push、コミットに入るシークレット、CI やデプロイのパイプラインが動いたときにリポジトリの外へシークレットを送る変更は、引き続きブロックされる
境界の強さに合わせて仕組みを選びます。
| 境界 | 仕組み | auto モードでの動き |
|---|---|---|
| 操作の前に確認する | permissions.ask |
コマンドの内容を絞ったルールに一致するコマンドで、常に確認が出る。分類器は一致する操作を自動承認できない |
| 操作を絶対に動かさない | permissions.deny |
分類器に聞く前にブロックする。分類器もユーザーの意図も上書きできない |
| このセッション限りの境界 | 会話で伝える(「レビューするまで push しないで」など) | 分類器が一致する操作をブロックする。ただし圧縮でそのメッセージが消えると失われうる。確実な保証には ask か deny のルールを使う |
分類器が設定を読む場所#
分類器は、Claude 自身が読み込むのと同じ CLAUDE.md の内容を読みます。「force push しない」のような指示は、Claude と分類器の両方を同時に導きます。プロジェクトの慣習と振る舞いのルールは、まずここに書きます。プロジェクトをまたぐルール(信頼するインフラ、組織全体の拒否ルールなど)は autoMode 設定のブロックを使います。分類器が autoMode を読む範囲は次のとおりです。
| 範囲 | ファイル | 用途 |
|---|---|---|
| 開発者 1 人 | ~/.claude/settings.json |
個人の信頼するインフラ |
| 組織全体 | 管理設定 | 全開発者へ配る信頼するインフラ |
--settings フラグか Agent SDK |
インラインの JSON | 自動化の呼び出しごとの上書き |
- プロジェクトの
.claude/settings.jsonと.claude/settings.local.jsonのautoModeは読まれない(どちらもリポジトリの中にあり、チェックインされたリポジトリやビルド手順が自前の許可ルールを差し込めてしまうため)。.claude/settings.local.jsonにあるautoModeは~/.claude/settings.jsonへ移す - 各範囲の項目は合算される。開発者は
environment・allow・soft_deny・hard_denyに個人の項目を足せるが、管理設定が与える項目は消せない。分類器の中では許可ルールがソフトなブロックの例外として働くので、開発者が足したallow項目が組織のsoft_deny項目を上書きしうる。合算は足し算で、厳密な方針の境界ではない - 何があってもユーザーの意図や分類器の設定にかかわらず動かしてはならない操作には、管理設定の
permissions.denyを使う。分類器より前にブロックし、上書きできない
信頼するインフラを定義する(autoMode.environment)#
多くの組織で設定が要るのは autoMode.environment だけです。分類器に、信頼するリポジトリ・バケット・ドメインを教えます。分類器は「外部」の意味をこれで決めるので、挙げていない宛先は持ち出し先になりうるものとして扱われます。claude auto-mode defaults は、3 種類の環境項目を出します。
| 種類 | 役割 | 項目 |
|---|---|---|
| 文脈のスロット | 組織・技術スタック・セキュリティの姿勢を伝え、ほかのルールをその文脈で読ませる。既定は None configured か、横に書かれた保守的な想定 |
下の表 |
| 信頼のスロット | 分類器が境界の内側として扱うものを挙げる。リポジトリとソース管理の項目は、作業中のリポジトリとそのリモートが既定。ほかは None configured で、足すまで何も信頼されない |
Trusted repo・Source control・Trusted internal domains・Trusted cloud buckets・Key internal services・Internal package registry |
| 機微のスロット | 保護のルールが高リスクとみなすものを挙げる。既定は広いヒューリスティクス(名前に prod や production を含むホストや名前空間は機微なリモート対象とみなすなど)で、設定する前から保護のルールは働く。具体的な対象を挙げると、ヒューリスティクスの代わりにその対象にルールが当たる |
Sensitive data locations & audiences・Sensitive remote targets・Protected IaC scopes |
文脈のスロットは次のとおりです。
| スロット | 既定・補足 |
|---|---|
| Organization | 組織の名前 |
| Primary use of Claude Code | 既定はソフトウェア開発 |
| Cloud provider(s) | 使うクラウド |
| Repository visibility | リモートのホストと名前で示されるか、会話の前のほうで公開と分かる確認を分類器が読むのでなければ、リポジトリは非公開とみなす。分類器は Claude Code 自身が送るリクエストでは、あなたのメッセージと Claude が実行するコマンドを読むが、出力は読まない。証拠は、リポジトリを公開と名指ししたあなたのメッセージのように、分類器が読めるものでなければならず、gh repo view の出力だけでは届かない |
| Internal sharing / snippet hosting | 公開のペーストや gist のサービスは、1 つ名指しするまで信頼の境界の外とみなす |
| Org-specific CLIs | 組織固有の CLI |
| Secrets management | シークレット管理 |
| CI/CD deploy targets | CI/CD のデプロイ先 |
| Network posture | ネットワークの姿勢 |
| Host containment | 既定は、開かれたインターネットにつながる普通の開発機か CI ランナー。コンテナ・VM・Pod で、外への通信の許可リストや触ってはいけない隣人があるなら、許可するホスト・クラウドのメタデータのエンドポイントに届いてよいか・タスクが使うクラウドプロジェクト、クラスター、レジストリとその ID を書く。この項目がその ID を挙げるまで、分類器はホスト自身の認証情報を求めるリクエストをブロックする(v2.1.257 以降) |
| Protected deployment namespaces / environments | 名指しするまで、機微なリモート対象のヒューリスティクスに戻る |
| Data retention / declassification | データの保持と機密解除 |
- 非公開リポジトリは機密の宛先として許容されるが、リポジトリを非公開にしても、シークレットや個人・預かりのデータがそこへ許されるようにはならない(リポジトリの公開範囲が絞るのは機密だけ)
- 既定の項目に自分のものを足すには、配列に文字列
"$defaults"を入れる。既定の項目がその位置に差し込まれ、自分の項目は前にも後にも置ける
{
"autoMode": {
"environment": [
"$defaults",
"Source control: github.example.com/acme-corp and all repos under it",
"Trusted cloud buckets: s3://acme-build-artifacts, gs://acme-ml-datasets",
"Trusted internal domains: *.corp.example.com, api.internal.example.com",
"Key internal services: Jenkins at ci.example.com, Artifactory at artifacts.example.com"
]
}
}
- 保存したら
claude auto-mode configで、有効なルールに自分の項目が入っているかを確かめる - 項目は正規表現でもツールのパターンでもなく、自然言語のルール。新しいエンジニアにインフラを説明するように書く
- 書くとよいこと:組織と主な用途(ソフトウェア開発・インフラの自動化・データエンジニアリング)、開発者がプッシュする GitHub・GitLab・Bitbucket の組織すべて、読み書きさせたいバケットの名前や接頭辞、
*.internal.example.comのような内部ドメイン、CI・成果物のレジストリ・内部のパッケージインデックス・インシデント用のツール、インストールを通すべきプライベートの npm・PyPI などのレジストリ(迂回して公開レジストリへ行くインストールをブロックするため)、個人データ・機密のビジネスデータ・認証情報・規制対象のデータなどを持つバケット・データベース・パスと、そのデータを共有してよい相手、本番として扱う名前空間・ホスト・コンテナ(そこへのリモートシェルやポートフォワードに明示の承認を要する)、apply や destroy のたびに変更を名指しさせたいインフラのリソース、規制のある業界・マルチテナントのインフラ・コンプライアンスなど分類器の判断に効く追加の文脈 - 一度に全部を埋める必要はない。まず既定のままで、ソース管理の組織と主要な内部サービスを足すと、自社リポジトリへのプッシュのような、最も多い誤検知が解ける。次に信頼するドメインとクラウドバケット、残りはブロックが出たときに足す
雛形:
{
"autoMode": {
"environment": [
"$defaults",
"Organization: {COMPANY_NAME}. Primary use: {PRIMARY_USE_CASE, e.g. software development, infrastructure automation}",
"Source control: {SOURCE_CONTROL, e.g. GitHub org github.example.com/acme-corp}",
"Cloud provider(s): {CLOUD_PROVIDERS, e.g. AWS, GCP, Azure}",
"Trusted cloud buckets: {TRUSTED_BUCKETS, e.g. s3://acme-builds, gs://acme-datasets}",
"Trusted internal domains: {TRUSTED_DOMAINS, e.g. *.internal.example.com, api.example.com}",
"Key internal services: {SERVICES, e.g. Jenkins at ci.example.com, Artifactory at artifacts.example.com}",
"Additional context: {EXTRA, e.g. regulated industry, multi-tenant infrastructure, compliance requirements}"
]
}
}
/auto-mode-setup で項目を作る#
/auto-mode-setup は、プロジェクトとそこでの最近のセッションから、autoMode.environment の項目(場合によっては後述のルール項目も)の下書きを Claude Code に作らせます。下書きを受け入れると ~/.claude/settings.json へ書かれます。
- Pro・Max・Team プランと v2.1.228 以降が必要。ネイティブ Windows は v2.1.233 以降。クラウドセッションでは実行できない。フィーチャーフラグの取得が要るので、取得を切ったセッションでは実行できない
~/.claude/settings.jsonにすでにautoModeの項目があると、まず環境の一覧に足すか置き換えるかを聞かれ、どちらでも自分で書いたルールは残る。続けてこのプロジェクトの使い方を聞かれ、走査の前に 2 つの任意の走査が提案される- 走査で必ず読むもの:このプロジェクトの
CLAUDE.md・README.md・設定ファイル・git のリモート、autoModeとpermissions.allowの設定、最近のセッションで Claude が実行したコマンドのホスト・バケット・コマンド名(あなたのメッセージは読まない) - 任意の走査が足す読み取り:シェル履歴の各コマンドの最初の単語、ホームディレクトリ以下のリポジトリのリモートのホストと名前
- 下書きは全体を受け入れるか捨てるかで、1 項目ごとの調整は後で
~/.claude/settings.jsonを直す。受け入れると、既存の設定と突き合わせて書かれる:environmentの一覧は"$defaults"なしで書かれる(下書きが変えなかった組み込みの項目を明記するため)。下書きが項目を足したallow・soft_deny・hard_denyの一覧には、すでに"$defaults"なしのallowを書いていない限り"$defaults"が入る。保存後、~/.claude/settings.jsonのpermissions.allowルールのうち、auto モードが無視するもの(Bash(*)など)や破壊的なコマンドを自動承認するものを消すか聞かれる - 結果は
claude auto-mode configで確かめる
auto モードが数回ブロックしたのに autoMode.environment の項目がまだないと、ターンの終わりに「Teach auto mode about your environment?」というダイアログが出て、/auto-mode-setup を実行するかを聞かれます。案内だけを止めてコマンドは残すには、そのダイアログで「Don't show again」を選びます。コマンドも案内も両方止めるには、~/.claude/settings.json に次を足します。
{
"skillOverrides": {
"auto-mode-setup": "off"
}
}
/auto-mode-setup は同梱のスキルではなく組み込みのコマンドですが、この skillOverrides は効きます。ただし disableBundledSkills ではオフにできません。
ブロックと許可のルールを上書きする#
分類器の組み込みのルールの一覧を置き換える 3 つのフィールドがあります。それぞれ自然言語のルールの配列です。分類器より前に動くツールのパターンによるハードなブロックは permissions.deny を使います。
| フィールド | 役割 |
|---|---|
autoMode.hard_deny |
無条件のセキュリティ境界 |
autoMode.soft_deny |
ユーザーの意図で解除できる破壊的な操作 |
autoMode.allow |
ソフトなブロックのルールへの例外 |
分類器の中の優先順位は 4 段階です。
hard_deny:無条件にブロックする。ユーザーの意図もallowの例外も適用されないsoft_deny:次にブロックする。ユーザーの意図とallowの例外が上書きできるallow:一致するsoft_denyを例外として上書きする- 明示的なユーザーの意図:残るソフトなブロックを上書きする。ユーザーのメッセージが、Claude がしようとしているまさにその操作を直接かつ具体的に書いていれば、
soft_denyに一致しても許される
一般的な依頼は明示的な意図に当たりません(「リポジトリを片づけて」は force push を認めないが、「このブランチを force-push して」は認める)。緩めるには、既定の例外が覆わない日常のパターンを分類器が繰り返し止めるとき allow に足します。締めるには、既定が見逃す環境固有の破壊リスクを soft_deny に、決して越えてはならないセキュリティ境界を hard_deny に足します。組み込みのルールを残して自分のを足すには "$defaults" を入れます。リリースで組み込みの一覧が変わっても、その更新を引き継げます。
{
"autoMode": {
"environment": [
"$defaults",
"Source control: github.example.com/acme-corp and all repos under it"
],
"allow": [
"$defaults",
"Deploying to the staging namespace is allowed: staging is isolated from production and resets nightly",
"Writing to s3://acme-scratch/ is allowed: ephemeral bucket with a 7-day lifecycle policy"
],
"soft_deny": [
"$defaults",
"Never run database migrations outside the migrations CLI, even against dev databases",
"Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow"
],
"hard_deny": [
"$defaults",
"Never send repository contents to third-party code-review APIs"
]
}
}
注意
environment・allow・soft_deny・hard_deny のどれかを "$defaults" なしで設定すると、その節の既定の一覧がまるごと置き換わります。soft_deny なら force push・curl | bash・本番デプロイ・auto モードの迂回を含む組み込みのソフトなブロックの全ルール、hard_deny なら組み込みのデータ持ち出しのルールが失われます。
- 各節は独立して評価される。
environmentだけを設定しても、既定のallow・soft_deny・hard_denyはそのまま - 一覧を完全に自分のものにするときだけ
"$defaults"を省く。安全にやるには、claude auto-mode defaultsで組み込みのルールを出し、設定ファイルに写し、自分のパイプラインとリスクの許容度に照らして 1 つずつ見直す
/permissions から編集する#
設定ファイルを開かずに分類器のルールと environment の項目を見て直すには、/permissions を開いて「Auto mode」タブを選びます。タブは v2.1.246 以降が必要で、auto モードがそのセッションで使えるときだけ出ます。管理設定か --settings フラグの項目は読み取り専用で出て、タブでの変更はすべて ~/.claude/settings.json に保存されます。
すべてのシェルコマンドを分類器に通す#
既定では、Bash(npm test) のような絞った Bash・PowerShell の許可ルールは auto モードでも有効で、分類器の前に解決されます(コマンドごとの許可ドメインを持つコマンドを除く)。外されるのは、Bash(*) やワイルドカードのインタープリターのような任意のコード実行を許す広いルールと、Monitor を名指しするすべてのルールだけです。そのため、絞ったルールでも、分類器が見ない破壊的な引数を通しうることがあります。autoMode.classifyAllShell を true にすると、auto モードの間、Bash と PowerShell の許可ルールをすべて停止し、許可リストにかかわらず、重要なパスの削除以外のすべてのシェルコマンドを分類器が評価します。
{
"autoMode": {
"classifyAllShell": true
}
}
- 遅延と引き換えに網羅性を得る設定。許可ルールが即座に承認したはずのコマンドが分類器の判定を待ち、シェルコマンドごとに分類器の呼び出しが 1 回数えられる
- 効くのは auto モードが有効な間だけで、ほかのモードでは許可ルールは普通に働く
auto-mode サブコマンド#
| コマンド | 内容 |
|---|---|
claude auto-mode defaults |
組み込みの environment・allow・soft_deny・hard_deny のルールを JSON で出す。--label にルールのラベルの先頭(例:--label 'Git Destructive')を渡すと、そのルールの全文が読める。ラベルの大文字小文字を区別しない前方一致で、一致しない節は空のリストで出る(v2.1.208 以降) |
claude auto-mode config |
分類器が実際に使う内容を JSON で出す。設定したところは設定が、ほかは既定が反映される |
claude auto-mode critique |
自分で書いた allow・soft_deny・hard_deny のルールを AI がレビューし、曖昧・重複・誤検知を起こしそうな項目に印を付ける |
claude auto-mode reset |
ユーザー設定ファイルから autoMode の節を消し、組み込みの既定に戻す(v2.1.212 以降)。消す内容を要約して「Reset auto mode configuration to defaults?」と確認する。--yes で確認を飛ばす。変えるのは ~/.claude/settings.json だけで、管理設定や --settings の autoMode は引き続き効く |
defaults と config は、4 つのルールの一覧を、各ルールを自然言語の文字列とした 1 つの JSON オブジェクトで出します。
ブロックを確かめて直す#
「Recently denied」タブ(/permissions)には、分類器が拒否した操作が記録されます。r を押すと再試行の印が付き、ダイアログを出るとき、モデルにその呼び出しを再試行してよいと伝えるメッセージが送られて会話が再開します。分類器が判定を出さなかった場合(auto モードとは別の安全検査が分類器自身のリクエストを拒んだ、または応答が解釈できなかった)は、この記録には載らず拒否されます(エラー一覧)。
- ブロックされた呼び出しは会話の中で探す。「Ran 3 shell commands」のように畳まれているときは Ctrl+O でトランスクリプトビューアーを開くと展開される
- 入力欄の近くの
bash denied by auto mode · [Data Exfiltration] · /permissionsのような通知はツールと理由だけを出し、「Recently denied」のタブはシェルコマンドを Claude が書いた説明で出す。どちらもコマンドや URL は出さない。正確な入力を機械的に得るには、tool_inputとして受け取るPermissionDeniedフックを足す - 呼び出しの下の文で、直すことがあるかが分かる。モデルが
is temporarily unavailableのような分類器自体の問題を示すなら、最終判定なしにブロックされたということで、対処はエラー一覧にある。そうでなくDenied by auto mode classifierに[Production Deploy]のような理由が付く、またはBlocked by classifierなら、分類器が危険と判断した。呼び出しが届こうとしたものや、しようとしたことから直し方を選ぶ
| 状況 | 直し方 |
|---|---|
| タスクの間ずっと Claude が必要とする宛先(パッケージレジストリ・内部ドメイン・リポジトリのホスト) | autoMode.environment に足す |
| これからレビューなしで動かしたいコマンド | allow ルールを足す |
| 意図した 1 回限りの操作 | 次のメッセージで意図を伝えて Claude に再試行させる |
- 環境の項目や
allowルールは、/permissionsダイアログの「Auto mode」タブから足せる [Data Exfiltration]のように角括弧で囲まれた語は、一致したルールの名前。ルールの全文はclaude auto-mode defaultsで読める- 同じ宛先でのブロックが繰り返されるなら、分類器が文脈を欠いている。その宛先を
autoMode.environmentに足すか、/auto-mode-setupで下書きを作らせ、claude auto-mode configで反映を確かめる
dontAsk モード#
確認になるはずのツール呼び出しをすべて自動で拒否するモードです。Manual で確認が要らない操作(作業ディレクトリ内のファイルの読み取り、読み取り専用の Bash コマンド)、permissions.allow に一致する操作、PreToolUse フックが承認した呼び出しは動きます。CI のパイプラインや、許すことを事前に決めた制限のある環境に使います。セッションは入力を待ちません。ステータスバーには ⏵⏵ don't ask on と出ます。
- 明示的な
askルールに一致する呼び出しは、確認ではなく拒否される - 組み込みの
AskUserQuestionツールは、許可ルールに一致しても拒否される。組織がaskにしたコネクタのツール(その設定が Claude Code に届くセッション)も拒否される _meta["anthropic/requiresUserInteraction"]が付いた MCP ツールも拒否される(承認カードがこのモードの集めない答えを要るため)rm -rf /やrm -rf ~のような重要なパスのrm・rmdirは、許可ルールに一致してもPreToolUseフックが承認しても拒否される- クラウドセッションは
defaultMode: "dontAsk"を無視する - 起動時は
claude --permission-mode dontAskで指定する
bypassPermissions モード#
権限の確認と安全検査を無効にし、ツール呼び出しをすぐ実行します。保護されたパスへの書き込みも含みます。
注意
隔離された環境(インターネットにつながっていないコンテナ・VM・開発コンテナ)でだけ使います。bypassPermissions は、プロンプトインジェクションや意図しない操作に対して何も守りません。安全検査を裏で働かせつつ確認を大きく減らしたいなら auto モードを使います。管理者は、管理設定の permissions.disableBypassPermissionsMode を "disable" にして、このモードを止められます。
- 上の「どのモードでも自動承認されないもの」は、このモードでも確認が出る。他の組織の公開アーティファクトの読み取りには承認が要り、このモードはそれを求めないので、Claude はそれを読めない。PowerShell の
Remove-Itemの拒否も、このモードで適用される - セッション間メッセージ(セッション間のメッセージ)の 2 つの保護は、このモードと、bypass が使える対話端末のプランモードセッションでも残る。1 つは、このマシンの外にある自分のセッションへのメッセージの
isolatePeerMachinesの承認確認。もう 1 つは、crossSessionInboundの値が適用されないとき、自分の別のセッションからの受信メッセージを承認のために保留し、送り主のセッションが自分も権限の確認を飛ばしていると名乗るときだけ、確認なしで届ける。メッセージを保留している間にモードを出ると、Claude Code が受信のルールを適用し直し、いま受け入れられる保留中のメッセージを届ける - bypass が使える対話端末では、Claude Code はプランモードのブロックも強制しない。Claude は編集せずに計画するよう指示されたままだが、計画中に試みたファイル編集やシェルコマンドは確認なしで動く。明示的な ask ルールと、重要なパスの
rm・rmdirは確認が出る - 対話端末のないところ(
-pの非対話の実行・Agent SDK のセッション・VS Code 拡張のチャットパネルの会話)では、プランモードのブロックが保たれる。そこでは--allow-dangerously-skip-permissionsで、後からbypassPermissionsを選べるようにする - 有効にせずに始めたセッションからは入れない。起動時に
permissions.defaultMode: "bypassPermissions"か、有効にするフラグで指定する --dangerously-skip-permissionsはclaude --permission-mode bypassPermissionsと同等。--restrictedで始めたセッションではbypassPermissionsを拒否する(--restrictedは v2.1.248 以降が必要)- このモードを有効にして対話セッションを初めて始めると、確認なしの操作の責任を引き受けるかを聞く警告のダイアログが出る。受け入れると
~/.claude/settings.jsonのskipDangerousModePermissionPromptがtrueになり、以降は出ない(もう一度出すにはそのキーを消すかfalseにする。ほかの設定ファイルで組織が設定できる)。断ると Claude Code は終了する - 非対話モードにダイアログは出ない。
--bgで始めるバックグラウンドセッションは、対話セッションでダイアログを受け入れるまで拒否される - Linux と macOS では、root か
sudoで動かしていると起動を拒否する。メッセージは--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons。認識されたサンドボックス内ではこの検査は自動で飛ばされる。コンテナで自律的に動かすには、非 root ユーザーで動く開発コンテナの設定を使う - クラウドセッションは、設定ファイルの
defaultMode: "bypassPermissions"と"dontAsk"を認めない。リポジトリにチェックインされた設定でバイパスのクラウドセッションを始められないようにするため。設定は黙って無視され、セッションはモードのドロップダウンに出ているモードで始まる
保護されたパス#
少数のパスへの書き込みは、bypassPermissions と、bypass が使える対話端末のプランモード以外では、自動承認されません。リポジトリの状態や Claude 自身の設定が、うっかり壊れるのを防ぐためです。
| モード | 保護されたパスへの書き込み |
|---|---|
default・acceptEdits |
確認が出る |
plan |
bypass が使える対話端末では許可。それ以外で、計画中に auto モードが使えるなら分類器へ回り、使えないなら確認が出る |
auto |
分類器へ回る |
dontAsk |
拒否 |
bypassPermissions |
許可 |
--restricted(v2.1.248 以降)で始めたセッションでは、分類器は保護されたパスへの書き込みを承認できない- 保護されたパスの書き込みを分類器へ回すモードでも、シンボリックリンクの検査で保護されたパスに解決される書き込みは、要求されたパス自体が保護されていないとき、確認が出る
- 設定ファイルの
permissions.allowルールは、保護されたパスへの書き込みを事前承認しない。安全検査は設定の許可ルールを評価する前に動くので、~/.claude/settings.jsonや.claude/settings.jsonのEdit(.claude/**)は上の表の結果を変えない - 確認が出るモードでは、プロジェクトの
.claude/フォルダか~/.claude/への書き込みの確認に、セッション限りの選択肢が出ることがある。プロジェクトの.claude/には「Yes, and allow Claude to edit files in this project's .claude folder for this session」、~/.claude/には「Yes, and allow Claude to edit files in its ~/.claude folder for this session」
保護されたディレクトリ:
| ディレクトリ | 補足 |
|---|---|
.git |
|
.config/git |
|
.vscode |
|
.idea |
|
.husky |
|
.cargo |
|
.devcontainer |
|
.yarn |
|
.mvn |
|
.claude |
Claude が自分の git worktree を置く .claude/worktrees と、--restricted なしで始めたセッションでの Claude 自身の自動メモリのディレクトリの Markdown ファイルは除く |
--plugin-dir で読み込んだディレクトリ |
ファイルが変わると Claude Code が Mod のコードをそこから再読み込みして動かすため。Mod を作る・試すを参照 |
保護されたファイル:
| 種類 | ファイル |
|---|---|
| git | .gitconfig、.gitmodules |
| シェル | .bashrc、.bash_profile、.bash_login、.bash_aliases、.bash_logout、.zshrc、.zprofile、.zshenv、.zlogin、.zlogout、.profile、.envrc |
| パッケージマネージャー | .npmrc、.yarnrc、.yarnrc.yml、.pnp.cjs、.pnp.loader.mjs、.pnpmfile.cjs、bunfig.toml、.bunfig.toml |
| Bazel | .bazelrc、.bazelversion、.bazeliskrc |
| フック管理 | .pre-commit-config.yaml、lefthook.yml、lefthook.yaml、.lefthook.yml、.lefthook.yaml |
| Gradle・Maven | gradle-wrapper.properties、maven-wrapper.properties |
| 開発コンテナ | .devcontainer.json |
| ツール設定 | .ripgreprc、pyrightconfig.json |
| Claude | .mcp.json、.claude.json |
重要なパス(critical path)#
重要なパスは、Claude Code が rm と rmdir から守るディレクトリです。ファイルシステムのルート、ホームディレクトリ、作業ディレクトリなどです。重要なパスを対象にした rm や rmdir は、permissions.allow ルールも、"allow" を返す PreToolUse フックも、ほかの確認を飛ばすモードでも承認できません。モデルの誤りへの安全弁で、一致する拒否ルールは引き続きコマンドを完全にブロックします。Remove-Item と cmd の削除の組み込みコマンドには別の検査があります(後述)。
重要なパスになるもの#
rm か rmdir の対象が次のどれかなら、重要なパスとして扱われます。
- ファイルシステムのルート
- ルート直下の最上位ディレクトリ(
/usr・/etc・/dataなど) - ホームディレクトリ
- Windows のドライブのルートとその最上位ディレクトリ(
C:\やC:\Windows) - 作業ディレクトリとその親
- 追加の作業ディレクトリとその親。ただし、その下のグロブを削除するとき(
rm -rf <dir>/*)だけ。ディレクトリ自体へのrm -rf <dir>はこの検査の対象外
次の対象も重要なパスとして扱われます。
| 対象 | 例 | 重要になる理由 |
|---|---|---|
| シェル変数の直下のグロブか末尾のスラッシュ | rm -rf "$DIR"/* |
変数が空だと、ルートからの削除になる |
値を与えるものがないときの、$1 や $@ のような位置パラメータの直下の同じ形 |
rm -rf "$1"/* |
ルートからの削除に展開される |
シェル変数の後に、mnt・tmp・usr・Users のような一般的な最上位ディレクトリ名が 1 つ続く形 |
rm -rf "$TMPDIR/mnt" |
変数が空に展開されると /mnt を削除する |
同じコマンドで、$(pwd) や $(git rev-parse --show-toplevel) のようなディレクトリを出力する置換から代入された変数 |
D=$(pwd); rm -rf "$D" |
値が作業ディレクトリかリポジトリのルートになりうる |
再帰的な rm で、対象がコマンド置換の出力だけのもの |
rm -rf "$(pwd)" |
実行前に対象を確かめられない |
| 重要なパスの後ろにコマンド置換が付く形 | rm -rf ~/$(cmd) |
置換が空に展開されたとき残るパス(ここではホームディレクトリ)が検査される |
| バックスラッシュだけの対象 | rm -rf "\\" |
Windows の Git Bash は単独のバックスラッシュを現在のドライブのルートと読むので、検査はすべてのプラットフォームで適用される |
/* か /*/ で終わる一部の対象 |
rm -rf logs/*/*、rm -rf logs/*/、cd logs && rm -rf a/* |
実行前に、どのディレクトリに届くか判断できない |
コマンド置換の出力だけを対象にした場合の検査を切るには、Claude Code を起動する環境で CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1 を設定します。
ネストしたコマンドとインラインスクリプトの中の削除#
- ネストしたコマンド:
(...)のサブシェル、{ ...; }のブレースグループ、$(...)かバッククォートのコマンド置換、<(...)のプロセス置換。重要なパスの削除は、(rm -rf ~)やecho "$(rm -rf ~)"のようにネストした中にあっても、同じコマンドのほかの場所にあっても見つかる - インラインスクリプト:
bash -c 'rm -rf ~'のように、sh・bash・zshなど POSIX 系のシェルに-cで渡すスクリプト。二重引用符のスクリプトは、呼び出し側のシェルが変数を展開してから内側のシェルに渡されるので、find . -name '*.tmp' -exec sh -c "rm -rf \"$1\"/*" _ {} \;はマッチごとにルートからの削除に展開され、重要なパスの削除として扱われる。$1に実際の値を束縛する単一引用符のスクリプト(sh -c 'rm -rf "$1"/*' _ {})は対象にならない
-c のスクリプトに直接書いた重要なパス(~ など)の検査を切るには、Claude Code を起動する環境で CLAUDE_CODE_DISABLE_INLINE_SHELL_RM_PROMPT=1 を設定します。
指摘されたコマンドを書き直す#
| 使っている形 | 直し方 |
|---|---|
$DIR のような変数の直下のグロブか末尾のスラッシュ |
展開のたびに、変数が未設定か空ならシェルがエラーで止まるよう守る(rm -rf "${DIR:?}"/*)か、リテラルのパスを使う。すべての展開をそう守った削除はこの検査を通り、bypassPermissions では、ほかの重要なパスの検査に引っかからなければ確認なしで動く |
$HOME のように通常は設定されている変数の直下のグロブか末尾のスラッシュ |
リテラルのパスを使う |
| ディレクトリを出力する置換から代入された変数 | リテラルのパスを使う。変数は空ではないので、"${D:?}" の守りではこの検査は通らない |
| コマンド置換の出力だけの対象 | 先に置換を単独で実行し、出力されたリテラルのパスを削除する。確認の文面も Claude に同じことを指示する |
変数の直下のグロブか末尾のスラッシュの確認は、指摘した rm を名指しし、検査を通る書き直し方を示します。
モードごとの重要なパスの削除の扱い#
| モード | 結果 |
|---|---|
default・acceptEdits |
承認を求める |
plan |
承認を求める。計画中に分類器がコマンドを審査し、bypass が使えないときは、auto と同じ扱い |
auto |
端末では、制限時間つきで承認を求める。それ以外では拒否する |
dontAsk |
拒否する |
bypassPermissions |
承認を求める。端末では制限時間つき |
- 明示的な ask ルールがそのコマンドに一致すれば、
autoでも制限時間なしで確認される - 確認が出るモードでは、
PermissionRequestフックが確認に答えられる(フックのリファレンス)
auto と bypassPermissions では、端末での重要なパスの削除の確認に 2 分のカウントダウンが出ます。
- 答える前に時間が切れると、コマンドは拒否され、代わりにすることが Claude に伝えられるので、無人のセッションが進む
- 確認が開いている間に任意のキーを押すと、カウントダウンが止まり、答えを待ち続ける
- セッション中にこの確認が 3 回、無回答のまま切れると、以降は確認を出さず、重要なパスの削除を即座に拒否する。新しいメッセージを送ると数え直す
autoで、端末の確認を出せない場所(-pの非対話の実行・Agent SDK のセッション・VS Code 拡張のチャットパネルとデスクトップアプリ)では、コマンドを即座に拒否する。拒否は、消そうとしたものを報告し、削除はあなたに任せるよう Claude に伝えるautoとbypassPermissionsのこの扱いは v2.1.281 以降が必要。切るには、CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT=1を Claude Code を起動する環境に設定する。するとautoでは重要なパスの削除が分類器に回り、bypassPermissionsでは確認に制限時間がなくなる
PowerShell の Remove-Item#
PowerShell ツールを有効にすると、Remove-Item と cmd の組み込みの rd・rmdir・del・erase には、rm の重要なパスの一覧とは別の検査がかかります。Remove-Item は対象で結果が変わり、最初に当てはまるものが適用されます。
| 対象 | 結果 |
|---|---|
| システムパス:ファイルシステムのルートとその最上位ディレクトリ、ドライブのルートとその最上位ディレクトリ、ホームディレクトリ | すべてのモードで、確認なしに拒否する |
ワイルドカード:単独の *、/* か \* で終わる対象($dir/* のようなシェル変数の下のグロブを含む) |
すべてのモードで、確認なしに、分類器が見る前に拒否する |
-Recurse つきの、作業ディレクトリかその親 |
承認が要るほかのコマンドと同様に、確認するモードでは確認し、auto では分類器へ回し、dontAsk では拒否する。bypassPermissions ではこの検査は飛ばされる |
- システムパスの検査は、Claude が
cmd経由でrd・rmdir・del・eraseを動かす場合(cmd /c rd /s /q C:\Users)にも適用され、既定ではすべてのモードで確認なしに拒否する。このcmdの検査は v2.1.283 以降が必要 cmdの対象を判断するとき、リテラルの文字の後ろの PowerShell 変数は空として扱われる。cmd /c rd /s /q "C:\$name"はC:\の削除になるので拒否される。末尾のワイルドカードは空にするフォルダとして数え、cmd /c del /q C:\*は拒否され、プロジェクト内のcmd /c del /q dist\*は拒否されないcmdの検査を切るには、Claude Code を起動する環境でCLAUDE_CODE_DISABLE_POWERSHELL_CMD_RM_DENY=1を設定する。設定ファイルのenvブロックでは無視される。システムパスのRemove-Itemは、どちらの場合も拒否されたまま
セキュリティの全体像はセキュリティとデータの扱い、非対話の実行はヘッドレス実行(-p)を参照してください。
公式ドキュメント(英語)
2026年10月5日時点の内容をもとに、日本語でまとめています。