CLI、API、MCP

アプリで行えることはすべて、ウインドウなしでも操作できます。アプリのバイナリ — Bromure Agentic Coding.app/Contents/MacOS/ 内の bromure-ac — は、複数のコマンドを持つ CLI であり、HTTP の制御プレーンであり、外部の AI ツール向けの MCP サーバーであり、AppleScript の対象でもあります。各 VM の内部では、組み込みの MCP サーバー群がエージェントに Bromure 独自のビューを提供します。この章はそれらすべてのリファレンスです。

外側から内側へ、インターフェイスは次のとおりです。

  • bromure-cli コマンドライン — マシン、VM、ターミナル、コマンド、トレース、モデル、リモートアクセス、登録を扱う Docker/kubectl 風の CLI。
  • 制御プレーン — 同じ操作を HTTP 上の JSON で提供します。所有者専用の Unix ソケット上で、またオプションでループバックの TCP ポート上で動作します。
  • AC MCP サーバー(bromure-ac mcp) — Mac 上の AI ツール(Claude Code、Claude Desktop)にアプリを管理させます。
  • ゲスト内の MCP サーバー — すべての VM に組み込まれています。ブラウザ、オートメーション、インフラ、委任、そして特定のセッション向けにタスクボードとスイッチボードです。
  • AppleScript — Bromure AC Suite 用語辞書。

この章でも CLI でも、マシンはワークスペースと呼ばれます(設定エディタとコマンドラインでの名前です)。エージェントとの会話という意味でのセッションには /agent-sessions ルートでアクセスします。古い /sessions ルートや、CLI と AppleScript における session という語は、マシンのウインドウを指します。

制御プレーン: ソケットと API

各インターフェイスは、2 つのトランスポートのいずれかを介して、実行中のアプリと HTTP で通信します。

トランスポート場所アクセスゲートデフォルトで有効
制御ソケット~/Library/Application Support/BromureAC/control.sock(Unix ドメイン、HTTP/1.1)ファイル権限 — ソケットはモード 0600 で所有者のみ。ファイルに到達できること 自体 が Docker ソケット方式の認可となります。はい。アプリまたはヘッドレスエージェントが実行中は常に有効
オートメーション API127.0.0.1:9223(TCP)デフォルトではループバックのみ。ほとんどの制御ルートはさらに環境変数 BROMURE_DEBUG_CLAUDE を必要とし、一部は TCP では一切提供されません(認証モデルを参照)いいえ — 環境設定 › オートメーション でオプトイン

CLI が VM と直接通信することはありません。各サブコマンドはコントロールソケット上の薄い HTTP クライアントなので、同じコマンドがローカルでも、またソケットが SSH でトンネリングされている場合はリッチクライアントからリモートインスタンスに対しても機能します。エージェントを必要とするコマンドを実行したときにエージェントが動いていなければ、CLI はウインドウのないバックグラウンドエージェント(bromure-ac run --headless)を自動起動し、/health に応答するまで最大 40 秒待ちます。読み取り専用のコマンド(vm ls、describe、trace …)は自動起動せず、代わりに No bromure-ac agent running. と表示します。

注: コントロールソケットはアプリの実行中は常に利用でき、オートメーションサーバーを有効にする スイッチとは無関係です。このスイッチが制御するのはポート 9223 の TCP リスナーだけです。CLI を使うためにオートメーション API を有効にする必要はありません。

bromure-cli コマンドライン

バイナリはバンドル内のフルパスで呼び出せますが、短い名前のほうが便利です。アプリメニューで Bromure Agentic Coding › コマンドラインツールをインストール… を選びます。コマンドラインツール「bromure-cli」をインストールしますか? というアラートが、/usr/local/bin/bromure-cli にシンボリックリンクを作成し、管理者パスワードが一度必要になることを説明します。インストール(または キャンセル)をクリックします。成功すると、コマンドラインツールをインストールしました が bromure-cli --help を実行するよう案内します。アプリが起動時にこれを提案することはもうありません — メニュー項目が唯一の入り口で、いつでも再実行できます(たとえばアプリを移動した後など)。

同じバイナリでも、呼び出されたときの名前によって動作が変わります。

  • bromure-cli として呼び出すと、アプリ内部のコマンド — イメージ管理(init、info、reset と公開パイプラインのツール)、mcp サーバー、GUI の既定である run — を隠し、ターミナル向けのグループ(Workspaces、Tracing、Local inference、Enterprise features、remote)だけを公開します。引数なしの bromure-cli は、アプリを起動せずにヘルプを表示します。
  • bromure-ac として(アプリバンドル内のバイナリ)呼び出すと、すべてが利用でき、既定のサブコマンドは GUI を起動する run です。

以下の例では bromure-cli を使います。bromure-ac だけが公開するコマンドには、フルパス …/MacOS/bromure-ac を使ってください。

ワークスペース引数が示されている箇所では、コマンドはワークスペースの ID、短縮 ID のプレフィックス、または名前を受け付けます。コマンドグループ vm と workspaces は互いのエイリアスです。マシンとは何か、そしてセッションとどう関係するかは、マシンで説明しています。

アプリとバックグラウンドエージェント

構文動作
bromure-ac run [--headless]既定の(隠し)サブコマンド — GUI を起動します。--headless はウインドウのないメニューバー常駐エージェントを実行します。CLI がコントロールソケットを提供するために自動起動するのはこれです。

イメージ管理

ベースイメージは一度だけインストールします。これらのコマンドは bromure-ac の名前でのみ存在します。

構文動作
bromure-ac init [--build-local]Ubuntu のベースイメージをインストールします。ビルド済みイメージをダウンロードし、ダウンロードに失敗した場合はローカルビルドにフォールバックします。--build-local はローカルビルドを強制します。
bromure-ac infoベースイメージのバージョン、仮想サイズ、ディスク上のサイズ、パスを表示します。
bromure-ac reset [--yes]ベースイメージ(ディスク、EFI 変数、バージョンスタンプ、状態)を削除し、次の init がまっさらな状態から始まるようにします。--yes がなければ確認します。
bromure-ac init-foss-image --output <dir>公開パイプライン専用 — 再配布可能な、フリーソフトウェアのみのベースイメージを <dir> にビルドします。
bromure-ac verify-image --disk <path> [--timeout 300]公開パイプライン専用 — 使い捨てのクローンをヘッドレスで起動し、タイムアウト内にシリアルのログインプロンプトが出ることを要求します。

注: ベースイメージが存在しない場合、GUI を起動するとオンボーディングウィザードに案内され、その場でイメージがインストールされます — インストールと初回起動を参照してください。

ワークスペースと VM の制御

これがコアグループです。vm run は意図的に Docker 風になっています。ワークスペースを起動し、ゲストの共有 bromure tmux セッションにターミナルを渡します。

構文動作
bromure-cli vm lsすべてのワークスペースをライブ状態(off / suspended / booting / running)、稼働時間、ウィンドウ接続状態、ツリー形式の tmux タブ(* はアクティブなタブを示す)、実行中の Docker コンテナとともに一覧表示します。
bromure-cli vm run [<workspace>] [-v <dir>]… [--name N --tool T --auth A --api-key K] [--memory GB] [-d] [--rm]ワークスペースの VM を起動するか、その場で使い捨てのものを作成します。デフォルト: ターミナルをゲストの tmux に接続します。
bromure-cli vm attach <vm> [<tab#> | containers:<name> [-- <shell>]] [-w]ターミナルを VM の tmux に接続するか(オプションでタブにジャンプ)、実行中のコンテナに docker exec -it で入るか(デフォルトシェルは bash)、-w/--window で GUI ウィンドウを開く/再接続します。
bromure-cli vm exec <vm> [-i] [-t] [--timeout 600] -- <command…>VM 内でコマンドを実行します(kubectl スタイル、-- の後ろ)。-it はインタラクティブな pty を開きます。-it でコマンドを省略するとシェルになります。ゲストの終了コードが伝播します。
bromure-cli vm kill <vm> [--suspend]VM を停止します: グレースフルシャットダウン、または --suspend でサスペンド(RAM をディスクに保存)。
bromure-cli vm reboot <workspace> [--hard]実行中のワークスペースをその場で再起動します。デフォルトはグレースフル、--hard は即座に破棄します。
bromure-cli vm describe <workspace>ワークスペースの設定に加え、実行中はライブなランタイム詳細(状態、IP、vCPU、Fusion の状態、ゲストの df からのディスク使用量、タブ、コンテナ、使用中のメモリ)を表示します。
bromure-cli vm ports <workspace>(または vm <workspace> -L)実行中のワークスペースのリスニングポート(root として ss をライブ実行)を表示します: PORT、PROTO、ADDRESS、PROCESS。ループバックのみのバインドはマークされます。
bromure-cli vm fsck <workspace> [--repair] [--home]停止中のワークスペースのシステムディスク — --home ならホームイメージ — を、VM も追加ツールも使わずに Mac からチェックします。--repair はファイルシステムのジャーナルを再生し、古いエラーフラグをクリアします。コマンドラインからのディスクチェックを参照してください。
bromure-cli workspaces create [--name N] [--tool T] [--auth A] [--api-key K] [--memory GB] [--color C] [-v <dir>]… [--generate-ssh] [--from-json <file|->]ワークスペースをヘッドレスで作成します。--from-json は完全なプロファイル JSON ドキュメントを適用します(フラグは一致するフィールドを上書き)。--generate-ssh はホスト側の SSH キーを生成し、公開鍵を表示します。
bromure-cli workspaces edit <workspace> [--from-json <file|->]ワークスペースの完全な構成を取得し、$VISUAL/$EDITOR(フォールバックは vi)で開き、変更を保存します。シークレットは空欄で表示されます — そのままにすると保持、入力すると置き換わります。エディタでキーを削除するとその欄はクリアされます。--from-json は非対話的にドキュメントを適用します。部分的でもかまいません — 含まれないキーは値を保ち、明示的な null はクリアします。
bromure-cli workspaces rm <workspace> [-f]ワークスペースとそのすべてのデータ(ディスク + ホーム)を、y/N の確認後に削除します。-f でスキップします。
bromure-cli workspaces ssh-keygen <workspace>ワークスペース用の新しいホスト側 SSH キーを生成し、Git ホスト用に公開鍵を表示します。

知っておくと役立つ運用上の詳細をいくつか。

  • vm run のフラグ。 --tool はエージェント ID を取ります: claude、codex、grok、kimi、omp。--auth は token、subscription、bedrock、local のいずれかです。認識できない値はエラーとなり、有効な値が一覧表示されます。たとえば Invalid --tool “gpt” — expected one of: claude | codex | grok | kimi | omp. です。workspaces create も --tool と --auth を同じようにチェックします。-v/--volume <hostdir> はホストのフォルダをゲストの ~/<basename> にマウントします(繰り返し指定可、最大 8)。-d/--detach は VM を起動してアタッチせずに戻ります。--rm は VM の停止時にワークスペースとそのディスクを削除します。アタッチ中の tmux からは Ctrl-b d でデタッチします — VM は動き続けます。
  • エージェントはモデルから決まります。 ツールと認証のフラグは、新しいワークスペースの初期値を与えるだけです。各エージェントが実際に使うモデルとプロバイダーは、環境設定 › モデル とワークスペース自身のモデルペインで決まります — モデルとプロバイダーを参照してください。
  • TTY を認識します。 ターミナルを tmux に渡すという Docker 風の既定動作は、本物のターミナルでのみ適用されます。パイプやスクリプトからの呼び出しは、-d を渡したかのように動作します。
  • workspaces create の値。 色は blue、red、green、orange、purple、pink、teal、gray のいずれかです。
  • 編集時の空欄保持。 workspaces edit はシークレットを空欄にした構成全体をエクスポートします。空欄のシークレットを含むドキュメントを保存すると保存済みの値が保持されるため、往復で鍵が消えることはありません。変更のないバッファは何も保存しません。無効な JSON は中止されます。
  • Exec の待機。 vm exec はゲストのシェルエージェントを最大 10 秒待ちます。502 は VM が実行されていないか名前が一致しなかった可能性を意味します。接続中のセッション中に発生する承認プロンプトは、ゲスト内ではなく あなたの ターミナルにレンダリングされます(接続ターミナル上での同意 を参照)。

コマンドラインからのディスクチェック

vm fsck は、ext4 ブラウザの fsck を実行… と、ファイルシステムエラーで起動が止まったときにアプリが表示する ディスクを修復 ボタンの、スクリプトで使える双子です。Bromure 独自の ext4 チェッカーを使うため、何もインストールする必要はありません。

bromure-cli vm kill "Web app"            # the workspace must be stopped
bromure-cli vm fsck "Web app"            # check the system disk, report only
bromure-cli vm fsck "Web app" --repair   # replay the journal, clear the error flag
bromure-cli vm fsck "Web app" --home     # check the home image instead

ワークスペースの実行中は実行を拒否します。出力は次のいずれかの要約で終わります: 「Filesystem is clean.」、「Filesystem repaired; it is now consistent.」、「Filesystem has errors this checker cannot repair.」。--repair なしのチェックで問題が見つかると、--repair を付けて再実行するよう提案されます。エラーが残っている間、コマンドは終了ステータス 4 で終わります。チェッカーの範囲と制限は高度な操作で説明しています。

モデル、ルーティング、Fusion

モデルとプロバイダーの設定はモデルとプロバイダーで、マルチモデルの統合は Fusion で扱います。CLI のトグルは次のとおりです。

構文動作
bromure-cli model catalog|ls|pull|use|rm …デバイス上の MLX モデルを管理します — 厳選カタログの閲覧(RAM 適合とツール呼び出しのバッジ付き)、ライブの進捗表示付きダウンロード、実行中の VM のワークスペースでアクティブなモデルの設定、削除。
bromure-cli vm fusion enable|disable <vm>実行中の VM で Fusion をオン/オフにします。ワークスペースに 2 つ以上のモデルが設定されている必要があります。on/engage と off/disengage も同義語として受け付けます。
bromure-cli vm routing cloud|local <vm>実行中の VM の LLM バックエンドのルーティングを設定します: エージェントのクラウドプロバイダー、またはローカルモデル。

トレース検査

これらはワークスペースごとのプロキシトレースを読み取ります。ワークスペースでトレースが有効になっていない限り何も返しません — トレース設定を参照してください。全体像はトレースと監査にあります。

構文動作
bromure-cli trace ls [workspace] [--limit 50]最近のリクエストを一覧表示: TIME / HOST / METHOD / STATUS / REQ / RESP / LAT / FLAGS(フラグには swap×N、LEAK×N、conv が含まれる)。
bromure-cli trace summary [workspace]合計、ステータスクラス、swap/leak/conversation のカウント、上位ホストを集計します。
bromure-cli trace hostnames [workspace]個別のホストとそのリクエスト数を一覧表示します。
bromure-cli trace leaks [workspace]認証情報の漏洩が疑われるリクエスト(ヘッダー、プレビュー、疑い)を表示します。
bromure-cli trace clear [-f]y/N の確認後に、メモリ内およびディスク上のトレース履歴を消去します。

リモートアクセス

オプションの SSH 玄関口はデフォルトで無効になっており、リモートアクセスとクライアントで詳しく説明しています。すべての操作は、コントロールソケットを介して実行中のアプリを通ります。

構文動作
bromure-cli remote [status]デフォルトのサブコマンド — 有効/実行状態、バインドとポート、認証方式、ホスト鍵のフィンガープリント、ログインユーザー、すぐに使える接続行、認可された鍵を表示します。
bromure-cli remote enable [--port 2222] [--bind 0.0.0.0] [--[no-]password] [--[no-]pubkey]SSH サーバーを有効にします。少なくとも 1 つの認証方式が有効なままである必要があります。
bromure-cli remote disableSSH サーバーをオフにします。
bromure-cli remote key add <key|path> / key [ls] / key rm <index|fingerprint>認可された公開鍵を管理します(ls がデフォルト)。

エンタープライズ登録

スクリプトによるデバイスプロビジョニング用の、bromure.io にログイン… シートの CLI 対応版です。エンタープライズ を参照してください。

構文動作
bromure-cli enroll --code <6-word-code> [--server-url URL] [--device-name NAME]管理者が発行したコードを使って、この Mac を bromure.io ワークスペースに登録します。サーバーのデフォルトは $BROMURE_MANAGED_URL または https://bromure.io/api。デバイス名のデフォルトは Mac のホスト名です。
bromure-cli unenroll [--force]登録済みワークスペースからサインアウトします(--force がなければ y/N)。
bromure-cli enrollment-status登録状態(ワークスペース、ユーザー、インストール id、デバイス、サーバー、登録日、bearer/リーフ証明書の有無)を表示します。"not enrolled" は終了コード 0 で終わるため、自動化が失敗として扱うことはありません。

統合コマンドと内部コマンド

構文動作
bromure-ac mcp [--debug] [--api-url http://127.0.0.1:9223]AI ツール向けに AC MCP サーバーを stdio で実行します。AC MCP サーバーを参照してください。
__remote-menu、__attach-window、__fatclient…、__forward…、__dial、__tunnel-helper内部のエントリーポイント(SSH の ForceCommand TUI、ターミナルのバイトポンプ、リッチクライアントのトンネルヘルパー)。対話的な使用向けではありません。

リモート TUI(__remote-menu)

SSH リモートアクセスが有効な場合、すべてのリモートログインは(ForceCommand により)シェルではなく独自実装の ANSI ターミナル UI に強制されます — 矢印キーと数字で操作する、代替画面・256 色のメニューで、任意の SSH PTY 上で動作します(ssh -t を使ってください)。CLI をメニューとして反映しています。

  • ワークスペース — 1 画面のフォームでの作成(Name、Tool、Auth、API key、Memory、Color、Folders、Generate SSH、Full settings…、Create)、ワークスペースごとの操作(実行中のものには Attach、New tab、Describe、Configure…、Fusion、Routing、Worktrees…、Reboot…、Suspend、Kill、停止中のものには Start、Describe、Configure…、Delete)、そして生のテーブル表示。Configure… は設定エディタのペインをテキストフォームとして提供します。モデルはアプリで選ぶため、その Models フォームは読み取り専用です(サーバーのプロバイダーと、ワークスペースがそれを上書きしているかどうか)。
  • Models — インストール済みモデルとダウンロードカタログ。未インストールのモデルを選ぶと、ライブ進捗付きでインラインで model pull するよう提案します。
  • Trace — Summary / Hostnames / Leaks / Recent / Clear。

ワークスペースの tmux にアタッチしている間は、マジックキーコード(既定は Ctrl-]、バナーに表示されます)でホストが描画するコントローラーオーバーレイが開きます: タブツリー、New tab、Worktrees…、Fusion、Routing、Edit settings…、Reboot…、Suspend、Disconnect。ゲストがトリガーキーを見ることはありません — remote/overlay-key ファイルまたは $BROMURE_OVERLAY_KEY で変更できます。Ctrl-b d で tmux から切断してメニューに戻ります。リモート TUI が扱うのはマシンとそのターミナルです。エージェントセッション、ルーム、スイッチボードにはリッチクライアントからアクセスします。リモートの全体像はリモートアクセスとクライアントにあります。

ループバック自動化 API

制御プレーンは、任意の言語からスクリプトで使えるよう、TCP 上の HTTP で JSON として公開することもできます。デフォルトではオフです。

有効化する

環境設定… › オートメーション(⌘,)を開きます — オートメーション API と MCP サーバー ペインです。

環境設定のオートメーションペイン: オートメーションサーバーを有効にするスイッチ、ポート 9223、バインドアドレス 127.0.0.1、MCP クライアント設定のスニペット
  1. 自動化サーバーを有効にする をオンにします。オンのとき、ペインには 127.0.0.1:9223 でリッスン中 と表示されます。オフにするとサーバーは即座に停止します。
  2. 必要に応じて ポート(キャプションは (既定: 9223))と バインドアドレス(既定は 127.0.0.1)を設定します。ポートとバインドアドレスは次回のサーバー起動時に有効になります — すぐに適用するには、スイッチをオフにしてからオンに戻します。

GUI を使わずにスイッチを切り替えることもできます。

defaults write io.bromure.agentic-coding automation.enabled -bool true

警告: バインドアドレス を 127.0.0.1 以外に設定すると、API — およびそれが支える MCP サーバー — がネットワークに公開され、ペインは ループバック以外へのバインドは API をネットワークに公開します。MCP サーバーには認証がありません。 と警告します。TCP リスナーには、ループバック境界と下記の BROMURE_DEBUG_CLAUDE ゲートを超える認証はありません。信頼できる特定の理由がない限り、バインドアドレスはループバックのままにしてください。

認証モデル

TCP リスナーと制御ソケットは 同じ ルートを提供しますが、アクセスが異なります。

ルートグループ制御ソケット自動化 API(TCP ループバック)
GET /health、GET /profiles、GET /vms、GET/POST /sessions許可許可
ワークスペースの作成と編集(POST /profiles、/profiles/<id>…)、VM の制御と exec(POST /vms、/vms/<id>/…)、/trace、/app/state、/preferences、/models/settings、エージェントセッション、ルーム、委任、タスク、オートメーション、クラスタとレジストリ許可アプリに BROMURE_DEBUG_CLAUDE が必要
/state、/state/subscribe、/remote…、/grid-layout、/workspaces、/subscriptions/…、/models/<action>、/connector許可不可 — コントロールソケットのみ

つまり、コントロールソケットは所有者専用のフルアクセス経路です。TCP API はループバック上で安全なサブセットだけを開放し、それ以外はすべてデバッグフラグの背後に置きます。パスセグメントは一度だけパーセントエンコードされます(そのため、スペースを含むワークスペース名も機能します)。

スクリプト用のエンドポイント

最も有用なルートは次のとおりです。

エンドポイント用途
GET /health死活確認と debugEnabled。
GET /state1 回限りのミラースナップショット: ワークスペース、VM、グリッドレイアウト、オートメーション、pendingPrompts など。
GET /state/subscribe/state のプッシュ版: 接続は開いたままで、状態が変わるたびに新しいスナップショットがストリーミングされます。リッチクライアントはポーリングの代わりにこれを使います。
GET /vms / POST /vms実行中の VM を一覧表示します。ワークスペースの参照、またはマウント付きのインライン仕様から VM を起動します(vm run が呼び出すもの)。
POST /vms/<id>/execVM 内でコマンドを実行します。interactive は接続を乗っ取り、フレーム化された生の pty ストリームにします。
GET /profiles / POST /profilesワークスペースを一覧表示します。JSON ドキュメントから作成します。
GET / PUT /preferences環境設定の Defaults テンプレートを読み取り、または置き換えます(読み取り時はシークレットを空に、書き込み時は空欄なら保持)。リッチクライアントの環境設定ウインドウがリモートホストで編集するのはこれです。
GET / PUT /models/settingsグローバルなモデル設定(環境設定 › モデル)を、キーを伏せた状態で読み取り、または置き換えます。
POST /subscriptions/register / POST /subscriptions/forgetクライアントのために、このホストでプロバイダーのサインインを開始します({"provider": …, "profileId": …}。サインイン URL は /state を通じて返ります)。または保存済みのサインインを削除します。
POST /agent-sessions/startエージェントセッションを開始します(profile、tool、オプションでフォルダ、リポジトリ、最初のメッセージ)。
POST /agent-sessions/<id>/<action>セッションを操作します: send、keys、resume、close、rename、nickname、archive、unarchive、delete、review、およびブランチ操作(worktree、branch-merge、branch-pr、branch-discard、branch-keep、branch-decline)。
GET /agent-sessions/<id>/transcript、GET /agent-sessions/<id>/pendingセッションの会話(base64 の JSONL)と、セッションが待っているもの(質問とその選択肢)。
POST /agent-sessions/switchboardスイッチボードを開始または表示します。
POST /agent-rooms/create|move|group、POST /agent-rooms/<id>/rename|color|layout|archive|unarchive|ungroup|delete|switchboardルームを作成・編集します。
POST /delegations/request、POST /delegations/<id>/<action>、GET /delegations/<id>/fileホスト間の委任: あるホストのセッションが別のホストのセッションに依頼し、送信、回答、軌道修正、クローズ、キャンセルを行い、添付ファイルを取得します。
GET / POST /tasks、/tasks/<id>/…コーディングタスクボードを読み取り、操作します。
GET / POST /k8s、/k8s/<id>/<action>、POST /registries、/registries/<id>/<action>Kubernetes クラスタとレジストリを作成・操作します。
GET /automations / POST /automations/<id>/runスケジュールされたオートメーションを読み取り、操作します(API 上での自動化の制御を参照)。
POST /prompts/<id>/answerキューに入ったライフサイクルのプロンプトに応答します(保留中のプロンプトに応答するを参照)。

制御ソケットのパスには空白が含まれるため、まず変数に取り込みます。

SOCK="$HOME/Library/Application Support/BromureAC/control.sock"

# Full mirror snapshot (control socket only)
curl --unix-socket "$SOCK" http://localhost/state

# List running VMs
curl --unix-socket "$SOCK" http://localhost/vms

# Boot a workspace by name
curl --unix-socket "$SOCK" -X POST http://localhost/vms \
  -d '{"profile":"Web app"}'

# Answer a queued lifecycle prompt with one of its offered button labels
curl --unix-socket "$SOCK" -X POST http://localhost/prompts/PROMPT_ID/answer \
  -d '{"choice":"Not Now"}'

安全なサブセットは、有効にした後の TCP API 上で機能します — たとえば、ワークスペースの一覧表示やマシンのウインドウを開く操作には、デバッグフラグは不要です。

curl http://127.0.0.1:9223/profiles
curl -X POST http://127.0.0.1:9223/sessions -d '{"profile":"Web app"}'

注: 制御プレーンのルートはリッチクライアントと共有される統合用インターフェイスであり、バージョン管理された公開 API ではありません。リクエストとレスポンスの形はリリース間で変わることがあります。上記の CLI コマンドが、Bromure をスクリプトで操作する安定した方法です。デバッグ専用のルート、環境変数、ファイルの場所は付録にまとめています。

AC MCP サーバー(bromure-ac mcp)

bromure-ac mcp は stdio の JSON-RPC MCP サーバー(サーバー名 bromure-ac)を実行し、Mac 上の AI ツールがアプリを管理できるようにします。HTTP のオートメーション API と AppleScript をラップしているため、先にオートメーションサーバーを有効にしてください — 一覧表示とウインドウのツールは --api-url(既定は http://127.0.0.1:9223)の HTTP API を呼び出します。bromure-cli の名前では利用できません。

公開するツールは次のとおりです。

  • bromure_ac_list_profiles、bromure_ac_list_sessions
  • bromure_ac_open_session(ワークスペースのウインドウを開きます。最大 30 秒待ちます)、bromure_ac_close_session
  • bromure_ac_get_profile、bromure_ac_set_profile(アトミックな JSON 置換、id は保持)
  • bromure_ac_get_profile_setting、bromure_ac_set_profile_setting

--debug(かつアプリに BROMURE_DEBUG_CLAUDE が設定されている)を使うと、bromure_ac_app_state、bromure_ac_vm_exec、bromure_ac_vm_read_file、bromure_ac_vm_write_file が追加されます。

Claude Code に接続するには、次の内容を ~/.config/claude-code/.mcp.json(またはお使いのクライアントの同等のファイル)に追加します。これは、オートメーションペインの MCP クライアント設定 セクションに表示されるスニペットそのものです。

{
  "mcpServers": {
    "bromure-ac": {
      "command": "/Applications/Bromure Agentic Coding.app/Contents/MacOS/bromure-ac",
      "args": ["mcp"]
    }
  }
}

メモ: get/set プロファイルツールは osascript(実行中のアプリに対する AppleScript)にシェルアウトするため、GUI アプリが実行中である必要があり、macOS は自動化権限を一度求めることがあります。プロファイル JSON は、BROMURE_DEBUG_CLAUDE が設定されていない限りシークレットを空欄にして伝わります。

VM 内の MCP サーバー

AC MCP サーバーとは別に、Bromure はすべての VM 内のエージェントに組み込みの MCP サーバー群を提供します — 設定は不要です。それぞれは小さな Python の stdio シムで、ゲストの /mnt/bromure-meta/ に読み取り専用で配置されます。シムは vsock 経由でホストに接続し、切断されても無期限に再接続するため、エージェントがツールを失うことはありません。ツールを提供するのはホストで、すべての呼び出しはそこでチェックされます。エージェントが見たり操作したりできるのは、自身のマシンとセッションに権限があるものだけです。

vsock ポートサーバー利用できるものツール
5830browserすべてのエージェントマシンの組み込み Chromium を操作する 23 個の browser_* ツール(後述)。
5831task boardコーディングタスクを実行しているエージェントのみboard_get_task、board_set_plan、board_create_subtasks、board_set_dependencies、board_ready_for_review、board_report_landing。
5832plan streamコーディングタスクの計画実行MCP サーバーではありません。タスクの計画実行がボードへ計画をストリーミングするためのチャネルです。
5833automationsすべてのエージェントautomation_list、automation_get、automation_create、automation_update、automation_delete、automation_run — エージェント自身のマシンのオートメーションに限られます。自動化を参照してください。
5834infrastructureすべてのエージェントinfrastructure_overview、cluster_status、cluster_create、cluster_start、registry_status、registry_create、registry_start — マシンがアクセスできるクラスタとレジストリに限られます。Kubernetes クラスタとレジストリを参照してください。
5835delegationすべてのエージェントセッションdelegate、request、list_peers、list_delegations、read_inbox、wait、ask、report、deliver、answer、steer、close_delegation、cancel、worktree_create、worktree_status、worktree_merge。シムは自分がどの tmux ウインドウで動いているかをホストに伝えるため、エージェントが別のセッションになりすますことはできません。エージェントの協働を参照してください。
5836switchboardスイッチボードのセッションのみlist_sessions、read_session、pending_question、list_workspaces、next_events、send_to_session、answer_question、press_keys、start_session、resume_session、message_user、archive_session。

browser、automations、infrastructure、delegation の各サーバーは、マシンの MCP ペインで追加したサーバー(MCP 設定)と並んで、各エージェント自身の MCP 設定に書き込まれます。task board と switchboard のサーバーは、それを必要とする実行にだけ渡されます。

browser サーバー

browser サーバーは、専用の使い捨て VM で動くマシンの組み込み Chromium を操作します。23 個のツールがナビゲーションと検査をカバーします — browser_navigate、browser_new_tab、browser_list_tabs、browser_activate_tab、browser_close_tab、browser_back、browser_forward、browser_reload、browser_screenshot(ページ全体のオプション付き)、browser_evaluate、browser_get_text、browser_get_html、browser_get_links、browser_click、browser_fill、browser_type、browser_press_key、browser_wait_for、browser_network、browser_network_summary、browser_clear_network、browser_console、そして browser_pick_element(60 秒間の対話型要素ピッカー)です。

ブラウザが閉じているときにツールを呼び出すと、ブラウザを開いてコールドブートを待ちます。ブラウザは別の VM なので、サーバーの指示はエージェントに、自分のマシン上の開発サーバーへはマシンの LAN IP(hostname -I)で到達し、決して localhost を使わないよう伝えます。全体像は組み込みブラウザにあります。

注: リッチクライアントでは、エージェントのブラウザ MCP ストリームを SSH 接続で運べるため、リモートのエージェントがローカルで見ているブラウザペインを操作します。リモートアクセスとクライアントを参照してください。

追加した MCP サーバーの OAuth

エディタで追加する HTTP MCP サーバーは、ホスト側の OAuth ブローカーを通じて認証できます: RFC 8414 ディスカバリと RFC 7591 動的クライアント登録(Bromure AC として)を実行し、システムブラウザで PKCE 認可コードフローを実行し、ループバックリスナー(ポート 28500~28599)でコールバックを提供します。成功ページには Authorized — You can close this tab and return to Bromure AC. と表示されます。フロー全体はホスト上で実行されるため、VM が実際の OAuth 認証情報を見ることはありません。

AppleScript(Bromure AC Suite)

スクリプト用語辞書 Bromure AC Suite も、オートメーションのインターフェイスの 1 つです — オーケストレーションや、ウインドウ ID を必要とするスクリーンショットツールに便利です。スクリプトエディタや osascript から application "Bromure Agentic Coding" を対象にします。次をカバーします。

  • プロファイル — list profiles、create ac profile <name> [color <c>](UUID を返します)、delete ac profile <name|uuid>、そして get profile json / set profile json によるドキュメント全体の往復(プロファイル全体。ID は保持され、空欄のフィールドには保存済みのシークレットが統合されます)。
  • フィールドごとの設定 — get profile setting … key … / set profile setting … key … to value …。
  • エディタウィンドウ — open profile manager、open ac profile editor、close ac profile editor、select editor category <key>、および get editor window id / get main window id(screencapture -l 用の CGWindowID)。
  • マシンのウインドウ — open ac session、close ac session、list ac sessions。
  • アプリの状態と設定 — get app state(JSON)、および automation.enabled、automation.port、automation.bindAddress、remoteAccess.enabled、remoteAccess.port、remoteAccess.bindAddress、managed.serverURL、managed.acIngestURL の各キーに対する get ac app setting / set ac app setting。automation.enabled を設定すると HTTP サーバーがライブで切り替わります。

たとえば、マシンのウインドウを開くには次のようにします。

osascript -e 'tell application "Bromure Agentic Coding" to open ac session "Web app"'

メモ: プロファイル JSON は、BROMURE_DEBUG_CLAUDE が設定されていない限りシークレットを除去して伝わります。set profile setting で apiKey を空文字列に設定すると、鍵を保持するのではなく クリア します — JSON 往復ブリッジの空欄保持の動作とは異なります。ロケール切り替えは意図的にスクリプト化できません。代わりに、たとえば -AppleLanguages "(fr)" でアプリを再起動してください。

スケジュール自動化

スケジュールされたオートメーションは、1 台のマシンに紐づく、繰り返し実行される無人のエージェント実行です。オートメーションはオートメーションボード(⇧⌘A、またはサイドバーの オートメーション セクション)で作成・管理し、エージェントは上記の automations MCP サーバーを通じて自分のマシンのオートメーションを管理できます。機能全体 — トリガー、スケジュール、連鎖、必須のインジェクション検査、実行履歴 — は自動化で説明しています。このセクションでは制御プレーンのインターフェイスを扱います。API によるオートメーションの操作、無人の起動が発生させうる判断プロンプトへの応答、そしてアタッチしたターミナルでの同意の仕組みです。

API 上での自動化の制御

エンドポイント目的
GET /automations自動化とその実行履歴を一覧表示します。
POST /automations自動化を作成または更新(upsert)します。
DELETE /automations/<id>自動化を削除します。
POST /automations/<id>/run今すぐ発火します(スケジュールは変更しません)。
POST /automations/<id>/toggle一時停止または再開します。
POST /automation-runs/<run-id>/acknowledge失敗またはブロックされた実行を、ボードの 要対応 列から取り除きます。
GET /automation-runs/<run-id>/transcript完了した実行のアーカイブされたトランスクリプト(base64)。

保留中のプロンプトに応答する

ライフサイクル上の判断 — ベースイメージのアップグレードの提案、起動時のチェックに失敗したディスク、侵害アラート、侵害による消去 — は、通常はローカルのアラートとして表示されます。Mac の前に応答できる人がいない場合(ヘッドレスのエージェント、またはリモートのリッチクライアントが要求した起動)は、代わりにキューに入ります。それらは GET /state の pendingPrompts の下に現れ(それぞれ id、profileID、title、message、ボタンのラベルを持ちます)、POST /prompts/<id>/answer で応答します。

SOCK="$HOME/Library/Application Support/BromureAC/control.sock"
curl --unix-socket "$SOCK" -X POST http://localhost/prompts/PROMPT_ID/answer \
  -d '{"choice":"Remind me later"}'

choice には、プロンプト自身のボタンラベルのいずれかを渡します。プロンプトのタイムアウトまでにどのクライアントも応答しなければ、安全なフォールバックで解決されます — 破壊的な選択肢には決してなりません(たとえば侵害アラートは VM のシャットダウンにフォールバックします)。クライアントがまったく接続されていなければ、即座にフォールバックします。リッチクライアントは、これらのプロンプトを通常のアラートとして表示します。

注: オートメーション、委任、その他の無人起動がプロンプトを待つことはありません。あなたの応答が必要になる起動 — 侵害済みとマークされたマシンや、まだダウンロード中のローカルモデル — は拒否され、実行履歴に明確な理由が記録されます(「The workspace is marked compromised — start it yourself to confirm the wipe.」)。保存された状態を復元できないサスペンド中のマシンは、まっさらな状態で起動します。

接続ターミナル上での同意

ターミナルがマシンに対話的にアタッチされている間 — vm exec -it、vm attach、または SSH アタッチ経由 — ホスト側の承認プロンプト(認証情報の使用など)は、ゲスト内ではなくあなたのターミナルに表示されます。プロンプトは 🔒 Bromure — approval required と番号付きの選択肢、そして Choice [1-N] (Enter or timeout = deny) を表示します。Enter、タイムアウト、EOF、デタッチはいずれも拒否を意味するため、侵害されたゲストが承認を偽造することはできません。その後、ゲストの tmux が再描画されます。

デバッグエンドポイント(BROMURE_DEBUG_CLAUDE)

BROMURE_DEBUG_CLAUDE を設定してアプリを起動すると、TCP オートメーション API のデバッグゲートが外れ、認証テーブルの中段のルートも TCP で機能するようになります。これには次のデバッグルートも含まれます(特記がない限り、コントロールソケットでは常に利用可能です)。

  • GET /debug/ui-shot?path=…&which=… — アプリが自身のウインドウを PNG に描画し(画面収録の権限は不要)、サブビューのフレームのダンプを返します。既定の出力先は /tmp/bromure-ui-shot.png です。
  • POST /debug/editor — スクリーンショットツール用に設定エディタを駆動します。
  • POST /detect/prompt-injection — 実際の検出器を実行してその判定を返します(このルートは 制御ソケット上でも デバッグフラグを必要とします)。

このフラグは、AppleScript と MCP のプロファイル JSON ブリッジでシークレットをそのまま通すことも可能にし、bromure-ac mcp --debug の VM ツールにも必要です。GET /health は debugEnabled を報告するので、アプリがどちらのモードかを確認できます。

警告: BROMURE_DEBUG_CLAUDE は、通常 exec、VM の制御、プロファイルの生のシークレットをループバック TCP API から遠ざけている安全ゲートを取り除きます。このフラグを付けてアプリを実行するのは自分が管理するマシン上だけにし、ループバック以外のバインドアドレスとは決して組み合わせないでください — そうすると、ポートに到達できる誰にでも、VM の完全なシェルアクセス、伏せられていないシークレット、ウインドウのキャプチャが公開されてしまいます。これは BROMURE_AC_DEBUG(stderr へのイベントログ)や BROMURE_CLI_DEBUG(CLI のソケット診断)とは別物で、そちらは無害なログ用スイッチです。