メインコンテンツへスキップ
kt-tech.blog

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

設定・環境構築19分で読めます

この記事でわかること

  • 今日の 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点です(意訳)。

  1. スマホから直接セッションを開始できる — Remote Control が動いているマシンが Code タブ上部に「デバイスカード」として並び、タップしてディレクトリを選ぶとそのマシンで始まる
  2. スマホと手元の同期が正確になった — ラップトップ側でセッションを再開してもスマホ側が勝手にアーカイブされない。逆に Claude Code が終了したら数秒でオフライン表示になる
  3. 切断しても自動で戻る — ラップトップを閉じたり Wi-Fi を切り替えたりしても再接続される
  4. モデルと effort level がスマホと CLI で同期する — iOS で重いセッションを開くのも速くなった
  5. スマホからのスラッシュコマンドが改善/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.ai/code) Anthropic API(中継するだけ) 接続は手元から張る 手元のマシン(claude プロセス) ファイルシステム・MCP・プロジェクト設定 コマンドが実際に走るのはここ 外向き HTTPS だけ。マシンでポートは開かない Claude Code on the web スマホ / ブラウザ(claude.ai/code) Anthropic のクラウド環境 コンテナを立ててリポジトリを clone コマンドが実際に走るのはここ 手元のマシン 起動していなくてよい ローカルの MCP や未コミットの変更には届かない
同じ claude.ai/code の画面でも、実行される場所が違う。Remote Control は手元の claude プロセスがそのまま動き続け、スマホやブラウザはその窓になる。接続は手元から外向きに張るので、マシン側でポートを開ける必要はない。

Remote Control のほうは、手元の claude プロセスがそのまま動き続けます。スマホやブラウザは、そのプロセスに繋がった窓でしかない。だからローカルの MCP サーバーも、未コミットの変更も、.claude/ の設定もそのまま効きます。

接続の向きも地味に大事で、手元のマシンからの外向き HTTPS だけで成立しています。マシン側でポートを開ける必要はないし、ルーターに穴を開ける必要もない。マシンが Anthropic の API に登録して、そこから仕事を取りに行く形なんですよね。

ただし、繋がっている間はトランスクリプト(会話・ツール実行の記録)が Anthropic のサーバーに保存されます。 端末をまたいで会話を同期したり、切断から復帰したりするために必要な仕組みなので、ここは避けられません。実行とファイルアクセスは手元のままですが、「会話の中身は手元だけに留まる」わけではない、というのは押さえておいたほうがいいと思っていて。組織で Zero Data Retention を要求しているなら、そもそも Remote Control は有効化できません。

入り口は3つある

用途で使い分けます。

Bash
# 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): 2

2 を選ぶと繋がります。

·✔︎· 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 mode

Capacity: 1/32 の「32」がこの機能の性格をよく表していて。1つの claude remote-control プロセスが、既定で最大32セッションを抱えられます。 スペースキーを押すとその場で QR コードが出るので、スマホからはそれを読めば繋がります(ターミナルにアスキーアートで描画されます)。w を押せば同じプロセスのまま spawn モードを切り替えられる。

claude.ai/code・Claude アプリから増やす セッション A セッション B セッション C claude remote-control --spawn=worktree 手元のマシンで動く1プロセス/既定で最大32セッションまで worktrees/bridge-A 専用ブランチで作業 worktrees/bridge-B 専用ブランチで作業 worktrees/bridge-C 専用ブランチで作業 起動時に作られる1つ目のセッションだけは、worktree ではなくカレントディレクトリに残る --spawn=same-dir なら全セッションが同じディレクトリを共有する(衝突しうる)
サーバーモードは1つのプロセスが複数セッションを抱える。--spawn=worktree なら、スマホから増やしたセッションはそれぞれ別の git worktree に降りるので、同じリポジトリを並行で触っても衝突しない。

スマホ / ブラウザから投げると、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

ファイルを確認すると、意図どおり隔離されていました。

Python
# worktree 側の calc.py
def add(a, b):
    return a + b


def subtract(a, b):
    return a - b
Python
# 元のディレクトリの 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 で何をしようとしているのかが承認前に分かります。 ここが同じディレクトリを共有していると、承認しても何が起きるか読めないんですよね。

claude.ai/code に転送されてきた権限プロンプト。編集対象のパスが .claude/worktrees/bridge-… 配下になっている
claude.ai/code に転送されてきた権限プロンプト。編集対象のパスが .claude/worktrees/bridge-… 配下になっている

途中でデバイス確認に止められた

実演の最中に、ブラウザ側でこれが出ました。

メモ
デバイスを確認するために再度サインインしてください

これは 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_URLapi.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 先で動かすなら tmuxscreen の中で起動しておかないと、切断した瞬間に終わります。サーバーモードは 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本できている、みたいな。

参考リンク