Skip to content

Repository files navigation

WindowsComputerUseMCP ロゴ

WindowsComputerUseMCP

AI エージェントが Windows のデスクトップアプリを「見て・考えて・操作する」ための MCP サーバー

1 つのエージェントから Blender・Illustrator/Figma・Clipchamp などを操作するイメージ

GitHub Copilot などの MCP (Model Context Protocol) クライアントから、Windows 上の任意のデスクトップアプリケーションを 人間と同じ手段(画面認識・マウス・キーボード・UI Automation)で操作するためのローカル MCP サーバーです。 特定アプリ専用のコードは持たず、汎用的な「Computer Use」ツール群として実装しています。

最終目標は、Clipchamp の動画編集、Blender の 3D 操作、Adobe 製品の操作など、UI Automation だけでは 完結しない複雑なアプリケーションも、screen_capture + 座標操作 + 画面差分検出を組み合わせて 人間のように自在に操作できるようにすることです(詳細は ROADMAP.md を参照)。

ライセンス: 個人利用・非商用利用は無償です。商用利用には別途ライセンス契約が必要です。 詳細は LICENSE.md を参照してください。

構成

プロジェクト 役割
WindowsComputerUseMCP.Core MCP/Windows実装に依存しない共通モデル・インターフェース・設定
WindowsComputerUseMCP.Safety 緊急停止・安全ポリシー(危険操作の承認要求・拒否判定)
WindowsComputerUseMCP.Windows Win32 P/Invoke・UI Automation (FlaUI)・SendInput の実装
WindowsComputerUseMCP.Skills アプリ別「スキルパック」フレームワーク(Blender専用APIブリッジ、Adobe/Clipchamp向け汎用UIA操作など)
WindowsComputerUseMCP.Server MCP stdio サーバー本体(ツール登録・DI・ホスティング)
WindowsComputerUseMCP.ControlPanel 常時状態確認・緊急停止操作・監査ログ閲覧用の WPF アプリ
WindowsComputerUseMCP.DesktopLauncher 任意のコマンドを隠しデスクトップ上で起動する汎用ラッパー(stdio 素通し)。Playwright MCP などをバックグラウンド化する
WindowsComputerUseMCP.Tests 単体テスト

詳細な設計は ARCHITECTURE.md、安全設計は SECURITY.md を参照してください。

必要環境

  • Windows 10/11
  • .NET 10 SDK
  • Visual Studio 2022 (17.14+) または VS Code + GitHub Copilot 拡張機能(MCP クライアントとして利用する場合)

ビルド・テスト

dotnet build
dotnet test

MCP クライアントへの登録方法(GitHub Copilot / VS Code)

インストールスクリプトを使う(推奨)

# ビルド → %LOCALAPPDATA% へ配置 → 起動検証まで一括で実行
.\scripts\install-mcp-server.ps1

# GitHub Copilot CLI の設定ファイルも自動で書き換える場合
.\scripts\install-mcp-server.ps1 -UpdateClientConfig

スクリプトは次の処理を行います。

  1. 実行中の WindowsComputerUseMCP.Server プロセスを停止する
  2. dotnet publish -c Release を実行して %LOCALAPPDATA%\WindowsComputerUseMCP\staging に出力する (MCP サーバー本体と wcu-desktop-launcher の両方)
  3. %LOCALAPPDATA%\WindowsComputerUseMCP\current へ差し替える (ランチャーは current\launcher\、ブラウザ設定は current\playwright-mcp-background.config.json)
  4. MCP ハンドシェイク(initialize → tools/list)を実行し、ツールが公開されているか検証する
  5. -UpdateClientConfig 指定時は %USERPROFILE%\.copilot\mcp-config.json の command を更新する (変更前の内容はタイムスタンプ付き .bak として保存されます)
  6. あわせて playwright-bg(バックグラウンドで動く Playwright MCP)を登録する (-SkipPlaywright を付けると登録をスキップできます)

配置先の実行ファイルは次のパスになります。

%LOCALAPPDATA%\WindowsComputerUseMCP\current\WindowsComputerUseMCP.Server.exe
%LOCALAPPDATA%\WindowsComputerUseMCP\current\launcher\wcu-desktop-launcher.exe

なぜ bin\Debug を直接登録してはいけないのか MCP クライアントが起動したサーバープロセスは bin 配下の DLL をロックし続けます。 その状態では dotnet build が失敗するため、ソースを更新してもクライアントは 古いバイナリを掴んだままになり、新しく追加したツールが一切現れません。 publish 済みの独立したディレクトリを登録することで、この問題を回避できます。

更新するとき

git pull
.\scripts\install-mcp-server.ps1 -UpdateClientConfig

実行後、MCP クライアント(GitHub Copilot CLI / VS Code)を再起動してください。 再起動するまで新しいツールは読み込まれません。

VS Code に手動で登録する場合

ワークスペース単位なら .vscode/mcp.json、全体に適用するならコマンドパレットの MCP: Open User Configuration から以下を追加します。

{
  "servers": {
    "windows-computer-use": {
      "type": "stdio",
      "command": "C:\\Users\\<ユーザー名>\\AppData\\Local\\WindowsComputerUseMCP\\current\\WindowsComputerUseMCP.Server.exe"
    }
  }
}

登録後、Chat ビューでツールの利用を許可すると、window_list や screen_capture などの ツールがエージェントから呼び出せるようになります。

注意: 本サーバーはローカルマシンのマウス・キーボード・画面を直接操作します。信頼できるプロンプト・ エージェントからのみ利用し、SECURITY.md の安全設計(緊急停止・承認要求・監査ログ)を 必ず確認してください。

提供する MCP ツール

ツール名 概要
system_get_capabilities OSバージョンやサーバーの機能可否を取得(読み取り専用)
window_list 開いているウィンドウの一覧を取得
window_focus 指定したウィンドウを前面化
screen_capture 画面全体または指定ウィンドウのスクリーンショットを取得
ui_get_tree UI Automation ツリーを取得
ui_find 条件に一致する UI 要素を検索
ui_invoke UI 要素に対して Invoke/Toggle 等のパターン操作を実行
mouse_move / mouse_click / mouse_drag / mouse_scroll 座標ベースのマウス操作
keyboard_type_text / keyboard_press / keyboard_hotkey キーボード入力操作
wait_for_screen_change 操作前後の画面差分を検出し、変化を待機・確認
background_desktop_* ユーザーの画面に映らない「隠しデスクトップ」上でアプリを起動・操作(後述)

すべての入力系ツールは Safety 層のポリシー判定(許可アプリ/危険操作の承認要求/緊急停止)を経由します。

フォアグラウンド操作とバックグラウンド操作

「AIが操作している間、自分のPCが使えなくなるのでは?」という点は本MCPの重要な論点です。 実際には、操作の種類によってフォアグラウンドが必要かどうかが異なります。

1. もともとバックグラウンドで完結するもの(画面を奪わない)

手段 対象 理由
スキルパックのAPIブリッジ Blender(TCP 9876)、Illustrator(COM DoJavaScript)、Figma(WebSocket 9877) アプリの公式スクリプティングAPIを直接叩くため、画面操作を一切伴わない
ui_invoke UI Automation に対応したアプリ全般 InvokePattern 等はメッセージベースで、前面化やフォーカスを必要としない
screen_capture(windowHandle 指定) ほぼすべてのウィンドウ PrintWindow + PW_RENDERFULLCONTENT により、背面や一部隠れたウィンドウも描画内容を取得できる

つまり 「見る」と「APIで動かす」はすでにバックグラウンドで可能 です。

2. フォアグラウンドが必要なもの

mouse_move / mouse_click / mouse_drag / mouse_scroll / keyboard_* は Win32 の SendInput を使用します。SendInput は入力デスクトップ(=ユーザーが実際に見ている画面) のハードウェア入力キューに注入するAPI であるため、対象ウィンドウが前面にある必要があります。

3. 「サブモニター(スクリーン2)でやらせる」では解決しない理由

Windows では、複数モニターを繋いでいても 1セッション=1デスクトップ=1つのカーソル・1つのフォーカス・ 1つの入力キューです。モニターは同じデスクトップの表示領域が広がるだけなので、 サブモニターにウィンドウを置いてもマウスカーソルとフォーカスは共有されたままです。分離するには、

  1. 同一セッション内の別デスクトップオブジェクト(本MCPが採用)
  2. 別の Windows セッション(RDP・ユーザー切り替え)
  3. VM / Windows Sandbox

のいずれかが必要です。

4. background_desktop_* ツール(隠しデスクトップ方式)

Win32 の CreateDesktopW で画面に表示されないデスクトップオブジェクトを作り、 専用ワーカースレッドを SetThreadDesktop でそこに束縛して操作します。 アプリは STARTUPINFO.lpDesktop 指定で最初からその隠しデスクトップ上に起動されるため、 ユーザーが見ている画面には一切現れません。

ツール名 概要
background_desktop_create 隠しデスクトップを作成
background_desktop_list 隠しデスクトップと、その上のウィンドウ数を一覧
background_desktop_launch 隠しデスクトップ上でアプリを起動
background_desktop_window_list 隠しデスクトップ上のウィンドウを列挙(通常の window_list では見えない)
background_desktop_capture 隠しデスクトップ上のウィンドウをキャプチャ
background_desktop_click 隠しデスクトップ上でクリック
background_desktop_type_text 隠しデスクトップ上でテキスト入力
background_desktop_send_keys 隠しデスクトップ上でキー送信
background_desktop_switch 一時的に隠しデスクトップを画面に表示(確認用。既定で自動復帰)
background_desktop_close 隠しデスクトップと起動したプロセスを終了

使用例(AIエージェントからの呼び出しイメージ):

// 1. 隠しデスクトップを作る
{ "tool": "background_desktop_create", "args": { "name": "work1" } }

// 2. その上でアプリを起動(ユーザーの画面には出ない)
{ "tool": "background_desktop_launch",
  "args": { "desktopName": "work1", "executablePath": "notepad.exe" } }

// 3. ウィンドウを探して「見る」
{ "tool": "background_desktop_window_list", "args": { "desktopName": "work1" } }
{ "tool": "background_desktop_capture",
  "args": { "desktopName": "work1", "windowHandle": 7020710 } }

// 4. 「手を動かす」
{ "tool": "background_desktop_type_text",
  "args": { "desktopName": "work1", "windowHandle": 7020710, "text": "Hello" } }

// 5. 後片付け
{ "tool": "background_desktop_close", "args": { "desktopName": "work1" } }

入力方式の自動切り替え

隠しデスクトップは入力デスクトップではないため SendInput が機能しません。 そこで本MCPは、対象デスクトップが入力デスクトップかどうかを実行時に判定し、 非対話デスクトップでは WM_CHAR / WM_KEYDOWN / WM_LBUTTONDOWN などの ウィンドウメッセージを直接ポストする方式へ自動的にフォールバックします。 呼び出し側はツールの使い分けを意識する必要はありません。

既知の制約(正直な注意点)

  • GPU描画に強く依存するアプリは動かない場合がある Electron 系(Clipchamp、Teams、VS Code、Figmaデスクトップ版)や Blender のビューポートは、非対話デスクトップでは真っ白に描画される、 あるいは起動自体に失敗することがあります。 → これらは スキルパックのAPIブリッジ(1.)を使う方が確実です。 なお Chromium / Microsoft Edge は隠しデスクトップ上でも正常に描画されることを 実測で確認済みです(後述の wcu-desktop-launcher はこれを利用しています)。
  • 修飾キー同時押し(Ctrl+C 等)の再現性が下がる メッセージベース入力では、アプリ側が GetKeyState で修飾キー状態を見る実装だと ホットキーが効かない場合があります。 → メニュー操作は ui_invoke、またはアプリ固有のスキルパックを優先してください。
  • 画面解像度・DPIは既存デスクトップを継承し、任意に変更することはできません。
  • 一部のインストーラは対話デスクトップを明示的に要求するため起動できません。

5. wcu-desktop-launcher — 他のMCPサーバーごとバックグラウンドへ追い出す

Playwright MCP のようにブラウザを起動する外部 MCP サーバーは、 そのままだとツールを呼ぶたびにブラウザが前面に出てフォーカスを奪います。 これを解決するのが、本リポジトリに同梱の汎用ラッパー wcu-desktop-launcher.exe です。

wcu-desktop-launcher --desktop <デスクトップ名> [--cwd <作業ディレクトリ>] -- <コマンド> [引数...]

原理はシンプルで、Windows の子プロセスは STARTUPINFO.lpDesktop で指定されたデスクトップを継承するという仕様を使います。 MCP サーバー本体(Node.js プロセス)を隠しデスクトップ上で起動すれば、 そこから起動されるブラウザも自動的に同じ隠しデスクトップに乗ります。

重要なのは、デスクトップの割り当てはウィンドウと入力キューにしか影響せず、 標準入出力には一切影響しないという点です。 ランチャーは自分の stdin / stdout / stderr をそのまま子へ継承させるため、 MCP の JSON-RPC (stdio) は素通しで流れます。ラッパーによる通信オーバーヘッドはありません。

さらにランチャーは JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE を設定したジョブオブジェクトに 子プロセスを登録します。MCP クライアントが切断してランチャーが終了すると、 ブラウザを含む子プロセスツリーがまとめて確実に終了し、 隠しデスクトップ上にゾンビプロセスが溜まりません。

登録例(Playwright MCP をバックグラウンド化する)

scripts/install-mcp-server.ps1 -UpdateClientConfig を実行すると、 playwright-bg というエントリが自動で登録されます。手動で書く場合は次の形です。

{
  "mcpServers": {
    "playwright-bg": {
      "type": "local",
      "command": "%LOCALAPPDATA%\\WindowsComputerUseMCP\\current\\launcher\\wcu-desktop-launcher.exe",
      "args": [
        "--desktop", "WCU_Background", "--",
        "cmd.exe", "/c", "npx", "-y", "@playwright/mcp@latest",
        "--browser", "msedge",
        "--config", "%LOCALAPPDATA%\\WindowsComputerUseMCP\\current\\playwright-mcp-background.config.json"
      ],
      "tools": ["*"]
    }
  }
}
  • npx はバッチファイル(.cmd)なので、cmd.exe /c を経由させる必要があります。
  • config/playwright-mcp-background.config.json は --start-fullscreen を含まない固定サイズ(1920×1080)のブラウザ起動オプションです。 フォアグラウンドを奪う設定を持ち込まないために必ず指定してください。

注意点

  • Copilot CLI / VS Code の再起動が必要です(設定は起動時にのみ読まれます)。
  • 隠しデスクトップ上のブラウザも background_desktop_capture で目視確認できます。
  • Playwright の操作は CDP 経由なので、OS の入力デスクトップに依存せず完全に動作します。

power-pages プラグインの Playwright もバックグラウンド化する

GitHub Copilot CLI の power-pages プラグインは、mcp-config.json とは別に 独自の Playwright MCP を起動します。その既定設定は --start-fullscreen を含むため、 playwright-bg を登録してもこちらが前面化してフォーカスを奪い続けます。

同梱のパッチスクリプトで、プラグイン側も同じランチャー経由に切り替えられます。

# 適用(冪等。適用済みなら何もしない)
.\scripts\patch-power-pages-playwright.ps1

# 元に戻す
.\scripts\patch-power-pages-playwright.ps1 -Revert
  • 変更前の内容は launch-playwright-mcp.js.orig として保存されます。
  • wcu-desktop-launcher.exe が見つからない場合や、環境変数 POWER_PAGES_PLAYWRIGHT_FOREGROUND=1 を設定した場合は元の前面起動へ自動的に戻ります。
  • プラグインが更新されると変更は失われます。 その場合は再実行してください。

アプリ別スキルパック(Blender / Adobe / Clipchamp など)

汎用ツールだけでは非効率、または対象アプリに専用の連携APIが存在するケースに対応するため、 「アプリごとの知識(スキル)」と「操作コード」を1セットにした スキルパック の仕組みを用意しています。

ツール名 概要
skill_list_apps スキルパックが登録されている全アプリの一覧を取得(appId・表示名・対象プロセス名)
skill_list_actions 指定アプリが提供するアクション一覧と、各パラメーターの説明を取得
skill_run_action 指定アプリの指定アクションを実行(引数はJSON文字列で渡す)

現在登録済みのスキルパック

  • blender: Blender本体のGPU描画ビューポートは UI Automation から中身が見えないため、 Blender側にインストールした「BlenderMCP」アドオン(TCPソケット、既定ポート9876)に対して Python API呼び出しを直接送信する専用ブリッジを実装しています。 scene_info / execute_code / viewport_screenshot に加え、1枚以上の画像から Hyper3D Rodin連携で3Dモデルを生成しシーンへインポートするまでを1コールで行う generate_3d_from_image(Hyper3D有効化→ジョブ作成→完了待ち→インポートを自動化)を提供します。

  • illustrator: Adobe Illustratorが長年公式に提供しているCOM自動化 (ProgID Illustrator.Application)と、その上で動く ExtendScript(JavaScript)実行API (Application.DoJavaScript)を直接呼び出す専用ブリッジです。画面クリックを一切使わず、 ドキュメント情報取得(document_info)、任意ExtendScript実行(execute_script)、 矩形/楕円/テキスト作成(create_rectangle / create_ellipse / create_text_frame)、 塗り色設定(set_fill_color)、保存/読み込み/PNG・JPG・PDF書き出し (save_document / open_document / export_document)を提供します。 Illustratorが起動しCOM登録済みであることが前提(自動起動はしません)。

  • figma: Figmaデスクトップ版はCOMや外部TCPサーバーのような公式連携APIを持たないため、 同梱の開発用プラグイン(tools/figma-plugin/)をFigma側で実行し、そのプラグインが 本サーバーの開くWebSocketサーバー(既定 ws://127.0.0.1:9877/、接続方向はBlenderと逆で Figma側から接続しにいく)へつなぎ込む方式でブリッジしています。 ノード作成(create_rectangle / create_ellipse / create_text)、塗り色設定 (set_fill_color)、削除(delete_node)、選択/ページ情報取得 (get_selection / list_pages / document_info)、画像書き出し(export_node_image)、 任意コード実行(execute_plugin_code)を提供します。事前に tools/figma-plugin/README.md の手順でプラグインをインポート・実行しておく必要があります (未接続時は is_connected で確認可能)。

  • 汎用UIAスキルパック: 専用APIを持たないWindowsアプリ向け。要素検索・UI Automationの InvokePattern実行(非対応時は要素中心を物理クリックへ自動フォールバック)・ウィンドウ内相対座標 クリック・テキスト入力・ホットキー送信・スクリーンショット取得を共通のアクション名で提供します。 UIAの対応範囲がアプリごとに異なる場合でも同じインターフェースで 「まずAPI/UIA、無ければ画面操作」というフォールバック戦略を統一的に扱えます。 現在 Generic/BuiltInAppDefinitions.cs に登録済みのアプリ:

    • 動画編集: clipchamp(Clipchamp), premiere(Adobe Premiere Pro), aftereffects(Adobe After Effects), davinciresolve(DaVinci Resolve), capcut(CapCut)
    • デザイン/画像編集: photoshop(Adobe Photoshop), indesign(Adobe InDesign), lightroom(Adobe Lightroom Classic), gimp(GIMP), krita(Krita)
    • 音声編集: audition(Adobe Audition)

    ※ illustrator と figma は専用スキルパック(上記)に昇格済みのため、このリストには含まれません。

新しいアプリを追加する場合は、専用APIがあれば WindowsComputerUseMCP.Skills 配下に新しい ISkillPack 実装を追加し、専用APIが無ければ Generic/BuiltInAppDefinitions.cs に対象プロセス名を 1行追加するだけで、上記の汎用アクション一式がそのアプリでも使えるようになります。

注意: ProcessNames は代表的なプロセス名の想定値です。実際にインストールされているバージョンや エディションによって実行ファイル名が異なる場合があります。対象アプリが skill_run_action で 見つからない場合は、タスクマネージャー等で実プロセス名を確認し、該当行を修正してください。

Clipchamp・Teams・VS Code等、WebView2/Electron系アプリを操作する場合の注意

これらのアプリは実際のUIをWeb技術(HTML/DOM)で構築しており、Windowsのウィンドウ階層上は msedgewebview2(または同等のEdge WebView2/Chromiumホスト)プロセスの子ウィンドウとして UIがホストされています。window_list にはアプリ本体のウィンドウと、内部のWebView2ホスト ウィンドウの両方が個別に表示されることがあります。

  • Web系UIはDOM構造上ネストが深く、既定の maxDepth(ui_get_treeは8、ui_findは12)では メニューバー付近までしか到達できず、実際に操作したいボタン(例:「新しいビデオを作成」)が ツリーに現れないことがあります。maxDepth: 20以上を明示的に指定することを推奨します。
  • ui_get_tree/ui_find はいずれもWebView2でホストされたコンテンツを正しく走査できます (UI Automationの IsOffscreen 誤検知に対する回避処理を実装済み)。

Blenderなど3D/CADツールについて

Blenderのような3Dビューポート中心のアプリは、キャンバス部分がGPU描画されておりUI Automationからは 中身が見えません。そのため点単位での3D作成状況の確認・支援には、汎用UI操作ではなく上記の blender スキルパック(BlenderMCPアドオン経由でのPython API直接実行)を使用してください。 skill_run_action 経由で scene_info / execute_code / viewport_screenshot / generate_3d_from_image などが呼び出せます。事前に Blender 側で BlenderMCP アドオンを有効化し、 ソケットサーバー(既定ポート9876)を起動しておく必要があります。

緊急停止(Emergency Stop)

  • グローバルホットキー: 既定 Ctrl+Shift+F12(appsettings.json の Safety.EmergencyStopHotkey で変更可能)。 Server プロセスが起動している間、フォーカスに関係なく OS 全体で有効です。
  • ControlPanel(WPF)アプリからも「緊急停止」「解除」ボタンで同じ状態を切り替えられます。 ControlPanel と Server は名前付きパイプ(WindowsComputerUseMCP.ControlPanel.v1)で通信するため、 どちらのプロセスを先に起動しても問題ありません(Server 未起動時は「サーバー未接続」と表示されます)。
  • 緊急停止が有効な間、mouse_* / keyboard_* / ui_invoke などの入力系ツールはすべて拒否されます。 window_list / screen_capture など読み取り系ツールは、状況確認と解除操作を妨げないため継続して利用できます。

ControlPanel は次のようにビルド・起動します。

dotnet build src\WindowsComputerUseMCP.ControlPanel
.\src\WindowsComputerUseMCP.ControlPanel\bin\Debug\net10.0-windows\WindowsComputerUseMCP.ControlPanel.exe

監査ログ

すべての操作は %LOCALAPPDATA%\WindowsComputerUseMCP\Logs\audit-*.jsonl(日次ローテーション)に記録されます。 ControlPanel の「監査ログ」テーブルからも最新の記録を確認できます。入力文字列は既定でマスクされ、 文字数・ハッシュ値のみが記録されます(詳細は SECURITY.md を参照)。

実運用で得られた知見(トラブルシューティング)

実機での自動化検証で判明した、再現性のある落とし穴と対処法をまとめます。

DPI スケーリングと座標系

本サーバーは app.manifest で Per-Monitor V2 DPI Aware を宣言しているため、 screen_capture / window_list / mouse_* はすべて物理ピクセル座標で一貫しています (例: 150% スケーリング環境では論理 1664×1109 ではなく物理 2496×1664 を返します)。

一方で、MCP の外で自作した補助スクリプト(PowerShell / Python など)は既定で DPI 非対応です。 そのまま GetSystemMetrics や mouse_event(MOUSEEVENTF_ABSOLUTE) を使うと論理座標で正規化され、 カーソルがスケール倍率のぶんだけズレた位置に飛びます。補助スクリプト側では必ず冒頭で DPI 対応を宣言してください。

# 座標を扱う前に必ず呼ぶ(これが無いと 150% 環境で約1.5倍ズレる)
[void][YourInterop]::SetProcessDPIAware()

クリック後は GetCursorPos で「狙った座標にカーソルが到達したか」を検証すると、 座標計算の誤りとクリック対象の誤りを切り分けられます。

確実にフォアグラウンドを奪う方法

SetForegroundWindow の単体呼び出しは、Windows のフォアグラウンドロックによりほぼ失敗します。 AttachThreadInput で「自スレッド」「現在の前面ウィンドウのスレッド」「対象ウィンドウのスレッド」を 一時的に結合してから呼ぶと、確実に成功します。

AttachThreadInput(myTid, foregroundTid, true)
AttachThreadInput(myTid, targetTid,     true)
BringWindowToTop(hwnd); SetForegroundWindow(hwnd)
AttachThreadInput(myTid, targetTid,     false)
AttachThreadInput(myTid, foregroundTid, false)

SetWindowPos(HWND_TOPMOST) による最前面固定は、相手も topmost の場合(Tauri / Electron 製アプリなど)に 競合して安定しないため推奨しません。

ブラウザ(Chrome 系)を操作する場合の制約

  • モダンな Chrome は windowless レンダラのため、EnumChildWindows で子ウィンドウが 0 件になり、 Chrome_RenderWidgetHostHWND も存在しません。結果として ui_get_tree / ui_find では Web コンテンツ(DOM)を一切取得できません(ブラウザ自体の UI しか返りません)。 Web ページの操作は screen_capture+座標クリックか、Playwright 等の専用ツールを使ってください。
  • screen_capture(windowHandle=...) は Chrome では古いフレームを返すことがあります (GPU コンポジット由来。特にウィンドウのサイズ変更直後)。 Chrome が前面にある場合は screen_capture(monitorIndex=0) を使うのが確実です。
  • chrome.exe --new-window <URL> は既存インスタンスに合流するため、 ログイン済みセッションのままページを開けます。キーボード入力を伴わないぶん誤操作リスクがありません。
  • 実行中の Chrome プロファイル(Default\Network\Cookies 等)は排他ロックされており、 コピーによる「ログイン状態を引き継いだ別プロファイルでのバックグラウンド起動」はできません。 ブラウザをバックグラウンド化したい場合は wcu-desktop-launcher を使ってください。

ユーザーと画面を取り合わない

フォアグラウンド操作は、ユーザーが PC を使用している最中に実行すると相互に前面を奪い合って失敗します。 GetLastInputInfo でアイドル時間を確認し、一定時間(例: 40 秒)操作がないことを確認してから 一連の操作を1本のスクリプトで一気に実行すると成功率が大きく上がります (ツール呼び出しを細かく往復すると、その隙間にユーザー操作が割り込みます)。

日本語を含む PowerShell スクリプト

Windows PowerShell 5.1 は BOM なし UTF-8 を cp932 として読むため、日本語を含む .ps1 は文字化けします。 判定用の文字列(ウィンドウタイトル等)は ASCII のみにする(例: ダイアログはタイトルではなく ウィンドウクラス #32770 で判定する)か、UTF-8 BOM 付きで保存してください。

現在のステータス

フェーズ1〜7が完了しています(ROADMAP.md 参照)。基本ツール群・入力操作・画面差分検出・ 緊急停止 UI まで一通り実装・動作確認済みです。加えて、ユーザーの画面を占有せずに操作できる バックグラウンドデスクトップ(background_desktop_*) を実装し、隠しデスクトップ上での アプリ起動 → ウィンドウ列挙 → キャプチャ → テキスト入力 → 終了までを実機で検証済みです。 さらに wcu-desktop-launcher により、Playwright MCP のような外部 MCP サーバーごと 隠しデスクトップへ追い出す方式を実装し、ブラウザ操作がフォアグラウンドを奪わないことを実機検証済みです。 Clipchamp / Blender / Adobe 製品のような、UI Automation だけでは 完結しないアプリへの本格対応は、既存の汎用ツールの組み合わせで到達可能かを検証する継続課題です。

対応アプリのスキルパックは今後も継続的に拡充していく予定です(Clipchamp / Photoshop / Premiere Pro / Illustrator / After Effects の実操作精度向上、DaVinci Resolve・CapCut・Figma 等への対応拡大など)。 新しいアプリへの対応リクエストや、既存スキルパックの改善案がある場合は Issue で管理してください。

ロゴ・ブランドアセット

ロゴは Azure OpenAI (gpt-image-2) で生成し、assets/ 配下にコミットしています。

ファイル 用途
assets/logo.png マスター(1024×1024、白背景)
assets/logo-transparent.png 背景透過版(1024×1024)
assets/logo-512.png 〜 logo-32.png 各サイズの透過 PNG(512 / 256 / 128 / 64 / 32)
assets/app.ico Windows 実行ファイル用アイコン(16〜256px マルチ解像度)。ControlPanel の ApplicationIcon に設定済み
assets/banner.png README ヘッダー用の横長バナー
assets/avatar-460.png GitHub アカウント/Organization のアバター用(460×460、円形クロップに耐える構図)
assets/candidates/ 不採用のデザイン案(差し替え用に保持)

GitHub 上のリポジトリアイコンについて GitHub にはリポジトリ固有のアイコン設定がなく、リポジトリ名の左に表示される丸いアイコンは オーナー(ユーザー / Organization)のアバターです。したがって assets/ に画像を push しても変わりません。 変更するには https://github.com/settings/profile で assets/avatar-460.png をアップロードします (アバターの設定は GitHub API では行えず、Web UI 操作が必須です)。 本リポジトリのオーナーアバターは assets/avatar-460.png を適用済みです。 リポジトリの OGP 画像は Settings → Social preview から assets/banner.png を設定できます。

デザインの意図は、ウィンドウ枠 = Windows アプリ、回路で描かれたカーソル = AI エージェントによる操作です。 バナーでは 1 つのエージェントから 3D(Blender)・デザイン(Illustrator / Figma)・動画編集(Clipchamp)へ 接続が伸びる様子を表しています。

配色は次のとおりです。

役割 カラー
ベース(濃紺) #021A52
プライマリ(青) #0F7BF0
アクセント(シアン) #2FEFFF

ロゴは本プロジェクトの識別に用いるものです。ライセンス条件(非商用)はロゴにも同様に適用されます。

ライセンス

本ソフトウェアは 個人利用・非商用利用に限り無償 で提供されます。 商用目的(企業内業務利用、製品への組み込み、受託開発等)で利用する場合は、 事前に著作権者との商用ライセンス契約が必要です。詳細・お問い合わせは LICENSE.md を参照してください(連絡先: monoqlo78@gmail.com)。

About

No description, website, or topics provided.

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages