SimMirror について
SimMirrorは、開発者やコーディングエージェントがブラウザーやMCPクライアントからiOSシミュレーター、iPhone、Android端末を操作するためのツールです。簡潔なアクセシビリティスナップショット、ライブビューアー、操作記録を備えています。
主な機能
- 01iOS・Android端末の表示と操作
- 02ブラウザー上のライブビューアー
- 03アクセシビリティスナップショット、参照、差分
- 04操作の一括実行と画面テキスト待機
- 05MP4またはGIFの録画
- 06アプリのビルド、起動、テスト
活用シーン
- 01コーディングエージェントによるシミュレーター操作
- 02実機iPhoneでのアプリフロー検証
- 03プルリクエスト用の操作記録作成
- 04画像ではなくスナップショットで画面を確認
MCP 対応
SimMirrorはstdio MCPサーバーとして動作し、MCPクライアントに端末検索、画面スナップショット、操作、ビルド、テスト、録画のツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SimMirror
Claude Code、CLI エージェント、ブラウザーから、iOS シミュレーター、実機の iPhone、Android デバイスをミラーリングして操作します。

実際のセッションを 4 倍速で再生しています。録画全体 は 1 分 39 秒です。
ライブの iOS シミュレーター、ケーブル接続したお手持ちの iPhone、Android エミュレーターやスマートフォンを、任意のブラウザータブや ウェブページで表示できます。AI エージェントが次にタップする場所を正確に示すアニメーションカーソルと、エージェントがスクリーンショットではなくコンパクトな テキストで画面を読み取れる、トークン効率の高い UI スナップショットを備えています。画面を MP4 または GIF として録画し、プルリクエストに添付できます。Claude Code、Codex、 Cursor、その他あらゆる MCP クライアントで動作します。
ステータス:2.4。 エージェントツール、ビューワー、プロトコル、埋め込み API は安定しており、すべてのリリースで SimMirror が変更しないことを約束する内容を確認します。2.0 ではシミュレーターに加えて実機の iPhone と iPad に対応し、 WebDriverAgent を介してケーブル接続でライブ操作できるようになりました。また、あらゆる画面を MP4 または GIF として録画できます。2.1 では横向き表示のアプリの読み取りと操作、タブバーに隠れた場所へのタップ防止、エージェントが作業するワークツリーのビルド、 エージェントが変更してはいけないアカウントを使ったウォークスルー向けの観察モードを追加しました。2.2 では Android エミュレーターとスマートフォンに対応し、 同じビューワー、カーソル、ツールを利用できるようになりました。2.3 では、抜いたケーブルを戻すと実機が自動で再接続されるようになり、 操作できない理由をエージェントに伝え、実行前に
sim_device healthでデバイスを確認できるようになりました。2.4 では、 人が操作を引き継いだスマートフォンには干渉せず、実行時間の長さにかかわらず録画し、WebDriverAgent をロックアップさせずに長い画面を読み取り、 指定した正確な語句を待ち、実機を操作できるエージェントを一度に 1 つに制限します。1.x で約束した内容は何も削除していません。
SimMirror を選ぶ理由
- どこからでもシミュレーターを確認できます。 Chrome のタブ、iframe、
<sim-mirror>ウェブ コンポーネントで、ライブの H.264 または JPEG ストリームを表示し、タッチ、スクロール、入力、ハードウェアボタン、ライトモードとダークモードに対応します。 - エージェントの操作を見守れます。 エージェントのジェスチャーは実行前に通知され、ビューワーのカーソルがまずその場所へ滑らかに移動します。 そのため、操作の流れを追いながら、必要に応じて介入できます。エージェントは、あなたの手が止まるまで待ちます。
- トークンを節約できます。 エージェントは安定した要素参照と画面間の差分を含むアクセシビリティスナップショットを読み取り、 待機を含む操作をまとめて実行します。スクリーンショットを使うのは、画面を視覚的に確認する必要がある場合だけです。
- アクセシビリティでは読み取れない画面も確認できます。 ゲームやキャンバスはピクセルから内容を読み取り、開発中のアプリは独自のビューを共有できるため、 アイコンのみのボタンや手描きのコントロールも名前で読み取れます。
- 実機の iPhone でテストできます。 接続するとシミュレーターと並べて表示されます。ケーブル接続で最大 60 fps のライブ映像を確認でき、 ブラウザーまたはエージェントからタッチや入力ができ、SimMirror が変更した内容はすべて元に戻します。
- 操作の結果を共有できます。 タッチ位置をすべて描画した操作の流れを MP4 または GIF として録画し、プルリクエストに添付できます。
インストール
Claude Codeでは、プラグイン(ツール、スナップショットを優先して使う方法を説明するスキル、/sim-mirror:open)を使用します。
/plugin marketplace add AndrewKochulab/sim-mirror
/plugin install sim-mirror@sim-mirror
任意の MCP クライアントでは、stdio サーバーとして使用します。
claude mcp add sim-mirror -- uvx --from sim-mirror==2.4.0 sim-mirror mcp
Codex、Cursor、その他のクライアントの設定。
コマンドは、sim-mirror open、doctorなどで使用します。
uv tool install sim-mirror==2.4.0
# or
brew install andrewkochulab/tap/sim-mirror
ビューアーライブラリは、独自のページで使用できます:npm install @andrewkochulab/sim-mirror
(npm)。SimMirror 本体は
PyPIとHomebrew tapで入手できます。
要件: Apple Silicon 搭載の Mac、Xcode 26 以降、uvまたは Homebrew。ほかに 必要なものはありません。SimMirror はパッケージに含まれる専用ヘルパーを使ってシミュレーターを操作します。実機の iPhone を使うには、Developer Mode を有効にし、 Apple の開発チームにアクセスできる必要があります。詳しくはインストールをご覧ください。
クイックスタート
sim-mirror doctor # check this Mac, ending with a real tap on a simulator
sim-mirror open # this project's simulator, live in a browser tab
次に、エージェントにこう尋ねます:
「設定」→「一般」→「情報」を開いて、このシミュレーターで動作している iOS のバージョンを教えてください。スクリーンショットではなく、sim_snapshot を使ってください。
iPhone を接続し、ロックを解除して Developer Mode を有効にした状態で:
iPhone に切り替えて、アプリをビルドして実機で実行し、サインアップの手順を進めて GIF として記録してください。
初回は、ビューアーでタッチを設定を押してください。プロジェクト独自の署名チームを使って WebDriverAgent をビルドします。
使い始めるでは、作業の流れを説明しています。
機能
ライブビューアー。 ページがデコード可能な場合は WebCodecs 経由で H.264 を、そうでない場合は JPEG を使用します。接続ごとにネゴシエーションされます。 タッチ、ドラッグ、スクロール、文字入力と貼り付け、ホームとロック、ライトとダーク、デバイス選択に対応しています。一時的な切断後は自動で再接続し、シミュレーターがオフの場合は明確に通知します。
エージェントのカーソル。 タップ、長押し、スワイプ、ドラッグ、文字入力など、エージェントのすべての操作は実行される前にビューアーに届き、
ビューアー上のポインターが先にその位置へ滑らかに移動します(agent.cursor_lead_ms)。Mac のポインターは動きません。
画面の理解。 スナップショットは数行で表示されます。たとえば e2 button "General" (201,319) のように、スクロールしても要素に紐づいたままの参照、ダイジェスト、
差分を含みます。sim_actは1回の呼び出しで最大20ステップを実行し、テキストの表示、非表示、または画面の安定を待ちます。スピナーを通り過ぎる場合や、
点滅し続けて止まらないドットも対象です。アプリが横向きになっている場合は、その向きに合わせた座標で読み取りとタッチを行います。sim_device rotateでシミュレーターを回転でき、
タブバー、ツールバー、キーボードに隠れた場所をタップしようとすると、そこへ移動する方法とともに拒否されます。画面の理解をご覧ください。
観察モード。 エージェントが変更してはならないアカウントを使って操作を案内する場合、画面上の「削除」「保存」「送信」「サインアウト」のように見える項目(英語とその他12言語に対応。アプリ上で破壊的な操作としてスタイル付けされたものも含む)へのタップを、 呼び出しで確認しない限り拒否します。詳しくはセキュリティをご覧ください。
ピクセルから読み取る。 アクセシビリティ情報が何も示さない画面(ゲーム、キャンバス、読み込み中のアプリなど)は、macOS の Vision が画面内で検出したテキストとして読み取ります。
タップするための参照や、待機するテキストも取得でき、ビューアーで読み取った範囲を枠で囲めます
(perception.ocr)。ピクセルから読み取るをご覧ください。
アプリ SDK。 開発中のアプリは、小さな Swift パッケージであるSimMirrorKitをリンクし、SimMirror.start()を呼び出せます:
シミュレーター上の Debug ビルドでは、アプリ自身の UIKit および SwiftUI ビューを共有するため、アイコンのみのボタン、タップジェスチャー付きのカード、
手描きのコントロールも名前で読み取れます。また、.simMirror("Settings")で SwiftUI ビューに名前を付けられます。使用は任意で、Release ビルドには一切含まれません。
アプリ SDKをご覧ください。
実機。 ケーブルで接続された iPhone または iPad はシミュレーターの隣に表示され、エージェントはそれに切り替えられます
(sim_device list と choose)。ケーブル経由でライブ画面を約 55 フレーム/秒で表示し、Xcode の devicectl を通じてアプリ、ログ、外観、位置情報にアクセスします。また、WebDriverAgent を通じてタップや文字入力、要素ツリーを操作できます。これはクリック一つで初回セットアップし、プロジェクト独自のチームで署名します。タップは約 3 分の 1 秒で反映されます。接続はケーブル経由に限られ、SimMirror が実機に加えた変更は、接続解除時に元に戻されます。実機をご覧ください。
Android。 Android エミュレーターやスマートフォンはシミュレーターの隣に表示され、同じビューアー、カーソル、ツールを使えます。adb で一覧表示、起動、操作ができ、scrcpy のサーバーはクリック一つで初回セットアップすると画面をライブ表示します。UI Automator でスナップショットを読み取り、sim_build_run と sim_test で Gradle プロジェクトを独自のラッパーを使ってビルドします。スマートフォンが勝手に起動またはシャットダウンされることはなく、SimMirror が加えた変更は元に戻されます。Androidをご覧ください。
録画。 ビューアーの録画ボタン、sim_record、または sim-mirror record を使うと、デバイスの画面を MP4、GIF、またはその両方で保存できます。タッチした位置にはそれぞれ印が付き、ステータスバーは 9:41 になります。また、preset: "pr" を指定すると、プルリクエストに添付できる小さなサイズに保てます。録画をご覧ください。
コネクター。 SimMirror 独自のネイティブヘルパーなら、インストール不要ですべてを操作できます。idb_companion も引き続き使用でき、どちらもない場合は simctl コネクターが画面を読み取り専用でミラーリングし、その理由を表示します。auto は動作する中で最速の方法を使い、失敗した場合は別の方法に切り替えます。エントリーポイントを通じて、ほかのコネクターも追加できます。コネクターをご覧ください。
埋め込み。 ワンショットチケットを使うiframe、CSS カスタムプロパティでテーマを設定する
<sim-mirror> element、または独自のサインイン機能を備えたPython アプリケーション内の SimMirrorを利用できます。
設定パネル。 sim-mirror open --settings を実行すると、ビューアーからすべての設定にクリック一つでアクセスできます。セクションごとにタブがあり、プロジェクト単位または全プロジェクト共通で保存できます。設定は適用されたことを知らせる前に反映されます。実行内容やデーモンへのアクセス権を決める設定を適用するには、sim-mirror settings confirm からコードを入力する必要があります。設定パネルをご覧ください。
診断。 Xcode、その Simulator フレームワーク、ランタイム、ネイティブヘルパーと idb_companion、Device Hub とデスクトップセッション、テキストリーダー、アプリの共有階層を確認し、さらにシミュレーターにタップが届くことを検証します。診断をご覧ください。
セキュリティ。 ループバック接続のみを許可し、Host の許可リスト、厳密な Origin チェック、一覧に記載した Origin のみに対する CORS とフレーミング、スコープ付きのハッシュ化トークン、URL フラグメント内のワンショットコードを使用します。セキュリティをご覧ください。
ビルドとテスト。 sim_build_run と sim_test は、エージェントのシミュレーター向けに xcodebuild でビルドし、インストールして起動します。失敗した内容と場所だけを返します。失敗したテストはそれぞれ名前が示されるため、単独で再実行できます。指定すれば別のシミュレーターでも実行できます。また、ビルドしたフォルダー、ブランチ、コミットも返します。エージェントが作業する git ワークツリーを、スキームの実行時に使われる構成でビルドします。コマンドを実行するため、既定では無効です。sim-mirror config set build.tools true を実行してください。
トークンコストを測定する
benchmarks/tool_budget.py は、クライアントが使うものと同じ MCP リレー経由で各読み取り専用ツールを呼び出し、回答ごとのバイト数、推定トークン数、レイテンシを手元の画面に出力します。トークン予算の例を参照してください。iPhone 17 Pro シミュレーター(iOS 26.5、idb コネクター)で「設定」→「一般」を表示し、各5回呼び出した結果です(2026-09-16)。
| 呼び出し | ツール | バイト数 | トークン数(推定) | p50 ms | p95 ms |
|---|---|---|---|---|---|
| デバイス情報 | sim_device | 265 | 46 | 2.9 | 3.6 |
| スナップショット、全体 | sim_snapshot | 561 | 112 | 64.8 | 76.4 |
| スナップショット、変更のない画面との差分 | sim_snapshot | 83 | 5 | 63.2 | 64.8 |
| スクリーンショット、幅400 px | sim_screenshot | 62222 | 469 | 8.2 | 8.9 |
| スクリーンショット、幅1200 px | sim_screenshot | 276472 | 4181 | 20.4 | 21.9 |
バイト数は画像の base64 を含む回答全体の値です。トークン数は推定値です(テキストは約4文字で1トークン、画像は約750ピクセルで1トークン)。
互換性
| 動作確認済みの環境 | |
|---|---|
| macOS | 26(Xcode 16.4 を使用する場合は15、表示のみ) |
| Xcode | 26および27 |
| コネクター | ネイティブヘルパー(フルコントロール)、idb_companion 1.5(フルコントロール)、simctl(表示のみ) |
| 実機 | Xcode の devicectl がケーブル経由で認識する iPhone または iPad(WebDriverAgent がない場合は表示のみ) |
| Android | Android SDK を使用し、adb が認識するエミュレーターおよびスマートフォン。ライブ画面には scrcpy 5.0.1、Gradle ビルドに対応 |
| アプリ SDK | iOS 16以降の iOS シミュレーター上のデバッグビルド |
| クライアント | Claude Code、Codex、Cursor、任意の stdio MCP クライアント |
| ブラウザー | Chrome、Safari、Firefox、Edge |
実機で確認済みの行には、互換性で日付とともに「検証済み」と記載しています。
1.0以降、ツール、プロトコル、埋め込み API、ビューアーパッケージ、設定、コマンドラインは、SimMirror が破壊しないと約束することに準拠しています。リリースでは機能を追加し、既存の機能を壊しません。2.0でも破壊的変更はありません。コネクターは例外で、マイナーバージョンを固定します。
ドキュメント
すべてのドキュメント:導入ガイド、クライアント、埋め込み、画面の理解、コネクター、セキュリティ、アーキテクチャ、およびツール、設定、コマンドライン、プロトコルのリファレンス。
ロードマップ
| マイルストーン | 内容 |
|---|---|
| v0.1(プレビュー) | ライブビューアー、エージェントのカーソル、人とエージェントによる操作、MCP ツール、sim-mirror doctor、idb と simctl のコネクター、プレビューとしてのビルドとテスト |
| v0.2 | ビルド、実行、テスト用ツール、設定パネル、mcpbridge による Xcode 27 の UI 階層、多数のホストで共有する 1 つのデーモン |
| v1.0 | チェックで保護された安定したプロトコルと組み込み API、PyPI、npm、MCP Registry、エージェントの作業中も表示され続けるカーソル |
| v1.2 | idb_companion に代わる SimMirror 独自のネイティブヘルパー、ピクセルから読み取る画面と終わりのないアニメーション後の安定待ち、任意で導入できるアプリ内デバッグ SDK、Homebrew tap |
| v2.0 | 実機の iPhone と iPad:ケーブル経由のライブ画面、アプリ、ログ、署名なしでの外観と位置の取得、WebDriverAgent による完全な操作、画面を MP4 または GIF として録画 |
| v2.1 | 横向き表示にしたアプリと sim_device rotate、バーに隠れる領域へのタップ防止、エージェントの作業ツリーのビルド、監視モード、sim-mirror stop、プルリクエスト向けのサイズに調整した録画 |
| v2.2 | 同じビューアー、カーソル、ツールを備えた Android エミュレーターとスマートフォン:adb、scrcpy のライブ画面、Gradle ビルド |
| v2.3 | ケーブルを抜いても自動で復旧する実機、sim_device health、デバイスを操作できない理由をエージェントに伝える機能、読み取りに時間がかかってもロックアウトされないテキストリーダー |
| v2.4(現在) | 実機の iPhone でも安定して動作するエージェント:人がスマートフォンの操作を取り戻した後は WebDriverAgent に干渉しない機能、実行時間に応じた長さの録画、ロックアップせずに読み取る長い画面、完全一致と正規表現による待機、タップ前の ref 検証、iOS 27 のフローティング検索バー、デバイスごとに同時に操作できるエージェントを 1 つに制限 |
| ウェブサイトと公開 | ランディングページ、動画チュートリアル、ガイド |
ROADMAP.md とマイルストーンをご覧ください。SimMirror と他のツールとの関係については、比較をご覧ください。
コントリビューション
コントリビューションを歓迎します。CONTRIBUTING.md と行動規範をお読みください。AI コーディングエージェントは AGENTS.md をお読みください。セキュリティ上の問題は、SECURITY.md の説明に従って非公開で報告してください。質問はディスカッションにお寄せください。
ライセンス
Apache-2.0。NOTICE と THIRD_PARTY_LICENSES.md をご覧ください。
SimMirror は独立したプロジェクトであり、Apple または Anthropic とは提携していません。iOS、iPhone、Xcode、Simulator は Apple Inc. の商標です。Claude と Claude Code は Anthropic PBC の商標です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。