AIエージェントに「このフォームを埋めておいて」と頼むと、まれに隣のボタンを押してしまうことがある。画面のどこに何があるかを、スクリーンショットから推測しているからだ。
この不安定さを、画面を見ずに解決するツールが10月28日に正式版(1.0)になった。Vercel LabsがGitHubで公開している「Agent Desktop」は、OSがスクリーンリーダー向けに持つ構造情報を読む。ボタンや入力欄を、名前で直接指定して操作できる。
画面を見ないなら、AIエージェントは何を見て操作先を決めているのか。そして、画面が変わってしまったときはどうなるのか。
座標を使わずにボタンを押す
画面を見ずに操作するとは、具体的に何をすることなのか。Agent Desktopは、Rustで書かれたコマンドラインツールだ。それ自体に画面はなく、開発者がAIエージェントの中に組み込んで使う。
使い方は3段階になる。
agent-desktop snapshot --app Finder -iを実行する。操作できる要素ひとつひとつにrefという識別子が付いたJSONが返る。たとえば「ゴミ箱を空にする」というボタンには、@s8f3k2p9:e8のようなrefが割り振られるagent-desktop click @s8f3k2p9:e8で、そのrefに対して操作する- もう一度snapshotを取り、結果を確かめる
この一連の流れに、画面上の座標(x, y)は一度も出てこない。
操作は既定でヘッドレスに行われる。マウスポインタを動かさず、今使っている画面のフォーカスも奪わない。物理的にマウスやキーボードを動かしたい場合だけ、--headedという別のフラグを使う(GitHubリポジトリのREADMEより)。
snapshotが返すJSONには、要素ごとにrole(ボタンなのか入力欄なのか)とname(表示されている名前)が入る。要素数の多い複雑なアプリでは、このJSONが巨大になり、AIエージェントが読む情報量が増えすぎてしまう。開発者のlahfir氏は、Hacker Newsで「設計上の主な課題はコンテキストサイズだった」と述べている(Show HN投稿より)。
Agent Desktopは、まず--skeletonでアプリ全体のおおまかな構造をつかみ、次に--rootで必要な領域だけへ絞り込む、という2段階の使い方でこの問題に対応する(READMEより)。
アクセシビリティツリーとは何か
座標を使わないなら、AIエージェントは何を手がかりに「ゴミ箱を空にする」ボタンを見つけているのか。
ヒントは、目の不自由な人が使う読み上げソフトにある。読み上げソフトは、画面のピクセルを解析しているわけではない。OSが内部で持っている「このボタンの名前は保存です」「ここに入力欄があります」という整理された情報を、そのまま読み上げているだけだ。
この整理された情報の塊を、アクセシビリティツリーと呼ぶ。ボタンやメニュー、入力欄といった要素が、役割(role)と名前(name)を持ったまま、画面の構造どおりに並んでいる。Agent Desktopのsnapshotコマンドは、この構造を読み取ってJSONに書き出したものだ(READMEより)。
つまりAgent Desktopは、読み上げソフトが使っているのと同じ情報を、AIエージェント向けに流用している。
画面が変わると操作を拒む
アクセシビリティツリーを読めるとしても、画面が変わってしまったときはどうなるのか。この設計には、もうひとつ仕掛けがある。
snapshotで発行されたrefは、そのsnapshot1回限りの使い捨てだ。裸の@e8のような形式はそもそも受け付けず、INVALID_ARGSで拒否される。
さらに、snapshotを取ったあとに画面が変わっていると、そのrefでの操作はSTALE_REFとして拒否される。ウィンドウが複数ある場合もAMBIGUOUS_TARGETとなり、候補のウィンドウIDが示される(READMEより)。
座標なら、ボタンが動いても何となく同じ場所を押してしまう。Agent Desktopは、ref自体を無効にすることで、違う場所を押すより先に操作を止める。
対応環境と導入方法
Agent DesktopはmacOS・Windows・Linuxに対応する。ただし前提条件はOSごとに違う。
| OS | 前提条件 |
|---|---|
| macOS | アクセシビリティ権限の許可が必要。agent-desktop permissions --guideで案内を確認できる |
| Windows | 操作対象のアプリと同じ権限レベルの端末なら、追加の許可は不要 |
| Linux | グラフィカルセッションとat-spi2-coreが必要 |
macOSだけ利用者の明示的な許可を求める設計だ。読み上げソフト向けの情報を外部のプロセスが読み取る以上、何らかの許可が必要になるのは自然だ。ただし、OSによって扱いが異なる点は、導入前に確認しておきたい(READMEより)。
導入はnpm install -g agent-desktopの1行で済む。Bun・Yarn・pnpmでも同じパッケージを使える。ライセンスはApache-2.0で、商用利用も妨げられない。
半年前は個人開発のツールだった
最初にこの話を見つけたのは、はてなブックマークのホットエントリだった。見出しは「GitHubの『vercel-labs/agent-desktop』」とだけあり、てっきりVercelが新しく作ったツールだと思っていた。
npmの公開履歴を遡ると、違った。パッケージが最初に公開されたのは2026年2月23日で、当時の説明文には個人開発者lahfir氏の名前と、macOS専用だったことを示す記録が残っている。氏自身がHacker Newsの投稿で「Macは使える。WindowsとLinuxはロードマップにある」と書いている(Show HN投稿より)。
その後、10月25日にWindows・Linuxへの対応が加わり、10月28日に正式版1.0になった。そして10月30日、パッケージの公開元がVercel Labsの正式リポジトリに切り替わった。npmの公開記録では、この版はGitHub Actions経由で自動的に公開されている(npmレジストリより)。
Vercel Labsには、AIエージェント向けの手順書を配布する「skills」という別のツールもある。Agent Desktopはnpx skills add https://github.com/vercel-labs/agent-desktop --skill agent-desktopという1行で、このskillsの仕組みにも組み込めるようになっている(READMEより)。
今日(11月1日)から数えて、わずか1日から6日の間に起きた出来事だ。Vercelの公式サイトにある「Labs products」の一覧には、今のところAgent Desktopは載っていない(vercel.com/labsより)。それでもリポジトリの所有者は、GitHub上のVercel Labsそのものだ。ドメインvercel.comの管理者だと、GitHubが認証を表示している。
まとめ
Agent Desktopは、画面のピクセルではなく、OSが持つアクセシビリティツリーを読んで、AIエージェントにデスクトップアプリを操作させるCLIだ。要素ごとに発行されるrefは使い捨てで、画面が変わると自動的に無効になる。
対応OSはmacOS・Windows・Linux。ライセンスはApache-2.0で、npm install -g agent-desktopの1行で今日から試せる。
今年2月に個人が公開したmacOS専用ツールが、わずか数日の間に1.0となり、Vercel Labsの正式リポジトリへ移った。公式の製品一覧にはまだ載っていないが、仕組みそのものはすでに動く状態で公開されている。
コメント
気づきや感想をどうぞ記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。
投稿にはGoogleログインが必要です。
Googleでログイン投稿にはGoogleアカウントの表示名が公開されます。メールアドレスは取得・公開しません。
コメントを読み込んでいます…