【設定・環境構築】Claude Code の Remote Control を一通り試す — 「一番直してほしい機能」が今日どこまで直ったか

この記事でわかること
- 今日の Remote Control アップデートで実際に何が直ったのか(公式告知と CHANGELOG の対応)
- claude remote-control のサーバーモードで、手元のマシンが最大32セッションを配るサーバーになること
- --spawn=worktree を選ぶと、スマホから増やしたセッションが自動で別 worktree に隔離されること
- Remote Control と Claude Code on the web の、実行される場所の違い
- 実際に踏んだ落とし穴(workspace trust、デバイス確認、機能を止める環境変数)
Claude Code v2.1.239 / Pro・Max・Team・Enterprise いずれかのプラン / 動作確認は macOS
今日(2026年8月22日)の朝、Claude Code の公式アカウント(@ClaudeDevs)が Remote Control のアップデートを流していて。書き出しが「先月、Remote Control が一番直してほしい機能だと言われたので、信頼性に取り組んできた」という趣旨の一文で、要するに「壊れがちだったのは自覚してます」という告白から始まる告知なんですよね。
自分は2月に出たときに一度触って、「スマホからセッションを覗ける機能」くらいの理解で止めていました。ちょうどいい機会なので、公式が挙げた改善点を CHANGELOG と突き合わせつつ、手元で一通り動かしてみます。
結論から言うと、覗く機能ではなくなっていました。 手元のマシンが「セッションを配るサーバー」になる方向に寄っていて、そこは正直あまり知られていない気がしていて。
この記事でやること
- 今日の告知5点を、CHANGELOG の実際の記述と突き合わせる
claude remote-controlのサーバーモードを実際に起動して、挙動を確かめる--spawn=worktreeでセッションが隔離されることを、ファイルとブランチで検証する- 使えなくなる条件を洗い出す
今日の告知は何を直したと言っているのか
公式スレッドで挙がっていたのは、ざっくり5点です(意訳)。
- スマホから直接セッションを開始できる — Remote Control が動いているマシンが Code タブ上部に「デバイスカード」として並び、タップしてディレクトリを選ぶとそのマシンで始まる
- スマホと手元の同期が正確になった — ラップトップ側でセッションを再開してもスマホ側が勝手にアーカイブされない。逆に Claude Code が終了したら数秒でオフライン表示になる
- 切断しても自動で戻る — ラップトップを閉じたり Wi-Fi を切り替えたりしても再接続される
- モデルと effort level がスマホと CLI で同期する — iOS で重いセッションを開くのも速くなった
- スマホからのスラッシュコマンドが改善 —
/clearはスマホ側の表示をリセット、/compactは圧縮マーカーを表示、/diffはネイティブの差分シートを開く
告知の一行はどうしても丸まるので、~/.claude/cache/changelog.md の実際の記述と並べてみます。ここを見ると「何が壊れていたのか」がわりと具体的に分かるんですよね。
| 告知の一行 | CHANGELOG 側の記述(要約) | バージョン |
|---|---|---|
| 切断しても自動で戻る | ネットワークの瞬断のあと約30分は再接続を試み続ける/1時間に数回の瞬断で落ちなくなった | 2.1.232 |
| 切断しても自動で戻る | ネットワーク edge・VPN・プロキシからの短時間の HTTP 403 を最大3分許容する。ブロックが続く場合は「誰が拒否したか」を名指しする | 2.1.238 |
| 切断しても自動で戻る | 瞬断でサインイン更新が遅れたときに login expired で切れていたのを、リトライして繋ぎ続けるよう修正 |
2.1.238 |
| 同期が正確になった | CLI やターミナルが終了したら数秒以内にセッションをオフライン扱いにする | 2.1.236 |
| 同期が正確になった | Desktop / IDE 起点のセッションが、ローカル側を再開するたび claude.ai に新規セッションとして増えていたのを、既存セッションに再アタッチするよう修正 |
2.1.232 |
| モデル / effort の同期 | スマホや web でのモデル選択がターミナル側に反映されるよう修正 | 2.1.238 |
| モデル / effort の同期 | スマホや web の effort コントロールでの選択が、ターミナル / Desktop 側のセッションに適用される | 2.1.234 |
「自動で再接続」の一行の裏に、瞬断・403・トークン更新という別々の failure mode の修正が3つ入っているのが見えます。ここまで細かく直しに来ているということは、逆に言えばそれだけ落ちていたということでもあって……笑
なお1番目の「デバイスカード」はモバイルアプリ側の変更で、この記事を書いている時点では公式ドキュメントにまだ記載がありません。自分はスマホでの確認をしていないので、ここだけは告知ベースの情報として読んでください。以下は全部、手元(macOS / Claude Code v2.1.239)で実際に動かした結果です。
そもそも何をしている機能なのか
同じ claude.ai/code の画面を使うので Claude Code on the web と混同しやすいんですが、実行される場所が違います。
Remote Control のほうは、手元の claude プロセスがそのまま動き続けます。スマホやブラウザは、そのプロセスに繋がった窓でしかない。だからローカルの MCP サーバーも、未コミットの変更も、.claude/ の設定もそのまま効きます。
接続の向きも地味に大事で、手元のマシンからの外向き HTTPS だけで成立しています。マシン側でポートを開ける必要はないし、ルーターに穴を開ける必要もない。マシンが Anthropic の API に登録して、そこから仕事を取りに行く形なんですよね。
ただし、繋がっている間はトランスクリプト(会話・ツール実行の記録)が Anthropic のサーバーに保存されます。 端末をまたいで会話を同期したり、切断から復帰したりするために必要な仕組みなので、ここは避けられません。実行とファイルアクセスは手元のままですが、「会話の中身は手元だけに留まる」わけではない、というのは押さえておいたほうがいいと思っていて。組織で Zero Data Retention を要求しているなら、そもそも Remote Control は有効化できません。
入り口は3つある
用途で使い分けます。
# 1. サーバーモード: 常駐して、複数セッションを配る
claude remote-control
# 2. 対話セッション + Remote Control: 手元でも打てるし、スマホからも打てる
claude --remote-control # --rc でも可
# 3. 今動いているセッションを、途中からリモートに開放する
/remote-control # /rc でも可3番目が一番使う気がしていて。手元で走らせていた作業が長引いたときに /rc と打てば、会話履歴を引き継いだままスマホから続けられます。ターミナルのフッターに /rc active というインジケータが出て、そこがそのままセッションへのリンクになっています。
VS Code 拡張からも /remote-control で同じことができます(名前の指定と QR 表示だけは CLI 限定)。
サーバーモードを動かしてみる
今回のメインはこれです。適当な git リポジトリを作って起動します。
いきなり怒られました。
$ claude remote-control --name "rc-demo"
Error: Workspace not trusted. Please run `claude` in /…/rc-demo first to
review and accept the workspace trust dialog.これはドキュメントにも書いてある挙動で、サーバーモードは workspace trust のダイアログを出せないので、先に一度 claude を素で起動して信頼を通しておく必要があります。ホームディレクトリでは信頼が保存されないので、必ずプロジェクトディレクトリで起動すること。
通してから再実行すると、今度は spawn モードを聞かれました。
Remote Control is launching in spawn mode, which lets you start new sessions
in this project from claude.ai/code or the Claude mobile app.
Spawn mode for this project:
[1] same-dir — sessions share the current directory (default)
[2] worktree — each session gets an isolated git worktree
This can be changed later or explicitly set with --spawn=same-dir or --spawn=worktree.
Choose [1/2] (default: 1): 22 を選ぶと繋がります。
·✔︎· Connected · rc-demo
Capacity: 1/32 · New sessions will be created in an isolated worktree
rc-demo
Continue coding in the Claude mobile app or https://claude.ai/code?environment=env_xxxxxxxxxxxx
space to show QR code · w to toggle spawn modeCapacity: 1/32 の「32」がこの機能の性格をよく表していて。1つの claude remote-control プロセスが、既定で最大32セッションを抱えられます。 スペースキーを押すとその場で QR コードが出るので、スマホからはそれを読めば繋がります(ターミナルにアスキーアートで描画されます)。w を押せば同じプロセスのまま spawn モードを切り替えられる。
スマホ / ブラウザから投げると、worktree に降りる
ブラウザの claude.ai/code を開くと、サイドバーに rc-demo が出ていました。プロンプトに投げてみます。
calc.py に subtract(a, b) 関数を追加して、pwd と git branch --show-current の結果も教えて投げた直後にターミナル側を見ると、セッションが増えています。
·✔︎· Connected · rc-demo
Capacity: 2/32 · New sessions will be created in an isolated worktree
rc-demo
subtract 関数を calc.py に追加そして手元のリポジトリでは、worktree が勝手に生えていました。
$ git worktree list
/…/rc-demo 6a39eb5 [master]
/…/rc-demo/.claude/worktrees/bridge-cse_xxxxxxxx 6a39eb5 [worktree-bridge-cse_xxxxxxxx] lockedブラウザ側から返ってきた答えがこれです。
pwd: /…/rc-demo/.claude/worktrees/bridge-cse_xxxxxxxx
git branch --show-current: worktree-bridge-cse_xxxxxxxxファイルを確認すると、意図どおり隔離されていました。
# worktree 側の calc.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b# 元のディレクトリの calc.py(触られていない)
def add(a, b):
return a + bつまり、スマホから思いつきでタスクを投げても、手元で開いているブランチは巻き込まれない。 ここが --spawn=worktree の効きどころだと思っていて。移動中にタスクを3つ投げて、帰ってきたら3本のブランチが出来ている、みたいな使い方が想定されているんだろうなと。
逆に既定の same-dir は全セッションが同じディレクトリを共有するので、並行で走らせると普通に衝突します。複数投げる前提なら worktree 一択かなと。
ちなみに、起動時に作られる1つ目のセッションだけは worktree ではなくカレントディレクトリに残ります。--no-create-session-in-dir を付ければそれも作らずに始められます。
権限のプロンプトはブラウザ側に転送されてきます。Claudeにcalc.pyの編集を許可しますか? という確認が、対象のフルパス付きで出る。パスが .claude/worktrees/bridge-…/calc.py になっているので、どの worktree で何をしようとしているのかが承認前に分かります。 ここが同じディレクトリを共有していると、承認しても何が起きるか読めないんですよね。

途中でデバイス確認に止められた
実演の最中に、ブラウザ側でこれが出ました。
これは Trusted Devices の仕組みです。ドキュメント上は Team / Enterprise 向けのベータで、有効になっていると「登録済みのデバイス」かつ「18時間以内のサインイン」の両方を満たさないと、Remote Control セッションを見ることも操作することもできません。日常的には Face ID / Touch ID / Windows Hello / パスキーでの確認が挟まるだけ、という設計です。生体情報そのものは Anthropic に送られず、保存されるのはデバイスの公開鍵とプラットフォーム名などのメタデータだけ、と明記されています。
面白かったのは、ここで「今はしない」を選んでもセッション自体は止まらなかったことで。タスクはそのまま worktree の中で完走しました。あくまで「その端末から見る/操作する」ための確認なんですね。
なお、ターミナル側(Claude Code を動かしているマシン)は CLI にサインインした時点で自動的に資格情報を受け取るので、別途の登録手順はありません。
セッション同士が名前で呼べるようになっていた
もう一つ、Remote Control に相乗りしている機能があって。セッション間メッセージングです。以前別の記事で書いたんですが、そのときから状況が変わっていました。
まず /list-agents を叩くと、今はこう返ってきます。
This session is tax-invoice-automation-project-39 [36cc93] — the name other
sessions use to message it
Peer sessions (48):
rc-demo-40 [388df4] · interactive · tmux rcdemo:@0.%0 · started 31s ago
<別マシンのセッション> [xxxxxx] · Remote Control · offline
<クラウドのセッション> [xxxxxx] · cloud · idle
…1行目の「このセッション自身の名前」は今日(v2.1.239)入ったものです。前は自分の名前が分からず、自分宛てに送ろうとすると「そんなエージェントは無い」と言われていました。ローカルセッションには tmux のペイン位置まで出ていて、同名セッションの区別がつくようになっています。
そして前の記事で「名前だけでは送れない、name [hash] の形が要る」と書いたんですが、これも変わっていました。実際に ref なしのベア名で送ってみると、普通に通ります。
SendMessage → to: "rc-demo-40"
{"success": true, "message": "… → rc-demo-40 (another Claude session on this
machine; it is also connected via Remote Control)"}返信もちゃんと返ってきました。
<cross-session-message from="uds:/tmp/cc-socks/91108.sock" from-name="rc-demo-40">
pwd: /…/scratchpad/rc-demo
セッション名: rc-demo-40 [388df4]
</cross-session-message>同じマシン同士は Unix ドメインソケット直結で、Anthropic のサーバーを経由しません。別マシンやクラウドのセッションに届けるときだけ、Remote Control の接続に相乗りして中継されるという構造になっています。裏を返すと、別マシンのセッションを名前で呼べるのは「相手も自分も Remote Control に繋がっている間だけ」ということでもあって。/list-agents に大量の offline が並ぶのはそのせいです。
Windows のネイティブ環境でこれが使えるようになったのも今日からです(それまでは macOS / Linux / WSL2 のみ)。
効かない条件がわりとある
ここが一番ハマりどころだと思っていて。Remote Control は以下のどれかに当たると単純に使えません。
- API キー認証 —
ANTHROPIC_API_KEY/apiKeyHelper/ANTHROPIC_AUTH_TOKENのいずれかが設定されていると、claude.aiのログインが別にあっても無効になります。/loginでのclaude.ai認証が必須 - Bedrock / Google Cloud の Agent Platform / Microsoft Foundry — 不可
ANTHROPIC_BASE_URLがapi.anthropic.com以外を向いている — LLM ゲートウェイやプロキシ経由だと不可。v2.1.196 より前は通っていたので、アップデートで急に使えなくなった人がいるかもしれません- テレメトリ系の環境変数 —
DISABLE_TELEMETRY/DO_NOT_TRACK/CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC/DISABLE_GROWTHBOOKのどれかが立っていると、機能フラグの評価自体が止まるので Remote Control も止まります。プライバシー目的でこれらを入れている人は要注意 - Zero Data Retention などのコンプライアンス要件がある組織 — 有効化できません
- workspace trust 未承認のディレクトリ — 前述のとおり
あと運用上の制約として、ローカルの claude プロセスが死んだらセッションは止まります。 SSH 先で動かすなら tmux や screen の中で起動しておかないと、切断した瞬間に終わります。サーバーモードは Ctrl+C で止めても約4時間は claude remote-control --continue で戻せますが、それを過ぎたら新規セッションになります。
どれを使うべきか
手元を離れて Claude Code を動かす手段が増えすぎているので、整理しておきます。
| 何がきっかけで動くか | どこで実行されるか | 向いている場面 | |
|---|---|---|---|
| Remote Control | 動いているセッションをスマホ / ブラウザから操作 | 手元のマシン | 作業中のものを別デバイスから続ける |
| Claude Code on the web | web からタスクを投げる | Anthropic のクラウド | ローカル環境が要らない作業、clone してないリポジトリ |
| Dispatch | スマホアプリからタスクを送る | 手元のマシン(Desktop) | 外出先から丸投げする |
| Channels | Telegram / Discord / 自前サーバーからのイベント | 手元のマシン | CI 失敗やチャットへの自動反応 |
| Slack | チャンネルで @Claude |
Anthropic のクラウド | チームでの PR・レビュー |
| スケジュール実行 | 時刻 | CLI / Desktop / クラウド | 定期実行 |
Remote Control の立ち位置は「すでに動いているものを、別のデバイスから引き継ぐ」ところです。ゼロから投げたいだけなら on the web か Dispatch のほうが素直だと思っていて。
まとめ
- 今日のアップデートは、瞬断・403・トークン更新まわりの接続の粘り強さと、スマホ / 手元の状態同期のズレを潰しにきたもの。告知の一行の裏に複数の修正が入っている
claude remote-controlのサーバーモードは、手元のマシンを最大32セッションのサーバーにする。--spawn=worktreeを選べば、スマホから増やしたセッションが自動で別 worktree に隔離される- 実行もファイルアクセスも手元のまま。ただしトランスクリプトは Anthropic のサーバーに保存される
- セッション間メッセージングはベア名で送れるようになり、自分自身の名前も分かるようになった。ただし別マシンに届くのは互いに Remote Control に繋がっている間だけ
- API キー認証・カスタム
ANTHROPIC_BASE_URL・テレメトリ無効化のいずれかに当たると、そもそも使えない
「スマホから覗く機能」だと思って触らずにいたんですが、--spawn=worktree は普通に自分の作業フローに組み込めそうだなと思いました。移動中に思いついたやつを投げておいて、帰ったらブランチが3本できている、みたいな。


