Claude Media
disableSideloadFlagsでサイドロード用CLIフラグを拒否する

disableSideloadFlagsでサイドロード用CLIフラグを拒否する

Managed設定のdisableSideloadFlagsは、strictKnownMarketplacesを迂回する--plugin-dir等4つのCLIフラグを起動時に拒否します。

disableSideloadFlagsは、--plugin-dir・--plugin-url・--agents・--mcp-configの4つの起動時CLIフラグを一括で拒否するManaged設定です。strictKnownMarketplacesでマーケットプレイスを許可リスト化しても、これらのフラグは使えます。ユーザーは1回の起動に限り、外部のプラグインやMCPサーバーを読み込めます。この抜け道を塞ぐのが役割です。Claude Code v2.1.193以降が対象で、既定はfalseです。

塞がるのは起動時の読み込みだけです。claude mcp addや.mcp.jsonによるMCPサーバー追加は止まらないので、名前単位で制御したいならallowedMcpServersを併用します。

拒否の対象は4フラグと環境変数

4つのフラグはどれも、通常のclaude --helpにそのまま載っている起動オプションです。v2.1.287で、空のHOMEとCLAUDE_CONFIG_DIRを指定して次のコマンドを実行すると、該当部分は次のように出ます。-A3の都合で--modelや--printの行も混ざります。

claude --help | grep -A3 -E "^  --(plugin-dir|plugin-url|agents|mcp-config)"
  --agents <json-or-file>               JSON object defining custom agents, or
                                        with --print the path to a file that
                                        holds one (e.g. '{"reviewer":
                                        {"description": "Reviews code",
--
  --mcp-config <configs...>             Load MCP servers from JSON files or
                                        strings (space-separated)
  --model <model>                       Model for the current session. Provide
                                        an alias for the latest model (e.g.
--
  --plugin-dir <path>                   Load a plugin from a directory or .zip
                                        for this session only; a folder of
                                        plugins loads each child (repeatable:
                                        --plugin-dir A --plugin-dir B.zip)
--
  --plugin-url <url>                    Fetch a plugin .zip from a URL for this
                                        session only (repeatable: --plugin-url A
                                        --plugin-url B) (default: [])
  -p, --print                           Print response and exit (useful for

--plugin-dirと--plugin-urlの説明にあるfor this session onlyが、許可リストの外側から読み込める経路の正体です。--plugin-urlはURLから.zipを取得するので、手元にファイルがなくても外部のプラグインを読み込めます。

有効にすると、Claude Codeは拒否したフラグ名を示すエラーを出して終了します。CLAUDE_CODE_PLUGIN_DIRS環境変数に書いたプラグインフォルダも同じ検査の対象で、このときのエラーは環境変数を解除するよう案内します。環境変数側の検査はv2.1.280以降です。

例外は2つあります。インプロセスのtype: "sdk"エントリだけで構成された--mcp-configは常に受け入れられるので、Agent SDKとVS Code拡張機能は動き続けます。クラウドセッションの扱いは次の節のとおり別です。

クラウドセッションではどう変わるか

Claude Code on the webのクラウドセッションは、フラグを拒否して終了する代わりに、セッションを開始したうえで該当エントリだけを落とします。落とすのは、サーバーから渡された--mcp-configのうちtype: "sdk"のエントリとClaude TagセッションのSlackツールを除いたものです。v2.1.239より前は、サーバー配信の--mcp-configがあるとセッションの起動自体が失敗していました。バージョンによって「起動が止まる」か「除外して起動する」かが変わるため、組織で使っているバージョンを先に確かめておく必要があります。

セッション開始後にサーバーから届くMCPサーバーの更新も、同じ除外ルールで無視されます。クラウドセッションの構成を通じた追加や、リモートワーカーに届くAgent SDKのsetMcpServers()がこの経路です。v2.1.268より前は、Claude TagセッションのSlackツールも起動時の除外と合わせて落とされていました。

設定方法と効いているかの確認

Managed設定にしか書けません。プロジェクトやユーザーのsettings.jsonに書いても無効です。

{
  "disableSideloadFlags": true
}

配布先はmanaged-settings.json・MDMプロファイル・claude.ai管理コンソールのserver-managed settingsのいずれかです。managed-settings.jsonの置き場所はOSごとに違います。

OSmanaged-settings.jsonの場所
macOSmanaged-settings.jsonの場所/Library/Application Support/ClaudeCode/
Linux・WSLmanaged-settings.jsonの場所/etc/claude-code/
Windowsmanaged-settings.jsonの場所C:\Program Files\ClaudeCode\

配ったあとは、対象マシンでClaude Codeを起動して/statusを開きます。

/status

Setting sourcesの行にEnterprise managed settingsと、選ばれた取得元が括弧付きで出ていれば、管理ポリシーが読まれています。行が出ない場合は配布経路を見直します。managed settingsの階層や配布の全体像はClaude Code組織管理ガイドにあります。

検査は起動時に1回だけ走る

disableSideloadFlagsが見るのは、起動時に渡されたフラグとCLAUDE_CODE_PLUGIN_DIRSです。検査が走るのは起動時だけです。効くかどうかは、次に起動する時点で方針が手元にあるかで決まります。配布経路ごとの違いは次のとおりです。

  • MDM・OSレベルのポリシー、managed-settings.json: 起動時にその場で読むので、配布済みなら次の起動から効きます
  • server-managed settings(claude.ai管理コンソール): 起動時に取得します。キャッシュがあれば、起動した時点で即適用されます。既定では取得の完了を待たずに起動しますが、起動時にログインする場合(初回起動や/logout後)は最大5秒待ちます。取得に失敗すると、キャッシュがあればそのポリシーで続行します。一度も取得していないマシンでは、サーバー側のポリシーなしで続行します。Cloudゲートウェイ経由のセッションは常に取得を待ち、届かなければ終了します

キャッシュのない初回起動のように、ポリシーなしで始まる短い時間も許容できないなら、Managed設定にforceRemoteSettingsRefreshを足します。

{
  "forceRemoteSettingsRefresh": true
}

trueにすると、server-managed settingsを新しく取得できるまでCLIの起動を止め、取得に失敗したときはキャッシュや設定なしで続けず終了します。MDMプロファイルやmanaged-settings.jsonに置けば、最初のサーバー応答が届く前の初回起動にも効きます。管理者が制御するどのManagedソースのtrueも有効です。claude authサブコマンドだけは対象外で、認証切れが取得失敗の原因のときもユーザーが再ログインできます。

コンソールから取得されるのは、api.anthropic.comへ直接つなぐセッションです。シェルでサードパーティプロバイダー用の変数や既定以外のANTHROPIC_BASE_URLをexportしていると、取得はスキップされます。Amazon BedrockやMicrosoft Foundryなどの構成では、自前のClaude apps gatewayが同等の配信を担います。対象はBedrock・Google CloudのAgent Platform・Foundry・Claude Platform on AWSです。認証は、Team・EnterpriseのOAuthログイン、CLAUDE_CODE_OAUTH_TOKEN、直接設定したAPIキーのいずれかが条件です。apiKeyHelperが返したキーやWorkload Identity Federationの認証情報では取得されません。その構成にコンソールから配っても届かないので、MDMかファイルで配ります。

ポリシーを読む面はターミナルだけではありません。VS CodeとJetBrainsの拡張機能、デスクトップアプリのCodeタブ、Agent SDKのセッションも同じ経路で読みます。Agent SDKはsettingSourcesでユーザー・プロジェクト・ローカルの設定ファイルを外せますが、Managed設定は外せません。

デスクトップアプリのプラグインはどうなるか

デスクトップアプリは、claude.aiから同期されるプラグインや、組織がアプリ経由で配るプラグインを自前で管理しています。disableSideloadFlagsをMDM・OSレベルのポリシー・managed settingsファイルのいずれかで配ると、デバイス上の次の2種類のセッションにこれらのプラグインが渡されなくなります。

影響

デバイスに配ったときの影響

  • ユーザーのマシン上のCodeセッション

    claude.aiアカウントで有効化したスキルなしで始まります。managed settingsのマーケットプレイスからClaude Codeがインストールするプラグインは、これまでどおり読み込まれます。

  • ユーザーのマシン上のCoworkセッション

    プラグイン内のスキルと、claude.aiアカウントで有効化したスキルは使えます。

Claude Desktop on 3Pでは、org-pluginsディレクトリに配ったプラグインのMCPサーバーも使えます。デスクトップアプリがMCPサーバーへ直接つなぐためです。Claude Desktopがv1.37937.0より前(Code)・v1.44121.0より前(Cowork)だと、これらのセッションは起動時に失敗します。

CoworkのフルVMサンドボックスとリモートセッションには届かない

Coworkはデスクトップアプリ上でClaude Codeのセッションを動かします。claude.ai管理コンソールのserver-managed settingsは、アカウントがTeamやEnterpriseでもCoworkセッションでは取得されません。適用されるポリシーは、セッションの動く場所で決まります。

くらべる

Coworkのセッションにポリシーが届くか

ユーザーのマシン上

届く

既定ではデバイスのMDMポリシーとmanaged-settings.jsonを読みます。disableSideloadFlagsはここで効きます。

フルVM・リモート

届かない

requireCoworkFullVmSandboxを設定したフルVMサンドボックスは、デバイスのMDMポリシーも設定ファイルもない仮想マシンの中で動きます。リモートCoworkセッションはAnthropic管理のVM上で動き、読めるデバイスポリシーがありません。

組織のプラグインとMCPを塞ぐ設定の組み合わせ

disableSideloadFlagsが見るのは起動時フラグだけです。ほかの経路は別の設定が担当するので、目的ごとに組み合わせます。

目的使う設定対象
追加できるマーケットプレイスを制限する使う設定strictKnownMarketplaces対象許可リストの外のマーケットプレイス
起動時フラグでの1回限りの読み込みを拒否する使う設定disableSideloadFlags対象4フラグとCLAUDE_CODE_PLUGIN_DIRS
マーケットプレイスが宣言したコマンドでのインストールを拒否する使う設定disableCommandPluginSources対象commandソースのプラグイン
個々のMCPサーバーを名前単位で許可・拒否する使う設定allowedMcpServers対象claude mcp addや.mcp.jsonで追加したサーバー

disableCommandPluginSourcesは既定で未設定です。ただしallowManagedHooksOnlyでフックをManaged設定に限定していると、falseと明示しない限りcommandソースのプラグインも自動で無効になります。マーケットプレイスのheadersHelperコマンドも、Managed設定が宣言したものを除いて止まります。フック統制を先に敷いた組織は、意識しないままcommandソースまで塞いでいることになります。

strictKnownMarketplacesにはallowedMarketplacesという別名があります(v2.1.232以降)。設定ファイルの表記が揺れていても、同じ許可リストを指します。

まとめ

起動時フラグの抜け道を塞ぐなら、MDMかファイルで配るのが確実です。server-managed settingsで配る場合は、キャッシュのない初回起動や/logout後に方針なしで始まる時間が生じ得ます。forceRemoteSettingsRefreshはそこを閉じる設定です。許可リスト運用の詳細はGHESプラグインマーケットプレイスを許可リストで運用するにあります。MCPの個別許可はManaged MCPで許可リスト・拒否リストを組織管理するが扱っています。Claude Code全体の機能はClaude Code完全ガイドから辿れます。

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