# 管理デバイスポリシー（MDM）

cmux は管理対象の Mac 向けに MDM で強制できるポリシーをサポートします。管理者は macOS 構成プロファイル（カスタム設定ペイロード）を使って強制環境設定値として配布します。強制値は最優先で、環境変数、ユーザー設定、~/.config/cmux/cmux.json のインポート、組み込みデフォルトに優先します。

強制値はアプリ内から変更できません。設定 UI には「組織によって管理されています」と表示され、コマンドパレットの該当コマンドは非表示になり、cmux CLI は管理ポリシーエラーで拒否します。

## ペイロードドメイン

リリース版アプリの環境設定ドメインを対象にします：

```
com.cmuxterm.app
```

チャンネルビルド（debug、nightly、staging）は独自のバンドル ID で動作しますが、com.cmuxterm.app を対象とするプロファイルも尊重するため、1 つのプロファイルですべてのチャンネルを管理できます。アプリ自身のドメインで強制された値がリリースドメインのフォールバックに優先します。

## ポリシーキー

| キー | 型 | デフォルト | true に強制したときの動作 |
| --- | --- | --- | --- |
| `DisableEmbeddedBrowser` | Boolean | `false` | すべての内蔵ブラウザ面を無効化します：ブラウザペインとタブ、ターミナルリンクのインターセプト、自動化・レイアウト・セッション復元からのブラウザ作成。ポリシーの有効化時には表示中のブラウザペインを閉じ、リンクはシステムのデフォルトブラウザで開きます。同じゲートを共有する WebKit ベースのローカルビューア（差分ビューア、エージェントチャット、アプリ内アップグレードページ）も利用できなくなり、Mac は iOS アプリへのブラウザ機能のアドバタイズを停止します。 |
| `DisableRemoteControl` | Boolean | `false` | Mac が cmux iOS アプリのリモート表示・操作ホストとして動作することを無効化します：Iroh ホストランタイム（ローカルネットワークへのアドバタイズを含む）、旧式 TCP ペアリングリスナー、接続受け入れ、デバイスペアリング。ポリシーの有効化時には接続中のフォン接続を閉じ、ペアリングのトラストブローカーは新規ペア許可の発行を拒否します。送信専用の通知転送、アプリのアップデート、ローカル自動化ソケット、Mac をクライアントとする SSH は影響を受けません。 |
| `DisableDeviceDiscovery` | Boolean | `false` | My Devices で他の Mac の検出を無効化します。この Mac への受信アクセスは独立しているため、DisableIncomingDeviceAccess、または広範なホスト禁止には DisableRemoteControl を使用します。強制ポリシーはローカルの検出設定に優先し、実行中にも適用されます。 |
| `DisableIncomingDeviceAccess` | Boolean | `false` | この Mac が Mac や iOS からの受信セッションをアドバタイズまたは受け入れることを防ぎます。送信側の Mac 検出は利用できます。有効化時には受信中のセッションを閉じ、ホストの検出可能状態を撤回します。DisableRemoteControl と DisableIrohNetworking はより広範な禁止です。 |
| `DisableCloud` | Boolean | `false` | cmux Cloud Machines と cmux 管理のプライベートネットワークアクセスを無効化します：Cloud サイドバータブ、設定、パレットと新規ワークスペースの項目、Cloud ワークスペースのセッション復元、すべての Cloud VM サービス呼び出し（作成、オープン、接続、exec、SSH、デスクトップ、ポート、公開）、および vm ソケット／CLI コマンドは管理ポリシーエラーでフェイルクローズします。アプリはプライベートネットワークトンネルの登録・開始・再接続を行いません。cmux vpn up はフェイルクローズし、cmux vpn status、down、revoke はクリーンアップ用に引き続き使用できます。実行中にポリシーが有効化されると、稼働中の Cloud ワークスペースとリンクは切断され、管理対象の VPN 構成は削除されます。ローカルターミナル、ローカル自動化、ユーザーが構成した通常の SSH には影響しません。 |
| `DisableRemoteConnections` | Boolean | `false` | cmux が作成するリモート接続を無効化します：SSH、Mosh、リモート tmux セッション、およびリモートレジストリを、すべての入口（コマンドパレット、メニュー、cmux CLI、ソケット自動化、セッション復元）で無効にします。Cloud Machines も同じ仕組みで接続するため、このキーはそれらもブロックします。この Mac 上のターミナルには影響せず、ユーザーがシェルに自分で入力した ssh は意図的に対象外です：この制御は cmux が作成する接続を管理するものであり、シェルを管理するものではありません。 |
| `DisableFileTransfer` | Boolean | `false` | cmux を介したファイル転送を無効にします: リモートターミナルへのドラッグ＆ドロップおよび貼り付け画像のアップロード（設定されたカスタムアップロードコマンドを含む）、SSH ファイルエクスプローラーのリモートファイルプレビュー、iOS アプリ経由の iPhone と Mac 間の転送（添付ファイルのアップロード、成果物や変更ファイルの取得、画像の貼り付け）、および cmux vm push / cmux vm pull。拒否されたドロップや貼り付けにはポリシーメッセージが表示されます。ローカルターミナルへのローカルドロップは引き続き動作し、ユーザー自身がシェルで入力した scp や rsync は意図的に対象外です。 |
| `DisableIrohNetworking` | Boolean | `false` | cmux 管理の Iroh ネットワークを無効化します：ホストランタイムは起動せず、エンドポイントは作成されず、リレートラフィックも流れず、経路も公開されません。ローカルのターミナル作業、ローカル自動化ソケット、通常の SSH には影響しません。DisableRemoteControl は Mac の iOS リモート操作ホストとしての役割を無効化しますが、このキーはトランスポート自体を無効化します。 |
| `DisableTelemetry` | Boolean | `false` | 分析とクラッシュレポート（PostHog、Sentry）およびリモート機能フラグの取得を無効にします。いずれもインストールの匿名 ID を Mac の外へ送信し、フラグは組み込みのデフォルトを使用するようになります。上書き対象であるユーザーのオプトインと同様、起動時に一度だけ読み込まれます。設定 → App のテレメトリ切替はロック表示になります。 |
| `DisableAutoUpdate` | Boolean | `false` | Sparkle を無効にします。スケジュールされたアップデート確認や起動時の確認、ダウンロードは行われず、「アップデートを確認」は管理状態を説明します。起動時に読み込まれます。アプリのバージョンは MDM で配布してください。 |
| `DisableAutomationWebhooks` | Boolean | `false` | 自動化ルールの webhook アクションを無効にします。このアクションは呼び出し側が指定したヘッダー付きでイベントペイロードを任意の http(s) URL に送信します。アクションは自動化ログに管理ポリシーのメッセージを残して失敗し、run と notify アクションには影響しません。 |
| `DisableTLSTrustBypass` | Boolean | `false` | 埋め込みブラウザの証明書エラーのクリックスルーを無効にします。エラーページにはバイパスが表示されず、以前の 24 時間の許可も適用されません。 |
| `DisableComputerUse` | Boolean | `false` | Computer Use を無効にします。新しいエージェントの起動には computer-use ツールが渡されず、同梱のヘルパーは停止し（セッション中にポリシーが配布された場合も同様）、設定 → Computer Use の切替はロックされます。ポリシーを解除するとユーザー自身の設定が再適用されます。 |
| `DisableCustomSidebars` | Boolean | `false` | ~/.config/cmux/sidebars のインタープリタ型カスタムサイドバー（cmux コマンドを実行できるユーザーまたはエージェント作成のコード）を無効にします。一覧にもマウントにも現れず、設定 → ベータ機能の切替はロックされます。 |
| `DisableAICredentialUpload` | Boolean | `false` | ローカルの AI 認証情報（Claude/Codex の OAuth トークン、Anthropic/OpenAI の API キー）を cmux テナントへアップロードする機能を無効にします。cmux ai-accounts upload と cmux coderouter claude add/update はソケットとクライアント内部の両方でフェイルクローズします。アカウントの一覧表示と削除は引き続き動作します。これらの機能全体を拒否する DisableCloud とは独立しています。 |

-   値は Boolean である必要があります。false（または Boolean 以外の値）に強制されたキーはポリシーを有効化しませんが、書き込みロックの対象としては管理済みと見なされます。
-   DisableTelemetry と DisableAutoUpdate は起動時に読み込まれる 2 つのキーです。設定は配布後 1 分以内に管理状態を表示し、テレメトリとアップデータのプロセスは次回起動時にそれらを反映します。その他のキーはすべて即時に適用されます。
-   ポリシーとして尊重されるのは強制（プロファイル配布）値のみです。これらのキーへの単純な defaults write は効果がありません。
-   ポリシーはアプリ起動時、環境設定変更時、アプリのアクティブ化時に適用され、さらに実行中は定期的（約 1 分ごと）に再確認されます。実行中にプッシュされたプロファイルは、ユーザーがアプリを離れなくてもおよそ 1 分以内に有効になります。
-   MDM ポリシーはインストール済みバイナリから署名済みのエンタイトルメントを削除できません。Network Extension エンタイトルメントを持つビルドはそれを保持したまま、DisableCloud が実行時に Cloud と VPN の機能を到達不能にします。エンタイトルメントを持たないビルドは既存のバックエンド利用不可パスを引き続き使用します。
-   各機能キーは互いを上書きせず、独立したゲートとして組み合わさります。ある機能は、それを対象とするいずれかのキーが強制されていれば利用できません。すべてのキーの既定値は false のため、管理外の Mac も、キーを含まないプロファイルが適用された管理対象の Mac も、標準のインストールとまったく同じ動作になります。

## ブラウザ許可リスト

BrowserURLAllowlist は、埋め込みブラウザで開けるサイトをリストに記載したものに制限します。localhost とローカルファイルは Mac の外に出ないため、管理されたリストでもデフォルトで許可されます。2 つの許可キーでそれぞれのデフォルトを無効にできます。ほとんどの導入では社内ドメインのリストだけで十分です。

| キー | 型 | デフォルト | 動作 |
| --- | --- | --- | --- |
| `BrowserURLAllowlist` | 文字列の配列 | 未設定（すべてのウェブオリジンを許可） | 埋め込みブラウザのすべてのトップレベルナビゲーション（アドレスバー、リンク、リダイレクト、window.open、自動化、ディープリンク、復元されたペイン）を一致するルールに制限します。強制された空の配列はすべての外部ウェブオリジンを拒否します。cmux 内部ページ、localhost、ローカルファイルは、下記の許可キーで無効にしない限り引き続き利用できます。 |
| `BrowserAllowLocalhost` | Boolean | `true` | true（デフォルト）の場合、管理されたリストは localhost、\*.localhost、127.0.0.1、::1、0.0.0.0 を任意のポートでルールなしに許可するため、ローカル開発サーバーはそのまま動作します。false を強制するとループバックオリジンをブロックします（リストに記載されていてもブロックされます）。 |
| `BrowserAllowLocalFiles` | Boolean | `true` | true（デフォルト）の場合、cmux から開いたり、ブラウザペインにドロップしたり、他のローカルファイルからリンクされたローカル file: ドキュメントは引き続き利用できます。false を強制すると、BrowserURLAllowlist の有無にかかわらずローカルファイルをブロックします。 |

各エントリはホストまたは HTTP(S) URL パターンです:

```
git.example.com          # exactly this host, any port, http or https
*.example.com            # every subdomain of example.com (not example.com itself)
https://issues.example.com
http://localhost:3000    # only needed when BrowserAllowLocalhost is false
```

-   localhost とローカルファイルにはエントリは不要です。ユーザーがアクセスすべきウェブオリジンのルールだけを追加してください。BrowserAllowLocalhost を false に強制した場合、引き続き許可したいループバックオリジンはポート付きのルールで個別に記載してください。
-   強制された空の配列は有効なポリシーで、すべての外部ウェブオリジンをブロックします。パス、クエリ、フラグメント、認証情報、HTTP(S) 以外のスキームは拒否されます。無効なルールのみを含むリストはフェイルクローズします。
-   許可リストはページのナビゲーションを対象とします。サブリソースのリクエスト（画像、スクリプト、fetch）はフィルタリングしません。DisableEmbeddedBrowser が優先され、ブラウザが無効な場合は許可リストは参照されません。
-   ブロックされたナビゲーションは、ブロックされたオリジンと次の手順をページ内に表示します。設定 → ブラウザには有効なルールと localhost・ローカルファイルの許可状態が表示され、cmux browser status --json も同じ情報を報告します。

## ロック可能性

構成プロファイルの強制値は macOS 自体によってロックされます：ユーザーの書き込み（「すべての設定をリセット」を含む）では有効値を変更できず、プロファイルを削除すると通常の動作に戻ります。さらに cmux は自身の書き込みを抑止します：cmux.json インポーターは強制されたすべてのキーをスキップし、ブラウザ、リモート操作、Cloud の制御については設定 UI が管理状態を表示し、コマンドパレットは該当コマンドを非表示にし、CLI は管理ポリシーエラーで拒否します。管理者が専用ポリシーキーの代わりにユーザーレベルの browserDisabledOverride キーを直接強制した場合も同様です。

## 対応プラットフォームとバージョン

-   macOS 14（Sonoma）以降。cmux のシステム要件に準拠します。
-   この機能を含む cmux for macOS ビルド（リリース時のチェンジログを参照）。すべてのリリースチャンネルがリリースペイロードドメインを尊重します。
-   これらは macOS 側の制御です。iOS アプリに個別のポリシーは不要です：DisableRemoteControl が強制された Mac は接続受け入れとペアリングを拒否するため、フォンは接続できません。

## 構成プロファイルのサンプル

MDM から com.cmuxterm.app 向けのカスタム設定ペイロードとして展開するか、テスト用に以下のプロファイルを手動でインストールします（システム設定 → 一般 → デバイス管理）。

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>PayloadContent</key>
    <array>
        <dict>
            <key>PayloadType</key>
            <string>com.apple.ManagedClient.preferences</string>
            <key>PayloadVersion</key>
            <integer>1</integer>
            <key>PayloadIdentifier</key>
            <string>com.example.cmux.managed-policies</string>
            <key>PayloadUUID</key>
            <string>6D4A3E9C-1B2F-4C8D-9E0A-5F6B7C8D9E0F</string>
            <key>PayloadDisplayName</key>
            <string>cmux managed policies</string>
            <key>PayloadContent</key>
            <dict>
                <key>com.cmuxterm.app</key>
                <dict>
                    <key>Forced</key>
                    <array>
                        <dict>
                            <key>mcx_preference_settings</key>
                            <dict>
                                <key>DisableEmbeddedBrowser</key>
                                <true/>
                                <key>DisableRemoteControl</key>
                                <true/>
                                <key>DisableCloud</key>
                                <true/>
                                <key>DisableRemoteConnections</key>
                                <true/>
                                <key>DisableFileTransfer</key>
                                <true/>
                                <key>DisableIrohNetworking</key>
                                <true/>
                                <key>DisableTelemetry</key>
                                <true/>
                                <key>DisableAutoUpdate</key>
                                <true/>
                                <key>DisableAutomationWebhooks</key>
                                <true/>
                                <key>DisableTLSTrustBypass</key>
                                <true/>
                                <key>DisableComputerUse</key>
                                <true/>
                                <key>DisableCustomSidebars</key>
                                <true/>
                                <key>DisableAICredentialUpload</key>
                                <true/>
                                <key>BrowserURLAllowlist</key>
                                <array>
                                    <string>https://git.example.com</string>
                                    <string>*.example.com</string>
                                </array>
                            </dict>
                        </dict>
                    </array>
                </dict>
            </dict>
        </dict>
    </array>
    <key>PayloadType</key>
    <string>Configuration</string>
    <key>PayloadVersion</key>
    <integer>1</integer>
    <key>PayloadIdentifier</key>
    <string>com.example.cmux.managed-policies.profile</string>
    <key>PayloadUUID</key>
    <string>2A1B3C4D-5E6F-4A7B-8C9D-0E1F2A3B4C5D</string>
    <key>PayloadDisplayName</key>
    <string>cmux Managed Policies</string>
    <key>PayloadScope</key>
    <string>System</string>
</dict>
</plist>
```

## 管理対象 Mac での確認

有効な強制値と CLI の管理状態を確認します：

```
defaults read com.cmuxterm.app DisableEmbeddedBrowser
defaults read com.cmuxterm.app DisableRemoteControl
defaults read com.cmuxterm.app DisableCloud
defaults read com.cmuxterm.app DisableRemoteConnections
defaults read com.cmuxterm.app DisableFileTransfer
defaults read com.cmuxterm.app DisableIrohNetworking
defaults read com.cmuxterm.app DisableTelemetry
defaults read com.cmuxterm.app DisableAutoUpdate
defaults read com.cmuxterm.app DisableAutomationWebhooks
defaults read com.cmuxterm.app DisableTLSTrustBypass
defaults read com.cmuxterm.app DisableComputerUse
defaults read com.cmuxterm.app DisableCustomSidebars
defaults read com.cmuxterm.app DisableAICredentialUpload
defaults read com.cmuxterm.app BrowserURLAllowlist
defaults read com.cmuxterm.app BrowserAllowLocalhost     # absent or 1 = allowed
defaults read com.cmuxterm.app BrowserAllowLocalFiles    # absent or 1 = allowed
cmux browser status --json   # url_allowlist, url_allowlist_managed, url_allowlist_allows_localhost, url_allowlist_allows_local_files
cmux vm list                 # refused: Cloud Machines are disabled by your administrator.
```

cmux では、設定 → ブラウザに有効化トグルが無効状態で「組織によって管理されています」と表示され、設定 → モバイルに「iOS アプリからのリモート操作は組織によって無効化されています」と表示されます。

Canonical: https://cmux.com/ja/docs/managed-policies

Documentation index: https://cmux.com/llms.txt
