Quartet / Quintet

Claude Code の権限ルールで、書けるのに無視されるもの

権限ルールで困るのは、間違っていても JSON としては正しいことです。

permissions.allow に書いた1行が効いていないとき、 壊れているのか、そういう仕様なのかが設定ファイルからは分かりません。

公式ドキュメントが「無視される」「スキップされる」「起動時に警告する」と 明記しているものを、1か所に集めました。推測は入れていません。

一覧

書き方 何が起きるか
"*" / "B*" / "mcp__*"allow スキップされ、何も自動承認しない。 警告が出る
Write(...) / NotebookEdit(...) / Glob(...) / MultiEdit(...) のパス指定 受け付けられるが参照されない。 起動時に警告
Bash(command:...) のように本体の入力をパラメータ指定 無視される。 起動時に警告
括弧つきの mcp__ ルール(mcp__memory(read) 読み込み時にスキップ。 起動時のダイアログと claude doctor に出る
allow で * のうしろにまだ字が続く(Bash(git * main) 効くが、見た目より広く許可する。 起動時に警告

どれもエラーにはなりません。 設定は読み込まれ、その1行だけが死にます。

それぞれの中身

アンカーの無い allow グロブ

deny と ask はツール名の位置にグロブを書けますが、allow は書けません。

allow でグロブが使えるのは mcp__<サーバ名>__ まで書いたあとだけです。

// 効く
"mcp__puppeteer__*"
"mcp__github__get_*"

// スキップされる(何も自動承認しない)
"*"
"B*"
"mcp__*"

サーバ名の部分にグロブは置けません。どのサーバかを名指ししている必要があります。

パス指定が参照されないツール

ファイルパスのルールが効くのは Read(...)Edit(...) だけです。

Write / NotebookEdit / Glob / 旧 MultiEdit に書いても、 受け付けられたうえで一度も参照されません。

本体の入力へのパラメータ指定

Tool(param:value) の形は、deny と ask で上位のパラメータに対して使えます。

ただしそのツールの本体にあたる入力は指定できません。

ツール 本体の入力
Bash / PowerShell command
Read / Edit / Write file_path
Grep / Glob path
NotebookEdit notebook_path
WebFetch url

Bash(command:rm *)複合コマンドで抜けられてしまうので、意図的に無視されます。

// 無視される
"Bash(command:rm *)"
"Read(file_path:./.env)"

// こう書く
"Bash(rm *)"
"Read(./.env)"
"WebFetch(domain:example.com)"

括弧つきの mcp__ ルール

設定ファイルを読み込むとき、括弧のある mcp__ ルールは飛ばされます。

MCP ツールのパラメータで絞りたい場合は、設定ファイルではなく CLI の --disallowedTools を使います。

飛ばされたルールは、対話セッションの起動時ダイアログと claude doctor に出ます。

* のうしろにまだ字が続く allow

*その位置の文字列すべてに当たります。 だから * を前に置くほど、ルールは広くなります。

書き方 実際に許可されるもの
Bash(git log *) git log から始まるコマンド
Bash(git * main) git push origin main も含む、あらゆる git サブコマンド
Bash(* --version) あらゆるプログラム

Bash(git * main)git全サブコマンドを許可します。 -c も含むので、git に別のプログラムを起動させることもできます。

ついでに: :* は末尾でだけ効く

Bash(ls:*)Bash(ls *) と同じです。ただし末尾に置いたときだけ。

Bash(git:* push): はただの文字として扱われ、git のコマンドには当たりません。

空白の有無が意味を変えます

末尾の * の前の空白は、ルールの一部です。

書き方 当たる 当たらない
Bash(ls *) ls -la, ls lsof
Bash(ls*) ls -la, lsof

末尾の *そのルール唯一のワイルドカードのときだけ、 Bash(ls *) は引数なしの ls にも当たります。

検査する

上の5つは機械で見つけられます。

npx @quintetkit/ccheck
warn  .claude/settings.json:14
      `Bash(command:rm *)` is ignored. `command` is Bash's own content field and
      cannot be matched as a parameter. Write `Bash(rm *)` instead.
      why: https://code.claude.com/docs/en/permissions

指摘には必ず出典が付きます。 根拠を示せないものはルールにしていません。

deny / ask のツール名が実在するかはあえて検査していません。 公式は「知らないツール名なら起動時に警告する」としていますが、 その判定には最新のツール一覧が要ります。 こちらが持てるのはスナップショットだけなので、 新しいツールが増えるたびに誤検出します。

出典

https://code.claude.com/docs/en/permissions

2026-09-04 に取得したスナップショットを元にしています。

この運用そのものを配っています

4 人格版 Quartet は MIT で無料公開しています。UI 設計人格・レビュー基準・ Issue 単位の並列実行スクリプト・実践ガイド 10 章を足した Quintet は有料版です。

無料版を見る 製品ページ