🤖

AIエージェントのためのGUI操作フレームワーク作った

に公開

🚀 TL;DR

最近の AI エージェントは ブラウザ操作まで自動化しているが、デスクトップ UI の操作は依然として困難。

デスクトップが操作で、ローカルアプリやファイルが扱えるようにしたい。

しかし自由に触らせると、シークレット漏えいや監査不能という深刻なリスクが。

「UI を動かす手」でありながら「セキュリティを守るゲート」となるAIエージェントのアクションにおけるフレームワークを作ってみました。

@githubはこちら

1. UI操作エージェントとは

最近何かと"エージェント"が注目されていますが、その中でもUIを操作するエージェントとして"ChatGPT プラグイン" や AutoGPT などの ブラウザ操作エージェント が急増しました。

理由はシンプルで、ブラウザ DOM は JavaScript から容易にアクセスでき、拡張機構 (WebExtension) も整備されているからです。

例: AutoGPT + Browser‑Agent が Google 検索 → フォーム送信を自動化 [AutoGPT Newsletter]

一方、デスクトップ UI (Finder, Notes, Excel…) を自動で操作するエージェントはほとんど見かけません。主な理由は三つあります。

技術的ハードル 詳細
OS ごとに API がバラバラ macOS = Accessibility API, Windows = UIAutomation COM, Linux = AT‑SPI … ドライバを書き分ける必要がある
セキュリティ許可が厳格 画面収録・アクセシビリティ権限を取得しないとキー入力も送れない
シークレット漏えいリスク UI 経由でパスワードを打ち込むと、エージェント自身が平文を保持してしまう

しかしデスクトップが操作できるようになると、ブラウザでは完結しない業務 (ネイティブ会計ソフト,ローカルファイルの読み書き, VPN クライアント, アプリ横断なアクション等) をエージェントに委任できるようになります。


2. エージェントに UI と個人情報を渡すと何が起こるか?

ただAIエージェントに自由に情報を扱わせて、自由にデスクトップ環境をいじらせてしまうのは怖いですよね。研究でもリスクは明らかになってます。

リスク 具体例 参考
プロンプトインジェクション 外部サイト埋め込み JS が "設定" を書き換え、エージェントが氏名や住所を漏えい arXiv 2024
フィッシング自動化 Copilot にメール送信権限を与えた結果、攻撃者が個人化スピアメールを大量送信 Black Hat 2024 実演 [WIRED
Cookie / セッション乗っ取り UI 操作で貼り付いた Cookie が盗まれ、MFA を迂回 arxiv2025
監査不能 どのウィンドウで何をクリックしたかログが残らない

これらは 「コードが勝手に UI を触る」 × 「シークレットを平文で渡す」 の合わせ技で発生することです。わかりやすい例ではクレカ番号を渡しておいて勝手に通販で注文されてしまったりなどです。

4. thin‑sag が提供するもの

  1. Vault 分離 — Keychain / Windows Credential から一過性注入
  2. 前段ポリシー — YAML 1 枚で launch, wait(ms), click 範囲を制限。
  3. JSON Action DSLlaunch/type/click/scroll/... を OS 差分なしで宣言。
  4. 監査ログ — すべての成功・失敗を JSONL + JobID で保存。
  5. 今後 — Wasm ホストコールでより複雑な if/loop ロジックも安全に実行。スクリーンショットやUIツリーのマスク処理

thin‑sag = UI を動かす“手” + セキュリティを守る“門番”

このエージェントはAIエージェントやLLMからのリクエストを前提としています。

  • エージェント は JSON / Wasm で 意図 を宣言するだけ。
  • Thin‑SAG権限ログ を制御したうえで OS API を実行します。

5. Quick Start

# 1. インストール
curl -Lo thin-sag.zip \
  https://github.com/your-org/thin-sag/releases/download/v0.3.0-beta1/thin-sag-macos.zip
unzip thin-sag.zip && chmod +x thin-sag
mv thin-sag /usr/local/bin/
xattr -dr com.apple.quarantine /usr/local/bin/thin-sag

# 2. 秘密登録
Macのキーチェーンアクセスに秘密情報を登録しておく

# 3. サーバ起動
thin-sag serve

# 4. Notes に入力
curl -H "X-SAG-TOKEN:$auth_token" -H "Content-Type:application/json" \
     -d '[{"act":"launch","target":"com.apple.Notes"}, {"act":"type","text":"Hello {secret.profile_name}!"}]' \ #{secret.~~}を自動で保存済みのキーから入力します
     http://127.0.0.1:8900/run-json

# 5. UI tree ans Screenshot
curl -H "X-SAG-TOKEN:$auth_token" -H "Content-Type:application/json" \
     -d '{"window":{"index":1 }' \  #ウィンドウを選択(アクティブウィンドウとインデックスを取得するルータもあります)
     http://127.0.0.1:8900/snapshot | jq .

curl -H "X-SAG-TOKEN:$auth_token" -H "Content-Type:application/json" \
     http://127.0.0.1:8900/screenshot | jq . #base64が返ってきます -o オプションでファイル保存も可

コードはリポジトリに載せてありますが、以下がChatGPTのFunction Callingを使ってノートを開いてユーザーの名前を入力させるリクエストを送らせた例です。(gifラグいです...)

エージェントが返した JSON をそのまま Thin‑SAG に送るだけで GUI 自動化が完了します。
最近研究が進んでるAIエージェントの環境分析能力、タスクの推論能力を組み合わせれば、もっと複雑かつ多段階なアクションも可能になると思います。


6. まだ足りないところ & コントリビューション募集

  • PNG スクリーンショットの矩形マスク
  • Windows UIA / Chrome WebExtension adapter
  • 細粒度ポリシー (regex マスク, click セレクタ)
  • Wasm Code‑Action 実行モード

good‑first‑issue ラベルで Rust の小さな貢献ポイントを用意しています。お気軽に PR / Issue をお寄せください。


Thin‑SAG は "UI を動かす手" だけでなく セキュリティ面の保守も目指します。私自身がセキュリティやその周辺の技術に疎いため、ぜひフィードバックください🙇‍♀️

Discussion