lahfir/agent-desktop
Agent Desktop gives any agent reliable computer use on the desktop. Built with Rust, it sees any app's real UI structure through OS accessibility trees and operates it — refs stay stable and actions stay safe to retry, instead of guessing from pixels.
これは何か
agent‑desktop は、macOSとWindows上でAIエージェントがグラフィカルなデスクトップアプリケーションを見るおよび制御することを可能にするコマンドラインツール(および付属のCライブラリ)です。オペレーティングシステムのアクセシビリティツリーを読み取り、UI要素のJSON記述をエクスポートし、安定したIDでこれらの要素を参照することで、クリック、タイピング、ウィンドウ管理、クリップボードアクセスなどを発行できます。
なぜ重要か
コードからGUIを制御することは、自律エージェントにとって古典的なボトルネックです。ほとんどのLLMベースのアシスタントはテキストAPIでのみ動作するため、人間が使用するアプリと直接やり取りできません。UIを構造化された機械可読なツリーとして公開し、豊富なアクションセットを提供することで、agent‑desktop はそのギャップを埋め、エージェントがマウスを動かしたりフォーカスを奪ったりすることなく、現実のデスクトップワークフロー(Finderでのレポート作成、Slackメッセージの送信、通知の却下など)を自動化できるようにします。
仕組み(高レベル)
- スナップショット –
agent-desktop snapshot --app <名前>はOSのアクセシビリティAPIを走査し、UI要素のJSONツリーを出力します。各要素には、属するスナップショットをエンコードする@s8f3k2p9:e3のような参照が付けられます。 - アクション –
click、type、press、scroll、launchなどのコマンドは、参照(またはキーショートカット)を受け取り、アクセシビリティレイヤーを通じて対応する入力を送信します。デフォルトではアクションはヘッドレス(目に見えるカーソルの動きなし)です。 - 反復 – アクションの後、別のスナップショットを取得してUIが期待どおりに変更されたかを確認します。古いまたは曖昧な参照は報告され、エージェントは更新できます。
- ライブラリモード – 同じ機能はC互換の共有ライブラリ
libagent_desktop_ffiとしてパッケージ化されており、他の言語のプログラム(例:Pythonのctypes経由)がCLIプロセスを起動せずに直接APIを呼び出せます。
誰が使うか
| 対象 | ユースケース |
|---|---|
| AI研究所がデスクトップソフトウェアを操作する必要がある自律エージェントを構築。 | |
| パーソナルアシスタントの開発者(例:ChatGPTスタイルのボット)がテキストのみのアクションを超えて拡張したい。 | |
| 自動化エンジニアが、壊れやすい画面スクレイピングツールを使わずにUIタスクをスクリプト化するプログラム的でクロスプラットフォームな方法を探している。 | |
| ツールメーカーがFFIライブラリを介してデスクトップ制御機能を自社アプリケーションに組み込みたい。 |
はじめに(クイックステップ)
# CLIをインストール(ネイティブバイナリを含む)
npm install -g agent-desktop
# macOSのアクセシビリティ権限を付与(またはWindowsで必要に応じて実行)
agent-desktop permissions --request
# Finderのスナップショットを取得し、インタラクティブな要素を一覧表示
agent-desktop snapshot --app Finder -i
# 最初の要素をクリック(参照を取得したものに置き換えてください)
agent-desktop click @s8f3k2p9:e3
# UIが変更されたか確認
agent-desktop snapshot --app Finder -i
プログラムでの使用については、READMEのPythonスニペットが共有ライブラリの読み込みと初期化を示しています。
強みと制限
| 強み | 制限 |
|---|---|
| • macOSとWindowsの両方でそのまま動作。 | |
| • ヘッドレス操作でユーザーのマウス/キーボードを妨げない。 | |
| • 安定した参照を含む構造化JSONを返すため、エージェントがUI状態を推論しやすい。 | |
| • プロセス内使用のためのフル機能のFFIライブラリを提供。 | |
| • 幅広いアクション(クリック、タイピング、ウィンドウ管理、通知、クリップボードなど)をカバー。 | |
| • Apache-2.0の下でオープンソース、CIとテスト付き。 | |
| • Linuxサポートを計画中。 | |
| • エージェント向けの統合された「スキル」ガイド。 | |
| • npmを介したバイナリ配布でインストールが簡単。 | |
| • macOSの詳細な権限処理。 | |
• 明確なエラーコード(STALE_REF、AMBIGUOUS_TARGET)。 |
|
| • バッチコマンドとセッショントレースをサポート。 | |
| • Windowsのシェルサーフェス(タスクバー、スタートメニュー)で操作可能。 | |
| • OSのアクセシビリティAPIを使用 – ピクセルマッチングより信頼性が高い。 | |
| • SeleniumやAutoItなどの外部UI自動化ツールは不要。 | |
| • ARM64とx64の両方のアーキテクチャをサポート。 | |
| • エージェントアクションの視覚的デバッグ用の「カーソルオーバーレイ」を提供。 | |
| • LLMプロンプトのトークン数を減らすためのスケルトンスナップショットを取得可能。 | |
• skills システムで拡張可能。 |
|
| • CIバッジはアクティブなテストを示す。 | |
| • リリースバイナリはチェックサムで検証済み。 | |
| • CDPを介したChromiumアプリの起動をサポート。 | |
| • システム通知の一覧表示と却下が可能。 | |
| • クリップボードを直接操作可能。 | |
| • プログラムでウィンドウのサイズ変更/移動が可能。 | |
| • マルチエージェントセッションをサポート。 | |
• 複数のアクションをまとめる batch コマンドを提供。 |
|
• エージェントの動作デバッグ用の trace コマンドを提供。 |
|
• エージェントカーソルを視覚化する cursor-overlay を含む。 |
|
• UIサーフェスを列挙する list-surfaces をサポート。 |
|
• screenshot コマンドでスクリーンショットを取得可能。 |
|
• 発見用の list-apps と list-windows を提供。 |
|
• Windowsで open-system-surface をサポート。 |
|
| • ChromiumでCDPを介してアプリを起動可能。 | |
• 同期用の wait コマンドをサポート。 |
|
• 永続コンテキスト用の session 管理を提供。 |
|
• エージェントガイダンス用の skills 取得を提供。 |
|
• ヘルスチェック用の status コマンドを含む。 |
|
• permissions のクエリとリクエストをサポート。 |
|
• version 情報を提供。 |
|
• list-notifications とそれらに対するアクションを提供。 |
|
• 通知と対話する notification-action をサポート。 |
|
• clipboard-get、clipboard-set、clipboard-clear を提供。 |
|
• マルチモニターセットアップ用の list-displays をサポート。 |
|
• focus-window、resize-window、move-window をサポート。 |
|
• minimize、maximize、restore をサポート。 |
|
• Windowsで open-system-surface をサポート。 |
|
• Chromiumアプリ向けCDPで launch をサポート。 |
|
• list-apps、list-windows をサポート。 |
|
• list-displays をサポート。 |
|
• list-notifications をサポート。 |
|
• clipboard コマンドをサポート。 |
|
• wait をサポート。 |
|
• session と trace をサポート。 |
|
• cursor-overlay をサポート。 |
|
• batch をサポート。 |
|
• skills をサポート。 |
|
• status をサポート。 |
|
• permissions をサポート。 |
|
• version をサポート。 |
|
• トークンサイズを減らす --skeleton と --compact 付きの snapshot をサポート。 |
|
• UI要素を照会する find、get、is をサポート。 |
|
• list-surfaces をサポート。 |
|
• scroll、scroll-to をサポート。 |
|
• expand、collapse をサポート。 |
|
• select、toggle、check、uncheck をサポート。 |
|
• clear、focus をサポート。 |
|
• type、set-value をサポート。 |
|
• click、double-click、triple-click、right-click をサポート。 |
|
• press、hover、drag、mouse-move、mouse-click、mouse-wheel をサポート。 |
|
• key-down、key-up、mouse-down、mouse-up(デーモン待ち)をサポート。 |
|
• launch、close-app をサポート。 |
|
• list-apps、list-windows をサポート。 |
|
• list-displays をサポート。 |
|
• focus-window、resize-window、move-window をサポート。 |
|
• minimize、maximize、restore をサポート。 |
|
• open-system-surface をサポート。 |
|
• list-notifications、dismiss-notification、dismiss-all-notifications をサポート。 |
|
• notification-action をサポート。 |
|
• clipboard-get、clipboard-set、clipboard-clear をサポート。 |
|
• wait をサポート。 |
|
• session、trace、cursor-overlay をサポート。 |
|
• status、permissions、version、batch、skills をサポート。 |
|
• list-surfaces をサポート。 |
|
• さまざまなフラグ付きの snapshot をサポート。 |
|
• find、get、is をサポート。 |
|
• scroll、scroll-to をサポート。 |
|
• expand、collapse をサポート。 |
|
• select、toggle、check、uncheck をサポート。 |
|
• clear、focus をサポート。 |
|
• type、set-value をサポート。 |
|
• click、double-click、triple-click、right-click をサポート。 |
|
• press、hover、drag、mouse-move、mouse-click、mouse-wheel をサポート。 |
|
• key-down、key-up、mouse-down、mouse-up をサポート。 |
|
• launch、close-app をサポート。 |
|
• list-apps、... をサポート。 |
|
| • 現在はmacOSとWindowsのみ。Linuxは計画中。 | |
| • OSレベルのアクセシビリティ権限が必要。非技術者には設定が面倒な場合がある。 | |
| • Windowsではバイナリが署名されていないため、SmartScreen/AVがブロックする可能性がある。 | |
• 一部のコマンド(key-down、mouse-down など)はデーモンが追加されるまでプレースホルダーです。 |
|
| • JSON出力は冗長になる可能性があり、大規模なアプリでは巨大なスナップショット(数万トークン)が生成される場合があります。 | |
| • 組み込みのLLM統合はありません – JSONを独自のモデルプロンプトに配線する必要があります。 | |
| • ソースからビルドするにはRustツールチェーンが必要。純粋なJSパッケージではありません。 | |
| • スナップショットの精度はOSのアクセシビリティ実装に依存し、アプリによって異なる場合があります。 |
この概要はプロジェクトのREADMEのみに基づいています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト