Claude Codeの権限設定を曖昧にすると、危険な操作が自動で進むか、安全な操作にまで毎回確認を求められます。公式ドキュメントと自社のsettings.json実例で、危険操作だけを止める配分を示します。

01結論:Claude Codeの権限設定は、allow・ask・denyの3列に操作を仕分けて配分する

設定は .claude/settings.jsonpermissions フィールドに書きます。deny・ask・allowの3配列と defaultMode を持ちます(出典: Claude Code公式ドキュメント)。

設定効果一致したときの挙動
deny拒否確認すら出さずにブロックする
ask確認毎回ユーザーの承認を求める
allow許可確認なしでそのまま実行する

評価順序はdeny→ask→allowで固定で、最初に一致したルールが結果を決めます。ルールの細かさ(特異度)は順位に影響しません(出典: Claude Code公式ドキュメント)。例えば Bash(aws *) がdenyなら、狭い Bash(aws s3 ls) のallowがあってもブロックされます。

ツール呼び出しがdeny→ask→allowの順で評価され、特異度は無関係という規則 Claude Codeの権限設定でツール呼び出しがどう判定されるかを示す図。①denyに一致するかを最初に判定し、一致すればブロックされ、より狭いallowルールが別にあっても届かない。②不一致ならaskとの一致を判定し、一致すれば確認ダイアログが出る。③さらに不一致ならallowとの一致を判定し、一致すれば確認なしで実行される。3つとも不一致なら現在の権限モードの既定に従う。評価順序はdeny→ask→allowで固定され、ルールの細かさ(特異度)は順序に影響しない。 BRANCH deny→ask→allowは、最初に一致した1つだけが効く ①denyと一致するか 一致 ブロックされる 特異度は無関係。狭いallowより先に一致 不一致 ②askと一致するか 一致 確認ダイアログが出る 不一致 ③allowと一致するか 一致 確認なしで実行される 権限モードの既定に従う 3列のうち最初に一致した1つだけが効く。deny→ask→allowの順は固定。
Claude Codeの権限設定でツール呼び出しがdeny→ask→allowの順に評価される様子を示す図

02権限設定を始める前に要る前提(バージョンと設定ファイルの場所)

検証環境はClaude Code公式ドキュメント(code.claude.com/docs、2026-07-28時点の記載)です。設定ファイルの場所は5段階あり、上位が下位を上書きします(出典: 同)。

順位設定ファイル主な用途
1Managed settings組織の一括管理。他のどの段からも上書き不可
2コマンドライン引数セッション単位の一時的な上書き
3.claude/settings.local.json(プロジェクト)個人用。Git管理対象外が前提
4.claude/settings.json(プロジェクト)チーム共有。Git管理対象
5~/.claude/settings.json(ユーザー)全プロジェクト共通の既定

deny側はどの段でも積み上がり、1段でも拒否すればブロックされます。ユーザー設定で許可済みでも、プロジェクト設定が拒否すればそのプロジェクトは拒否のままです(出典: 同)。

ルールに一致しなかったときの挙動を決めるのが defaultMode で、6種類あります。

モード確認なしで進む範囲
default(Manual)読み取りのみ
acceptEdits読み取り・ファイル編集・mkdir等の一般的なコマンド
plan読み取りと調査コマンドのみ。ソースは編集しない
auto分類器による安全確認つきで、ほぼ全操作
dontAskallowルールに一致するものだけ
bypassPermissionsほぼ全操作。コンテナ等の隔離環境専用

autoモードは3回連続、または合計20回ブロックされると通常のプロンプトに戻り、この閾値は変更できません(出典: Claude Code公式ドキュメント)。defaultModeはルールに一致しなかった残りの既定値です。

03denyへ先に置く危険操作の決め方|権限設定の土台になる4分類

権限設定の土台はルールを書く前の分類で、WEBMARKSは可逆性(元に戻せるか)と影響範囲(外部やシステムに届くか)の2軸で仕分けています。

危険操作をallow・ask・denyのどこに置くか、可逆性と影響範囲の2軸で判定する 危険操作をallow・ask・denyのどこに置くかを、縦軸に可逆性(上ほど取り返しがつかない)、横軸に影響範囲(右ほど外部・システムに届く)を取った2×2のマトリクスで示す図。取り返しがつかず外部にも届く象限はdenyとし、rm -rfやforce push、.envの読取を置く。取り返しはつくが外部に届く象限はaskとし、git pushやMCPの送信系ツールを置く。両方ローカルで軽微な象限はallowとし、npm testや読み取り専用コマンドを置く。取り返しがつかないがローカルだけの操作は迷いやすいため、askへ倒すことを明記する。 MATRIX 危険操作はallow・ask・denyのどこに置くか、可逆性×影響範囲で決まる deny ask allow askへ倒す(要判断) 例:大量ファイルの一括削除 deny rm -rf/force push/.env読取 allow npm test/ls・cat等の読取専用 ask git push/MCPの送信系ツール 可逆性(上ほど取り返しがつかない) 影響範囲(右ほど外部・システムに届く) 同じ「元に戻せない」でも、外部に届くかどうかでdenyとaskが分かれる
危険操作をallow・ask・denyのどれに置くかを、可逆性(取り返しがつくか)と影響範囲(ローカルのみか外部に届くか)の2軸で判定するマトリクス図

取り返しがつかず外部やシステムにも届く操作はdenyに置きます。実際の.claude/settings.jsonの抜粋です(2026-07-28時点)。

{
  "permissions": {
    "deny": [
      "Bash(rm -rf*)",
      "Bash(sudo rm*)",
      "Bash(git push --force*)",
      "Bash(git reset --hard*)",
      "Read(**/.env)",
      "Read(**/id_rsa*)",
      "Edit(02-company_knowledge/.../03_定量実績.md)",
      "Write(02-company_knowledge/.../03_定量実績.md)"
    ]
  }
}

最後の2行は事業の公式数値を1ファイルに集約し、AIによる書き換え自体を拒否する例で、正本運用を権限設定でも二重に固定しています。

取り返しはつくが外部に届く操作(git push・配信系ツールの送信)はaskに、両方ローカルで軽微な操作はallowです。

読み取り専用コマンドの一部はClaude Code側に組み込み済みで、モードを問わず確認なしに実行されます(出典: Claude Code公式ドキュメント)。対象はls cat grep findなど14種と、読み取り専用のgitです。

取り返しがつかずローカルだけの象限は判断に迷いますが、大量ファイルの一括削除などはaskへ倒すのが安全側です。

04settings.jsonへallow・ask・denyを書く権限設定の実装手順

ルールの書式は Tool または Tool(指定子) です。ツール名だけなら全呼び出しに一致し、括弧内の指定子で絞り込めます(出典: Claude Code公式ドキュメント)。

記法一致する対象
BashすべてのBashコマンド
Bash(npm run build)完全一致する1コマンドだけ
Bash(npm run test *)npm run test で始まるコマンド
Read(./.env)カレントディレクトリの.env読み取り
WebFetch(domain:example.com)example.comへのfetch
mcp__puppeteer__*puppeteerサーバーの全ツール
Agent(Explore)Exploreサブエージェント

ワイルドカードは * の前の空白の有無で挙動が変わります。Bash(ls *)ls -la に一致しますが lsof には一致しません。空白のない Bash(ls*) はどちらにも一致します(出典: Claude Code公式ドキュメント)。

{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)",
      "Bash(git * main)"
    ],
    "deny": [
      "Bash(git push *)"
    ]
  }
}

複合コマンドは && || ; | ごとに分解され、個別に判定されます。Bash(safe-cmd *) を許可しても other-cmd 側までは許可されません。複合コマンドを承認すると、サブコマンドごとに最大5個までルールが自動保存されます(出典: Claude Code公式ドキュメント)。

ワイルドカードだけでは防ぎきれないパターンもあり、WEBMARKSはsettings.jsonのルールに加えPreToolUseフックで防御を重ねています。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "/usr/bin/python3 -I -B '<Vaultルート>/.claude/hooks/bash-guard.py'"
          }
        ]
      }
    ]
  }
}

このフックは危険と判定したコマンドを終了コード2で止めます。標準エラーの内容がそのままモデルへ返り、ツール呼び出し自体は実行されません(出典: Claude Code公式ドキュメント)。実際にgit pushを検出したときの応答は次のとおりです。

⛔ bash-guard: `git push`はwrapper・間接実行・--no-verifyを含めて人間専権です。AIはローカルcommitまでで停止してください。

公式ドキュメントも、Bash向けワイルドカードだけのURL制限は壊れやすいと明記しています。Bash(curl http://github.com/ *) のつもりでも素通りする書き方が5通りあります。オプションを前に置く・httpsにするなどです(出典: Claude Code公式ドキュメント)。URL制限が要るなら、Bash経由のネットワークコマンドはdenyし、WebFetch(domain:...)かPreToolUseフックで検証します。

05権限ルールでつまずきやすい3つの落とし穴

落とし穴1:素のBashをdenyに書いて全部止めてしまうrm だけを止めたいのに "deny": ["Bash"] と書くと、ツール名だけの記法としてBashツールそのものがモデルの視界から丸ごと消えます。狭めたいときは Bash(rm *) のように指定子つきで書きます(出典: Claude Code公式ドキュメント)。

落とし穴2:狭いallowがdenyの例外になると思い込む。ファイアウォールの例外設定のように、広いdenyの中に狭いallowを混ぜれば通ると考えがちです。評価順序はdeny→ask→allowで固定で、denyが先に一致した時点で後段のallowは評価されません(出典: Claude Code公式ドキュメント)。

落とし穴3:プロジェクトのallowルールが最初のセッションで効かない。新しいプロジェクトの.claude/settings.jsonにallowルールを書いても、ワークスペース信頼ダイアログを承認するまで適用されません。ルールは読み込まれても権限は付与されない状態です(出典: Claude Code公式ドキュメント)。「書いたのに動かない」と感じたら、まずこのダイアログの承認を確認します。

06/permissionsでClaude Codeの権限設定を動作確認する

設定を書いたら、動かして確かめます。合否の基準は次の4項目です。

  1. /permissions を実行する。入力不要で、各ルールと出所のsettings.jsonの一覧が出ます。期待:deny・ask・allowそれぞれに書いたルールが表示される(出典: Claude Code公式ドキュメント)。
  2. denyに置いた操作を実際に呼び出させる。入力例:rm -rfを含む操作。期待:実行されず、ブロックの理由が表示される。
  3. askに置いた操作を呼び出させる。入力例:git push。期待:毎回、確認ダイアログが出る。
  4. allowに置いた操作を呼び出させる。入力例:許可した読み取り専用コマンド。期待:確認なしで完了する。

4項目とも期待どおりなら合格です。ズレたらワイルドカード(空白の有無、*の位置)と評価順序を見直します。askのはずが確認なしで進んだ場合は、広いallowルールが先に無いか/permissionsの一覧で確認します。

07FAQ

Claude Codeの権限設定はdefaultMode以外にどこに書けますか

権限設定の主な項目はpermissions配下のallow ask deny additionalDirectoriesの4つです。additionalDirectoriesは作業ディレクトリ外へのアクセスを追加します。

権限設定はどのくらいの頻度で見直すべきですか

新しいMCPサーバーやツール追加時、Claude Codeのバージョン更新時に見直します。本記事は特定バージョンの公式仕様に依存するため、鮮度ラベルはwatch(四半期棚卸し対象)です。