コンテンツにスキップ

permission ルールを書く

tier 2(効いてくる)確認 1 か月前(2026年8月23日)

どこまで来たら使えたと言えるか

面: 両方で同じ

段達成したと言える状態
1. 触る/permissions を開いて現在のルールと、それぞれの出所となる settings.json を一覧した
2. 入れる毎回聞かれて煩わしい操作に allow ルールを、触られたくない場所に deny ルールを書き、意図どおり効くことを確認した
3. 効かせるdeny → ask → allow の評価順とパスパターンの解決先を踏まえ、ルールが効かないときに原因を特定できる

何のためのものか

何にアクセスし何をできるかを、ルールで細かく決める仕組み。mode が基準なら、こちらは個別の例外である。

permission ルールは Claude Code が強制するものであり、モデルが強制するものではない。 プロンプトや CLAUDE.md の指示は Claude が何を試みるかを形作るだけで、何を許すかは変えない。

触る

  1. /permissions を開く。全ルールと、それぞれの出所となる settings.json が見える
  2. permission prompt が出たときに Ctrl+E を押す。コマンドの説明が Low risk / Med risk / High risk のラベル付きで表示される(押したときにだけモデルへ送られ、表示しても実行はされない)

「Yes, don't ask again」で承認したものは、git リポジトリルートの .claude/settings.local.json に保存される。

入れる

書き方は Tool または Tool(specifier)。括弧なしはそのツールのすべての使用に一致する。

対象例注意
BashBash(ls *)末尾のスペース付き * は語境界を強制する。Bash(ls *) は lsof に一致しない
ファイル読み書きRead(.env)、Edit(/src/**/*.ts)Edit ルールはファイルを編集するすべての組み込みツールに適用される
ドメインWebFetch(domain:*.example.com)先頭 *. はサブドメインのみ。example.com 自体には一致しない
MCPmcp__puppeteer、mcp__github__get_*allow の glob は mcp__<server>__ の後ろにのみ置ける
subagentAgent(Explore)

パスの anchor を覚える。//path はファイルシステムルート、~/path はホーム、/path はsettings のソースからの相対、path は現在のディレクトリからの相対。/Users/alice/file は絶対パスではない。

効かせる

  • 評価順は deny → ask → allow。 最初に一致したものが結果を決め、ルールの具体度は順序を変えない。Bash(aws *) の deny は、より狭い Bash(aws s3 ls) の allow に一致する呼び出しもブロックする
  • deny はどのスコープからでも勝つ。 user が allow、project が deny なら deny
  • 深さの一致がルール種別で変わる。 allow の Edit(src/**) は <cwd>/src 配下のみ。deny / ask の Read(secrets/**) は任意の深さの secrets に一致する
  • ラッパーは事前に取り除かれる。 timeout / time / nice / nohup などは照合前に外れる。一方 devbox run や npx のような環境ランナーは外れないので、Bash(devbox run npm test) のようにランナーと内側のコマンドを両方含めて書く
  • hook を重ねられる。 PreToolUse hook は permission prompt の前に走るが、hook の判断は permission ルールを迂回しない(deny と ask は hook の戻り値に関わらず評価される)

落とし穴

  • パスルールを書ける先は Edit と Read だけ。 Write / NotebookEdit / Glob にパスルールを書いても参照されず、起動時に警告が出る。どのツールにも触らせたくないパスには Edit の deny を書く
  • deny ルールは任意のサブプロセスには効かない。 組み込みファイルツールと、Claude Code が認識する Bash のファイルコマンドまで。Python や Node のスクリプトが自分で開くファイルは止まらない。OS レベルで止めるなら sandbox
  • project の allow ルールは workspace trust の承認後にしか効かない。 ルールは読まれるが適用されない。-p の非対話モードではダイアログが出ないため、無視されたままになる
  • ツールの主要コンテンツフィールドは Tool(param:value) で指定できない。 Bash(command:rm *) のようなルールは無視され、起動時に警告が出る
  • --add-dir と permissions.additionalDirectories は同じではない。 前者からは skill と subagent が読み込まれるが、後者はファイルアクセスだけを与える

根拠と前後

このページが書ける範囲は、根拠にした facts に書かれていることだけです。 仕様そのものはそちらを読んでください。