「ターミナルの中で macOS が丸ごと動く」——そう聞くと身構えるが、terminal-mac(govijr/terminal-mac・MIT・★1.5k・Swift)の正体は明快だ。Apple Virtualization で建てた“実 macOS のゲスト(VM)”を、ターミナルから表示・操作するツールで、狙いは computer-use AI エージェントに macOS デスクトップを触らせること。agent-desktop がエージェントに“手足”を与えるのと同じ系譜で、こちらは使い捨てにできる別の macOS デスクトップそのものを用意する。この記事は、公式リポジトリ(2026-11-05 確認)をもとに、正体・仕組み・AI 連携・導入・そして隔離の注意までを図解中心に整理する。
まずは動くところを見てほしい。以下は作者によるデモ(X 投稿)だ。
terminal-mac のデモ 1(X: @kirtandopamine)
terminal-mac のデモ 2(X: @kirtandopamine)
注:terminal-mac の公式リポジトリ自体には画像・デモ動画が無い(上の動画は作者の X 投稿)。本文中の各図は、公式リポジトリの記述から仕組みを図解したものだ。
WHAT IT IS名前で誤解しがち
ターミナルエミュレータではない——実macOSのVM
⚠ こう誤解しがち
✓ 実際はこれ
⚠ こう誤解しがち: macOS標準の Terminal.app のこと?
✓ 実際はこれ: いいえ。ターミナルに表示する別物のツール
⚠ こう誤解しがち: ターミナルエミュレータ(iTerm2 等)?
✓ 実際はこれ: ではない。実macOSのVMをターミナル越しに操作する
⚠ こう誤解しがち: SSHで別のMacに入る?
✓ 実際はこれ: 同一Mac上に Apple Virtualization で建てた仮想macOS
⚠ こう誤解しがち: 人間が使うツール?
✓ 実際はこれ: 主眼は computer-use AIエージェント(人も操作できる)
30秒でわかるterminal-mac(2026-11-05)
- ・Apple Virtualizationで建てた実macOSのVMを、ターミナルから表示・操作するOSS(MIT・★1.5k・Swift)
- ・狙いはcomputer-use AIエージェント。MCPでClaude Code/Cursor/Codexと連携し screenshot/click/type を仮想Macへ
- ・物理Macのポインタ・クリップボードは触らない。ホーム/プロジェクト/マイク/カメラは非接続
- ・ただし既定NATでネット可・堅牢な隔離ではない。early release candidate・自己署名
- ・要件:Apple silicon・macOS 14+・viewerに Ghostty/Kitty/iTerm2
エージェント基盤の全体像は AIエージェントフレームワーク比較2026|LangGraph・CrewAI・Dify等9種をStar数・実コードで検証 を起点に。エージェントの“記憶”は claude-mem、スキルの作法は Addy Osmani のエージェントスキル論 でも扱った。terminal-mac は、その“作業場”を仮想 macOS として切り出すピースにあたる。
terminal-mac とは——ターミナルエミュレータではなく「実macOSのVM」
名前が紛らわしいので最初に整理する。terminal-mac は macOS 標準の Terminal.app でも、iTerm2 のようなターミナルエミュレータでもない。実体は、同じ Apple silicon Mac の上に Apple Virtualization で建てた実 macOS のゲスト(VM)で、その画面をターミナルに映し、キーボード・マウス操作を送り込む。SSH で別マシンに入るのとも違い、同一マシン内に隔離した macOS デスクトップをもう一つ持つイメージだ。
なぜそんなものが要るのか。答えは computer-use エージェントにある。AI エージェントに「人間のように画面を見てクリックさせる」とき、あなたが使っている本番のデスクトップを触らせるのは怖い。terminal-mac は、触らせても本体に影響しにくい“別の macOS”を用意し、そこをエージェントの作業場にする。README の一文「A separate macOS desktop for computer-use agents, viewed and controlled from a terminal.」がそのまま設計思想だ。
terminal-mac の仕組み——Apple Virtualization と画面転送
ARCHITECTURE仕組み
実macOSゲスト → 画面差分転送 → ターミナルで描画
-
Apple Virtualization
同一 Apple silicon Mac 上に、実 macOS ゲスト(VM)を起動
-
ゲスト内ヘルパー
TerminalMacGuest.app が画面をキャプチャし、入力イベントを送る
-
画面差分の転送
変化した画素だけを差分で(最大30fps・lz4圧縮)。viewしていない間は15秒で停止
-
ターミナルのviewer
Kitty/iTerm2/Ghostty のグラフィックスプロトコルで描画。Ctrl+]で抜けてもVMは継続
流れはこうだ。まず Apple Virtualization が実 macOS ゲストを起動する。ゲストの中では同梱の TerminalMacGuest.app が動き、画面をキャプチャして、外から来た入力イベント(クリックやキー入力)をゲストに反映する。画面は変化した画素だけを差分で送り(最大 30fps・lz4 圧縮)、ビューアが見ていない間は 15 秒で転送を止めて無駄を省く。ターミナル側の ビューアは、Kitty / iTerm2 / Ghostty のグラフィックスプロトコルを使って、その画面を文字端末の中に描画する。仮想ディスプレイは 2x HiDPI(既定 1280×800pt)だ。
操作面では、タイプ・左右クリック・ダブル/トリプルクリック・ドラッグ・スクロール・矢印や制御キーに対応する。Ctrl+G で Spotlight や Mission Control などの Mac ショートカットのパレットが開き、Ctrl+] でビューアを抜けても VM は動き続ける。つまり「見る」と「動かし続ける」が分離していて、エージェントに任せっぱなしにしてから、必要なときだけ覗く、という使い方ができる。
AIエージェントから操作する——MCPとスキル
terminal-mac の主役はここだ。MCP サーバ(terminal-mac mcp)と skill を提供し、MCP クライアントから仮想 Mac を操作させる。
AGENT CONTROLAIエージェントから操作
MCPクライアント → terminal-mac mcp → 仮想Mac
-
MCPクライアント
Claude Code(プラグイン)/ Cursor / VS Code / Codex など
-
terminal-mac mcp
MCPサーバ+skillを提供。claude mcp add terminal-mac -- terminal-mac mcp
-
仮想Macを操作
screenshot / click / drag / scroll / type / key / status を仮想Macへ
-
物理Macは不干渉
同じヘルパー経由。物理Macのポインタやクリップボードは動かさない
対応クライアントは Claude Code(プラグイン)・Cursor・VS Code・Codex など。エージェントが呼べる操作は screenshot / click / drag / scroll / type / key / status だ。接続はコマンド一つで済む。
# MCP サーバとして登録(Claude Code の例)
claude mcp add terminal-mac -- terminal-mac mcp
# Claude Code のプラグインとして入れる場合
/plugin install terminal-mac --marketplace govijr/terminal-mac
ここで効いてくるのが先の設計だ。エージェントの操作は同梱ヘルパー経由で仮想 Mac に届き、物理 Mac のポインタやクリップボードは動かさない。あなたが別の作業をしている横で、エージェントが仮想 Mac を黙々と操作できる——人間とエージェントの作業が物理的に干渉しない、というのが computer-use 用途での勘所になる。CLI から直接叩くこともできる。
# スクリーンショットを撮る / ビューアを開く(CLI 直接操作の例)
terminal-mac action default screenshot --output /tmp/guest.png
terminal-mac view default
terminal-mac の導入と使い方
SETUP導入の順番
要件 → インストール → 起動 → 接続 → 操作
-
1
要件を満たす
Apple silicon・macOS 14以降。viewerに Ghostty/Kitty/iTerm2。初回はネット(macOS DL)と最大64GiBの空き
-
2
インストール
get.sh を取得して実行(SHA-256 検証)。~/.local 以下・管理者権限不要・シェル設定は触らない
-
3
起動
terminal-mac(ガイド付き)または terminal-mac up
-
4
エージェント接続
claude mcp add terminal-mac -- terminal-mac mcp、/plugin install でプラグイン導入
-
5
操作・退出
action … screenshot / view で操作。Ctrl+] で viewer を抜けても VM は動き続ける
要件は Apple silicon・macOS 14 以降。インラインのビューアには Ghostty / Kitty / iTerm2 が要る(他のターミナルではネイティブ VM ウィンドウとエージェント CLI になる)。初回は macOS イメージのダウンロードでネットワークが必要で、VM ディスクは既定で最大 64GiB まで伸びる。インストールは次の 1 行だ(README によれば、最新リリースを取得し SHA-256 を検証してから入れる)。
# インストール(~/.local 以下・管理者権限不要・シェル設定は編集しない)
curl -fsSL https://github.com/govijr/terminal-mac/releases/latest/download/get.sh | bash
# 起動(対話端末ではガイド付きフローが始まる)
terminal-mac
# もしくは
terminal-mac up
自分でビルドするなら Xcode 16 / Swift 6 で次のとおり。
bash scripts/build.sh
./dist/terminal-mac doctor
なお curl | bash 形式のインストールは手軽な反面、実行前に中身を読めないのが難点だ。気になるなら、README が案内する ZIP を展開して bash install.sh を使う経路を選び、スクリプトに目を通してから実行するとよい。配布版は現時点で自己署名(notarization なし)なので、Gatekeeper の扱いもあわせて確認したい。
隔離とセキュリティの注意——「堅牢な隔離ではない」
ここは誇張せず、しかしはっきり書く。terminal-mac は「本体に影響しにくい別の macOS」を作るが、それは“堅牢な隔離”とは別物だ。
ISOLATION隔離の範囲と注意
切り離されるものと、隔離は万能でない点
切り離されている
- ホームディレクトリ
- プロジェクトフォルダ
- クリップボード
- マイク・カメラ
⚠ 注意(README 明記)
- 既定のNATでゲストはネット接続可
- ホストやローカルのサービスに到達しうる
- 『ネットワーク隔離/堅牢な敵対コード環境ではない』
- early release candidate・自己署名(未notarize)
README が明示的に切り離すと述べているのは、ホームディレクトリ・プロジェクトフォルダ・クリップボード・マイク・カメラだ。これらはゲストに接続されない。一方で、同じ README が釘を刺している——「既定の NAT ネットワークによりゲストはインターネットに接続でき、ホストやローカルネットワークのサービスに到達しうる。これはネットワーク隔離された、あるいは堅牢な“敵対的コード”実行環境ではない」。つまり、信頼できないコードやエージェントの暴走を安全に閉じ込める用途には、そのままでは向かない。
実務的には、(1) ネットワークを絞る(到達されたくないホスト/ローカルサービスの前提で設計する)、(2) 認証情報や鍵を仮想 Mac に置かない、(3) early release candidate・自己署名という成熟度を踏まえ、重要資産から離れた環境で試す——あたりが現実的な線だ。「本体のデスクトップを触らせるよりは安全」だが、「何をさせても大丈夫」ではない。この区別を持っておくと事故りにくい。
立ち位置——何に使い、何を選ぶか
terminal-mac が効くのは、エージェントに“GUI の macOS アプリ”を操作させたいときだ。コマンドだけで完結する作業なら、わざわざ VM を建てる必要はない。GUI を伴う検証・反復作業(デスクトップアプリの操作、ブラウザ GUI、macOS 固有の設定画面など)を、本体と干渉せず、使い捨てにできる場所で回したい——そこにはまる。
| 観点 | terminal-mac |
|---|---|
| 与えるもの | エージェントに“別の実 macOS デスクトップ”(GUI 丸ごと) |
| 接続 | MCP(Claude Code/Cursor/Codex 等)+ CLI |
| 本体への影響 | 物理 Mac のポインタ/クリップボード/ホーム等は非干渉 |
| 隔離の強さ | 基本的な切り離しはあるが堅牢な隔離ではない(既定ネット可) |
| 成熟度 | early release candidate・自己署名・Apple silicon 専用 |
姉妹プロジェクトに terminal-phone(iOS シミュレータ/iPhone 向け)があり、「エージェントにデバイスの GUI を触らせる」という発想のシリーズだと分かる。エージェントの作業場をどう用意するかは、記憶(claude-mem)やスキル(Addy Osmani のエージェントスキル論)と並ぶ、computer-use 時代の設計ピースだ。まず試すなら、重要データのない環境で terminal-mac up →スクリーンショットを撮らせてみて、ネットワークの既定(NAT)だけは最初に意識しておきたい。
参照ソース
- govijr/terminal-mac - GitHub(About・★・ライセンス・Topics。2026-11-05 確認)
- terminal-mac README(仕組み・MCP/skill・Install/Usage/Requirements・隔離の注意の一次記述)
- Apple Virtualization framework(Apple 公式)(実 macOS ゲストを動かす基盤)
- 当サイト関連:claude-mem(エージェントの記憶)/Addy Osmani のエージェントスキル論/agent-desktop





