claude-controls-mac
ykdojo/claude-controls-mac · 予備 Mac を Claude Code が常時操作する隔離マシンにする手順ガイド
claude-controls-mac は、予備 Mac(target)を Claude Code 専用の常時稼働マシンにし、メイン Mac(source)から SSH で、または Claude アプリ経由でスマホから操作するための手順集。個人データを載せないローカルアカウント、パスワードレス SSH / sudo、スリープ無効化、クリップボード同期、GUI セッション内 tmux 経由の computer use までを一本のガイドにまとめる。
- コンテナ(作者の safeclaw 含む)はメイン機上で動くため分離が不完全。Unity など Mac 専用アプリや computer use も難しい。
- OpenClaw 等より、最新の Claude Code 機能・Claude アプリ連携・サブスク利用を優先する。
- 方針: 失ってもよい予備 Mac + 個人データなしローカルアカウント + LAN SSH(必要なら Tailscale)。
--dangerously-skip-permissions 前提。ic / ic rc も同等の権限バイパスで動く。個人データや Apple ID を載せないことが前提条件。
source は日常使いの Mac。target は隔離した予備機。IC_BOX=<user>@<host>.local(または Tailscale 時は .local なし)を共有し、ic / clip が同じホストへ向く。
README の番号付き手順。プレースホルダ <user> / <target-host> を置き換える。
代表コマンド
# target: SSH 有効化(失敗時は Terminal に Full Disk Access)
sudo systemsetup -setremotelogin on
# target: パスワードレス sudo(一度だけログインパスワード)
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
# source → target
ssh-copy-id <user>@<target-host>.local
ssh <user>@<target-host>.local whoami
# スリープ無効(充電器接続時)
sudo pmset -c sleep 0 disablesleep 1 displaysleep 0
scutil --get LocalHostName + .local を推奨。同名が LAN 上にいると別機へ繋がるので、必要なら sudo scutil --set LocalHostName … で一意にする。
clip.sh → clip
clip send / clip get。SSH 経由でテキストと画像(PNG)を両方向同期。source の PATH に置き IC_BOX を設定。
ic.sh → ic
isolated claude。固定 tmux ソケット上にセッションを生やし attach。ic ls / attach / kill / rc / vnc / history など。
setup-claude-env.sh
意見付き環境。対話チェックリスト、または --core / --all / --playwright / --yt-dlp。冪等。
setup-computer-use.sh
GUI ログイン内の LaunchAgent で tmux サーバを維持し、~/.claude.json の computer-use を有効化。--uninstall あり。
source へのインストール例
curl -fsSL https://raw.githubusercontent.com/ykdojo/claude-controls-mac/main/clip.sh -o ~/.local/bin/clip
curl -fsSL https://raw.githubusercontent.com/ykdojo/claude-controls-mac/main/ic.sh -o ~/.local/bin/ic
chmod +x ~/.local/bin/clip ~/.local/bin/ic
echo 'export IC_BOX="<user>@<target-host>.local"' >> ~/.zshrc
よく使う ic サブコマンド
| コマンド | 内容 |
|---|---|
ic | 新しい claude セッション(権限スキップ付き) |
ic -c / ic -r | 直近継続 / resume ピッカー |
ic --chrome | Claude in Chrome 付き |
ic ls / ic attach <id> | ライブセッション一覧 / 再接続 |
ic kill / kill-all / kill-except | セッション終了 |
ic rc | Remote Control サーバ(スマホから新規セッション可) |
ic vnc / ic sh | Screen Sharing / 素のシェル |
ic history | 保存会話の件数・場所・プレビュー |
SSH プロセスは GUI ログインの Screen Recording / Accessibility を継承できない。対策は LaunchAgent が GUI セッション内で tmux サーバを常駐させ、固定ソケット /tmp/cc-tmux.sock に全 ic セッションを乗せる方式。権限の責任プロセスは tmux(claude の親)。
ssh -t <user>@<target-host>.local \
'curl -fsSL https://raw.githubusercontent.com/ykdojo/claude-controls-mac/main/setup-computer-use.sh \
-o setup-computer-use.sh && bash setup-computer-use.sh'
# 要: brew install tmux / Claude Pro または Max
人手でしかできない許可
tmux(Apple Silicon なら/opt/homebrew/bin/tmux等)に Screen Recording と Accessibility。- 初回キャプチャ時の window picker bypass を Allow(だいたい月次で再表示)。
- 付与後は
tmux -S /tmp/cc-tmux.sock kill-serverでサーバ再起動(LaunchAgent がすぐ復活)。 - アプリごとの「他アプリのデータへアクセス」連発を抑えるなら tmux に Full Disk Access も付与して再起動。
clip send / clip get。
source の Claude から box の Claude を駆動
ic ls
ssh <user>@<target-host>.local \
"tmux -S /tmp/cc-tmux.sock send-keys -t <session> 'your prompt' Enter"
sleep 2
ssh <user>@<target-host>.local \
"tmux -S /tmp/cc-tmux.sock send-keys -t <session> Enter"
ssh <user>@<target-host>.local \
"tmux -S /tmp/cc-tmux.sock capture-pane -t <session> -p" | tail -30
| 手順 | 内容 | 人手作業 |
|---|---|---|
| 12 VPN / 任意アプリ | ic でインストール依頼可。例: Proton VPN |
認証情報(clip send)、VPN 許可ダイアログ |
| 13 スマホ制御 | セッション内 /rc、または ic rc でサーバ起動 |
Claude アプリ側の接続 |
| 14 Claude in Chrome | ブラウザ操作は computer use より拡張側。Pro/Max/Team/Enterprise | Add to Chrome、拡張ログイン、必要なら /chrome |
| 15 Screen Sharing | GUI で Screen Sharing ON → open vnc://… または ic vnc |
macOS 12.1 以降 CLI 有効化不可 |
| 16 Tailscale | LAN 外でも SSH / ic / clip / VNC。IC_BOX から .local を外す |
両機で同一アカウントログイン、device approval 推奨 |
/rc。
claude-env-components.md の一覧。Core 1–9 がデフォルト ON、10–11 は opt-in。
| # | 項目 | 既定 |
|---|---|---|
| 1 | Shell aliases(c / cs / --fs→fork) | core |
| 2 | DX plugin(ykdojo/claude-code-tips) | core |
| 3 | DISABLE_AUTOUPDATER + promptSuggestion off | core |
| 4 | Default model: claude-opus-4-8 | core |
| 5 | Attribution off / sessionUrl false | core |
| 6 | context-bar status line | core |
| 7 | autoCompactEnabled false | core |
| 8 | GitHub CLI(~/.local/bin) | core |
| 9 | Claude for Chrome guidance → ~/.claude/CLAUDE.md | core |
| 10 | Playwright MCP(headed Chrome) | opt-in |
| 11 | yt-dlp + skill | opt-in |
# 対話(TTY)
ssh -t <user>@<target-host>.local \
'curl -fsSL https://raw.githubusercontent.com/ykdojo/claude-controls-mac/main/setup-claude-env.sh \
-o setup-claude-env.sh && bash setup-claude-env.sh'
# 非対話で全部
ssh <user>@<target-host>.local \
'curl -fsSL https://raw.githubusercontent.com/ykdojo/claude-controls-mac/main/setup-claude-env.sh \
-o setup-claude-env.sh && bash setup-claude-env.sh --all'
- GitHub: ykdojo/claude-controls-mac — 本ガイドの正本
- README.md — 16 手順の全文
- claude-env-components.md — 環境セットアップ項目一覧
- ykdojo/safeclaw — コンテナ寄りの代替環境
- ykdojo/claude-code-tips — DX plugin / context-bar の出典
- Tailscale — LAN 外アクセス(手順 16)
- Agentic Coding with Discipline and Skill — 作者ニュースレター