claude-controls-mac

ykdojo/claude-controls-mac · 予備 Mac を Claude Code が常時操作する隔離マシンにする手順ガイド

1 — 概要

claude-controls-mac は、予備 Mac(target)を Claude Code 専用の常時稼働マシンにし、メイン Mac(source)から SSH で、または Claude アプリ経由でスマホから操作するための手順集。個人データを載せないローカルアカウント、パスワードレス SSH / sudo、スリープ無効化、クリップボード同期、GUI セッション内 tmux 経由の computer use までを一本のガイドにまとめる。

2
Mac(source / target)
16
README 手順
4
同梱シェル
SSH
主経路 + Remote Control
  • コンテナ(作者の safeclaw 含む)はメイン機上で動くため分離が不完全。Unity など Mac 専用アプリや computer use も難しい。
  • OpenClaw 等より、最新の Claude Code 機能・Claude アプリ連携・サブスク利用を優先する。
  • 方針: 失ってもよい予備 Mac + 個人データなしローカルアカウント + LAN SSH(必要なら Tailscale)。
リスク: target 上の Claude Code は --dangerously-skip-permissions 前提。ic / ic rc も同等の権限バイパスで動く。個人データや Apple ID を載せないことが前提条件。
2 — 構成

source は日常使いの Mac。target は隔離した予備機。IC_BOX=<user>@<host>.local(または Tailscale 時は .local なし)を共有し、ic / clip が同じホストへ向く。

flowchart TD
  Phone["Claude app / phone"]
  Source["source Mac\nic · clip · SSH"]
  Target["target Mac\nfresh local admin"]
  Tmux["tmux server\n/tmp/cc-tmux.sock"]
  Claude["claude sessions\ncomputer-use / Chrome"]
  Anthropic["Anthropic Remote Control"]

  Phone --> Anthropic
  Anthropic --> Claude
  Source -->|"SSH / VNC / Tailscale"| Target
  Source -->|"ic attach"| Tmux
  Target --> Tmux
  Tmux --> Claude
          
3 — 基本セットアップ

README の番号付き手順。プレースホルダ <user> / <target-host> を置き換える。

01–03
隔離アカウントと sudo
必要なら消去 → ローカル admin(Apple ID なし推奨)→ Remote Login → NOPASSWD sudoers(visudo で parsed OK)
04–05
到達と鍵認証
LocalHostName → <host>.local(一意)→ source で ed25519 → ssh-copy-id → whoami で無パスワード確認
06–07
常時起動と clipboard
pmset で sleep 無効・screensaver idleTime 0 → clip.sh を PATH に入れ IC_BOX を設定
08–10
Claude Code とログイン
install.sh → PATH を ~/.zshenv へ → 任意で setup-claude-env.sh → ssh 上で claude / gh auth login

代表コマンド

# 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
hostname: IP より scutil --get LocalHostName + .local を推奨。同名が LAN 上にいると別機へ繋がるので、必要なら sudo scutil --set LocalHostName … で一意にする。
4 — 同梱スクリプト

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 --chromeClaude in Chrome 付き
ic ls / ic attach <id>ライブセッション一覧 / 再接続
ic kill / kill-all / kill-exceptセッション終了
ic rcRemote Control サーバ(スマホから新規セッション可)
ic vnc / ic shScreen Sharing / 素のシェル
ic history保存会話の件数・場所・プレビュー
5 — Computer use

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 も付与して再起動。
コピーの注意: tmux 上の claude が出す OSC52 は Terminal.app では拾いにくい。テキストを出すときは画面で Cmd-A → Cmd-C、画像や長い秘密は 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
6 — オプション拡張
手順内容人手作業
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 推奨
Chrome 拡張の落とし穴: source と target の両方に同じアカウントの拡張があると、接続先選択が誤ることがある(claude-code #74667)。作業中は source の Chrome を閉じるか拡張を外す。スマホ起点セッションは現状ブラウザツールが付かない(#74671)→ ターミナルで開始してから /rc。
7 — 環境コンポーネント

claude-env-components.md の一覧。Core 1–9 がデフォルト ON、10–11 は opt-in。

#項目既定
1Shell aliases(c / cs / --fs→fork)core
2DX plugin(ykdojo/claude-code-tips)core
3DISABLE_AUTOUPDATER + promptSuggestion offcore
4Default model: claude-opus-4-8core
5Attribution off / sessionUrl falsecore
6context-bar status linecore
7autoCompactEnabled falsecore
8GitHub CLI(~/.local/bin)core
9Claude for Chrome guidance → ~/.claude/CLAUDE.mdcore
10Playwright MCP(headed Chrome)opt-in
11yt-dlp + skillopt-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'