Claude Media
Claude Codeの--toolsフラグで使えるツールを絞り込む

Claude Codeの--toolsフラグで使えるツールを絞り込む

Claude Codeの--toolsフラグで組み込みツールを絞り込む書き方と、--allowedTools・--disallowedTools・--restrictedとの使い分けを解説します。

Claude Codeの--toolsフラグでできること

--toolsは、Claude Codeのセッションが起動時に使える組み込みツールをカンマ区切りで絞り込む起動オプションです。指定した名前のツールだけが有効になり、リストに無い組み込みツールはセッションから消えます。書式は単純です。空文字""を渡せば全ツール無効、"default"を渡せば既定セットに戻ります。

対象になるのはBash・Edit・Read・Agentのような組み込みツール名です。評価用のサンドボックスでファイル書き込み系のツールを丸ごと外したいときや、特定用途のセッションを最小限のツールだけで動かしたいときに使います。実際に使えるツールの一覧はプロバイダー・OS・設定によって変わります。MCPツールの正確な名前は/mcpで見られます。似た名前のフラグが他に3つあり、役割はそれぞれ違います。

構文と具体例 — カンマ区切り・空文字・defaultの意味

構文はカンマ区切りでツール名を並べるだけです。スペースは入れません。

claude --tools "Bash,Edit,Read"

上のコマンドはBash・Edit・Readの3つだけを有効にし、WriteやWebFetchを含む他の組み込みツールは使えなくなります。全ツールを無効化したいときは空文字を渡します。

claude --tools ""

既定セットに戻したいだけなら"default"を渡します。ただし、この"default"は全部入りという意味ではありません。v2.1.287でclaude --helpを見ると、--toolsの説明は次のとおりです。

claude --version
# 2.1.287 (Claude Code)
claude --help
#   --tools <tools...>   Specify the list of available tools from
#                        the built-in set. Use "" to disable all
#                        tools, "default" to use all tools, or
#                        specify tool names (e.g. "Bash,Edit,Read").

ヘルプでは"default"を「use all tools」と書いていますが、CLIリファレンスでは、macOS・Linux・WSLの既定セットにGlobとGrepは入らないとされています。ヘルプの文言から全ツールが有効になると読むと、この2つで食い違います。

TaskCreate・TaskGet・TaskList・TaskUpdateのようなタスク管理ツールは、Claude 3.x系・Opus 4〜4.7・Sonnet 4〜4.6・Haiku 4.5では既定で有効ですが、それ以外のモデルでは既定から外れます(この既定はClaude Code v2.1.268以降の挙動です)。--toolsのリストにタスク管理ツールの名前を含めると、対象外のモデルでもそのセッションだけタスク管理ツールを使えるようになります。

claude --tools "Bash,Edit,Read,TaskCreate,TaskGet,TaskList,TaskUpdate"

環境変数CLAUDE_CODE_ENABLE_TODO_TOOLS=1でも同じツールが手に入りますが、こちらは全モデル・全プロバイダーに一律で効きます。1回のセッションだけで有効にしたいなら、--toolsか--allowedTools TaskCreateのようなフラグ指定です。Agent SDKではallowedTools・toolsオプションが同じ働きをします。

バックグラウンドセッションとクラウドセッションでは、モデルやリストの有無に関わらずタスク管理ツールが提供されます。CLAUDE_CODE_ENABLE_TASKS=0を設定すると、4つのTaskツールの代わりにTodoWriteが使われます。

--allowedTools・--disallowedTools・--restrictedとの使い分け

似た名前のフラグが複数あり、役割は重なりません。--allowedTools(--allowed-toolsとも書けます)はプロンプトなしで実行してよいツールを指定するもので、ツールの存在自体は消しません。公式ドキュメントも「使えるツールの範囲を絞りたいなら--toolsを使う」と明記しています。--disallowedTools(--disallowed-tools)は逆に拒否ルールで、裸のツール名を渡すとそのツールをコンテキストから除去し、Bash(rm *)のようなスコープ付きルールならツール自体は残したまま特定の呼び出しだけを拒否します。

フラグ対象効果具体例
--tools対象組み込みツール(MCPは対象外)効果指定した名前だけを有効にする具体例--tools "Bash,Edit,Read"
--allowedTools対象組み込み・MCP問わず効果プロンプトなしで実行を許可(存在は消さない、タスク管理ツール名の指定はopt-inにもなる)具体例--allowedTools "Bash(git log *)" "Read"
--disallowedTools対象組み込み・MCP問わず効果裸の名前はツール自体を除去、スコープ付きは呼び出しだけ拒否具体例--disallowedTools "Edit" "Bash(rm *)"
--restricted対象コマンド実行系ツールとWebFetch効果defaultプリセットでは復元されず、--toolsの個別指名でのみ復元具体例--restricted -p "query"

--restrictedは評価用ハーネスが共有マシン上でClaude Codeを動かすような、より強いモードです。コマンドやコードを実行するツールとWebFetchを一律で外し、ファイル操作を作業ディレクトリの範囲に閉じ込めます(Claude Code v2.1.248以降)。環境変数CLAUDE_CODE_RESTRICTED=1でも同じモードで起動します。ただし設定ファイルのenv欄に書いても効きません。

--helpの説明では、ユーザー・プロジェクト・ローカルの設定ファイルも読まず、管理設定と--settingsだけが効きます。MCPサーバーまで読み込ませたくないときは--strict-mcp-configを足します。設定ファイル・git・ツール設定ファイルへの書き込みは、人間か、設定された権限ハンドラーだけが承認できます。

bypassPermissionsモードへの切り替えは拒否され、そのセッションからクラウドセッションを新規作成することもできません。同じ「絞り込み」でも、--restrictedはセキュリティ境界を張る機能、--toolsは用途に応じてツール一式を組み替える機能という役割分担です。

CLIリファレンスでは、--allowedTools・--disallowedToolsの例にBash(git log *)のようなスコープ付きルールが並びますが、--toolsの例は裸のツール名だけです。ツールの一覧を絞るだけの--toolsと、呼び出し内容まで見て許可・拒否を判定する--allowedTools/--disallowedToolsとでは、想定している粒度が違うと考えたほうが混乱しません。hookでも似た分担になっています。matcherはツール名に当てる欄で、Bash(rm *)のような引数まで見る絞り込みは別のif条件に書きます。粒度の面で--toolsに近いのはmatcherのほうです。権限ルールの書き方そのものはClaude CodeのallowedTools/disallowedToolsで起動時に権限を絞る、起動モードの選び方はClaude Codeの--permission-modeで起動モードを指定するで扱っています。

macOSとLinuxでGlobとGrepが既定で消えている理由

macOS・Linux・WSLでは、GlobとGrepは既定のツールセットに含まれません。Claude Codeは代わりにBash経由のfindとgrepでファイル探索と検索をこなします(Windowsでは既定セットに含まれます)。Claudeのシェルでは、この2つのコマンドが組み込み版のbfsとugrepとして動きます。検索はhookや権限ルールから見るとBashの呼び出しです。

この既定を知らずに--toolsで絞り込むと、狙った検索が動かない状態にはまります。復元の挙動は、フラグによって違います。

くらべる

GlobとGrepの戻り方

書いたものだけ

--tools

どちらか一方だけを書くと、書いたほうしか戻りません。--tools "Bash,Grep"ならGrepだけが使え、Globは消えたままです。両方戻すなら--tools "Bash,Glob,Grep"と並べます。

両方まとめて

--allowedTools

どちらか一方を名指しするだけで、2つが揃って戻ります。--allowedTools "Grep"でGlobも使えるようになります。設定ファイルの許可ルールには、この効果がありません。

Glob・Grepが戻る条件はもう2つあります。拒否ルールや--disallowedTools、--restrictedのいずれかでBashをセッションから外すこと、そしてサブエージェントのtoolsフィールドでBashを含めずGlobかGrepを指定することです。後者はそのサブエージェントだけ、あるいは--agentでメインセッションとして起動した場合はセッション全体に効きます。

2つのツールは、.gitignoreの扱いも違います。Globは既定でgitignoreされたファイルも見つけ、Grepは読み飛ばします。Globに.gitignoreを尊重させるには、起動前にCLAUDE_CODE_GLOB_NO_IGNORE=falseを設定します。

もう1つ実務上のつまずきがあります。--toolsで実体のGrepツールを有効にすると、検索エンジンがripgrepに変わり、正規表現の書式もBash経由のgrepが使っていたPOSIX系ではなくripgrep流になります。Goコードのinterface{}を検索したいときはinterface\{\}のようにエスケープが必要で、これまでBash上のgrepで書けていたパターンがそのままでは通らないことがあります。

--toolsが及ばない範囲 — MCPツールとEndConversation

絞り込みの結果は、ツールの種類によって変わります。

くらべる

--toolsの効き方

組み込みツール

外れるもの

リストに書かなかった組み込みツールは消えます。""なら全部消え、接続中のMCPツールが1つでも残っていればEndConversationだけが残ります。

MCPツールほか

外れないもの

MCPサーバーのツールは影響を受けません。MCPもまとめて拒否するなら、別に--disallowedTools "mcp__*"を指定します。EndConversationも、書かなくても残ります。

EndConversationはセッションを終了させるだけで、ファイルの読み書きや設定変更を一切しません。安全装置としての性質上、セッション自身がオフにできない設計です。空文字""で全ツールを無効化しても、接続中のMCPツールが残る間は同じです。

拒否ルールの側では扱いが違います。--disallowedTools "*"のように他のツールを全部除去するルールは、EndConversationも一緒に外します。許可ルールで名指ししていれば残ります。

v2.1.282では、会話の途中まで使っていた組み込みツールを外した--toolsで--continue・--resumeし直すと、それまでの拡張思考が失われる不具合が直りました。

ツールが現れる条件は絞られています。Claude Code v2.1.213以降で、モデルがOpus 4.8・Sonnet 5・Fable 5かその後継であることが必要です。使える面は対話型のターミナルセッション(IDEの統合ターミナルを含む)に限られます。-pの非対話実行、Agent SDK経由のセッション、VS Code拡張のパネル、GitHub Actions、クラウドセッションには登場しません。Bedrock・Google Cloud・Microsoft Foundryなどのプロバイダーでも出ません。

実際に呼ばれるのは、執拗に続く攻撃的な入力への最後の手段か、デモを頼まれたときだけです。終了後のセッションはロックされ、動くコマンドは/clear・/resume・/help・/exit・/feedbackに限られます。

サブエージェントとエージェントチームへの継承

サブエージェントは、メインセッションで使える組み込みツールとMCPツールを引き継ぎます。--toolsで絞ったリストは、そのままサブエージェントが受け取れる範囲の上限になります。サブエージェント自身のtoolsフィールドで、さらに絞ることもできます。

引き継ぐ前に、2段のフィルターが掛かります。1段目は全サブエージェントに共通で、AskUserQuestion・EndConversation・EnterPlanMode・ScheduleWakeup・WaitForMcpServers・Workflowなどを外します。2段目は、既定のバックグラウンド実行のサブエージェントだけに掛かり、組み込みツールをさらに減らします。

macOS・Linux・WSLのGlobとGrepだけは、メインセッションに無くても、サブエージェントが受け取れる場合があります。

タスク管理ツールも、メインセッションが持っているときだけサブエージェントに渡されます。エージェントチームの同一プロセスのチームメイトは同じ扱いです。別ウィンドウ(split pane)のチームメイトは独立したClaude Codeプロセスなので、そのプロセス自身のモデルで決まります。チームメイトのツールは、エージェント定義のtoolsリストで絞れます。

絞り込みを組み立てる順番

最小構成のセッションは、次の順に決めると迷いません。クラウドセッションでのツール制限はClaude Codeクラウドセッションで使えるツールとリソース制限にあります。

手順

--toolsを組み立てる4手順

  1. 1

    必要な組み込みツールを書き出す

    Bash,Edit,Readのように、使うものだけをカンマ区切りで並べます。検索が要るならGlob,Grepも加えます。

  2. 2

    MCPツールの扱いを決める

    MCPサーバーをつないでいる環境では、--toolsと別に--disallowedTools "mcp__*"を足すかどうかを決めます。ツール定義がコンテキストを圧迫する問題はMCPのツール定義はなぜコンテキストを圧迫するのかで扱っています。

  3. 3

    モデルのタスク管理ツールを確かめる

    Opus 4.8以降のような既定対象外のモデルでタスク管理ツールを使うなら、TaskCreateなどの名前も並べます。

  4. 4

    実際のセッションで聞く

    起動後にClaudeへ使えるツールを尋ね、並べた名前と一致するか見ます。

まとめ

権限の可否ではなく、ツールがセッションに存在するかどうかを変えたいときだけ--toolsを選びます。macOS・Linuxで検索を残すなら、GlobとGrepを名前で書き足します。

この記事を共有:XはてブLinkedIn