Claude Code が allow / deny の権限ルールを無視して毎回確認を出す時の原因と直し方

確認を出さないように allow のルールを足したのに、毎回確認が出る。deny を書いた、あるいは bypassPermissions を設定したのに、挙動が変わらない。困るのは、こっそり一致していない権限のルールは、ルールが無いより危険な点です。守られているつもりで作業を続けてしまうからです。これが実際に起きる原因を、確認すべき順に並べました。

まず /permissions で「実際の」ルールを見る

何かを変える前に、Claude Code で /permissions を実行してください。統合された後の有効なルールと、Claude が実際に照合している形が表示されます。「ルールが無視される」のほとんどは、書いた内容と /permissions に出る内容のずれです。期待するルールがそこに在るか、別の形になっていないかを照合してください。これが手元での正本です。

原因1: Windows のパスの正規化(backslash と UNC は一致しない)

Windows では、ルールを照合する前にパスが POSIX 風の形に正規化されます。C:\Users\alice\project/c/Users/alice/project として照合されます。そのため、backslash で書いたルールや \\server\share のような UNC のパスは、正規化後の形と永久に一致せず、毎回確認に落ちます。

直し方: パスのルールは forward-slash の POSIX の形で書き、正確な正規化後の文字列は推測せず /permissions で確認してください。ドライブや UNC の正規化後の形は自明でないことがあるので、/permissions からコピーしてルールを組み立てます。

原因2: どの設定ファイルがそのルールを持つか(優先順位)

ルールは複数のファイルから統合され、上位の層が今編集した内容を上書きします。おおよそ、上位から下位の順に:

場所
組織・管理の方針システムが管理する設定
コマンドラインの引数claude の起動に渡す引数
プロジェクト(ローカル・追跡外).claude/settings.local.json
プロジェクト(共有).claude/settings.json
ユーザー~/.claude/settings.json

上位の層の deny は、下位で足した allow に勝ちます。また .claude/settings.local.json に書いたのを忘れたルールが、プロジェクトのファイルを静かに覆い隠すこともあります。/permissions は統合後の結果を出すので、自分のルールが勝っていないなら、どのファイルが衝突する記述を持っているかを探します。

原因3: ルールのツール名や書式が一致していない

ルールは、ツール名とパターンの両方が、Claude がこれから行う内容に一致した時だけ発火します。

原因4: 効いているモードが settings.json の defaultMode を上書きする

defaultMode(例: acceptEditsbypassPermissions)を settings.json に設定したのに確認が出るなら、使っている画面の側が上書きしている可能性があります。VS Code の拡張では、UI で選んだモード(例えば acceptEdits にあたる「自動で編集」)が settings.json の既定より優先されます。さらに bypassPermissions は拡張の独自のトグル(claudeCode.allowDangerouslySkipPermissions)でゲートされ、そのトグルを有効にするまで settings.json の bypass は効きません。

直し方: モードは settings.json だけでなく、実際に動かしている画面(拡張の UI のモードの選択、またはコマンドライン)で設定します。VS Code で bypass を使うなら、先に拡張のトグルを有効にします。
bypass の安全の注意

確認を止めるために一括の bypass を有効にすると、本当に取り返しのつかない操作を止めている分も含めて、全てのガードが一度に外れます。「日常の編集は acceptEdits、取り返しのつかない数件の操作は deny のリスト」という狭い設定の方が、確認が雑音になる所では止め、効くべき所では残せます。

原因5: skipDangerousModePermissionPrompt は「警告」を消すだけ

確認そのものを止めるつもりで skipDangerousModePermissionPrompt を設定したなら、それは違う梃子です。これは危険なモードに入る時に出る警告を消すだけで、操作ごとの確認は消しません。しかも一度設定すると「ガード無しで動いている」という警告が二度と出なくなり、欲しかった挙動は得られないまま、安全の合図だけが消えます。

原因6: セッションの途中で設定を編集した

Claude Code が動いている間に settings.json(や hook)を編集しても、セッションを再起動するまで反映されないことがあります。ルールを直したのに変わらないなら、Claude Code を再起動して /permissions で再確認します。

直したら、実際に発火するか確認する

/permissions に出るようになったルールは照合されています。ただし最も確実な確認は挙動の確認です。その操作を一度だけ実際に起こして、意図どおりに許可・拒否・確認されるかを見ます。権限のルールの目的は「肝心な時に効くこと」で、効くと分かる唯一の方法は一度動かしてみることです。

プロンプトのモードの混乱に依らず、ツールの段で守りたいなら

npx cc-safe-setup

破壊的・取り返しのつかない操作を実行の前に止める無料の hook。どの UI のモードが効いていても、ツールの段で守ります。

GitHub · npm

本ページは公開された Anthropic の権限と設定のドキュメントと、再現された報告に基づきます。権限の挙動は版や画面(コマンドラインか VS Code の拡張か)で変わりうるので、手元では /permissions が正本です。最新は公式のドキュメントで確認してください。cc-safe-setup は Anthropic とは無関係の独立したオープンソースです。

さらに詳しく: 事故防止の実践ガイド(Zenn) · 全ツール