AI エージェントに画面をクリックさせるべきでない理由:デスクトップアプリにローカルのコントロールプレーンを作る
画面の自動操作は壊れやすく、権限も与えすぎます。型付きツールと、アプリ自身が組み立て直すジョブで AI エージェントにアプリを操作させる KwaFlux の設計を解説。
ひと言でいうと
AI エージェントにデスクトップアプリを使わせるとき、つい選びたくなるのは、人と同じように画面を見てクリックさせる方法です。動画アプリでは、それは間違った設計です。クリックは壊れやすく、エージェントはマウスで届くものすべてに手が届き、「書き出しをクリックした」ことは書き出しが正しいことの証明になりません。
- AI エージェントにスクリーンショットを見ながらクリックさせてデスクトップアプリを操作する方法は、デモでは動きますが、壊れやすく、遅く、マウスでできることをすべてエージェントに許してしまいます。
- KwaFlux は代わりに構造化されたコントロールプレーンを公開しています。型付きの MCP ツール、呼び出しごとに少数のパラメーター、そしてキューに入れる前のアプリ側のチェックです。
- ジョブ全体を書くのはエージェントではありません。KwaFlux のワーカーが、あなたが書き出しをクリックしたときにアプリが使うのと同じジョブビルダーで組み立て直します。
- アプリと共有するルールはコピーではなく生成で作られ、両者がずれるとテストが失敗します。
KwaFlux は別の道を選びました。型付きの依頼を受け付けてチェックし、本物のジョブをアプリの中で組み立てる、ローカルのコントロールプレーンです。
この記事では、この用途で画面の自動操作が力不足な理由、KwaFlux の各レイヤーのつながり方、エージェントが小さなパラメーターだけを送る理由、そしてこの設計があえてできないことを解説します。
目次
- AI エージェントのためのコントロールプレーンとは?
- 画面の自動操作とコントロールプレーンの比較
- チャットからワーカーまでのレイヤー
- 小さなパラメーターを、アプリが組み立て直す
- アプリとエージェントでルールの出どころを 1 つに
- キューに入れる前にコントロールプレーンがチェックすること
- エージェントが頼れる結果
- この設計が手放したもの
- よくある質問
AI エージェントのためのコントロールプレーンとは?
AI エージェントのためのコントロールプレーンとは、エージェントがアプリケーションに特定の処理を依頼できる、範囲の狭いプログラム用インターフェースです。依頼ごとにチェックし、拒否し、実行する権限は、アプリケーション側が持ち続けます。
KwaFlux では、このインターフェースが MCP ツールの集まりで、権限は起動中のデスクトップアプリにあります。エージェントは頼み、決めるのは KwaFlux です。
画面の自動操作とコントロールプレーンの比較
スクリーンショットをもとに動く Computer Use 型のエージェントは確かな進歩で、API のないアプリではほかに手段がありません。Anthropic 自身も Computer Use ツールのドキュメントで限界を率直に認めています。モデルは「結果を明示的に確認しないまま、操作が成功したかのようにふるまうことがある」こと、ドロップダウンやスクロールバーはマウスで操作するのが「難しい場合がある」こと、Web ページや画像の中の指示が「あなたの指示を上書きする可能性がある」ことが記されています。そして Computer Use は「最小限の権限を持つ専用の仮想マシンまたはコンテナ」で実行するよう推奨しています。
画質修復や変換ツールを備えた KwaFlux のように、自分のパソコンで使う動画アプリでは、こうした限界が効いてきます。
| 観点 | 画面の自動操作 | KwaFlux のコントロールプレーン |
|---|---|---|
| エージェントはどう設定を選ぶか | スクリーンショットのラベルを読んでクリックする | アプリ自身の設定ファイルから取った値だけが使える、型付きの項目を埋める |
| UI をリニューアルしたらどうなるか | クリックが違う場所に当たることがある | ツールはそのまま動く。約束事はレイアウトではなくパラメーター |
| エージェントは何に触れられるか | 画面に見えるものすべて。設定、アカウントのページ、ほかのアプリ | 提供されたツールだけ。どれもアプリがチェックする |
| ジョブの成功をどう知るか | もう一度画面を見る | タスク ID、リアルタイムの進捗、構造化された結果を受け取る |
| 長い書き出しを見張りなしで続けられるか | スクリーンショットを撮り続ける必要がある | 進捗の通知を受けながらタスクを待ち、キャンセルもできる |
| コンテキストのコスト | Anthropic のドキュメントによると、スクリーンショット 1 枚で入力トークンがおよそ 1,000〜1,800 | ツールの一覧全体でテキスト約 51 KB。読み込みは一度だけ |
最後の行は、厳密な数字を競うものではありません。要点は、構造化された呼び出しのコストは書き出しが 10 秒でも 10 分でも変わらないのに対し、画面を見張るエージェントは見るたびにコストを払うということです。
チャットからワーカーまでのレイヤー
依頼は 6 つのレイヤーを通ります。各レイヤーの役割は 1 つずつで、どのレイヤーも拒否できます。

- AI ホスト(Cursor、Claude、Codex など)が KwaFlux の MCP サーバーをローカルのプロセスとして起動し、標準入出力でやり取りします。
- MCP プロセスはツールの呼び出しを型付きの小さな依頼に変え、ファイルに触れる前に、アプリと同じ方法でパスをチェックします。
- ローカルのチャネルが MCP プロセスと起動中のアプリをつなぎます。Windows ではあなたのユーザーアカウント用の名前付きパイプ、Mac ではあなたのアカウントしか開けないソケットです。接続はどれもトークンによるハンドシェイクから始まります。このレイヤーはローカルチャネルの記事で解説しています。
- アプリ内のコントロールプレーンが依頼をチェックします。パスはローカルのフルパスか、ユーザーは適切なプランでログインしているか、そのタスクはこのエージェントのものか、エージェントはレート制限の範囲内か、ダウンロード設定が許しているか、という点です。
- スケジューラーは、あなたがウィンドウで始めたジョブと並べてジョブをキューに入れます。そのため、同じ GPU と同じタスクリストを共有します。
- ワーカーはジョブ全体を組み立て、有料機能では署名付きリースを検証し、エンジンを動かして、結果を元のファイルと同じ場所に書き出します。
小さなパラメーターを、アプリが組み立て直す
ほかのすべてを方向づけた決定はこれです。エージェントはジョブの完全な記述を送りません。
KwaFlux の書き出しジョブには、デコーダーの設定、モデルの選択、タイルサイズ、エンコーダーのオプション、色の扱いなど、たくさんの項目があります。エージェントがこの構造をまるごと送れるとしたら、2 つの問題が起きます。モデルは自分で確かめられない値を作り出すことになり、細工されたファイル名や Web ページを通じてモデルを誘導できる人なら誰でも、エンジンのあらゆるパラメーターに手が届いてしまいます。
そこで各ツールが受け取るのは、人が選ぶような少数の項目だけにしました。入力ファイル、モジュール、アプリのリストにある出力サイズ、画質の段階、GIF の時間範囲です。ワーカーはそこからあなたが書き出しをクリックしたときにアプリが使うのと同じジョブビルダーで完全なジョブを組み立て、エンジンが実行時に受け付けるパラメーターの約束事に合わせて削ります。
その結果、エージェントが始めたジョブとクリックで始めたジョブは、ビルダーから先は同じコードを通ります。私たちはこれを「同一の出力」ではなく「アプリと同じパラメーターのルール」と表現しています。MCP ではアプリより選択肢が狭いツールがいくつかあるためです。その違いはできることをまとめた記事に一覧があります。
アプリとエージェントでルールの出どころを 1 つに
同じルールのコピーが 2 つあると、いずれずれていきます。KwaFlux はコピーを 2 つ持たないようにしています。
- MCP が提供するモジュールカタログは、各モジュールのルート、設定、使える値も含めて、アプリの画面と同じ設定ファイルから生成されます。写真用のバリエーションは、同じファイルの画像セクションから作られます。
- MCP サーバー向けに、5 つのルールをアプリのソースコードから直接移植しています。出力解像度の段階、圧縮ツールのコンテナとコーデックの選び方、音声ワークスペースのアルゴリズムのパラメーター、AI ボイスチェンジの声のリスト、そして検出ルール 1 つです。
- ずれを検出するテストがあり、これらのルールのアプリ版が変わったのに MCP 版が再生成されていなければ失敗します。
同じ考え方でツールの説明文も小さく保っています。それはツール設計の記事で解説しています。
キューに入れる前にコントロールプレーンがチェックすること
MCP の仕様は、サーバーがすべてのツール入力を検証し、適切なアクセス制御を実装し、ツール呼び出しにレート制限をかけ、ツールの出力をサニタイズしなければならない("MUST")と定めています。KwaFlux では、これらのチェックを MCP のスクリプトではなくアプリ側に置いているので、別のクライアントから迂回することはできません。
| チェック | ルール |
|---|---|
| パス | ローカルのフルパスであること。ネットワークパスは、ファイルを開く前に拒否されます |
| 出力 | 元のファイルと同じ場所に書き出します。同じ名前があれば上書きせず name(1).ext にします |
| ログインとプラン | 有料機能にはログインとプランが必要で、ワーカーが署名付きリースを検証します。AI のツール呼び出しと有料機能をご覧ください |
| 所有者 | エージェントが一時停止、再開、キャンセル、再試行できるのは、自分が送ったタスクだけです |
| レート | 新しいジョブは全体で 1 分あたり最大 10 件、接続ごとに 6 件まで。接続は最大 8 つです |
| メッセージのサイズ | 各メッセージの上限は 64 KiB。アイドル状態の接続は 5 分で閉じます |
| ダウンロード | 初期状態でオフ。デスクトップのポップアップでのクリックを必須にできます |
| マスタースイッチ | 1 つの設定で、エージェントからの操作をすべてオフにします |
エージェントが頼れる結果
KwaFlux のツールはどれも出力スキーマを宣言しているので、結果はモデルが解釈しなければならない文章ではなく、ホストが検証できる構造化データです。ホストが進捗トークンを渡せば、KwaFlux はタスクの実行中に進捗の通知を送ります。ユーザーがホスト側で依頼を止めると、KwaFlux は待つのをやめ、エージェントはタスクをキャンセルできます。
タスクの結果が「出力の準備ができた」と示すのは、タスクが実際に成功したときだけで、出力ファイルの名前も返します。キュー待ちのタスクや失敗したタスクが、何かを作り出したと主張することはありません。
この設計が手放したもの
コントロールプレーンの守備範囲は、ツールの範囲までです。KwaFlux の 9 つの機能は、フレームに描く、被写体をクリックする、プレビューを見て判断する、といった人の操作を必要とします。物体除去や空の置き換えなどです。エージェントに座標を推測させることも、生のジョブ記述を受け付けることもできました。前者は誰にも予測できない結果を生み、しかもうまくいったという報告が付いてきます。後者は、この設計を安全にしている境界をなくしてしまいます。そのため、これらの機能はアプリに残し、エージェントにはユーザーをアプリへ案内するよう指示しています。
これは製品としての選択です。ルールを緩めてまで埋めるつもりの欠けではありません。
まとめ
エージェントがアプリを使うのにピクセルを見なければならないなら、エージェントがこれから何をするのかをチェックできません。コントロールプレーンはそれを逆転させます。エージェントは範囲の狭い型付きの言葉で頼み、アプリが自分のコードでチェックし、組み立て、ジョブを実行します。KwaFlux では、そのしくみによって、エージェントが始めた書き出しも、あなたがクリックした書き出しと同じジョブビルダーを通ります。
KwaFlux のローカル MCP サーバーを使うと、Codex、Claude、Cursor などの MCP アプリから、デスクトップアプリに本物のジョブを送れます。AI 処理はご自身の GPU 上で実行され、メディアファイルが処理のためにアップロードされることはありません。Windows 10(64 ビット、バージョン 1809 以降)、Windows 11、Apple Silicon 搭載の macOS 12 以降で動きます。ファイルの読み込みやアプリの操作にアカウントは不要です。ログインと有料プランが必要なのは、書き出し、変換、ファイル修復、リンクからのファイルダウンロードだけです。
お手元の素材で効果を試す
KwaFlux を入手し、支払う前にお手元の素材で効果を無料プレビュー。アカウント不要で、処理はお使いの GPU で行い、処理のためにメディアをアップロードすることはありません。 動画のプレビューは 1、3、または5 秒、手ぶれ補正のプレビューは 5、15、または30 秒から選べます。
よくある質問
Computer Use と MCP の違いは?
Computer Use は、モデルがスクリーンショットを見て、どんなアプリにもマウスやキーボードの入力を送れるようにするものです。MCP は、アプリが特定の型付きツールを提供し、モデルがそれを呼び出せるようにするものです。Computer Use は汎用的ですが壊れやすく、MCP は範囲が狭い代わりにチェックできます。
AI エージェントはどんなデスクトップアプリでも操作できる?
ある程度はできます。画面の自動操作なら、ベンダーが文書化している信頼性の限界はあるものの、ほとんどのアプリを操作できます。確実に操作するには、アプリが API か MCP ツールを提供している必要があります。一例として、動画アプリで AI アシスタントが MCP 経由でできることをご覧ください。
代わりにモデルに ffmpeg コマンドを書かせればいいのでは?
生成されたコマンドの質はモデルの推測しだいで、しかも実行するのはユーザーです。アプリ自身のエンジンを呼び出せば、アプリがすでにテストした設定が使われ、不正な入力はアプリが拒否できます。
MCP サーバーはモデルから生の設定を受け付けるべき?
たいていは受け付けるべきではありません。生の設定を許すと、ファイルの保存先やプログラムの動作を変えるものも含め、あらゆるパラメーターをモデルに渡すことになります。サーバーが展開する小さな型付きの入力のほうが検証しやすくなります。
MCP ツールの結果にスキーマは必要?
必須ではありませんが、役に立ちます。MCP の仕様ではツールが出力スキーマを宣言でき、宣言したサーバーはそれに合う結果を返す必要があるため、クライアントが結果を検証できます。
参考資料
- Anthropic, "Computer use tool" (security considerations; reliability; screenshot token cost) (2026-10-25 閲覧)
- Model Context Protocol, "Tools" (2026-07-28; output schema; Security Considerations) (2026-07-28 閲覧)
- Model Context Protocol, "Progress" (2025-11-25; progressToken and progress notifications) (2025-11-25 閲覧)
- Model Context Protocol, "Cancellation" (2025-11-25; notifications/cancelled) (2025-11-25 閲覧)


