glovebox について
glovebox は、macOS 向けのコーディングエージェント用コンピューター操作 MCP サーバーです。永続 JavaScript セッションで複数の操作を実行し、通常はアクセシビリティの差分を読み取りながら、他のアプリを表示したままバックグラウンド入力を行えます。
主な機能
- 01永続 JavaScript セッションとスクリプト
- 02アクセシビリティツリーと変更差分
- 03クリック、入力、ドラッグ、スクロール
- 04対象アプリへのバックグラウンド入力
- 05スクリーンショットとピクセル座標による代替操作
活用シーン
- 01コーディングエージェントによる macOS アプリ操作
- 02アクセシビリティ状態による操作結果の確認
- 03状態を保持した複数段階の UI フロー実行
MCP 対応
MCP stdio 経由でコンピューター操作ツールを提供します。シェルコマンドを実行できるエージェントは CLI からも利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 3 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| code | string | はい | 実行する JavaScript。トップレベルの await に対応しています。 |
| title | string | いいえ | 操作ログに記録する、この手順を示す短い名前。 |
| timeout_ms | integer | いいえ | 時間制限(ミリ秒、デフォルトは 120000)。 |
詳細
glovebox
macOS上のコーディングエージェント向けコンピューター操作:各ステップを1回のJavaScript呼び出しで実行し、スクリーンショットではなくアクセシビリティの差分を使い、画面はあなたのために空けておきます。

const calc = await gb.getApp("Calculator");
await calc.pressKey("Escape");
await calc.typeText("6*7=");
await calc.getAXState();
Calculator — window 0 "Calculator" — image 460x816 — changes since last read (~ changed, + added):
~ 8 scroll area id=StandardInputView;value:42
~ 9 text "Edit field" value="42"
次の呼び出しでも、calcのバインドは維持されます。エージェントはクリックごとにツールを1回呼び出すのではなく、各ステップで数行のコードを書き、ウィンドウの新しい画像ではなく、変更内容を読み取ります。
- クリックごとのツール呼び出しではなく、ステップごとのスクリプト。 バインドとヘルパー関数は呼び出しをまたいで保持されるため、1回の呼び出しでクリック、入力、ループ、読み取りを実行できます。
- スクリーンショットではなく、差分。 デフォルトではアクセシビリティツリーをテキストとして読み取り、2回目以降の読み取りでは変更箇所だけを表示します。ツリーが空の場合(Citrix、キャンバス)には、スクリーンショットとピクセル座標でのクリックを利用できます。
- デフォルトでバックグラウンド操作。 別のアプリで作業を続けながら、キー入力、クリック、ドラッグ、スクロールを対象アプリに送信できます。カーソルはその場に留まり、エージェントの操作内容は描画カーソルで表示されます。
著者が実施したテストでは、6種類のセットアップで12個のタスク(各2回実行)を評価しました。gloveboxは総コストが最も低く、$1.41〜$5.67に対して$0.57でした。また、ラウンドトリップが最も少なく、成功数が最も多い結果となりました。
最初に知っておくこと: macOS専用で、Appleシリコン搭載のmacOS 27でテスト済みです。小さなヘルパーアプリのビルドにはXcodeコマンドラインツールが必要で、アクセシビリティと画面収録の許可を付与します。バックグラウンド入力ではmacOSの非公開呼び出しを2つ使用し、フォアグラウンドへのフォールバックもあります。エンドツーエンドでテスト済みなのはClaude Codeのみです。名前に反して、これはサンドボックスではなく、glovebox-mcpとは無関係です。
クイックスタート
Node 20.10+とXcodeコマンドラインツール(xcode-select --install)が必要です。
npm install -g @vashp2029/glovebox
glovebox signing --create # optional: macOS keeps the grants across helper rebuilds
glovebox setup # builds the helper, walks through permissions
glovebox doctor # every line should say ok
glovebox smoke # a real end-to-end test on Calculator
claude mcp add --scope user glovebox -- glovebox mcp
setupはGlovebox Helper.appを~/.glovebox/にビルドし、「システム設定」>「プライバシーとセキュリティ」> アクセシビリティおよび画面とシステムオーディオの収録で有効にするよう求めます。入力監視は任意で、有効にするとEscapeキーで停止できるようになります。ヘルパーは独立したアプリなので、1回許可すればすべてのエージェントとターミナルで使えます。signing --createは、ヘルパーだけに署名する自己署名証明書をログインキーチェーンに作成します。これがない場合、macOSはビルドのたびに新しいアプリとして扱います。アップグレードに関する注意を参照してください。
対応状況: Claude Code(エンドツーエンドでテスト済み)。Codex、Grok CLI、OpenCode、Gemini CLI、Cursorには設定手順が記載されていますが、動作確認はしていません。シェルコマンドを実行できるエージェントであれば、glovebox runを利用できます。docs/agents.mdを参照してください。
Claude Code 組み込みのコンピューター操作を使わない理由
お使いの環境に合うなら、これがより簡単な選択肢です。インストール不要で、Anthropic がサポートしており、スクリーンショットにターミナルが映り込むこともありません。glovebox は、これが合わない場合のためのものです。Anthropic のドキュメントを参照し、2026-11-03 に確認しました。
| Claude Code 組み込み | glovebox | |
|---|---|---|
| ほかのアプリ | Claude の作業中は非表示 | 表示されたまま。入力はバックグラウンドで対象アプリに送られます |
| デフォルトの読み取り方法 | 縮小されたスクリーンショット | アクセシビリティテキストの差分 |
| 利用できるユーザー | claude.ai を通じて Pro、Max、Ultra が利用可能。Team、Enterprise、Bedrock、Google Cloud、Foundry は対象外 | 誰でも利用可能。モデルやアカウントと通信することはありません |
| スクリプトによる実行 | -p モードでは利用不可 | ベンチマークではスクリプトから無人で実行できます。claude -p 自体はまだテストしていません |
| セッション | ロックファイルによって一度に 1 つに制限 | グローバルロックなし。名前付きセッションを並行して実行できます |
| 承認の記憶 | このセッションのみ | 「このセッションで許可」または「常に許可」 |
| ブラウザー | 表示のみ | ブラウザーを承認すると完全に操作できます。操作性が高まる一方で、リスクも高まります |
**以下のベンチマークには、Claude Code の組み込みツールは含まれていません。**そのため、この表は実測結果ではなく、ドキュメントに記載された動作を比較しています。
ベンチマーク
2026-11-03 に、macOS のタスク 12 件、セットアップ 6 種類を各 2 回実行しました。すべてのセットアップで同じモデル(Claude Sonnet 5.5、medium effort)、プロンプト、エージェントループを使用し、ツールだけを変更しました。タスクのプロンプトではツールを指定せず、テスト対象のツールを使わない別のチェックで各結果を判定しました。
| セットアップ | 成功 | 往復回数 | 返された画像 | 定価でのコスト |
|---|---|---|---|---|
| glovebox | 24/24 | 128 | 21 | $0.57 |
Claude が操作する Codex cua_repl | 20/24 | 166 | 30 | $1.41 |
| glovebox が実行する Anthropic ツールセット | 22/24 | 187 | 179 | $1.65 |
| agent-desktop | 22/24 | 204 | 22 | $2.32 |
| open-computer-use | 21/24 | 244 | 385 | $2.76 |
| Peekaboo | 20/24 | 359 | 183 | $5.67 |
glovebox が優位でなかった点。finder-rename では最も安価ではありませんでした(glovebox の $0.061 に対し、Codex cua_repl は $0.041)。タスク 12 件中 3 件で往復回数が最少ではなく、12 件中 3 件で最速でもありませんでした。remote-desktop では 36 秒かかり、ほかの 2 つは 22 秒と 23 秒でした。
この結果をどの程度信頼できるか:
- タスクを作成し、1 台の Mac で一度にテストを実行したのは私です。タスクのいくつか(
bulk-entry、remote-desktop、coexistence)は、glovebox が実現を目指した機能に合わせて設計されています。 - タスクごとの実行回数は 2 回なので、成功数にはほとんど意味がありません。24/24 と 20/24 の差に統計的有意性はありません。より確かな結果はコスト差です。タスクごとに比較しても、12 件中少なくとも 11 件で glovebox のコストがほかの各セットアップより低くなっています。
- テストした glovebox は、0.3.0 としてリリースされたコードです。バージョンをまだ更新していなかったため、結果ファイルには 0.2.0 と記載されています。
- 「Anthropic ツールセット」は Anthropic の API コンピューター操作ツールセットを指し、glovebox のフォアグラウンド経路を通じて実行しました。この経路が原因で
coexistenceに失敗したため、この結果はリリース済みの製品を表すものではありません。「Codexcua_repl」は、Claude のもとでのツールの形式を測定したものであり、独自のモデルを使う Codex を測定したものではありません。 - Peekaboo の初回実行はフォアグラウンド入力を許可して再実行したため、結果が改善しました。
bulk-entryの 2 回の失敗は、1 回あたり $0.75 の予算上限に達して実行が停止したためです。agent-desktop は MCP モードではなく、CLI を通じて実行しました。
手法、タスクごとの数値、生データについては、bench/ と bench/results/v2/summary.md をご覧ください。
比較
2026-11-03 に各プロジェクトの README とドキュメントを確認しました。「—」は確認できなかったことを示します。
| プラットフォーム | 1 回の呼び出しあたりのアクション数 | 呼び出し間の状態 | デフォルトの読み取り方法 | 差分読み取り | バックグラウンド入力 | 必要なもの | |
|---|---|---|---|---|---|---|---|
| glovebox | macOS | 複数(1 つのスクリプト) | 永続的な JS セッション | アクセシビリティテキスト | はい | はい | ヘルパーのビルドに Xcode CLT |
| Claude Code built-in | macOS(CLI) | — | — | スクリーンショット | — | いいえ。他のアプリが非表示になります | Pro、Max、または Ultra |
| Codex computer use | macOS、Windows | 複数(1 つのスクリプト) | 永続的な JS セッション | アクセシビリティテキスト | はい | macOS でははい | ChatGPT アプリとプラグイン |
| lcu | macOS(Apple silicon)、Linux | Codex と同じ。Codex のランタイムを実行します | Codex と同じ | Codex と同じ | Codex と同じ | — | ChatGPT アプリがインストール済みであること |
| agent-desktop | macOS、Windows、Linux | コマンドごとに 1 つ、および batch | スナップショットに紐づく参照 | アクセシビリティツリー JSON | — | はい | Homebrew または npm |
| Peekaboo | macOS 15+ | コマンドごとに 1 つ | スナップショットから取得した要素 ID | スクリーンショットまたは JSON UI マップ | — | はい | Homebrew または npm |
| open-computer-use | macOS、Linux、Windows | MCP 呼び出しごとに 1 つ。CLI ではシーケンスに対応 | — | アプリの状態 | — | — | npm |
| computer-use-mcp | macOS 14+ | 呼び出しごとに 1 つ | 要素 ID | 各アクションのスクリーンショットとツリー | — | はい | 公証済みバイナリ |
| cua-driver | macOS、Windows、Linux | — | — | — | — | はい | ドキュメントを参照 |
次のような場合は別のものを選んでください。 Windows または Linux が必要な場合(agent-desktop、cua-driver、lcu)、ビルド手順なしで公証済みバイナリを使いたい場合(computer-use-mcp)、または OpenAI の実際のランタイムを使いたく、すでに ChatGPT アプリをお持ちの場合(lcu)。
安全性
セッションでアプリに初めてアクセスすると、ダイアログが表示されます。「このセッションで許可」「常に許可」「拒否」から選択できます。ターミナル、パスワードマネージャー、システム設定など一部のアプリは、glovebox allow <bundle id> を実行しない限りブロックされます。対象アプリの一覧は SECURITY.md にあります。アプリを前面に表示する必要があったスクリプトは、アプリを切り替えると停止します。バックグラウンドで実行中のスクリプトは、別のアプリを使っている間も動作し続けます。また、「入力監視」を許可していれば、Escape キーでスクリプトを停止できます。すべてのアクションは ~/.glovebox/actions.log に記録されます。
許可したアプリでは、その中のすべての操作が許可されます。ブラウザーを許可すると、エージェントはサインイン済みのすべてのサイトを利用できます。glovebox は、ページのコンテンツに含まれるプロンプトインジェクションを検出しません。アプリのリモート操作を誰かに任せるのと同じものとして扱ってください。詳細については SECURITY.md を参照してください。
既知の問題: バックグラウンドアプリのポップアップメニューが開いている間、macOS は入力したキーをそのアプリに送信するため、入力した文字がそのアプリに入力されることがあります (詳細)。
仕組み
agent ──MCP stdio──▶ glovebox mcp ──▶ kernel (persistent JS session)
agent ──shell──▶ glovebox run ──▶ daemon ──▶ kernel │
▼ Unix socket
Glovebox Helper.app (Swift: AX, CGEvent,
ScreenCaptureKit, approval dialogs)
バックグラウンド入力では、実行時に検索する macOS(SkyLight)の非公開関数を 2 つ使用し、前面表示での代替手段にも対応しています。どの方法が使われているかは glovebox doctor で確認できます。それ以外はすべて公開 API です。OpenAI、Anthropic、その他のベンダーのバイナリは使用しません。
ステータス
| プラットフォーム | ステータス |
|---|---|
| macOS | 動作します。macOS 14+ 向けにビルドされています。テスト済みなのは macOS 27(Apple silicon)のみです。 |
| Windows | 開発予定(UI Automation)。ロードマップを参照してください。 |
| Linux | 開発予定(AT-SPI。Wayland では制限あり)。ロードマップを参照してください。 |
モックではなく、実際に実行してテストします。glovebox smoke と、MCP 経由での smoke --full(一括処理のステップ、永続的なバインディング、差分、ピクセルクリック、および別のアプリを前面に表示した状態でのバックグラウンドクリック、ドラッグ、スクロール)が対象です。また、glovebox mcp 経由で Claude Code を接続してテストします。全一覧は docs/testing.md を参照してください。
ひと目でわかる API
gb.getApp(name)は、フォーカスを奪わずにアプリを起動または検索します。gb.listApps()。app.getAXState()はアクセシビリティツリーをテキストで返します。以降の読み取りでは差分が返されます。{frames: true}を指定すると要素の枠が追加され、{disableDiffing: true}を指定するとツリー全体が返されます。- 画像を取得する方法は
app.getScreenshot()のみです。 app.click(target)、doubleClick、rightClick、scroll、drag、setValue、focus、selectText、performSecondaryAction。app.pressKey("ctrl+a")は xdotool の名前を使用します(superは Cmd です)。app.typeText("text\n")。app.waitForChange()とapp.settle()は、遅れて反映される更新を待ちます。- ターゲットには、ツリー内の要素インデックス、またはウィンドウ画像上の
[x, y]ピクセル座標を指定します。ウィンドウ画像はスクリーンショットのピクセル空間です。
完全なリファレンス:docs/api.md、またはセッション内で help() を実行してください。
ドキュメント
- docs/api.md:エージェントとスクリプト作成者向けのスクリプト API。
- docs/agents.md:各 MCP クライアントまたはシェル専用エージェントの接続方法。
- docs/cli.md:すべてのサブコマンド、フラグ、設定キー、環境変数。
- docs/recipes.md:1 回の
js呼び出しに貼り付けられる短いスクリプト。 - docs/design.md:コントリビューターと評価者向けの設計上の判断とその理由。
- docs/backend-protocol.md:新しいプラットフォームへの移植向けのヘルパープロトコル。
- docs/testing.md:単体テストとスモークテスト、および実機で実施した内容。
- docs/roadmap.md:予定されている作業。ここに記載されている内容はまだリリースされていません。
- SECURITY.md:ユーザーを保護する仕組みと保護しない仕組み、および脆弱性の報告方法。
- CONTRIBUTING.md:クローンからのセットアップ、テスト、プルリクエストのルール。
- CHANGELOG.md:リリースごとの変更とアップグレードに関する注意事項。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。