何のためのものか
組み込みツールの一覧と挙動。ここに載っているツール名は、permission rule / subagent の tool list / hook matcher でそのまま使う文字列である。名前を正確に知らないとルールが空振りする。
触る
- 使えるツール集合はプロバイダ・プラットフォーム・設定で変わる。 実行中のセッションで確認するには Claude に直接尋ねる
- MCP の正確なツール名は
/mcpで見る
まずは「読む系(Read / Grep / Glob)は作業ディレクトリ内なら permission 不要、書く系(Edit / Write / NotebookEdit)と Bash は必要」という大枠だけ押さえる。
入れる
ルールを書くとき、ツールごとに specifier の形が違うことを見る。
| ルール形式 | 適用先 |
|---|---|
Bash(npm run *) | Bash, Monitor |
Read(~/secrets/**) | Read, Grep, Glob, LSP |
Edit(/src/**) | Edit, Write, NotebookEdit |
Skill(deploy *) | Skill |
Agent(Explore) | Agent |
WebFetch(domain:example.com) | WebFetch |
- ここに無いツールは specifier 無しの素のツール名しか受け付けない
Edit(...)の allow ルールは同じパスへの読み取りも与える。 対応するRead(...)ルールは要らない- hook の
matcherは括弧付きではなく素のツール名を使う(絞りたいなら hook のif側で書く)
効かせる
よく踏む 3 つの挙動を知っておく。
Bash
- 各コマンドは別プロセス。環境変数は持続しない(
exportは次のコマンドに残らない)。持続させたいならCLAUDE_ENV_FILEかSessionStarthook - メインセッションの
cdは、プロジェクトディレクトリまたは追加作業ディレクトリの中に留まる限り引き継がれる。範囲外へ出るとリセットされShell cwd was reset to <dir>が付く - 出力が大きいとファイルに退避される。成功時は約 30,000 文字、失敗時は約 10,000 文字までがインライン
- exit 1 が「無害」と扱われるのは一部のコマンドだけ(
grep、find、diff、test、git diffなど)。それ以外は失敗扱いになる - タイムアウトに達したコマンドは停止ではなくバックグラウンドへ移される
Edit
- 完全一致の文字列置換で、正規表現やあいまい一致は無い
- 通るには 3 つ必要。Read-before-edit(同じ会話で読んでいること。
PARTIAL viewの読み取りは数えない)、Match(空白まで正確に一致)、Uniqueness(ちょうど 1 回だけ現れる。無理ならreplace_all: true)
Grep / Glob
- Grep は ripgrep の正規表現構文。メタ文字はエスケープが要る(
interface\{\})。.gitignoreを尊重するので無視されたファイルは飛ばされる(探すならパスを直接渡す) - Glob は逆に既定で
.gitignoreを尊重しない。結果は更新時刻順で 100 ファイルで打ち切られる
落とし穴
AskUserQuestionは既定で答えるまで開いたまま。 離席で止めたくないならaskUserQuestionTimeoutを設定する。permission prompt はアイドルで自動解決されないEndConversationは他のツールが残っている限りブロックできない。 deny / ask ルールも--disallowedToolsも効かない- subagent の起動自体は permission を求めない。 照合されるのは subagent 自身のツール呼び出し
TodoWriteは既定で無効(TaskCreate/TaskUpdateなどが優先される)- advisor tool は API 側が実行する server tool で、permission ルールや hook matcher で参照できる名前は無い