Vercel agent-desktop:スクリーンショット不要のAIデスクトップ操作

Vercel Labsが、AIコーディングエージェントからmacOS、Windows、Linuxのネイティブデスクトップアプリを読み取り、操作できるオープンソースのコマンドラインツール「agent-desktop」を公開しました。スクリーンショットではなく、OSのアクセシビリティツリーを使って動作するのが特徴です。エージェントはボタンや入力欄、メニューの一覧をJSONで受け取り、それぞれに付いたref IDを指定して操作します。そのため、ビジョンモデルにピクセル座標を推測させる必要がありません。すでにターミナルでClaude Code、Codex、Cursorを使っているなら、agent-desktopを入れるだけで、そのエージェントにブラウザー以外のアプリも任せられるようになります。
要点
- agent-desktopはVercel Labsが公開しているRust製のCLIとCライブラリで、ライセンスはApache-2.0です。Chris Tate氏が2026年10月31日に「コンピューター全体で使えるagent-browser」として発表しました(Xの投稿)。
snapshotを実行すると、アプリのアクセシビリティツリーが操作可能な要素ごとのref付きJSONで返ります。エージェントはrefを指定してクリック、入力、切り替えを行い、改めてスナップショットを取って結果を確かめます。- ツール自体はLLMを内蔵しておらず、GUIや対話型のプロンプトもありません。観察と操作のループを回すのは、普段使っているコーディングエージェントです。
- 対応OSはmacOS 13以降、Windows 10 1809以降、Ubuntu 24.04以降です。2026年10月27日のバージョン1.0.0でLinuxに対応し、現行版は10月30日リリースの1.0.2です。
- アクセシビリティツリーを公開していないUIは認識できず、Webページの操作はagent-browserに任せる設計です。また、ドキュメントにはサンドボックスに関する記述がありません。VM上でテスト用データを使って動かしてください。
agent-desktopの基本
agent-desktopは、AIエージェントがシェルから呼び出すデスクトップ自動化ツールです。GitHubのREADMEでは「AIエージェントのためのコンピューター操作:OSのアクセシビリティツリーを通じてデスクトップアプリを読み取り、操作する」と説明されています。各コマンドはJSONのエンベロープを1つ出力して終了するため、シェルコマンドを実行できるエージェントであれば何でも利用できます。
アクセシビリティツリーとは、OSがスクリーンリーダー向けにもともと公開している、ユーザーインターフェースの構造化された情報です。ボタン、テキスト入力欄、チェックボックス、メニュー項目のそれぞれがロールと名前を持ち、多くの場合は値も持っています。公式ドキュメントによると、agent-desktopは各プラットフォームのネイティブAPIでこのツリーを読み取ります。macOSではAX、WindowsではUI Automation、LinuxではAT-SPIです。
AGENTS.mdには「エージェントではなくツール」と明記されています。観察と操作のループは呼び出し側のエージェントが担い、ツールがモデルを内蔵することはありません。発表から2日後の2026年11月2日時点で、リポジトリのGitHubスター数は約7,100、フォーク数は519でした。
agent-desktopの仕組み:スナップショット、操作、検証
公式のクイックスタートでは、アプリの全体像をつかむ、領域を掘り下げる、refに対して操作する、結果を検証する、という4ステップでループ全体を示しています。
- 全体像をつかむ。
agent-desktop snapshot --app gnome-calculator --skeleton -i --compactを実行すると、要素の多いアプリでもコンパクトな骨組みが返ります。 - 掘り下げる。 スケルトンで得たrefを
snapshot --rootに渡すと、その領域だけを展開できます。 - 操作する。
agent-desktop click @s2txcl95uvubmn:e11で、そのrefの要素を押します。 - 検証する。
agent-desktop wait --element @s2txcl95uvubmn:e6 --predicate value --value 7で、表示が7になるまで待ちます。
検証ステップは意図して組み込まれています。ドキュメントによれば、操作が成功したというだけではUIが実際に変化した証拠にはなりません。設計メモでは「検証済みの配信」「未検証の配信」「未配信」を区別しており、コア部分が一律の成功フラグを付けることはありません。

refはスナップショットに紐づく
すべてのrefには、@s2txcl95uvubmn:e11のように取得元のスナップショットIDが含まれます。@e8のような単体のrefはINVALID_ARGSで拒否されます。操作の前に、ツールはプロセスID、ロール、パス、テキスト、座標範囲といった保存済みの手がかりをもとに要素を特定し直します。一致する要素がなければSTALE_REFを返し、複数が一致すればAMBIGUOUS_TARGETを返すので、エージェントはスナップショットを取り直す必要があります。デスクトップでは、違うボタンを1回クリックしただけで何かを送信したり削除したりしかねません。実行を拒否するほうが安全な失敗のしかただといえます。
デフォルトはヘッドレス
READMEによると、refを使った操作はアクセシビリティAPI経由で行われ、「ポインターを動かすこともフォーカスを奪うこともありません」。エージェントが別ウィンドウでフォームに入力している間も、自分の作業を続けられます。アクセシビリティ操作だけでは足りないアプリ向けには、グローバルフラグ--headedで物理的なマウスとキーボード入力に切り替えられます。
60のコマンド、どのOSでも同じ名前
CLIには60のコマンド名があり、そのうち56が動作します。主に次のグループに分かれます。
- 観察:
snapshot、find、get、is、screenshot、list-surfaces - refに対する操作:
click、type、set-value、select、toggle、check、expand、scroll-toなど - キーボードとマウス:
press、hover、drag、mouse-click、mouse-wheel - アプリとウィンドウ:
launch、close-app、list-windows、focus-window、resize-window、minimize - システム: 通知、クリップボード、
wait、batch、permissions、skills
キーやマウスボタンを押しっぱなしにする4つのコマンド(key-down、key-up、mouse-down、mouse-up)は、現時点では実行できません。エージェントがクラッシュしたときに押下状態を解除できるデーモンが用意されるまで、無効のままです。
agent-desktopとスクリーンショット方式のコンピューター操作の違い
コンピューター操作(Computer Use)とは、AIモデルが人と同じように画面を見て、クリックや入力でコンピューターのGUIを操作することを指します。AnthropicのComputer Useツールや類似機能が採用しているスクリーンショット方式では、画面の画像をモデルに送り、クリックすべきピクセル座標を返してもらいます。agent-desktopが送るのは、画像ではなく構造化されたテキストです。
| スクリーンショット方式 | agent-desktop(アクセシビリティツリー) | |
|---|---|---|
| モデルが見るもの | 画面全体の画像 | ロール、名前、値を持つJSONツリー |
| 操作対象の指定方法 | ピクセル座標 | スナップショット単位のref ID |
| 1回の観察あたりの入力コスト | スクリーンショット1枚につき約1,000〜1,800トークン(Anthropicのドキュメント) | テキストのみ。サイズはアプリのツリー次第 |
| ポインターが動くか | 動く | デフォルトでは動かない |
| 対象を誤ったときの挙動 | 座標の位置をそのままクリック | STALE_REFまたはAMBIGUOUS_TARGETで失敗 |
| アクセシビリティ情報のないアプリ | 画面に見えるものなら何でも操作可能 | 操作不可 |
| ビジョンモデル | 必要 | 不要 |
AnthropicのComputer Useのドキュメントでは、スクリーンショット1枚あたりの入力をおよそ1,000〜1,800トークンとしています。また、「Claudeは操作の結果をはっきり確認しないまま、成功したかのように振る舞うことがある」とも注意を促しています。agent-desktopは、テキストのスナップショットと明示的な検証ステップでこの2つの問題に対処しています。
その代わりに犠牲になるのが対応範囲です。スクリーンショットなら、ゲームやCanvasを多用するアプリ、リモートデスクトップなど、ピクセルを描画するものなら何にでも使えます。一方のagent-desktopが認識できるのは、アプリがアクセシビリティレイヤーに通知している情報だけです。要素の多いアプリではツリーが非常に大きくなることもあり、READMEがまず--skeletonで全体像をつかみ、--rootで掘り下げるよう勧めているのはこのためです。スクリーンショットで動くエージェントについては、以前の記事GPT-6.1 TerraのComputer Useも参考にしてください。
agent-desktopとagent-browser
agent-desktopは、Vercel Labsのエージェント向けブラウザー自動化CLI「agent-browser」の姉妹プロジェクトです。agent-browserは2026年11月2日時点でGitHubスター数が約45,200、ライセンスは同じくApache-2.0で、MCPサーバーとしても動かせます。ページのアクセシビリティツリーのスナップショットを取り、@e2のような短いrefを受け取って操作するという考え方も共通しています。
両者は操作対象によって役割を分けています。agent-desktopのドキュメントには、Webページの自動化は対象外で、そちらはagent-browserを使うよう書かれています。ChromiumやElectronのデスクトップアプリの場合は、agent-desktopがDevToolsのポートを開き、そこにagent-browserが接続できます。1つのエージェントが、ネイティブのウィンドウは一方のツールで、Webコンテンツはもう一方のツールで、同じスナップショットとrefの作法のまま扱えるわけです。
agent-desktopのインストールとセットアップ
インストールにはnpmを使います。Bun、Yarn、pnpmでも同様に導入できます。
npm install -g agent-desktopを実行します。パッケージにはx64とARM64向けのネイティブバイナリが同梱されています。開発者のFlavio Copes氏は、Node 18以降が必要だと指摘しています。agent-desktop statusを実行して、インストールを確認します。- 権限を付与します。macOSでは、ターミナルまたはエージェントのホストにアクセシビリティの権限が必要で、
agent-desktop permissions --guideで手順を案内してくれます。Windowsでは、ターミナルと同じ整合性レベルのアプリなら許可は不要です。Linuxでは、at-spi2-coreを備えたグラフィカルセッションが必要です。 agent-desktop skills get desktopを実行します。バイナリに組み込まれた、エージェントが最初に読むべき使い方ガイドが出力されます。
ドキュメントに記載されている動作要件は次のとおりです。
| OS | 最小要件 | アーキテクチャ | アクセシビリティAPI |
|---|---|---|---|
| macOS | 13以降 | Intel、Apple Silicon | AX |
| Windows | 10 1809以降、Server 2019以降 | x64、ARM64 | UI Automation |
| Linux | Ubuntu 24.04以降(glibc 2.35が下限) | x86_64、aarch64 | AT-SPI |
ただし、どのOSでもまったく同じ機能が使えるわけではありません。READMEの機能一覧では、macOSのシェルサーフェスは「予定」とされています。Linuxでマウス入力を使うにはX11と--headedが必要で、Waylandでクリップボードを扱うにはwl-clipboardが必要です。
Claude Code、Codex、Cursor向けの公式プラグインやMCPサーバーはまだありません。Ubuntuでバージョン1.0.2を試したCopes氏は、スキルファイルやAGENTS.mdへの記述で接続しました。同氏の計測では、npmのインストールスクリプトがブロックされている場合は1回の呼び出しに約146ミリ秒かかり、ネイティブバイナリがリンクされている場合は約21ミリ秒でした。
リリースの経緯
変更履歴を見ると、公式発表の前に数週間にわたってリリースが重ねられていたことがわかります。
- 0.10.0(2026年10月18日): Windows(x64とARM64)に対応。単体の
@eN形式のrefが廃止され、スナップショットIDを含むrefに統一されました。 - 1.0.0(2026年10月27日): AT-SPIによるLinux対応。macOS、Windows、Linux向けのCLIとCライブラリが、そろって1.0としてリリースされました。
- 1.0.2(2026年10月30日): macOSでの権限設定の案内がわかりやすくなり、インストールスクリプトのブロックでランチャーが遅くなっている場合に通知が出るようになりました。
- 2026年10月31日: Chris Tate氏が公式に発表。
使う前に知っておきたいリスクと制約
デスクトップ上のあらゆるものをクリックできるエージェントは、「送信」「削除」「支払いを承認」といった押してはいけないボタンを押してしまう可能性もあります。
- READMEは、スナップショットやスクリーンショットに個人情報が含まれる場合があるため、公開ログやアップロードに含めないよう注意を促しています。メールクライアントのスナップショットには、当然メールの内容も含まれます。
- プロジェクトのセキュリティポリシーが扱っているのは脆弱性の報告方法だけで、サンドボックスやプロンプトインジェクションについては何も触れていません。
- メール、ドキュメント、チャットメッセージといったアプリ内のテキストは、データとしてモデルに渡ります。これはプロンプトインジェクションの入り口になり得ます。AnthropicのComputer Useのドキュメントは、モデルがコンテンツ内の指示に従ってしまうことがあると警告したうえで、専用のVMやコンテナを使うこと、ログイン情報にアクセスさせないこと、重要な操作には人間の確認を挟むことを推奨しています。agent-desktopにも同じことが当てはまります。
- JEVというオプションのヘルパーは、画面の説明文を自分で設定したモデルプロバイダーに送信します。ネイティブのCLIとは別物なので、機密性の高いアプリで使う前に、有効になっていないかを確認してください。
最近のCursor上のトロイの木馬化されたClaude Code拡張機能の件が示したように、エージェント向けツールそのものが攻撃対象になっています。agent-desktopは、公式のnpmパッケージかGitHubのリリースからのみインストールしてください。変更履歴によれば、これらにはチェックサムとビルドの来歴情報が付いています。
agent-desktopを試すべき人
すでにターミナルでコーディングエージェントを使っていて、ブラウザーの外に出られない壁にたびたびぶつかっている開発者に向いています。たとえば、ネイティブアプリのUIテスト、APIのないデスクトップツールへのフォーム入力、ビルドしたアプリが実際に起動するかの確認などです。QAチームにとっても、構造化されたrefと明示的な検証ステップは、座標ベースのクリックより信頼しやすいはずです。一方、対象がゲームやリモートデスクトップのセッション、独自描画のCanvasであれば、今のところスクリーンショット方式のコンピューター操作しか選択肢はありません。
よくある質問
agent-desktopは無料ですか?
はい。CLIとCライブラリはApache-2.0ライセンスのオープンソースで、インストールもnpm install -g agent-desktopの1行で済みます。ツール自体はモデルを呼び出さないので、かかるのはコーディングエージェントがもともと使っている分のコストだけです。
agent-desktopはスクリーンショットを使いますか?
デフォルトでは使いません。agent-desktopはOSのアクセシビリティツリーを読み取り、ref ID付きのJSONとして返すため、エージェントはピクセル座標ではなく構造化データをもとに操作します。エージェントが画面を目で確認する必要がある場合に備えて、screenshotコマンドも用意されています。
agent-desktopに対応しているAIエージェントは?
シェルコマンドを実行できるエージェントなら、Claude Code、Codex、Cursorのエージェントを含めて何でも使えます。専用のプラグインやMCPサーバーはまだないため、スキルファイルやAGENTS.mdへの記述でエージェントにツールの存在を伝えます。使い方ガイドはagent-desktop skills get desktopで出力できます。
agent-desktopとagent-browserの違いは?
agent-browserはブラウザー上のWebページを自動化するツールで、agent-desktopはmacOS、Windows、Linuxのネイティブデスクトップアプリを自動化するツールです。どちらもVercel Labsが開発しており、スナップショットとrefという同じアプローチを採用しています。ChromiumやElectronのアプリでは、agent-desktopがDevToolsのポートを開き、そこにagent-browserが接続できます。
AIエージェントにデスクトップを操作させても安全ですか?
対策を講じたうえでなら使えます。agent-desktopのドキュメントにはサンドボックスの記述がなく、アプリのコンテンツにプロンプトインジェクションが仕込まれている可能性もあります。仮想マシンやテスト用アカウントで動かし、機密性の高いアプリは閉じておき、送信、支払い、削除を伴う操作には人間の確認を必須にしてください。


