7月19日、ykdojo氏が「How to set up your spare Mac for Claude Code to fully control」と題した記事を公開した。スペアMacをClaude Codeが完全制御できるAIワークステーションとして構築する手順を詳しく解説しており、とりわけLaunchAgentでGUIセッション内にtmuxサーバーを常駐させることでSSH経由でもスクリーンキャプチャ・マウス操作を可能にするというcomputer use向けの仕組みは独創的だ。
なぜメインMacでなくスペアMacなのか
Claude Codeを--dangerously-skip-permissionsフラグ付きで動かすと、エージェントはほぼすべての操作を無確認で実行する。メインマシンでこれを走らせることのリスクは明らかだ。
この構成の核心は「失うものが何もないマシンにエージェントを押し込める」という発想にある。具体的には:
- 古い/スペアMacを使う(メインマシンは使わない)
- Apple IDを紐付けないローカルアカウントを新規作成し、個人データを持ち込まない
- ローカルネットワーク上のSSH経由でメインMacから操作し、スマートフォンからも制御する
コンテナ(Dockerなど)で代替する方法もあるが、著者はその限界を指摘している。コンテナはメインマシン上で動くため完全な分離にならず、ネットワークリクエストもメインマシンを経由する。また、UnityのようなmacOS専用アプリはコンテナ内では動かない。computer useでGUI操作を自動化したい場合も同様だ。
セットアップ手順の全体像
手順は大きく11ステップに分かれる。
1. ターゲットMacの初期化とアカウント作成
個人データが残っているなら「システム設定 → 一般 → 転送またはリセット → すべてのコンテンツと設定を消去」でワイプする。その後、Apple IDを登録しない新規ローカルアカウントを作成し、sudoが使えるよう管理者権限を付与する。
2. SSHの有効化
sudo systemsetup -setremotelogin on
Full Disk Access privilegesエラーが出る場合は、ターミナルアプリにフルディスクアクセスを付与してから再実行する。
3. パスワードなしsudoの設定
エージェントが毎回パスワードプロンプトで止まらないよう、/etc/sudoers.d/に例外ルールを書く。sudoersファイルの構文ミスはsudo自体をロックアウトするため、最後のvisudo -cfによる検証は必須だ。
echo "<user> ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/<user>-nopasswd >/dev/null
sudo chmod 440 /etc/sudoers.d/<user>-nopasswd
sudo visudo -cf /etc/sudoers.d/<user>-nopasswd # 「parsed OK」が出ることを確認
4. ホスト名とIPアドレスの確認
IPアドレスは再起動で変わるため、ホスト名(<target-host>.local形式)の使用を推奨している。同一ネットワーク上に同名のMacが存在すると誤った宛先に繋がる可能性があるため、ユニークな名前に変えておく。
5. パスワードなしSSHの設定
メインMac側でSSH鍵を生成し、ssh-copy-idでターゲットに公開鍵を配置する。
6. スリープ無効化
デフォルトでは約10分でスリープに入りネットワークから切断される。常時稼働させるために:
sudo pmset -c sleep 0
sudo pmset -c disablesleep 1 # 蓋を閉じてもスリープしない
sudo pmset -c displaysleep 0
defaults -currentHost write com.apple.screensaver idleTime 0 # スクリーンセーバー無効
7. クリップボード同期
clip.shを使うと、macOS標準のpbcopy/pbpasteをSSH越しにラップしてテキストと画像の双方向クリップボード同期ができる。Apple IDもサードパーティサービスも不要で、SSH上で暗号化転送される。
curl -fsSL https://ykdojo.github.io/claude-controls-mac/clip.sh -o ~/.local/bin/clip
chmod +x ~/.local/bin/clip
export IC_BOX="<user>@<target-host>.local" # ~/.zshrcに追記
最も実用的な部分:computer useとicコマンド
ステップ11のcomputer use設定が、この構成の最大の見どころだ。
macOSはGUIログインセッションに紐付いた権限モデルを持つため、SSH経由のプロセスは通常スクリーンキャプチャもマウス操作もできない。この制限を回避するために、**LaunchAgentでGUIセッション内にtmuxサーバーを常駐させる**という仕組みを使う。LaunchAgentはmacOSのユーザーログイン時に自動起動するデーモン管理の仕組みで、GUIセッションのコンテキストでプロセスを立ち上げられる点が重要だ。Claude Codeはそのtmuxセッション内で動くため、ディスプレイへのアクセス権を継承する。
セットアップはsetup-computer-use.sh一発で完了する(tmuxのインストールとClaude ProまたはMaxプランが必要)。
操作はic.sh("isolated claude"の略)をメインMacに入れて使う:
ic # 新しいClaudeセッションを起動
ic -c # 直前の会話を継続
ic rc # スマートフォンからリモートコントロール
ic ls # 実行中のセッション一覧
ic attach <id> # 既存セッションにアタッチ
ic sh # Claudeなしでターゲットのシェルに入る
すべてのicセッションは--dangerously-skip-permissionsで動作する。なお、tmuxセッション内ではOSC52(クリップボード制御エスケープシーケンス)がTerminal.appに届かないため、テキストのコピーにはCmd-A → Cmd-Cで画面全体をコピーする方法が推奨されている。
オプション:Claude Code向け環境の一括設定
setup-claude-env.shを使うと、シェルエイリアス、DXプラグイン、settings.jsonの調整、GitHub CLI、Playwright MCP、yt-dlpなどをまとめてセットアップできる。
ここで言うDXプラグインとは、Claude Codeの開発体験(Developer Experience)を改善するための拡張設定群を指す。具体的にはコマンド補完やエイリアス定義など、日常的なClaudeとの対話をスムーズにする仕組みだ。
スクリプトはインタラクティブモードとフラグ指定による非インタラクティブモードの両方に対応しており、スクリプトは冪等(何度実行しても結果が同じ)なので気軽に再実行できる。
詳細はHow to set up your spare Mac for Claude Code to fully controlを参照していただきたい。