1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code の Agent Teams を、別のマシン・別アカウントのマシンで使う(tmux / Remote Control / codex)

1
Last updated at Posted at 2026-10-12

手元の Mac(以下「母艦」)から、常時起動の別の Mac(以下「リモート Mac」)に Claude Code の並行実装を任せたい。そのとき、マシンと Claude アカウントの組み合わせごとに、どうつなげばよいかをまとめました。

母艦とリモート Mac の全体図

これはなに?

Claude Code の Agent Teams は、1 つのセッションがリーダーになり、仲間(teammate)の Claude を何体も立てて仕事を分ける機能です。仲間どうしの連絡はとてもなめらかで、人が間に入らなくても話が回ります。

Agent Teams の通信の特徴

  • 報告が勝手に届く:リーダーが見回らなくても、仲間のメッセージは自動で配達される
  • 終わったら知らせてくれる:仲間が止まると、最後の答えを付けてリーダーに通知される
  • 共有のタスク表:仲間が自分で次の仕事を取っていく
  • 直接話しかけられる:人もリーダーも、名前で仲間に指示できる

ただし、この仲間は 同じマシンの中・同じ Claude アカウントの中 にしか呼べません。連絡帳(メールボックス)が、そのマシンの ~/.claude/teams/ にあるファイルだからです。

この記事では、その壁を越えて「常時起動の別の Mac」や「別の Claude アカウント」、さらに「codex」にまで仕事を渡す方法を、4 つのケースに分けて説明します。

結論を先に言うと、別アカウントのマシンにも、tmux でリーダーを立てれば、そのマシンの中で Agent Teams を回せる のがいちばんのポイントです。チームはそのアカウントの中で完結し、母艦とは打ち込みと郵便受けでつながります(アカウントをまたいで 1 つのチームになるわけではありません)。

前提:Agent Teams が「見える形」で動く条件

仲間を 分割ペインに並べて 見るには、公式には 2 つの道があります。iTerm2 なら tmux なしでそのまま並び、それ以外のターミナルでは tmux の中で claude を起動します。

分割ペインで動かす 2 つの道(iTerm2 と tmux)

条件 内容
機能をオンにする ~/.claude/settings.json の env に "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"(実験的機能)。claude -p などの非対話では仲間を作れない
in-process(既定) どのターミナルでも動く。仲間は 1 つの画面の中で ↑↓ で選んで Enter で切り替える。連絡のなめらかさは分割ペインと同じ
① iTerm2 tmux なしで分割ペイン になる。it2 CLI を入れ、iTerm2 の設定で Python API をオンにする(Settings → General → Magic → Enable Python API)。"teammateMode": "iterm2" で指定する(v2.1.186 以降)。"auto" でも it2 CLI が入っていれば iTerm2 を使うが、入っていないと黙って in-process に落ちる(v2.1.77 より前は auto が iTerm2 を判定しなかった)
② tmux tmux の中で claude を起動すると分割ペインになる。ターミナルを選ばない。公式は iTerm2 で使うなら tmux -CC から入るのを推奨
分割ペイン非対応 VS Code の統合ターミナル、Windows Terminal、Ghostty
例:cmux cmux は Ghostty のエンジンで作られたターミナルアプリなので、単体では分割ペインにならない(in-process なら動く)。cmux のペインで tmux を起動し、その中で claude を動かす
リモートのマシン ssh の先には iTerm2 の画面がないので、リモートでは tmux 一択。この記事の CASE 2〜4 が tmux を使うのはこのため
マシンとアカウント チームは 1 つのセッションの中。仲間はリーダーと同じマシン・同じログイン(アカウント)で動く。別の Claude アカウントどうしを 1 つのチームにはできない

cmux の CLI(cmux new-workspace など)は、cmux から起動したプロセスしか受け付けない設定にしていると、tmux の中から呼ぶと Broken pipe で失敗します。tmux の中にいるときは、ペインの操作も tmux で行います。

この記事での呼び名

この記事では、つなぐための部品をたとえで呼びます。

呼び名 実体 出てくるところ
仲間 Agent Teams の teammate。リーダーが立てる別の Claude セッション CASE 1・3
のぞき窓 ssh -t remote "tmux attach -t '=名前'" でリモートの tmux 画面を見ること。抜けるときは detach(Ctrl+b → d) 全ケース
打ち込み リモートの tmux に文字を貼り付けて Enter を送ること(tmux load-buffer → paste-buffer → send-keys Enter。rmac send) CASE 3・4
手紙 Claude どうしの SendMessage(cross-session messaging)。別マシン間は Remote Control を経由し、同じアカウントのときだけ届く CASE 2
Remote Control claude --remote-control / /remote-control。セッションを claude.ai につなぎ、スマホや別マシンから届くようにする CASE 2
郵便受け リモートのファイル ~/.rmac/inbox/<名前>.md。相手が報告を書き、最後の行を STATUS: DONE / BLOCKED / QUESTION にする CASE 3・4
見張り 母艦で郵便受けを定期的に見るループ(rmac wait を Claude Code の Monitor やバックグラウンドで回す)。画面のエラーやペインの消失も見ておくとよい CASE 3・4

言いたいことは 4 つ

  1. Agent Teams をそのまま使えるのは、同じマシンの中だけ。 仲間との連絡帳がそのマシンのファイルだから。
  2. 同じアカウントなら、別のマシンともつながる。 ただし Agent Teams ではなく、Remote Control 経由の手紙(SendMessage)で。
  3. 別アカウントのマシンにも、tmux でリーダーを立てれば、そのマシンの中で Agent Teams を回せる。 チームはリモートのアカウントの中で完結し、母艦とは打ち込み・郵便受けでつながるだけ。アカウントをまたいで 1 つのチームになるわけではない。← ここが重要
  4. codex も相手にできる。 tmux に打ち込んで頼み、報告はファイル(郵便受け)でもらう。
ケース リーダー 子 頼み方 → 報告 Agent Teams
1. 同じマシン・同じアカウント 母艦 母艦 仲間どうしで会話 そのまま使う
2. 違うマシン・同じアカウント 母艦 リモート 手紙 → 手紙 使わない(手紙で代わり)
3. 違うマシン・違うアカウント リモート リモート 打ち込み 1 回 →(任意で郵便受け) リモートの中で使う
4. 違うマシン・codex 母艦 リモートの codex 打ち込み → 郵便受け 使えない

つなぐための 4 つの部品

4 つのつなぎ方

部品 できること 届く範囲
ssh + tmux(のぞき窓とキーボード) リモートの画面を見る・文字を打ち込む・画面を読む ssh が通ればどこでも。アカウント・AI の種類を問わない
Agent Teams(同じ机の仲間) リーダーが仲間を呼び、話しながら分担する 同じマシンの中だけ
cross-session messaging(手紙) Claude が別の Claude に SendMessage を送り、返事が届く 別マシンなら、両方が Remote Control に接続していて同じ claude.ai アカウント
郵便受け + 見張り 相手が報告をファイルに書き、母艦の見張りが拾う ssh が通ればどこでも

CASE 1:同じマシン・同じアカウント → Agent Teams をそのまま

CASE 1 同じマシンの Agent Teams

母艦の claude を tmux の中 で起動しておけば、Agent Teams の仲間が分割ペインに並びます。仲間からの報告は自動で届き、困った仲間には直接話しかけられます。

~/.claude/settings.json
{
  "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" },
  "teammateMode": "auto"
}
# tmux の中で起動して、自然な言葉で頼む
tmux new -s work
claude --permission-mode auto
> issue #1 #2 #3 を、それぞれの worktree で並行実装する teammate を 3 体作って
  • teammate は Claude だけ。teammate が teammate を作ること(入れ子)はできない
  • 頼んだのに分割ペインが増えないときは、中身の見えない subagent で代用されていることがある。tmux list-panes で確かめる

CASE 2:違うマシン・同じアカウント → 手紙でつなぐ

CASE 2 手紙でつなぐ

Agent Teams ではありません。 仲間は同じマシンの中にしか呼べないので、母艦のリーダーとリモートの子は 手紙(SendMessage) でやりとりします。手紙は Remote Control を通るので、両方が同じ claude.ai アカウント で、両方が Remote Control に接続 している必要があります。

# 1. 母艦のセッションで(人が打つ。Claude からは実行できない)
/remote-control

# 2. リモートに子を Remote Control 付きで起動(表示名 = 手紙の宛先の名前)
rmac start child-a '~/project/wt-a' child-a
rmac start child-b '~/project/wt-b' child-b
  1. 母艦の Claude に ListAgents で子が見えることを確かめさせ、最初の指示を SendMessage で送らせる(打ち込みで頼むと、子は返事の宛先を知らない)
  2. 指示の最後に「報告は、受け取ったメッセージの from にそのまま SendMessage で」と書く。別マシンからは母艦の名前が違って見えるので、名前で探させない
  3. 子が PR を作る・止まる・質問すると、母艦の会話に手紙が届く

全セッションを最初から接続させたいなら ~/.claude/settings.json に "remoteControlAtStartup": true。接続済みかは環境変数 CLAUDE_CODE_BRIDGE_SESSION_ID の有無でわかります。

CASE 3:違うマシン・違うアカウント → tmux でリーダーを立て、そのマシンの中で Agent Teams

いちばん大事なケースです。

このケースは、筆者はまだ通しで試していません(同じアカウントで手紙を使う CASE 2 は実機で確認済み)。

CASE 3 別アカウントのリモートで Agent Teams

CASE 3 の流れ

手紙はアカウントをまたげません。でも tmux(ssh)はアカウントに関係ありません。リモートの tmux にリーダーを立てて 1 回だけ打ち込んで頼めば、リーダーと子はリモートの中で「同じマシン・同じアカウント」になり、そのマシンの中で Agent Teams が使えます。

母艦のアカウントのセッションがそのチームに加わるわけではありません。母艦とチームをつなぐのは、最初の打ち込みと、必要なら郵便受けだけです。

# リモートでも Agent Teams を有効にしておく(CASE 1 と同じ settings.json)

# リーダーを起動(Remote Control は不要。付ければスマホから見られる)
rmac start lead '~/project'

# 1 回だけ頼む
rmac send lead <<'EOF'
issue #1 #2 #3 を並行実装してください。あなたはこのマシンのリーダーです。
このマシンの Agent Teams で teammate を作り、PR のマージまで進めてください。
さらに別のマシンへは任せないでください。
EOF

# 見たいときだけ覗く(抜けるときは Ctrl+b → d)
ssh -t remote "tmux attach -t '=lead'"
  • 使用量は リモートのアカウント にかかる。母艦の枠を使い切りたくないときにも使える
  • 頼んだら母艦は閉じてよい。報告がほしければ、最後に郵便受け(CASE 4)へ書いてもらう
  • PR の作成・マージは各マシンの gh の認証で行う。Claude のアカウントとは関係ない

CASE 4:違うマシン・codex → 打ち込み+郵便受け

CASE 4 codex の子

CASE 4 郵便受けの流れ

codex は Claude ではないので、手紙も Agent Teams も使えません。tmux に打ち込んで頼み、報告は ファイル(郵便受け) に書いてもらい、母艦の 見張り が拾います。画面の文字は流れて消えますが、ファイルなら「来たか」だけ見ればよいので確実です。

# codex を tmux で起動(対話モード)
ssh remote "tmux new-session -d -s cx-a -c ~/project/wt-a 'zsh -ic \"codex; exec zsh -i\"'"

# 頼む(最後に郵便受けの書き方を付ける)
rmac send cx-a <<'EOF'
issue #1 を実装して PR を作ってください。
終わったとき・止まったときは ~/.rmac/inbox/cx-a.md に報告を書き、
最後の行を STATUS: DONE / BLOCKED / QUESTION のどれかにしてください。
EOF

# 母艦で見張る(Claude Code の Monitor やバックグラウンド実行で回す)
rmac wait cx-a 60

# 画面のいらない仕事なら codex exec。最後の返事がそのまま郵便受けに入る
ssh remote "cd ~/project/wt-a && codex exec -o ~/.rmac/inbox/cx-a.md 'issue #1 を実装して'"

同じやり方は、CASE 2 で手紙を使えないとき(Remote Control を使いたくないときなど)にもそのまま使えます。

道具:rmac(約 70 行)

上で使った rmac は、ssh と tmux の部品を 1 本にまとめた最小のヘルパーです。起動スクリプトをリモートにファイルで置くので、引用符の三重入れ子が起きません。RMAC_HOST で接続先を変えられます(既定は remote)。

やること コマンド 中身
起こす rmac start <名前> <dir> [表示名] リモートの tmux に claude を起動。表示名を付けると Remote Control 付き
打ち込む rmac send <名前> [file] base64 で運び、tmux のバッファから貼り付けて Enter(日本語・引用符が崩れない)
読む rmac screen <名前> tmux capture-pane の末尾
見張る rmac wait <名前> 郵便受けの最終行が STATUS: になるまで待つ
片付ける rmac stop <名前> tmux kill-session
覗く ssh -t remote "tmux attach -t '=名前'" 抜けるときは Ctrl+b → d(Ctrl+C は claude が終了する)
rmac
#!/usr/bin/env bash
# rmac — リモート Mac の tmux で Claude を動かす最小ヘルパー
#   rmac start  <session> <dir> [表示名]   表示名を付けると Remote Control 付きで起動
#   rmac send   <session> [file]           指示を貼り付けて Enter(file 省略時は標準入力)
#   rmac screen <session> [行数]           画面の末尾を読む
#   rmac wait   <name> [間隔秒]            郵便受け ~/.rmac/inbox/<name>.md の最終行が STATUS: になるまで待つ
#   rmac stop   <session>
set -euo pipefail
HOST="${RMAC_HOST:-remote}"

# リモートで bash スクリプトを実行する。引数は VAR=値 で渡し、-- の後ろは標準入力のスクリプト
remote() {
  local pre="export PATH=/opt/homebrew/bin:/usr/local/bin:\$PATH; mkdir -p ~/.rmac/inbox ~/.rmac/run;"
  while [ "$1" != "--" ]; do pre+=" ${1%%=*}=$(printf %q "${1#*=}");"; shift; done; shift
  { echo "$pre"; cat; } | ssh -o BatchMode=yes "$HOST" bash -s
}

cmd="${1:-}"; [ $# -gt 0 ] && shift
case "$cmd" in
  start)
    remote S="$1" D="$2" L="${3:-}" -- <<'EOF'
case "$D" in "~"|"~/"*) D="$HOME${D#\~}";; esac
f=~/.rmac/run/$S.sh
{
  echo '#!/bin/zsh'
  printf 'cd %q || exit 1\n' "$D"
  if [ -n "$L" ]; then
    echo 'unset CLAUDE_CODE_OAUTH_TOKEN'   # Remote Control は長期トークンでは起動しない
    printf 'claude --permission-mode auto --remote-control %q\n' "$L"
  else
    echo 'claude --permission-mode auto'
  fi
  echo 'exec zsh -i'                       # claude が終わってもペインを残す
} > "$f"
chmod +x "$f"
tmux new-session -d -s "$S" -x 200 -y 50 "zsh -ic $f"
echo "started: $S"
EOF
    ;;
  send)
    B=$(base64 < "${2:-/dev/stdin}")
    remote S="$1" B="$B" -- <<'EOF'
printf %s "$B" | base64 -D | tmux load-buffer -b rmac -
tmux paste-buffer -p -d -b rmac -t "=$S:"
sleep 1; tmux send-keys -t "=$S:" Enter
EOF
    ;;
  screen)
    remote S="$1" N="${2:-40}" -- <<'EOF'
tmux capture-pane -p -t "=$S:" | sed -e :a -e '/^[[:space:]]*$/{$d;N;ba' -e '}' | tail -n "$N"
EOF
    ;;
  wait)
    while :; do
      out=$(remote N="$1" -- <<'EOF'
f=~/.rmac/inbox/$N.md
[ -f "$f" ] && tail -n 1 "$f" | grep -q '^STATUS:' && cat "$f"
true
EOF
)
      [ -n "$out" ] && { printf '%s\n' "$out"; exit 0; }
      sleep "${2:-60}"
    done
    ;;
  stop)
    remote S="$1" -- <<'EOF'
tmux kill-session -t "=$S"
EOF
    ;;
  *) sed -n '2,8p' "$0"; exit 2 ;;
esac

ハマりどころ

症状 原因と対処
Remote Control が起動しない claude setup-token の長期トークン(CLAUDE_CODE_OAUTH_TOKEN)では起動できない。リモートで claude auth login し、起動時に unset する(rmac は自動)
子が返事の宛先を見つけられない 名前で探させている。指示を SendMessage で送り、from へ返信させる
zsh: work not found リモートの zsh が =work をパス展開する。'=work' と引用符で囲む
can't find pane: =work ペインを指す引数では末尾に : が要る。'=work:'
ループ内の ssh が入力を食う 入力の要らない ssh には -n を付ける
timeout: command not found macOS には無い。待ち時間は呼び出し側で管理する

Remote Control の長時間(8 時間以上)連続稼働は未検証です。手紙での会話は Anthropic のサーバーを経由します(スマホから使うときと同じ)。

付録:iTerm2・cmux・tmux とは

  • iTerm2:macOS の定番ターミナルアプリ。Python API と it2 CLI で外からペインを操作できるので、Agent Teams は tmux なしで仲間を分割ペインに並べられる("teammateMode": "iterm2")。
  • cmux:AI コーディングエージェントを並べて使うための macOS ターミナルアプリ。Ghostty のエンジンで動き、縦タブ・ワークスペース・通知などを持つ。Agent Teams の分割ペインには対応していないので、中で tmux を起動して使う。
  • tmux:ターミナルの中を複数のペインやウィンドウに分けるソフト(ターミナル多重化)。セッションは tmux のサーバー側で動き続けるので、画面を閉じても・ssh が切れても止まらない。ssh の先でも使えるので、リモートで Claude を動かす土台になる。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?