computer-automation について
スクリーンショットに基づく自然言語操作で、macOS、Windows、Linux のデスクトップ UI を自動化する Midscene スキルです。ローカル画面と RDP 経由のリモート Windows デスクトップに対応し、結果の検証も行えます。
主な機能
- 01自然言語によるデスクトップ操作
- 02ローカル画面と RDP 接続
- 03スクリーンショットと画面アサーション
- 04一時的な UI の記録と検証
- 05参照画像によるターゲット指定
活用シーン
- 01デスクトップアプリのワークフローを自動化
- 02リモート Windows デスクトップを操作
- 03画面上の完了表示を検証
- 04参照画像から UI 要素を指定
MCP 対応
各 CLI コマンドは MCP ツールに対応し、AI エージェントはスクリーンショットから操作を判断します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ web-infra-dev/ midscene-skills --skill computer-automationインストール後、Claude Code で/computer-automationを入力して読み込まれたか確認します。
詳細
デスクトップのコンピューター操作
重要なルール — 違反するとワークフローが破綻します:
- midscene コマンドをバックグラウンドで実行しないでください。 各コマンドは同期的に実行し、次のアクションを決める前に出力(特にスクリーンショット)を確認してください。バックグラウンド実行では、スクリーンショットを確認・分析して操作するループが破綻します。
- midscene コマンドは一度に 1 つだけ実行してください。 前のコマンドが完了するまで待ち、スクリーンショットを確認してから次のアクションを決めてください。複数のコマンドを連結して実行しないでください。
- 各コマンドの完了に十分な時間を確保してください。 Midscene のコマンドは AI 推論と画面操作を伴うため、一般的なシェルコマンドより時間がかかることがあります。通常、コマンドには約 1 分かかります。複雑な
actコマンドでは、さらに長くかかる場合があります。- 終了前に必ずタスクの結果を報告してください。 自動化タスクが完了したら、見つかった重要なデータ、完了した操作、撮影したスクリーンショット、関連する調査結果などを含めて、結果をユーザーに積極的に要約してください。最後の自動化ステップの後、何も報告せずに終了しないでください。ユーザーは 1 回のやり取りで完全な回答を期待しています。
- ウィンドウは最小化のみ行い、明示的に指示された場合を除き閉じないでください。 ウィンドウを閉じたり、邪魔にならないようにしたりする必要がある場合は、閉じるのではなく最小化してください。ユーザーから明示的に指示されない限り、アプリやウィンドウを閉じないでください。
npx -y @midscene/computer@1 を使用して、デスクトップ(macOS、Windows、Linux)を操作します。各 CLI コマンドは MCP ツールに直接対応しています。AI エージェントであるあなたが、スクリーンショットに基づいて実行する操作を決定します。
act でできること
デスクトップ上の 1 回の act 呼び出しで、Midscene はマウスの移動、クリック、ダブルクリック、右クリック、項目のドラッグ、テキストの入力や消去、スクロール、単一キーやキーボードショートカットの入力を行えます。また、選択したディスプレイに表示されている画面上で複数の手順からなる操作を実行できます。
前提条件
Midscene には、視覚的なグラウンディング能力に優れたモデルが必要です。以下の環境変数を、システム環境変数として設定するか、現在の作業ディレクトリにある .env ファイルに設定する必要があります(Midscene は .env を自動的に読み込みます)。
MIDSCENE_MODEL_API_KEY="your-api-key"
MIDSCENE_MODEL_NAME="model-name"
MIDSCENE_MODEL_BASE_URL="https://..."
MIDSCENE_MODEL_FAMILY="family-identifier"
例:Gemini(Gemini-3-Flash)
MIDSCENE_MODEL_API_KEY="your-google-api-key"
MIDSCENE_MODEL_NAME="gemini-3-flash"
MIDSCENE_MODEL_BASE_URL="https://generativelanguage.googleapis.com/v1beta/openai/"
MIDSCENE_MODEL_FAMILY="gemini"
例:Qwen 3.5
MIDSCENE_MODEL_API_KEY="your-aliyun-api-key"
MIDSCENE_MODEL_NAME="qwen3.5-plus"
MIDSCENE_MODEL_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
MIDSCENE_MODEL_FAMILY="qwen3.5"
MIDSCENE_MODEL_REASONING_ENABLED="false"
# If using OpenRouter, set:
# MIDSCENE_MODEL_API_KEY="your-openrouter-api-key"
# MIDSCENE_MODEL_NAME="qwen/qwen3.5-plus"
# MIDSCENE_MODEL_BASE_URL="https://openrouter.ai/api/v1"
例:Doubao Seed 2.0 Lite
MIDSCENE_MODEL_API_KEY="your-doubao-api-key"
MIDSCENE_MODEL_NAME="doubao-seed-2-0-lite"
MIDSCENE_MODEL_BASE_URL="https://ark.cn-beijing.volces.com/api/v3"
MIDSCENE_MODEL_FAMILY="doubao-seed"
よく使われるモデル:Doubao Seed 2.0 Lite、Qwen 3.5、Zhipu GLM-4.6V、Gemini-3-Pro、Gemini-3-Flash。
モデルが設定されていない場合は、設定するようユーザーに依頼してください。対応プロバイダーについては、モデルの設定を参照してください。
コマンド
デスクトップに接続する
npx -y @midscene/computer@1 connect
npx -y @midscene/computer@1 connect --displayId <id>
RDP 経由で接続する
ローカルマシンではなく、リモートの Windows デスクトップを操作するには、RDP モードを使用します。--host を指定すると connect が RDP モードに切り替わり、その後のすべてのコマンド(act、tap、take_screenshot、assert、disconnect)は、@midscene/computer にバンドルされた RDP ヘルパーバイナリを経由して実行されます。ローカルのマウスやキーボードは操作されません。
最小限の例:
npx -y @midscene/computer@1 connect \
--host rdp.example.com \
--username Administrator \
--password "$RDP_PASSWORD"
connect で使用できるすべての RDP オプション(--host を設定すると RDP モードが有効になります。他のフラグは省略可能です):
--host <fqdn-or-ip>— RDP ホストです。RDP モードに入るには必須です。--port <number>— RDP ポートです(デフォルトは3389)。--username <user>— RDP ユーザーアカウントです。--password <secret>— RDP パスワードです。環境変数、シークレットマネージャー、または対話型プロンプトから読み込むことを推奨します。共有トランスクリプトには絶対に貼り付けないでください。--domain <domain>— Active Directory / NTLM ドメインです。--security-protocol <auto|tls|nla|rdp>— セキュリティプロトコルのネゴシエーション方法です。デフォルトはautoです。--ignore-certificate— TLS 証明書の検証をスキップします。自己署名証明書を使用している信頼できる開発用ホストでのみ使用してください。--admin-session— 管理者/コンソールセッションに接続します(mstsc /adminと同等です)。--desktop-width <px>と--desktop-height <px>— 特定のリモートデスクトップ解像度を要求します。実際のサイズは、RDP サーバーがネゴシエーションで返す値です。たとえば、1024x768を要求しても、ホストが1280x720に固定している場合は1280x720になります。接続後にlistdisplays --host ... --username ... --password ...を実行して、ネゴシエーションされたサイズを確認してください。
RDP モード固有の注意事項:
- RDP モードでは
--displayIdと--headlessは無視されます。接続された RDP セッションで公開される仮想ディスプレイは常に 1 つで、そのサイズはサーバーがネゴシエーションで返した値になります。 - ディスプレイ一覧を表示するコマンドは 2 つあり、動作が異なります。適切な方を選んでください。
list_displays(アンダースコアあり、プラットフォームツール)—ローカルの物理ディスプレイのみを列挙します。RDP フラグは受け付けません。RDP 接続後に実行しても役に立ちません。listdisplays(アンダースコアなし、アクションツール)—connect/take_screenshotなどと同じ RDP フラグを受け付けます。RDP モードでは、ネゴシエーションされた仮想ディスプレイを返します。例:[{ "id": "...", "name": "RDP 10.70.86.26:3389 (1280x720)", "primary": true }]。これを使って実際の解像度を確認してください。
- RDP トランスポートでは、
@midscene/computerに同梱されているネイティブヘルパーバイナリを使用します。RDP helper binary not foundエラーが表示される場合は、オプションのbin/<platform>/rdp-helperがインストールから除外されています。パッケージを再インストールするか、新しい tarball を展開してください。 - RDP 認証情報はシークレットとして扱ってください。
--passwordを含む.envファイルをリポジトリにコミットしないでください。代わりに現在のシェルでexport RDP_PASSWORD=...を実行し、--password "$RDP_PASSWORD"のように参照してください。 - レイテンシの目安:CLI を実行するたびに新しい node プロセスが起動するため、コマンドごとに RDP セッションを再確立します。おおよその所要時間は次のとおりです。
connect/take_screenshot/keyboardpress/scroll:約 5 秒(node の起動 + RDP TLS+NLA ハンドシェイク + 最初のフレーム)。act/assert/tap --locate:約 5 秒 + AI 推論 + 計画されたサブアクション。一般的な操作では、エンドツーエンドで 8~20 秒かかると見込んでください。- RDP ハンドシェイク自体は約 700 ミリ秒です。残りは CLI の仕組み上避けられないコールドスタートのコストです。
- 接続失敗時の診断:
connectが失敗した場合、stderr の最初の行に対処に必要なエラーが表示されます(例:connect_failed: Failed to connect to RDP server: ERRCONNECT_LOGON_FAILURE: Logon failed.)。続くスタックトレースは診断上のノイズです。最初の行を読み、認証情報やネットワークを確認してください。よくあるERRCONNECT_*の原因は次のとおりです。LOGON_FAILURE— ユーザー名/パスワード/ドメインが正しくありません。CONNECT_TRANSPORT_FAILED— ホストに到達できないか、RDP ポートがブロックされています。nc -zv <host> 3389で確認してください。TLS_CONNECT_FAILED— TLS ハンドシェイクが拒否されました。自己署名証明書を使用している開発用ホストでは--ignore-certificateを試すか、--security-protocol nlaを指定してください。
connect --host ... が成功した後は、以降のワークフロー(act、tap --locate、assert、take_screenshot、listdisplays、report-tool、disconnect)はローカルモードと同じです。ただし、CLI の各実行はステートレスで再接続するため、以降の各コマンドにも同じ --host/--username/--password/--ignore-certificate フラグを渡してください。
ディスプレイ一覧
npx -y @midscene/computer@1 list_displays
スクリーンショットの撮影
npx -y @midscene/computer@1 take_screenshot
スクリーンショットを撮影したら、次のアクションを決める前に保存された画像ファイルを読み取り、現在の画面の状態を把握してください。
操作の実行
actを使用してコンピューターを操作し、結果を取得します。クリック、入力、スクロール、待機、移動など、すべてのUI操作を自律的に処理するため、細かな手順に分けず、複雑で高レベルなタスク全体を指示してください。何をしたいか、どのような結果を望むかを自然言語で説明します。
# specific instructions
npx -y @midscene/computer@1 act --prompt "type hello world in the search field and press Enter"
npx -y @midscene/computer@1 act --prompt "drag the file icon to the Trash"
# or target-driven instructions
npx -y @midscene/computer@1 act --prompt "search for the weather in Shanghai using the Chrome browser, tell me the result"
現在の画面状態を検証する
assertを使用して、現在の画面が自然言語の条件を満たしていることを検証します。UI操作は行わず、表示されている画面の状態を確認し、条件が真の場合にのみ成功します。検証、QAチェック、act実行後の最終状態の確認に使用します。
npx -y @midscene/computer@1 assert --prompt "there is a login button visible"
npx -y @midscene/computer@1 assert --prompt "the active window shows a saved confirmation message"
npx -y @midscene/computer@1 assert --displayId 1 --prompt "the file picker is open"
デフォルトでは、検証に失敗するとAIが生成した理由がスローされます。代わりにカスタムエラーメッセージをスローするには--messageを渡します。QAやCIのログに意図した結果を表示するのに便利です。
npx -y @midscene/computer@1 assert \
--prompt "the export completed dialog is visible" \
--message "the export should finish after clicking Save"
検証で参照画像(アイコン、ロゴ、スクリーンショット)との比較が必要な場合は、URLまたはパスに--imageを、表示名に--image-nameを渡します。各--imageには、http(s)リンク、data: URI、またはローカルファイルパスを指定できます。複数の画像を添付する場合は、両方のフラグを対応する順序で繰り返してください。モデルがURLに直接アクセスできない場合は、--convertHttpImage2Base64 trueを追加します。@midscene/[email protected]+が必要です。
npx -y @midscene/computer@1 assert \
--prompt "the active window matches the supplied reference screenshot" \
--image "https://example.com/reference.png" \
--image-name "reference" \
--convertHttpImage2Base64 true
# or with a local file
npx -y @midscene/computer@1 assert \
--prompt "the visible icon matches the supplied logo" \
--image "./fixtures/logo.png" \
--image-name "logo"
# multiple reference images — pair --image and --image-name by order
npx -y @midscene/computer@1 assert \
--prompt "the active window matches both the icon and the logo" \
--image "./fixtures/icon.png" --image-name "icon" \
--image "./fixtures/logo.png" --image-name "logo"
一時的なUIを記録して検証する
トースト、読み込みバナー、アニメーション、画面遷移など、現在の画面の検証を実行する前に消える可能性がある状態を確認する場合は、録画を使用します。
# Terminal 1: keep this foreground command running
npx -y @midscene/computer@1 record start --displayId 1 \
--output ./save-observation.json
# Terminal 2, while Terminal 1 records
npx -y @midscene/computer@1 act --displayId 1 \
--prompt "click the Save button"
# Send Ctrl+C to Terminal 1 and wait for the saved-path message, then assert
npx -y @midscene/computer@1 assert --displayId 1 \
--record ./save-observation.json \
--prompt "a saved confirmation appeared"
record startにローカルディスプレイまたはRDPターゲットのフラグと--outputを渡し、Recording. Press Ctrl+C to stop and save.が表示されるまで待ちます。録画プロセスは専用ターミナルのフォアグラウンドで実行してください。シェルの&は絶対に追加しないでください。操作は手動または2つ目のターミナルから行い、録画プロセスにCtrl+Cを送り、保存されたパスが表示されるまで待ってから検証します。操作と最後のassertには、同じターゲットフラグを指定してください。省略可能なキャプチャフラグは--interval-ms、--max-frames、--watchdog-msです。--max-framesはサンプリングするフレーム数を制限します。マニフェストには、追加の代表フレームが最後に1枚含まれる場合があります。デフォルトのウォッチドッグは5分後に録画を確定して保存します。--watchdog-ms 0を指定すると、この安全制限は無効になります。出力されるのはJSONマニフェストと、その隣にある<name>.frames画像ディレクトリです。エンコード済み動画やアーカイブではありません。マニフェストには相対パスのJPEG/PNGファイルが含まれ、base64形式の画像データは含まれません。JSONファイルと画像ディレクトリは一緒に保管または移動し、assert --recordにはJSONのパスを渡してください。現在の画面だけを確認する場合は、--recordを付けずに通常のassertを使用します。
正確なターゲット指定に参照画像を使用する
ユーザーがスクリーンショット、アイコン、ロゴ、参照画像を提供し、見た目を正確に一致させたい場合は、汎用的なact --promptではなく、tap --locateを優先してください。--locateにはJSONを渡します。promptにはターゲットを記述し、imagesには名前付きの参照画像を指定します。画像URLにモデルが直接アクセスできない可能性がある場合は、convertHttpImage2Base64: trueが便利です。
npx -y @midscene/computer@1 tap --locate '{
"prompt": "tap the area contains the image",
"images": [
{
"name": "target image",
"url": "https://github.githubassets.com/assets/GitHub-Mark-ea2971cee799.png"
}
],
"convertHttpImage2Base64": true
}'
同じlocate JSON形式は、locateパラメーターを受け付ける他のコマンドでも使用できます。
切断する
npx -y @midscene/computer@1 disconnect
レポートファイルを利用する
生成されたHTMLレポートは、まず人が読む用途に推奨されます。手順ごとの実行詳細と各操作の再生動画が含まれているため、何が起きたのかを把握し、問題をトラブルシューティングするのがはるかに簡単になります。
別のスキルやツールでレポートを利用する必要がある場合は、まず同じプラットフォームのCLIパッケージに含まれるreport-toolで変換してください。LLMベースのワークフローにはMarkdownを推奨します。レポートをプログラムで処理する必要がある場合は、JSONを使用します。
npx -y @midscene/computer@1 report-tool --action to-markdown --htmlPath ./midscene_run/report/.../index.html --outputDir ./output-markdown
npx -y @midscene/computer@1 report-tool --action split --htmlPath ./midscene_run/report/.../index.html --outputDir ./output-data
ワークフローパターン
CLI コマンドは呼び出しの間で状態を保持しないため、次のパターンに従ってください。
- 接続してセッションを確立します
- ヘルスチェック —
connectコマンドの出力を確認します。connectですでにヘルスチェック(スクリーンショットの撮影とマウス移動テスト)が実行されている場合は、追加のチェックは不要です。connectでヘルスチェックが実行されていない場合は、手動で行います。スクリーンショットを撮影して成功することを確認し、次にマウスをランダムな位置に移動させ(act --prompt "move the mouse to a random position")、成功することを確認します。どちらかの手順が失敗した場合は、続行する前に停止してトラブルシューティングを行います。両方のチェックがエラーなく成功した後にのみ、次の手順に進んでください。 - 対象アプリを起動してスクリーンショットを撮影し、現在の状態を確認します。アプリが起動していて、画面上に表示されていることを確認してください。
actを使用して目的のアクションまたは対象に応じた指示を実行します。実行後の画面状態にはassertを使用してください。または、一時的な状態を扱うワークフローでは、専用のターミナルでrecord start --output ...を実行したままにし、Ctrl+Cで停止してからassert --recordを使用します。- 完了したら切断します
- 結果を報告します — 実施した内容を要約し、タスク中に得られた重要な所見やデータを提示し、生成されたファイル(スクリーンショット、ログなど)とそのパスを列挙します
ベストプラクティス
- 必ず最初にヘルスチェックを実行してください:接続後、
connectコマンドの出力を確認してください。connectがすでにヘルスチェック(スクリーンショットとマウス移動のテスト)を実行している場合、追加のチェックは不要です。実行していない場合は、手動で行ってください。スクリーンショットを撮影し、マウスをランダムな位置に移動します。それ以降の操作に進む前に、両方が(エラーなしで)成功する必要があります。これにより、環境の問題を早い段階で検出できます。 - このスキルを使用する前に、対象アプリを前面に表示してください:効率を最大限に高めるには、midscene コマンドを実行する前に、ほかの方法(macOS では
open -a <AppName>、Windows ではstart <AppName>など)でアプリを前面に表示してください。その後、スクリーンショットを撮影して、アプリが実際に前面に表示されていることを確認します。目視で確認してから、このスキルを使った UI 自動化に進んでください。midscene を使って Spotlight、スタートメニューの検索、その他のランチャーを操作するのは避けてください。一時的な UI が表示され、AI による推論が何度も必要になり、大幅に時間がかかります。 - UI 要素を具体的に指定してください:曖昧な説明ではなく、明確で具体的な詳細を示してください。「ボタン」ではなく、「Safari ウィンドウの左上隅にある黄色の最小化ボタン」のように指定します。
- 可能な限り位置を説明してください:対象の要素の位置を説明して、特定しやすくしてください(例:「メニューバーの右上隅にあるアイコン」、「左側のサイドバーの3番目の項目」)。
- バックグラウンドで実行しないでください:midscene のすべてのコマンドを同期的に実行してください。バックグラウンドで実行すると、スクリーンショットの分析と操作を繰り返すループが崩れます。
- 複数のディスプレイがないか確認してください:アプリを起動してもスクリーンショットに表示されない場合、アプリのウィンドウが別のディスプレイに開いている可能性があります。
list_displaysを使って、利用可能なディスプレイを確認してください。アプリのウィンドウを現在のディスプレイに移動するか、connect --displayId <id>を使ってアプリが表示されているディスプレイに切り替えてください。 - 関連する操作は1つの
actコマンドにまとめてください:同じアプリで連続して操作する場合は、別々のコマンドに分けず、1つのactプロンプトにまとめてください。たとえば、「X を検索し、最初の結果をクリックして、詳細を確認するため下にスクロールする」という操作は、3つのact呼び出しではなく、1つにまとめます。これにより、コマンドの往復や不要なスクリーンショット分析の繰り返しを減らし、大幅に時間を短縮できます。 - 実行前に
PATHを設定してください(macOS):macOS では、PATHが不完全だとsystem_profilerなどのコマンドが見つからない場合があります。midscene コマンドを実行する前に、PATHに標準のシステムディレクトリが含まれていることを確認してください:
これにより、システムユーティリティが見つからないことによるスクリーンショットの失敗を防げます。export PATH="/usr/sbin:/usr/bin:/bin:/sbin:$PATH" - 適切な検証方法を選んでください:現在の画面には
assert --prompt "..."を使います。トースト、バナー、アニメーション、または画面遷移を検証するには、専用のターミナルでrecord start --output ...を実行してから操作を行い、Ctrl+C で録画を停止します。保存先を示すメッセージが表示されるまで待ち、その後、生成されたファイルをassert --recordに渡してください。 - 完了後は必ず結果を報告してください:自動化タスクが完了したら、ユーザーに尋ねられるのを待たずに、必ず結果を提示してください。以下を含めます:(1)ユーザーの最初の質問への回答、または依頼されたタスクの結果、(2)実行中に取得または確認した重要なデータ、(3)スクリーンショットやその他の生成ファイルとそのパス、(4)実行した手順の簡潔な概要。最後の自動化コマンドを実行した後、何も報告せずに終了しないでください。ユーザーは、1回のやり取りで結果がすべて提示されることを期待しています。
- 参照画像が提供されている場合は
tap --locateを優先してください:ユーザーがスクリーンショット、アイコン、またはロゴを共有し、その正確な見た目の対象を指定している場合は、act --promptだけに頼らず、{ "prompt": "...", "images": [...] }のようなマルチモーダルのlocateJSON オブジェクトとともにtap --locateを使用してください。
例 — コンテキストメニューの操作:
npx -y @midscene/computer@1 act --prompt "right-click the file icon and select Delete from the context menu"
npx -y @midscene/computer@1 take_screenshot
例 — ドロップダウンメニュー:
npx -y @midscene/computer@1 act --prompt "open the File menu and click New Window"
npx -y @midscene/computer@1 take_screenshot
精度の向上(Deep Locate/Deep Think)
Midscene がタスクの実行に苦労している場合に役立つ、任意のグローバルフラグが 2 つあります。コマンドのどこにでも(サブコマンドの前後を問わず)指定できます。一度設定すると、該当する操作でデフォルトとして使用されるため、呼び出しごとにパラメーターを渡す必要はありません。
--deep-locate— 対象の要素を特定するために、視覚的な推論を追加で 1 回行います。アクションが誤った場所を操作するとき(位置のずれ/オフセット)に使用してください。tap --locateやact内で行われる位置特定など、要素の位置を特定するすべての操作に適用されます。--deep-think— より深い推論(豊富なコンテキストとサブゴールへの分解)を使ってactの計画を立てます。複雑な複数ステップのact指示に使用してください。計画のみに影響します。
どちらも速度を少し犠牲にする代わりに、結果を改善します。また、組み合わせて使用することもできます。
# more accurate element location (helps act's internal locating too)
npx -y @midscene/computer@1 act --deep-locate --prompt "click the tiny red close button in the top-left of the window"
# deeper planning for a complex, multi-step act
npx -y @midscene/computer@1 act --deep-think --prompt "open the Export dialog, choose PDF, and save it to the Desktop"
# combine both
npx -y @midscene/computer@1 act --deep-locate --deep-think --prompt "open Preferences and switch to the Advanced tab"
トラブルシューティング
macOS:アクセシビリティの権限が拒否される
ターミナルアプリにアクセシビリティへのアクセス権がありません。
- システム設定 > プライバシーとセキュリティ > アクセシビリティを開きます
- ターミナルアプリを追加して、有効にします
- 権限を付与した後、ターミナルアプリを再起動します
macOS:Xcode Command Line Tools が見つからない
xcode-select --install
API キーが設定されていない
.env ファイルに MIDSCENE_MODEL_API_KEY=<your-key> が含まれていることを確認してください。
macOS:system_profiler が見つからず、スクリーンショットに失敗する
take_screenshot が system_profiler: command not found のようなエラーで失敗する場合、PATH 環境変数が不完全な可能性があります。次のコマンドを実行して修正してください。
export PATH="/usr/sbin:/usr/bin:/bin:/sbin:$PATH"
その後、スクリーンショットのコマンドを再試行してください。
macOS:スクリーンショットが黒画面になる
take_screenshot が完全に黒い画像を返す場合、Mac がロック中(画面がログイン/ロック画面になっているなど)の可能性があります。これはシステムレベルの制限です。macOS ではセッションがロックされている間、画面の内容をキャプチャできないため、アプリケーション側で回避する方法はありません。
推奨される解決方法: 画面をロックする代わりにスクリーンセーバーを使用してください。スクリーンセーバーを使用すると、ユーザーセッションがアクティブかつロックされていない状態に保たれるため、通常どおりスクリーンショットをキャプチャできます。
- システム設定 > ロック画面を開きます
- 「スクリーンセーバの開始時またはディスプレイがオフになった後にパスワードを要求」の時間を長くするか、自動化中はオフにします
- 必要に応じて、システム設定 > スクリーンセーバでスクリーンセーバーを設定し、ロックせずに無操作時にディスプレイが暗くなるようにします
AI が要素を見つけられない
- スクリーンショットを撮影し、要素が実際に表示されていることを確認します
- より具体的な説明を使用します(色、位置、周囲のテキストを含めます)
- 要素が別のウィンドウの背後に隠れていないことを確認します
@midscene/* の依存関係のバージョンが古い
- ローカルのバージョンを確認します:
npm ls @midscene/computer @midscene/core @midscene/shared(またはpnpm why @midscene/computer)。 - 最新のバージョンを確認します:
npm view @midscene/computer version、npm view @midscene/core version、npm view @midscene/shared version。 - 依存関係をアップグレードします:
npm i @midscene/computer@latest @midscene/core@latest @midscene/shared@latest。