接続ガイド

AIエージェントから、
手元のMacのClaude Code・Codexを動かす

チャットで AIエージェント(Muse)に頼むだけで、あなたのMacの中にある Claude Code と Codex が仕事をして、結果がチャットに返ってきます。そのための「つなぎ方」を、はじめての方向けに順番に説明します。

1. 全体像:専用の廊下でつなぎます

Muse と あなたのMac は、ふだんは別々の場所にいます。そこで、自分の機械だけが通れる「専用の廊下」を作り、Mac の「入口のドア」を合鍵で開けて、中の Claude Code と Codex に仕事を頼みます。

Muse AIエージェント Tailscale(専用の廊下) 自分の機械だけが通れる あなたのMac 入口=SSH(リモートログイン) 合鍵=公開鍵(パスワードは渡さない) 通行証=長期トークン(Claude用) Claude Code Codex Muse AIエージェント Tailscale(専用の廊下) 自分の機械だけが通れる あなたのMac 入口=SSH 合鍵=公開鍵(パスワード不要) 通行証=長期トークン Claude Code Codex
図1 Muse から Mac までの道すじ

4つの部品を、たとえ話で

専用の廊下

Tailscale

自分の機械だけが通れる専用の廊下です。Muse と Mac を、インターネットに丸見えにならない形で安全につなぎます。

入口のドア

SSH(リモートログイン)

Mac の入口のドアです。このドアを開けておくと、外から文字だけの指示を送れるようになります。

合鍵

公開鍵

Muse 専用の合鍵です。Mac に「この鍵の持ち主は通してよい」と登録するので、パスワードを渡す必要がありません。

通行証

Claude Code の長期トークン

Claude に「この人の代わりに動いてよい」と示す通行証です。SSH 越しだと Mac の金庫(キーチェーン)が読めないことがあり、その場合に必要になります。Mac 特有の事情で、Linux では不要なことが多いです。

2. できるようになること

つながったあとは、Muse にこんなふうに話しかけるだけです。

「Mac の Claude で、~/my-project の README を読んで要点を3行で教えて」
「Mac の Codex で、~/my-project を read-only でレビューして」read-only は「読むだけで、書き換えない」という意味です。
結果は、そのままチャットに返ってきます。Mac の前に座っている必要はありません。

3. 事前に用意するもの

  • Mac(macOS)
  • Homebrew(任意。Mac用のアプリ導入ツールです。なくても進められます)
  • Claude Code と Codex が、Mac にインストールされ、ログイン済みであること
  • Claude の有料プラン(Pro / Max など)のアカウント(長期トークン方式に必要です)
  • Tailscale のアカウント(Google などのアカウントで作れます)
  • Muse(AIエージェント)

4. 手順:6つのステップ

順番に進めれば大丈夫です。各ステップに「やること」「画面で押すところ」「うまくいったサイン」を付けています。

  1. 1Tailscale を入れる
  2. 2Muse を招く
  3. 3入口を開ける
  4. 4合鍵を登録
  5. 5通行証を作る
  6. 6動作確認
1

Mac に Tailscale を入れる

やること

公式サイト https://tailscale.com/download からダウンロードして開きます。Homebrew を使う場合は、ターミナルで次を実行します。

ターミナル
brew install --cask tailscale
つまずきやすい点
brew の途中で「パスワード入力」で止まった、または中断した場合、入ったつもりでも本体が入っていないことがあります。その場合は、次でインストーラを開き直します。
ターミナル
open "$(brew --prefix)"/Caskroom/tailscale-app/*/Tailscale-*.pkg
画面で押すところ
  • 「"Tailscale"がVPN構成の追加を求めています」と出たら、目立つ青い「許可しない」ではなく、左のグレーの「許可」を押します。VPNアプリなら必ず出る定型文なので、心配はいりません。
  • 「System Extension Approval Required」と出たら「Open Settings」を押し、システム設定 › 一般 › ログイン項目と機能拡張 › ネットワーク機能拡張(ⓘ のボタン)で Tailscale をオンにします。
  • 2つとも Granted(許可済み)になったら Next を押します。
  • 「Start at login」はオンがおすすめです(再起動後も Muse から見えるようになります)。通知はお好みで。表示は「Menu bar only」でも大丈夫です。
  • 最後に Log in を押し、Muse と同じアカウントでログインします。
うまくいったサイン

メニューバーの Tailscale に「Connected」と出ます。

2

Muse を同じネットワークに入れる

やること

Muse に「Tailscale の承認リンクを出して」と頼みます。出てきたリンクを開く前に、アドレスが login.tailscale.com であることを必ず確かめてください。違うアドレスなら開かないでください。

画面で押すところ

リンクを開き、Mac と同じアカウントでログインして、承認のボタンを押します。

うまくいったサイン

Tailscale の管理画面の Devices に、Mac と muse の2台が並びます。

3

Mac の入口(SSH)を開ける

やること

Mac の「リモートログイン」をオンにします。すでにオンなら何もしなくて大丈夫です。

画面で押すところ

システム設定 › 一般 › 共有 › 「リモートログイン」のスイッチをオンにします。

うまくいったサイン

スイッチがオンになり、「リモートログイン: オン」と表示されます。

4

Muse の合鍵(公開鍵)を登録する

やること

Muse に「SSH の公開鍵(ssh-ed25519 で始まる1行)をちょうだい」と頼みます。Muse がコマンドを返してきても、実行する前に中身を確認してください。「公開鍵を1行足すだけ」で、その行に from の制限が付いているかを見てください。制限のない行は追加しません。

おすすめは、Muse の IP アドレスからだけ使えるように制限をつける方法です。合鍵が万一漏れても、ほかの場所からは使えません。Tailscale の Devices 画面で muse を選び、IPv4(100.x.x.x)と IPv6(fd7a:…)の両方を確認してください。接続にどちらが使われても通れるように、両方を書きます。

登録の前に、同じ鍵がすでに入っていないかを確認します。from は「行ごと」に効くため、同じ鍵の制限なしの行が残っていると、制限の意味がなくなってしまうからです。

ターミナル(Mac)
cat ~/.ssh/authorized_keys 2>/dev/null

Muse の鍵(同じ ssh-ed25519 AAAA… の行)が from なしで残っていたら、open -e ~/.ssh/authorized_keys で開いて、その行だけを消して保存します。ほかの鍵の行は消さないでください。そのうえで、次のコマンドで登録します。

ターミナル(Mac)
mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo 'from="<MuseのIPv4>,<MuseのIPv6>" <Museの公開鍵>' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys

<Museの公開鍵> は、Muse からもらった1行をそのまま貼ります。

画面で押すところ

ターミナル.app を開き、上のコマンドを貼って Return を押します。

うまくいったサイン

エラーが出ずに、次の行のプロンプトに戻ります。Muse に「入れた」と伝えると、入れるか試してくれます。

5

Claude Code の通行証(長期トークン)を作って Mac にしまう

やること

通常のターミナル.app で、次を実行します。

ターミナル
claude setup-token

ブラウザが開くので許可します(「閉じていいです」と出たら閉じて大丈夫です)。ターミナルに sk-ant-oat01- で始まる長い文字列が出ます。これが通行証です。

この文字列は、チャットにも Muse にも他の人にも貼らないでください。パスワードと同じ扱いです。

この先は順番が大事です。コマンドのコピーボタンを押すと、クリップボードがコマンドに置き換わるためです。次の順で進めます(macOS 標準の zsh を前提にしています)。

  1. 下の保存コマンドをコピーして、ターミナルに貼り付けて実行します。
  2. 「トークンをコピーしたら Enter を押してください」と表示されて待ちの状態になります。
  3. ターミナルに表示されている sk-ant-oat01- で始まる文字列の全体を選んで、cmd+C でコピーします。
  4. Enter を押します。

このコマンドは、一時ファイルに自分だけが読める権限で書き込み、形式が正しいときだけ本番のファイルに置き換えます。最後にクリップボードを空にします。形式が違ったり書き込みに失敗したりした場合は保存せず、一時ファイルも消して、すでにあるトークンはそのまま残します。中身は画面に表示されません。

ターミナル
mkdir -p ~/.config/claude && chmod 700 ~/.config/claude && read "?トークンをコピーしたら Enter を押してください: " && tmp=$(umask 077; mktemp ~/.config/claude/ssh-token.XXXXXX) && if pbpaste | tr -d '[:space:]' > "$tmp" && grep -Eq '^sk-ant-oat01-[A-Za-z0-9_-]+$' "$tmp" && mv "$tmp" ~/.config/claude/ssh-token; then chmod 600 ~/.config/claude/ssh-token; pbcopy < /dev/null; echo "保存OK"; else rm -f "$tmp"; echo "保存できませんでした(形式が違うか、書き込みに失敗)。前のトークンはそのままです。コピーし直して、もう一度実行してください"; fi

終わったら、ターミナルで cmd+K を押して、画面に残ったトークンを消します。

注意
Claude Code のチャット欄から「!」を付けて setup-token を実行しないでください。出力の一部が AI との会話に入ってしまいます。必ず、普通のターミナルで実行します。
画面で押すところ

ブラウザの許可画面で「許可」を押します。その後はターミナルでのコピーと Enter だけです。

うまくいったサイン

ターミナルに「保存OK」と出ます。

6

Muse に使い方を伝えて、動作確認

やること

まず、Mac の普通のターミナルで次を実行し、出てきた3つの絶対パス(/ から始まる場所)を控えます。あわせて、ユーザー名も確かめます。

ターミナル(Mac)
which claude codex node
whoami
  • claude の場所:例 ~/.local/bin/claude のような絶対パス
  • codex の場所:例 /opt/homebrew/bin/codex
  • node の場所:例 /opt/homebrew/bin/node(この「フォルダ」の部分を使います)

Homebrew で入れた場合、node のフォルダは多くが /opt/homebrew/bin です(Intel Mac は /usr/local/bin)。codex が Homebrew 版でなく npm などで入っている場合は、Node が必要なので、次の文面の PATH の指定が効きます。

Mac の Tailscale 名は、Tailscale の Devices 画面で確認できます。そのうえで、Muse に次の文面を送ります(< > の部分は自分の値に置き換えてください)。

Muse に送る文面
私のMacにSSHで入って、ClaudeとCodexを使えるようにしてください。
・ユーザー名:<whoami の結果>
・Mac の Tailscale 名:<Devices 画面で見える名前>
・claude の場所:<claudeの場所>
・codex の場所:<codexの場所>
・node のあるフォルダ:<nodeのあるフォルダ>
・claude は毎回 CLAUDE_CODE_OAUTH_TOKEN="$(cat ~/.config/claude/ssh-token)" を付けて、絶対パスで実行してください。トークンの中身は表示も保存もしないでください。
・codex は npm などで入れた場合、Node が必要です。SSH の非対話セッションでは node が見えないので、PATH="<nodeのあるフォルダ>:$PATH" を付けて、絶対パスで実行してください。
・トークンの展開が Mac 側で起きるよう、コマンド全体をシングルクォートで囲んでください。例:
  ssh <ユーザー名>@<MacのTailscale名> 'CLAUDE_CODE_OAUTH_TOKEN="$(cat ~/.config/claude/ssh-token)" <claudeの場所> -p "こんにちは、と1行で返して"'
・まず動作テストとして、次の2つを実行してください。
  CLAUDE_CODE_OAUTH_TOKEN="$(cat ~/.config/claude/ssh-token)" <claudeの場所> -p "こんにちは、と1行で返して"
  PATH="<nodeのあるフォルダ>:$PATH" <codexの場所> --version
画面で押すところ

Muse のチャットに、上の文面を貼って送信します。

うまくいったサイン

Muse から「こんにちは」の返事と、codex のバージョンが返ってきます。ここまで来れば、準備は完了です。

5. よくあるつまずき

押すと開きます。「症状 → 原因 → 対処」の順に書いています。

brew では「インストール済み」なのに、アプリがない

原因パスワード入力のところで中断して、本体が入っていません。

対処ステップ1のとおり、open "$(brew --prefix)"/Caskroom/tailscale-app/*/Tailscale-*.pkg でインストーラを開き直します。

Muse から Mac が見えない

原因次のどれかです。Muse がまだ承認されていない/Mac がスリープしている/Mac の Tailscale が切れている。

対処Devices 画面に2台あるかを確認し、Mac を起こして、Tailscale が「Connected」になっているかを見ます。

Permission denied と言われる

原因合鍵が登録されていない、登録の書式が崩れている、または from の制限(IP の指定)で弾かれています。

対処Mac のターミナルで次の2つを実行して確認します。

ターミナル(Mac)
cat ~/.ssh/authorized_keys
ls -ld ~/.ssh ~/.ssh/authorized_keys
  • from の書式が合っているか、鍵が1行で途切れていないか、同じ鍵の重複行がないかを見ます。
  • 権限が ~/.ssh は 700(drwx------)、authorized_keys は 600(-rw-------)になっているかを見ます。
  • Muse に、実際の接続元の IP を聞いて、from に書いた IPv4・IPv6 と合っているかを確かめます。
  • つながらなくても、from を外したり、制限のない行を足したりはしないでください。同じ鍵の制限なしの行が見つかったら、その行は消します。
codex で「env: node: No such file or directory」と出る

原因SSH の非対話セッションでは、node(Codex の動く土台)の場所が見えていません。

対処ステップ6で控えた node のあるフォルダを使い、実行時に PATH="<nodeのあるフォルダ>:$PATH" を付けます。

claude で「Not logged in · Please run /login」と出る

原因SSH 越しだと、Mac のキーチェーン(金庫)が読めないことがあります(環境によっては「Not logged in」になります。裏では「User interaction is not allowed」という文言が出ていることがあります)。

対処ステップ5の通行証を作り、実行時に CLAUDE_CODE_OAUTH_TOKEN を付けます。

6. 安全のための約束

南京錠は見せてもよい、鍵は見せない

公開鍵は南京錠、秘密鍵は本物の鍵です。公開鍵は見せても大丈夫です。秘密鍵・APIキー(sk-… で始まるもの)・トークン・パスワードは、チャットに貼らないでください。

通行証はファイルにしまう

トークンはファイルに保存し、Muse には「ファイルから読んで」と伝えます。チャットには流しません。

合鍵は Muse からだけ

公開鍵の登録時に from の制限をつけて、Muse の IPv4・IPv6 からだけ使えるようにします。

入れる=そのユーザーの中身は全部見える

SSH で入れるということは、そのユーザーで見られるファイルが全部見えるということです。範囲を狭める手段は、次のように分かれます。

  • Tailscale の ACL は、「どの機械がどこに繋がれるか」を制限するものです。
  • Mac の中で見えるファイルの範囲は、OS のユーザーと権限でしか制限できません。気になる場合は、専用のユーザーを作って、そのユーザーで入ってもらいます。
  • 「read-only で頼む」は、あくまでお願いです。強制力はありません。

Mac がスリープすると届かない

電源につないで、ふたを開けた状態にしておくと確実です。

7. できないこと/代わりの方法

できないこと

  • Muse が動かした Claude は、デスクトップアプリの左側の履歴には出ません。表の受付(デスクトップアプリ)と、裏口のターミナル用の Claude は、別々に動いているためです。
  • 画面のクリック操作はできません。できるのは SSH(文字での指示)までです。

代わりの方法

  • 結果をファイルやメモに残してもらうようにお願いします。
  • 続きをしたいときは claude --resume で、前回の会話を再開できます。
  • 本人が外出先から自分の Mac を触りたいだけなら、Claude Code の Remote Control が使えます。Tailscale も鍵も不要です。ただし、本人専用で、Muse のような別のエージェントには使えません。

8. 期限とやめ方

通行証(長期トークン)は、約1年で期限が切れます。切れたら、ステップ5と同じ手順で作り直してください。

つなぐのをやめたいときは、次の3つを行います。

Claude を止める:通行証のファイルを消します。

ターミナル
rm ~/.config/claude/ssh-token

入れなくする:~/.ssh/authorized_keys を開き、Muse の公開鍵の行を消します。

廊下から外す:Tailscale の管理画面で、muse を削除します。

ページの先頭の全体像に戻る