権限システム
Claude Code は、パワーと安全性のバランスを取るために、段階的な権限システムを使用しています。
Bash または PowerShell の権限プロンプトで、
Ctrl+E を押すと、コマンドの説明が表示されます。説明には、コマンドが何をするのか、Claude がそれを実行する理由、何が問題になる可能性があるかが含まれ、低リスク、中リスク、または高リスクとラベル付けされています。Claude Code は、毎回のプロンプトではなく、Ctrl+E を押したときのみ、コマンドと Claude 自身の呼び出しの説明をモデルに送信して説明を生成します。説明を表示してもコマンドは実行されません。Ctrl+E をもう一度押すと説明が非表示になります。
ショートカットをオフにするには、~/.claude.json の permissionExplainerEnabled を false に設定します。
権限を管理する
/permissions を使用して、Claude Code のツール権限を表示および管理できます。この UI は、すべての権限ルールと、それらが取得される settings.json ファイルをリストします。
- Allow ルールは、Claude Code が手動承認なしで指定されたツールを使用できるようにします。
- Ask ルールは、Claude Code が指定されたツールを使用しようとするたびに確認を促します。
- Deny ルールは、Claude Code が指定されたツールを使用することを防止します。
Bash(aws *) のような広い deny ルールは、Bash(aws s3 ls) のようなより狭い allow ルールにもマッチする呼び出しを含む、マッチするすべての呼び出しをブロックするため、deny ルールはアローリスト例外を含むことはできません。ask と allow の間にも同じ優先順位が適用されます。マッチする ask ルールは、同じ呼び出しにマッチするより具体的な allow ルールがある場合でも、プロンプトを表示します。
Deny ルールは、ツール名を指定するか、ツール内のパターンをスコープするかによって異なる動作をします。Bash のようなベアツール名は、ツールを Claude のコンテキストから完全に削除するため、Claude はそれを見ることはありません。Bash(rm *) のようなスコープ付きルールは、ツールを利用可能なままにし、Claude が試みたときにマッチする呼び出しをブロックします。
権限ルールは Claude Code によって実装されており、モデルによってではありません。プロンプトまたは
CLAUDE.md の指示は、Claude が何をしようとするかを形作りますが、Claude Code が許可する内容は変わりません。アクセスを付与または取り消すには、/permissions、ここで説明されているルール、permission mode、または PreToolUse hook を使用してください。権限モード
Claude Code は、ツール呼び出しの承認方法を制御するいくつかの権限モードをサポートしています。権限モードを参照して、各モードをいつ使用するかを確認してください。設定ファイルでdefaultMode を設定します。
bypassPermissions または auto モードが使用されるのを防ぐには、任意の設定ファイルで permissions.disableBypassPermissionsMode または permissions.disableAutoMode を "disable" に設定します。これらは、オーバーライドできない管理設定で最も有用です。
権限ルール構文
権限ルールは、Tool または Tool(specifier) の形式に従います。
ツールのすべての使用をマッチさせる
ツールのすべての使用をマッチさせるには、括弧なしでツール名を使用します。Bash(*) は Bash と同等で、すべての Bash コマンドをマッチさせます。拒否ルールとして、両方の形式は Claude のコンテキストからツールを削除します。
細かい制御のためにスペシファイアを使用する
括弧内にスペシファイアを追加して、特定のツール使用をマッチさせます。入力パラメータでマッチさせる
拒否ルールと確認ルールは、Tool(param:value) を使用して任意のツール上のトップレベル入力パラメータをマッチさせることができます。ルールは Claude がそのパラメータをその正確な値に設定してツールを呼び出すときにマッチします。1 つのパラメータ値に対する許可ルールは、その呼び出しが全体的に安全であることを確立しないため、許可ルールは各ツール独自のスペシファイア構文を使用し続けます。これはツールが受け入れるスカラーパラメータで機能します。
パラメータマッチングは以下のルールに従います。
- パラメータ名は Agent ツール上の
modelなど、ツールの入力の直接フィールドである必要があります。オブジェクトまたは配列内にネストされたフィールドはマッチ可能ではありません - 各ルールは 1 つのパラメータに名前を付けます。
modelとisolationの両方でゲートするには、1 つのルールで組み合わせるのではなく、Agent(model:opus)とAgent(isolation:worktree)の 2 つのルールを記述します - 値は
*をワイルドカードとしてサポートし、任意の文字シーケンスにマッチするため、Agent(isolation:*)は任意の明示的な isolation 値にマッチします。*がない場合、マッチは正確です - モデルが省略するパラメータは決してマッチしないため、
Agent(model:*)はmodelが設定されていない呼び出しにはマッチしません - 値は Claude が送信するリテラル入力と比較され、正規化の前です。
Agent(model:opus)は別名opusにマッチしますが、完全なモデル ID にはマッチしません。--verboseで実行して、各ツール呼び出しの正確なパラメータ名と値を確認してください - コロンの周りのホワイトスペースは無視されます
command、Read、Edit、Write の file_path、Grep と Glob の path、NotebookEdit の notebook_path、WebFetch の url です。Bash(command:rm *) のようなルールはコンパウンドコマンドでバイパス可能であるため、Claude Code はそれを無視し、スタートアップ警告を発行します。代わりに Bash(rm *)、Read(./path)、または WebFetch(domain:host) を使用してください。
ワイルドカードパターン
Bash ルールは* を使用したグロブパターンをサポートしています。ワイルドカードはコマンド内の任意の位置に表示できます。この設定により、npm および git commit コマンドが許可され、git push がブロックされます。
* の前のスペースは重要です。Bash(ls *) は ls -la にマッチしますが lsof にはマッチしません。一方、Bash(ls*) は両方にマッチします。:* サフィックスは末尾のワイルドカードを記述する同等の方法であるため、Bash(ls:*) は Bash(ls *) と同じコマンドをマッチさせます。
権限ダイアログは、コマンドプレフィックスに対して「はい、今後は聞かない」を選択すると、スペース区切り形式を書き込みます。:* 形式はパターンの末尾でのみ認識されます。Bash(git:* push) のようなパターンでは、コロンはリテラル文字として扱われ、git コマンドにはマッチしません。
ツール名ワイルドカード
拒否ルールと確認ルールは、ツール名の位置でもグロブパターンを受け入れます。パターンはツール名全体にマッチする必要があります。"*" はすべてのツールにマッチし、"mcp__*" はすべてのサーバー全体のすべての MCP ツールにマッチします。ベアネーム glob 拒否ルールでマッチしたツールは Claude のコンテキストから削除されます。これはベアツール名と同じです。この設定はすべての MCP ツールを拒否します。
mcp__<server>__ プレフィックスの後でのみツール名 glob を受け入れます。サーバーセグメントは glob フリーである必要があるため、ルールは設定した特定のサーバーに名前を付けます。mcp__puppeteer__* は puppeteer サーバーからのすべてのツールにマッチし、mcp__github__get_* はその get_ ツールにマッチします。"*"、"B*"、または "mcp__*" などのアンカーなし許可 glob は警告とともにスキップされ、自動承認されません。
ツール名がマッチしない既知のツールを持つ拒否ルールまたは確認ルールは、タイプミスをキャッチするためにスタートアップ警告を生成します。_ または * を含むツール名はチェックから除外されます。
トランスクリプトと権限ダイアログに表示されるツールのラベルは、その正規名と異なる場合があります。たとえば、トランスクリプトで Stop Task というラベルが付いているツールの正規名は TaskStop です。権限ルールと hook マッチャー は正規名のみをマッチさせるため、Stop Task として記述されたルールはマッチしません。拒否ルールと確認ルールの場合、上記のスタートアップ警告がミスマッチをキャッチします。ツール参照 に記載されている正規名を使用してください。
ツール固有の権限ルール
Bash
Bash 権限ルールは* を使用したワイルドカードマッチングをサポートしています。ワイルドカードは、開始、中央、終了を含むコマンド内の任意の位置に表示できます。
Bash(npm run build)は正確な Bash コマンドnpm run buildをマッチさせますBash(npm run test *)はnpm run testで始まる Bash コマンドをマッチさせますBash(npm *)はnpmで始まるコマンドをマッチさせますBash(* install)はinstallで終わるコマンドをマッチさせますBash(git * main)はgit checkout mainやgit log --oneline mainなどのコマンドをマッチさせます
* は、スペースを含む任意の文字シーケンスをマッチさせるため、1 つのワイルドカードで複数の引数にまたがることができます。Bash(git *) は git log --oneline --all をマッチさせ、Bash(git * main) は git push origin main および git merge main をマッチさせます。
* が末尾にスペース付きで表示される場合(Bash(ls *) など)、単語境界を強制し、プレフィックスの後にスペースまたは文字列の終わりが続く必要があります。たとえば、Bash(ls *) は ls -la にマッチしますが lsof にはマッチしません。対照的に、スペースなしの Bash(ls*) は、単語境界制約がないため、ls -la と lsof の両方にマッチします。
複合コマンド
「はい、今後は聞かない」で複合コマンドを承認すると、Claude Code は複合文字列全体の単一ルールではなく、承認が必要な各サブコマンドの個別ルールを保存します。たとえば、git status && npm test を承認すると、npm test のルールが保存されるため、将来の npm test 呼び出しは && の前に何があるかに関係なく認識されます。cd をサブディレクトリに移動するようなサブコマンドは、そのパスの独自の Read ルールを生成します。単一の複合コマンドに対して最大 5 つのルールが保存される場合があります。
プロセスラッパー
Bash ルールをマッチさせる前に、Claude Code は固定されたプロセスラッパーセットをストリップするため、Bash(npm test *) のようなルールは timeout 30 npm test もマッチさせます。認識されるラッパーは timeout、time、nice、nohup、stdbuf です。
ベア xargs もストリップされるため、Bash(grep *) は xargs grep pattern をマッチさせます。ストリップは xargs にフラグがない場合にのみ適用されます。xargs -n1 grep pattern のような呼び出しは xargs コマンドとしてマッチされるため、内部コマンド用に記述されたルールはそれをカバーしません。
このラッパーリストは組み込まれており、設定不可能です。direnv exec、devbox run、mise exec、npx、docker exec などの開発環境ランナーはリストに含まれていません。これらのツールは引数をコマンドとして実行するため、Bash(devbox run *) のようなルールは run の後に続くものをマッチさせます。これには devbox run rm -rf . が含まれます。環境ランナー内での作業を承認するには、ランナーと内部コマンドの両方を含む特定のルールを記述します。例えば Bash(devbox run npm test)。許可する内部コマンドごとに 1 つのルールを追加します。
watch、setsid、ionice、flock などの Exec ラッパーは常にプロンプトを表示し、Bash(watch *) のようなプレフィックスルールで自動承認することはできません。同じことが -exec または -delete を使用する find にも適用されます。Bash(find *) ルールはこれらの形式をカバーしません。特定の呼び出しを承認するには、完全なコマンド文字列の正確一致ルールを記述します。
読み取り専用コマンド
Claude Code は、Bash コマンドの組み込みセットを読み取り専用として認識し、すべてのモードで権限プロンプトなしで実行します。これにはls、cat、echo、pwd、head、tail、grep、find、wc、which、diff、stat、du、cd、および git の読み取り専用形式が含まれます。セットは設定不可能です。これらのコマンドの 1 つにプロンプトを要求するには、それに対して ask または deny ルールを追加します。
すべてのフラグが読み取り専用であるコマンドに対しては、引用符なしのグロブパターンが許可されるため、ls *.ts および wc -l src/*.py はプロンプトなしで実行されます。find、sort、sed、git などの書き込み可能または実行可能なフラグを持つコマンドは、グロブが -delete のようなフラグに展開される可能性があるため、引用符なしのグロブが存在する場合でもプロンプトを表示します。
作業ディレクトリまたは追加ディレクトリ内のパスへの cd も読み取り専用です。cd packages/api && ls のような複合コマンドは、各部分が独立して適格である場合、プロンプトなしで実行されます。複合コマンドで cd と git を組み合わせると、cd が異なるディレクトリに変更される場合、プロンプトが表示されます。これは、新しいディレクトリで git を実行するとそのディレクトリのフックを実行できるためです。ターゲットが現在の作業ディレクトリに解決される cd は、操作なしであり、このプロンプトをトリガーしません。
複合コマンドで cd と出力リダイレクトを組み合わせると、Claude Code が cd 実行後にリダイレクトターゲットが解決するディレクトリを判定できない場合、プロンプトが表示されます。唯一のリダイレクトターゲットが /dev/null であるコマンド(cd app; grep -r pattern . 2>/dev/null など)は、/dev/null は作業ディレクトリに依存しないため、このプロンプトをトリガーしません。v2.1.207 より前では、cd を含む複合コマンドは /dev/null への唯一のターゲットを含むものを含む、任意の出力リダイレクトに対してプロンプトを表示していました。
PowerShell
PowerShell 権限ルールは Bash ルールと同じ形式を使用しています。* を使用したワイルドカードは任意の位置でマッチし、:* サフィックスは末尾の * と同等であり、ベア PowerShell または PowerShell(*) はすべてのコマンドをマッチさせます。この設定により、Get-ChildItem および git commit コマンドが許可され、Remove-Item がブロックされます。
PowerShell(Get-ChildItem *) は gci、ls、dir もマッチさせます。マッチングは大文字と小文字を区別しません。
Claude Code は PowerShell AST を解析し、複合コマンド内の各コマンドを独立してチェックします。パイプオペレータ |、ステートメント区切り文字 ;、および PowerShell 7 以降のチェーンオペレータ && と || は複合コマンドをサブコマンドに分割します。複合コマンドが許可されるには、ルールがすべてのサブコマンドをマッチさせる必要があります。
Read と Edit
Edit ルールは、ファイルを編集するすべての組み込みツールに適用されます。Claude は、Grep や Glob などのファイルを読み取るすべての組み込みツールに Read ルールを適用するためにベストエフォートを試みます。また、プロンプト内の @file メンションや、接続された IDE が Claude と共有する選択およびオープンファイルコンテキストにも適用します。
Read deny ルールは、同じパスの Edit ツールもブロックします。これには新しいファイルの作成も含まれます。Write と NotebookEdit はカバーされないため、ツールが変更できないパスに対して Edit deny ルールを追加してください。Claude Code v2.1.208 以降が必要です。
Read と Edit ルールの両方は、gitignore 仕様に従い、4 つの異なるパターンタイプがあります。
/path パターンは、それを定義する設定ファイルに関連付けられたディレクトリにアンカーされるため、同じルールは配置場所に応じて異なる場所にマッチします。
Read(/secrets/**) のような deny ルールをユーザー設定で記述すると、プロジェクト内の secrets ディレクトリではなく、~/.claude/secrets/** をブロックします。すべてのプロジェクト内に適用されるユーザー設定でルールを記述するには、// 絶対パスまたは ~/ ホーム相対パスを使用してください。
Windows では、パスはマッチング前に POSIX 形式に正規化されます。C:\Users\alice は /c/Users/alice になるため、//c/**/.env を使用してそのドライブ上の .env ファイルをマッチさせます。すべてのドライブ全体でマッチさせるには、//**/.env を使用します。
例:
Edit(/docs/**):<project>/docs/での編集(/docs/ではなく、<project>/.claude/docs/でもありません)Read(~/.zshrc): ホームディレクトリの.zshrcを読み取りますEdit(//tmp/scratch.txt): 絶対パス/tmp/scratch.txtを編集しますRead(src/**):<current-directory>/src/から読み取ります
Read(.env) と Read(**/.env) は同等です。
gitignore パターンでは、
* は単一のディレクトリ内のファイルをマッチさせ、** はディレクトリ全体で再帰的にマッチさせます。すべてのファイルアクセスを許可するには、括弧なしでツール名を使用します。Read、Edit、または Write。[、]、* などの gitignore パターン文字をそのパスでエスケープするため、生成されたルールは承認したリテラルパスのみをマッチさせます。自分で記述したルールはエスケープされません。v2.1.202 より前では、Claude Code はパスをエスケープなしで保存していたため、[2024-06] Reports という名前のディレクトリの生成されたルールは、独自のパスをマッチさせできなかったり、意図しない兄弟ディレクトリをマッチさせたりする可能性がありました。
Claude がシンボリックリンクにアクセスするとき、権限ルールは 2 つのパスをチェックします。シンボリックリンク自体と、それが解決するファイルです。Allow ルールと deny ルールはそのペアを異なる方法で扱います。allow ルールはプロンプトにフォールバックし、deny ルールは完全にブロックします。
- Allow ルール:シンボリックリンクパスとそのターゲットの両方がマッチする場合にのみ適用されます。許可されたディレクトリ内のシンボリックリンクがそれの外を指している場合でも、プロンプトが表示されます。
- Deny ルール:シンボリックリンクパスまたはそのターゲットのいずれかがマッチする場合に適用されます。拒否されたファイルを指すシンボリックリンク自体が拒否されます。
Read(./project/**) が許可され、Read(~/.ssh/**) が拒否されている場合、./project/key にあるシンボリックリンクが ~/.ssh/id_rsa を指している場合、ターゲットが allow ルールに失敗し、deny ルールにマッチするため、ブロックされます。
WebFetch
WebFetch ルールはdomain: プレフィックスを使用し、リクエストされた URL のホスト名に対してマッチします。マッチングは大文字と小文字を区別せず、* ワイルドカードをサポートし、ルールとホスト名の両方から末尾の . をストリップするため、example.com. と example.com は同じものとして扱われます。
WebFetch(domain:example.com)はexample.comへのリクエストをマッチさせますWebFetch(domain:*.example.com)はapi.example.comやa.b.example.comなどの任意の深さのサブドメインをマッチさせますが、example.com自体はマッチさせませんWebFetch(domain:*)はすべてのドメインをマッチさせ、ベアWebFetchルールと同等です
*. または全体パターンとしてのみ、* は . を越えてマッチします。それ以外の場所では、ワイルドカードは 2 つのドット間のテキストのみをマッチさせます。WebFetch(domain:example.*) は example.org にマッチします。ここで * は org になりますが、example.evil.com にはマッチしません。ここで * は evil.com になり、ドットを越えます。これにより、末尾のワイルドカードが攻撃者が登録できるドメインをマッチさせるのを防ぎます。
MCP
MCP ルールは、Claude Code で設定されたサーバー名を使用し、オプションでそのサーバーからのツールの名前が続きます。mcp__puppeteerはpuppeteerサーバーによって提供されるツールをマッチさせますmcp__puppeteer__*ワイルドカード構文を使用し、puppeteerサーバーからのすべてのツールもマッチさせますmcp__puppeteer__puppeteer_navigateはpuppeteerサーバーによって提供されるpuppeteer_navigateツールをマッチさせます
ask に設定している場合、そのツールの allow ルールは有効になりません。Claude Code は auto および bypassPermissions モードでも、すべての呼び出しでプロンプトを表示します。プロンプトを表示しない dontAsk モードでは、Claude Code は代わりに呼び出しを拒否します。コネクタツールは mcp__claude_ai_<server>__<tool> として表示されます。
Agent(subagents)
Agent(AgentName) ルールを使用して、Claude が使用できる subagents を制御します。
Agent(Explore)は Explore subagent をマッチさせますAgent(Plan)は Plan subagent をマッチさせますAgent(my-custom-agent)はmy-custom-agentという名前のカスタム subagent をマッチさせます
deny 配列に追加するか、--disallowedTools CLI フラグを使用して特定のエージェントを無効にします。Explore エージェントを無効にするには:
Cd
Cd ルールは、/cd コマンドがセッションを移動できるディレクトリを制御します。Cd はモデル呼び出し可能なツールではありません。Claude はそれを呼び出すことはできず、ルールは自分で /cd を実行する場合にのみ適用されます。
ベア Cd deny ルールは /cd を完全に無効にします。Cd(<path-pattern>) deny ルールはマッチするターゲットをブロックします。Deny ルールはターゲットのすべてのスペルをチェックします。これには、それが解決する各シンボリックリンクホップが含まれるため、1 つのパス用に記述されたルールは、それに解決するターゲットもブロックします。
任意の Cd allow ルールを追加すると、/cd をホワイトリストモードに切り替えます。解決されたターゲットディレクトリは、allow ルールの 1 つにマッチする必要があります。そうでない場合、/cd は拒否します。Cd ルールが設定されていない場合、/cd はデフォルト動作を保持し、見慣れないディレクトリを信頼するようにプロンプトを表示します。
パスパターンは Read と Edit ルールから //、~/、/ アンカーを共有しますが、マッチングはディレクトリパス全体にアンカーされます。gitignore スタイルではなく、* は正確に 1 つのパスセグメントをマッチさせ、** はセグメント全体でマッチさせます。末尾の /** はその名前付きルートもマッチさせます。
フックで権限を拡張する
Claude Code フックは、実行時に権限評価を実行するカスタムシェルコマンドを登録する方法を提供します。Claude Code がツール呼び出しを行うと、PreToolUse フックは権限プロンプトの前に実行されます。フック出力はツール呼び出しを拒否し、プロンプトを強制し、またはプロンプトをスキップしてコールを続行させることができます。 フック決定は権限ルールをバイパスしません。Claude Code は deny ルールと ask ルールを、フックが何を返すかに関係なく評価します。マッチする deny ルールはコールをブロックし、マッチする ask ルールはフックが"allow" または "ask" を返した場合でもプロンプトを表示します。これは、権限を管理するで説明されている deny 優先の優先順位を保持し、管理設定で設定された deny ルールを含みます。
コネクタツール(組織が ask に設定)と MCP ツール(requiresUserInteraction でマーク)も、フックが "allow" を返した場合でもプロンプトを表示します。
ブロッキングフックは allow ルールよりも優先されます。終了コード 2 で終了するフックは、権限ルールが評価される前にツール呼び出しを停止するため、allow ルールがコールを許可する場合でもブロックが適用されます。プロンプトなしですべての Bash コマンドを実行し、ブロックしたい少数のコマンドを除外するには、allow リストに "Bash" を追加し、それらの特定のコマンドを拒否する PreToolUse フックを登録します。適応できるフックスクリプトについては、保護されたファイルへの編集をブロックするを参照してください。
作業ディレクトリ
デフォルトでは、Claude は起動されたディレクトリ内のファイルにアクセスできます。このアクセスを拡張できます。- 起動時:
--add-dir <path>CLI 引数を使用します - セッション中:
/add-dirコマンドを使用します - 永続的な設定:設定ファイルの
additionalDirectoriesに追加します
~/Desktop、~/Documents、~/Downloads などの保護されたフォルダへのアクセスをターミナルとは別に要求します。Claude がそこでファイルを読み取りまたは書き込む必要がある場合、Operation not permitted で読み取りが失敗する場合は、バックグラウンドセッションにフォルダアクセスを許可する方法を参照してください。
セッションの主要な作業ディレクトリを別のディレクトリを追加する代わりに変更するには、/cdを使用します。/cd コマンドには Claude Code v2.1.169 以降が必要です。/add-dir とは異なり、セッションを再配置します。新しいディレクトリの CLAUDE.md が読み込まれ、--resume はそこからセッションを検出します。
追加ディレクトリはファイルアクセスを許可し、設定ではありません
ディレクトリを追加すると、Claude がファイルを読み取りおよび編集できる場所が拡張されます。そのディレクトリを完全な設定ルートにはしません。ほとんどの.claude/ 設定は追加ディレクトリから検出されませんが、いくつかのタイプは例外として読み込まれます。
これらの例外は、--add-dir フラグまたは /add-dir コマンドで追加されたディレクトリにのみ適用されます。設定ファイルの permissions.additionalDirectories にリストされているディレクトリは、ファイルアクセスのみを許可し、以下の設定は読み込みません。
次の設定タイプは --add-dir ディレクトリから読み込まれます。
コマンドおよび出力スタイルは、現在の作業ディレクトリとその親、
~/.claude/ のユーザーディレクトリ、および管理設定から検出されます。Hooks およびその他の settings.json キーは、現在の作業ディレクトリの .claude/ フォルダから親ディレクトリへのフォールバックなしで読み込まれ、ユーザーの ~/.claude/settings.json および管理設定と共に読み込まれます。その設定をプロジェクト全体で共有するには、次のいずれかのアプローチを使用します。
- ユーザーレベルの設定:
~/.claude/agents/、~/.claude/output-styles/、または~/.claude/settings.jsonにファイルを配置して、すべてのプロジェクトで利用可能にします - プラグイン:設定を プラグインとしてパッケージ化および配布し、チームがインストールできるようにします
- 設定ディレクトリから起動する:使用する
.claude/設定を含むディレクトリから Claude Code を実行します
権限がサンドボックスとどのように相互作用するか
権限とサンドボックスは、補完的なセキュリティレイヤーです。- 権限は、Claude Code が使用できるツール、およびアクセスできるファイルまたはドメインを制御します。すべてのツール(Bash、Read、Edit、WebFetch、MCP など)に適用されます。
- サンドボックスは、Bash ツールのファイルシステムとネットワークアクセスを制限する OS レベルの強制を提供します。Bash コマンドとその子プロセスにのみ適用されます。
- 権限 deny ルールは、Claude が制限されたリソースへのアクセスを試みることさえ防止します
- サンドボックス制限は、プロンプトインジェクションが Claude の意思決定をバイパスしても、Bash コマンドが定義された境界外のリソースに到達することを防止します
- サンドボックス内のファイルシステム制限は、
sandbox.filesystem設定と Read および Edit deny ルールを組み合わせます。両方が最終的なサンドボックス境界にマージされます - ネットワーク制限は、WebFetch 権限ルールとサンドボックスの
allowedDomainsおよびdeniedDomainsリストを組み合わせます
autoAllowBashIfSandboxed: true で有効になっている場合(デフォルト)、サンドボックス化された Bash コマンドは、権限に bare Bash ask ルール、または同等の Bash(*) 形式が含まれている場合でもプロンプトなしで実行されます。サンドボックス境界は、そのツール全体のプロンプトの代わりになります。これらのチェックは引き続き適用されます。
Bash(git push *)のようなコンテンツスコープ ask ルールは、引き続きプロンプトを強制します- 明示的な deny ルールは引き続き適用されます
/、ホームディレクトリ、またはその他の重要なシステムパスをターゲットとするrmまたはrmdirコマンドは、引き続きプロンプトをトリガーします
Bash ask ルールを尊重します。サンドボックスモードを参照して、この動作を変更してください。
管理設定
Claude Code 設定の一元的な制御が必要な組織の場合、管理者はユーザーまたはプロジェクト設定でオーバーライドできない管理設定をデプロイできます。これらのポリシー設定は通常の設定ファイルと同じ形式に従い、MDM/OS レベルのポリシー、管理設定ファイル、サーバー管理設定、または自己ホスト型のClaude apps gatewayを通じて配信できます。配信メカニズムとファイルの場所については、設定ファイルを参照してください。管理のみの設定
以下の設定は管理設定からのみ読み込まれます。ユーザーまたはプロジェクト設定ファイルに配置しても効果がありません。disableBypassPermissionsMode は通常、組織ポリシーを強制するために管理設定に配置されますが、任意のスコープから機能します。ユーザーは独自の設定で設定して、自分自身をバイパスモードからロックアウトできます。
Team および Enterprise プランでは、Owner が Claude Code 管理設定でリモートコントロールとウェブセッションを組織全体で有効または無効にします。リモートコントロールは、
disableRemoteControl設定でデバイスごとに無効にすることもできます。ウェブセッションにはデバイスごとの管理設定キーはありません。設定の優先順位
権限ルールは、他のすべての Claude Code 設定と同じ設定優先順位に従います。- 管理設定:コマンドライン引数を含む他のレベルでオーバーライドできません
- コマンドライン引数:一時的なセッションオーバーライド
- ローカルプロジェクト設定(
.claude/settings.local.json) - 共有プロジェクト設定(
.claude/settings.json) - ユーザー設定(
~/.claude/settings.json)
--allowedTools でオーバーライドできず、--disallowedTools は管理設定が定義する内容を超えて制限を追加できます。
設定スコープ全体でも同じことが当てはまります。ユーザー設定で権限が許可されており、プロジェクト設定で拒否されている場合、拒否ルールがそれをブロックします。逆も同様です。ユーザーレベルの deny がプロジェクトレベルの allow をブロックします。これは、任意のスコープからの deny ルールが allow ルールの前に評価されるためです。
埋め込みホストは、parentSettingsBehaviorが "merge" に設定されている場合、SDK の managedSettings オプションを介して追加の管理ポリシーを提供できます。埋め込み元の値はポリシーを厳しくできますが、緩和することはできません。
プロジェクトの許可ルールとワークスペーストラスト
プロジェクトの.claude/settings.json 内の permissions.allow ルールと permissions.additionalDirectories エントリは機能を付与するため、Claude Code はそのワークスペースのワークスペーストラストダイアログを受け入れた後にのみ適用します。それまでの間、Claude Code はルールを読み込みますが適用しません。トラストダイアログには、フォルダが付与する許可ルールと追加ディレクトリが表示されるため、受け入れる前に確認できます。deny ルールと ask ルールは制限のみを行うため、影響を受けません。
Claude Code はワークスペーストを git リポジトリルートをキーとして保存するか、リポジトリ外の場合は Claude Code を起動したディレクトリをキーとして保存します。ホームディレクトリから起動した場合、トラストは現在のセッションのみ保持され、ディスクに書き込まれません。追加のセーフガードに関する注記を参照してください。親ディレクトリを信頼しても、ネストされたプロジェクトの許可ルールは適用されません。
.claude/settings.local.json はあなた自身のファイルであるため、ワークスペーストラストチェックは通常適用されません。リポジトリが git にコミットされている場合や .claude がシンボリックリンクである場合など、リポジトリがファイルを提供できる場合、その許可ルールと追加ディレクトリはプロジェクト設定と同様にトラストチェックを通ります。
Claude Code は git を実行してリポジトリがファイルを提供したかどうかを確認し、その確認は受け入れたトラストダイアログでカバーされているフォルダ、またはそのいずれかの親ディレクトリでのみ実行されます。まだ信頼していないフォルダでの対話的セッションでは、.claude/settings.local.json の許可ルールと追加ディレクトリはプロジェクト設定と同様にトラストチェックを通ります。ただし、以下で説明されているように、セッションが独自の設定ホームで実行される場合を除き、ダイアログを受け入れるまでです。以下の 2 つの例外のうち、設定ホーム例外のみがダイアログの前に適用されます。これは git を実行する必要がないためです。ディレクトリが git リポジトリ内にないことを判定するには、同じ git チェックを使用するため、フォルダをカバーするトラストダイアログが受け入れられると、リポジトリ内にない例外が有効になります。v2.1.207 より前では、追跡されていない .claude/settings.local.json はダイアログを受け入れる前にそのフォルダで許可ルールを適用していました。
.claude/settings.local.json の許可ルールと追加ディレクトリは、2 つのケースではワークスペーストラストなしで適用されます。
- Claude Code を起動したディレクトリが git リポジトリ内にない。
- セッションがあなた自身の設定ホームで実行される。つまり、ホームディレクトリ、または
.claudeサブディレクトリをCLAUDE_CONFIG_DIRとして設定したディレクトリ。
.claude/settings.local.json は依然としてワークスペーストラストが必要です。バージョン 2.1.196 から 2.1.199 では、これらのワークスペースでファイルをリポジトリ提供と見なし、その許可ルールを無視し、stderr に this workspace has not been trusted 警告を出力していました。上記の 2 つの例外は v2.1.195 以前と一致し、v2.1.200 で復元されました。
また v2.1.200 以降、許可ルールまたは追加ディレクトリがまだ適用されていないワークスペースで、親ディレクトリが既に信頼されていたためトラストダイアログが表示されなかった場合、次に Claude Code をそこで対話的に起動したときにダイアログが表示されます。ダイアログは 2 つの選択肢を提供します。
- Yes, I trust this folder: そのワークスペースのトラストを保存し、同じセッション内でルールを適用します。
- No, continue without these permissions: これらのルールを無視して作業を続けます。ダイアログは次のセッションで再度表示されます。
-p を使用する場合、ダイアログは表示されず、ルールは無視されたままになります。