Claude Code Remote Controlの設定—スマホ操作と切れる原因の潰し方

Claude Code Remote Controlの設定—スマホ操作と切れる原因の潰し方 | mohablog

ビルドを回したまま席を立って、続きはスマホで見る。Remote Control はローカルで動いている Claude Code のセッションを、claude.ai/code とモバイルアプリからそのまま操作する機能です。手元の claude --version2.1.222、公式ドキュメント上の位置づけは今も research preview。

目次

起動の入口は3つある

開始方法は claude remote-controlclaude --remote-control、セッション内の /remote-control。同じ機能への入口ですが、常駐するかどうかと同時セッション数が違います。

起動方法形態同時セッションローカルでの入力
claude remote-controlサーバーとして常駐最大32(既定値)不可。接続状況とツール実行の表示のみ
claude --remote-control通常の対話セッション1
/remote-control実行中セッションから昇格1

サーバーモードは接続を待ち受ける

claude remote-control はプロセスがターミナルに残り、リモートからの接続を待ち続けます。起動時点で1セッションが先に作られるので、繋いだ瞬間から入力できる状態。スペースキーで QR コードの表示を切り替えられます。

claude remote-control --help

実行結果(抜粋):

Remote Control - Control local sessions from claude.ai/code or the Claude mobile app

USAGE
  claude remote-control [options]
OPTIONS
  --name <name>                    Name for the session (shown in claude.ai/code)
  -c, --continue                   Resume the last session in this directory
  --permission-mode <mode>         Permission mode for spawned sessions
                                   (acceptEdits, auto, bypassPermissions, default, dontAsk, plan)
  --spawn <mode>                   Spawn mode: same-dir, worktree, session
                                   (default: same-dir)
  --capacity <N>                   Max concurrent sessions in worktree or
                                   same-dir mode (default: 32)

--permission-mode は公式ドキュメントのフラグ表には載らず、--help にだけ出てきます。リモートで生成されるセッションの権限モードを acceptEditsplan に固定できるため、スマホの小さい画面で承認を連打したくないなら起動時に決めておく値。

–remote-control は普段のセッションに窓口を足す

ターミナルで手を動かしながらスマホからも同じ会話に入りたい場合は claude --remote-control。短縮形は --rc で、引数にセッション名を渡せます。

claude --remote-control "wp-auto-poster"

接続が張れると、入力欄の下のフッターに /rc active というインジケータが出ます。これはセッション URL へのリンクで、下矢印キーで選択して Enter を押すとステータスパネルが開く。ターミナル幅が足りないと表示ごと消えるため、繋がっていないと誤解しやすい箇所です。

会話を引き継ぐ /remote-control

すでに走っているセッションの続きをスマホに渡すなら、セッション内で /remote-control(または /rc)。それまでの会話履歴を持ったままリモートセッションになります。ただし --verbose--sandbox--no-sandbox はこの経路では渡せません。VS Code 拡張でも同じコマンドが使えますが、名前引数と QR コード表示は非対応。

スマホに繋ぐまでの流れ

セッションを起動したあと、別デバイスから入る経路は3通り。セッション URL をブラウザで開く、QR コードを読む、claude.ai/code かモバイルアプリのセッション一覧から名前で探す。モバイルアプリならナビゲーションの Code がセッション一覧です。オンラインのリモートセッションには、PC アイコンと緑のステータスドットが付きます。

セッション名は4段階で決まる

一覧から探す前提だと、名前が付いていないセッションは埋もれます。タイトルの決定順は明快で、上から順に評価されます。

  • --name / --remote-control / /remote-control に渡した名前
  • /rename で設定したタイトル
  • 既存の会話履歴のうち、最後の意味のあるメッセージ
  • 自動生成名(myhost-graceful-unicorn のような、ホスト名 + 2語)

自動生成名の接頭辞はホスト名。--remote-control-session-name-prefixCLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX で差し替えられます。claude.ai 側の /rename がローカルの claude --resume の表示まで揃えるようになったのは v2.1.221 から。それ以前はタイトルだけ変わり、CLI 側は旧名のままでした。

毎回自動でつなぐ

既定では明示的にコマンドを叩いたときしか有効になりません。全セッションで自動接続するなら /configEnable Remote Control for all sessionstrue に。false で常に無効、default で選択をクリアして組織の管理者既定に従います。デスクトップアプリは Settings → Claude Code → Enable remote control by default、VS Code 拡張はコマンドメニューの Settings セクション(v2.1.203 以降)。

この設定下では、対話セッション1プロセスにつきリモートセッションが1つ登録されます。3つターミナルを開けば一覧に3行並ぶ。1プロセスで複数を捌くならサーバーモードです。

繋がらない原因は環境変数に寄っている

「Remote Control is not yet enabled for your account」が返ってくると、まずプランを疑いたくなります。実際にはロールアウトのゲートよりも、手元の環境変数が原因のケースが多い。公式ドキュメントの “Requirements” セクションは、プラン・認証方式・API エンドポイント・フィーチャーフラグ評価・ワークスペース信頼の5項目を並べています。

フィーチャーフラグ評価を止める4つの変数

Remote Control が使えるかどうかの判定は、フィーチャーフラグの評価結果に依存します。この評価を無効化する変数が設定されていると、プランが Max でも機能自体が見えません。

  • DISABLE_TELEMETRY
  • DO_NOT_TRACK
  • CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC
  • DISABLE_GROWTHBOOK

これらはシェルの環境だけでなく settings.jsonenv ブロックからも効きます。プロジェクトに次の設定が入っていると、シェル側をいくら確認しても原因に辿り着けません。

{
  "env": {
    "DO_NOT_TRACK": "1"
  }
}

この状態で claude remote-control を叩くと「Remote Control requires feature-flag evaluation」が返り、メッセージ本文に検出された変数名が入ります。v2.1.154 より前のバージョンでは同じ設定が「Remote Control is not yet enabled for your account」として出ていたため、古い記事の情報を当てにすると切り分けを間違えます。

シェル側の確認は grep 一発で済みます。

env | grep -E 'DISABLE_TELEMETRY|DO_NOT_TRACK|CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC|DISABLE_GROWTHBOOK|ANTHROPIC_BASE_URL|CLAUDE_CODE_USE_'

実行結果(何も出なければ、シェル側は白):

(出力なし)
$ echo $?
1

手元でこれを通したところ出力ゼロ、~/.claude/settings.jsonenv ブロックも空でした。シェルが白なら次は settings.json の4スコープ(managed / user / project / local)を順に見る、という順序になります。

api.anthropic.com 以外を向いていると弾かれる

リモートセッションは claude.ai のバックエンドとペアを組みます。API リクエストが Anthropic API 以外を経由していると、ペアリング先が存在しません。

該当するのは Amazon Bedrock、Google Cloud の Agent Platform、Microsoft Foundry の3経路。加えて v2.1.196 以降は、ANTHROPIC_BASE_URLapi.anthropic.com 以外のホストを指している場合も無効化されます。LLM ゲートウェイや社内プロキシを噛ませている環境がここに引っかかる。エラーメッセージは「Remote Control is only available when using Claude via api.anthropic.com」で、v2.1.219 以降は CLAUDE_CODE_USE_BEDROCK のような原因になった変数名まで表示されます。

setup-token のトークンでは確立できない

CI 用に claude setup-token で発行した長期トークンや CLAUDE_CODE_OAUTH_TOKEN を使っている場合、「Remote Control requires a full-scope login token」で止まります。これらのトークンはモデルリクエスト専用で、リモートセッションを張る権限を持ちません。claude auth login でフルスコープのセッショントークンを取り直す必要があります。API キー認証も同様に非対応で、ANTHROPIC_API_KEY が環境に残っていれば先に外します。

どのチェックで落ちたかは claude doctor が教えてくれます。非対話で叩いた場合の出力はこの程度。

claude doctor
Claude Code doctor

Running: native (2.1.222)
Platform: darwin-arm64
Auto-updates: enabled

Remote Control
Control this session from claude.ai/code or the Claude mobile app

No installation issues found.

個別のチェック内訳は、セッション内の /doctor で見られます。Claude Code /doctorの使い方で扱ったフル診断のほうが、どの条件で弾かれたかまで分かります。

スリープでは切れない。切れるのは約10分のネットワーク断

ノート PC を閉じてもセッションは消えません。公式ドキュメントの “Limitations” が挙げる切断条件は、スリープとは別の話です。

復帰すれば自動で繋ぎ直る

ラップトップがスリープしてもネットワークが落ちても、マシンがオンラインに戻った時点でセッションは自動再接続します。再接続中に届いたサブエージェントやワークフローの状態更新はキューに積まれ、復旧後にまとめて配信される。この挙動が安定したのは v2.1.207 からで、それ以前は再接続や認証情報のリフレッシュ中に更新が落ち、接続先のデバイスで完了済みタスクが実行中のまま表示され続けることがありました。

プロセスが死ねばセッションも終わる

Remote Control はローカルプロセスとして動きます。ターミナルを閉じる、VS Code を終了する、claude プロセスを止める。どれもセッションの終了に直結します。SSH 先のマシンでセッションを維持したいなら、切断でプロセスが巻き添えにならないよう tmuxscreen の中で起動します。

tmux new -s rc -d 'claude remote-control --name myapp --spawn worktree'
tmux ls

実行結果:

rc: 1 windows (created Wed Aug  5 20:41:03 2026)

10分を超えると諦める

マシンは起きているのにネットワークへ到達できない状態がおおよそ10分続くと、セッションはタイムアウトしてプロセスが終了します。ここは自動復帰しないため、claude remote-control を叩き直して新しいセッションを作ることになる。スリープ復帰は繋ぎ直り、10分超のオフラインはプロセスごと終わる。

claude --resume--continue で会話を再開したときの「Couldn’t reconnect to your Remote Control session」は、記録済みリモートセッションへの再接続が失敗した状態。ローカルセッションは Remote Control なしで動き続けるので、/remote-control でリトライします。v2.1.200 より前は失敗時に黙って新セッションを作っていたため、claude.ai/code の一覧に使われないセッションが溜まりました。–continue/–resumeの違いと併せて押さえる箇所です。

–spawn worktree でセッションを隔離する

cd ~/work/myapp
claude remote-control --spawn worktree --capacity 4 --name "myapp"

サーバーモードの既定は --spawn same-dir。この場合、リモートから作られたセッションはすべて同じ作業ディレクトリを共有します。スマホから2つ指示を出して両方が同じファイルを編集すれば、当然衝突する。

worktree を指定すると、オンデマンドで作られる各セッションが自分専用の git worktree を持ちます。--help の NOTES にある通り、git リポジトリか WorktreeCreate/WorktreeRemove フックのどちらかが前提。実行中に w キーを押せば same-dirworktree を切り替えられます。worktree の設計そのものはClaude Code worktreeの使い方で扱っています。

capacity とセッション事前生成

--capacity の既定値は32。スマホから触る用途で32本が同時に立つ状況はまず無いため、実運用では 3〜5 に絞ると同時編集の範囲が読めます。--spawn=session(単一セッションモード)とは併用できません。

--create-session-in-dir は既定でオン。worktree モードではこの事前生成分だけがカレントに残り、オンデマンド生成分が隔離された worktree を持ちます。空から始めるなら --no-create-session-in-dir

スマホ・Webで挙動が変わるコマンド

ターミナル UI 前提のコマンドは、リモートからだと動かないか、別の形に化けます。

コマンドモバイル / Web での挙動
/plugin, /resumeローカル CLI 専用。引数を付けても動かない
/compact, /clear, /context, /usage, /recapテキスト出力としてそのまま通る
/model, /effort, /fast, /color, /rename値を引数で渡す(/model sonnet)。ピッカーやスライダーは出ない
/mcpモバイルはサーバー状態のテキスト要約。Web は claude.ai コネクタの一覧が開く
/configモバイルは key=value で設定(v2.1.181 以降)。Web は設定画面が開く
/autocompactv2.1.221 以降、/autocompact 500k のように引数で指定

/mcp reconnect をサーバー名なしで叩くと、ローカル CLI と違って失敗中・認証待ちの全サーバーが対象になります。

通知の絞り方と、組織単位で止める設定

公式ドキュメントの “Mobile push notifications” は、プッシュを送るかどうかは Claude 側の判断だと明記しています。長時間タスクの完了時や、判断を仰ぎたいときに飛ぶ。プロンプトに「テストが終わったら通知して」と書けば明示的に要求もできます。設定できるのは /config の2つのトグルだけで、イベントごとの制御はありません。

  • Push when Claude decides: Claude 判断のプロアクティブ通知
  • Push when actions required: 権限プロンプトや質問が発生したとき

席にいる間だけ黙らせる

接続中のターミナルにフォーカスがある間、プッシュは自動でスキップされます。ただし別ウィンドウで作業しているときは対象外。v2.1.181 以降は CLAUDE_CLIENT_PRESENCE_FILE にマーカーファイルのパスを設定すると、そのファイルが存在する間は通知を止められます。

export CLAUDE_CLIENT_PRESENCE_FILE="$HOME/.claude/at-keyboard"
touch "$CLAUDE_CLIENT_PRESENCE_FILE"   # 画面ロック解除時に作成
rm -f "$CLAUDE_CLIENT_PRESENCE_FILE"   # 画面ロック時に削除

実行結果として、ファイルがある間はスマホが鳴らず、ロックして削除された瞬間から通知が届き始めます。画面ロックの検知は OS 側のリスナー任せ。macOS なら com.apple.screenIsLocked を拾うスクリプトを常駐させます。通知が届かないときの確認先は、/configNo mobile registered 表示(スマホでアプリを開き直すとクリアされる)、iOS の集中モード、Android のバッテリー最適化。完了検知をローカルで受け取るだけなら通知フックの記事のほうが向いています。

組織で止める・縛る

Team と Enterprise では既定でオフで、Owner が Claude Code 管理設定のトグルを入れるまで使えません。デバイス単位で禁止するなら disableRemoteControl を管理設定に置きます(v2.1.128 以降、CLAUDE_CODE_DISABLE_AGENT_VIEW=1 と等価)。

{
  "disableRemoteControl": true
}

これを managed settings に置くと claude remote-control--remote-control フラグ、自動起動、セッション内トグルのすべてがブロックされます。設定の優先順位は managed が最上位で、ユーザーやプロジェクトの設定では上書きできません。

禁止ではなく本人確認を挟むなら “Trusted Devices”(ベータ、Team / Enterprise 向け)。デバイスごとの登録に加え、サインインから18時間以内であることを要求します。期限を超えると Face ID / Touch ID / Windows Hello / パスキーでの確認が1回入る。生体情報は Anthropic に送られず、保存されるのはデバイスの公開鍵と表示名・プラットフォーム・登録時刻だけです。すでに走っているセッションには遡及しないため、トグルを入れた時点の稼働分は要件なしで動き続けます。

まとめ

v2.1.222 時点の Remote Control を触るうえで押さえる点。

  • 入口は3つ。常駐して複数セッションを捌くならサーバーモード、手元でも打ちたいなら --remote-control、途中から渡すなら /remote-control
  • 繋がらない時はプランより先に環境変数。DO_NOT_TRACK 系4変数と ANTHROPIC_BASE_URL を、シェルと settings.jsonenv ブロック両方で確認する
  • スリープやネットワーク断は自動再接続で戻る。戻らないのは約10分を超えたオフラインとプロセス終了
  • サーバーモードの既定 same-dir はファイル衝突を招く。--spawn worktree--capacity で隔離と上限を決める
  • プッシュ通知の粒度は制御できない。CLAUDE_CLIENT_PRESENCE_FILE で在席中だけ止めるのが唯一の絞り方
  • 組織で封じるなら disableRemoteControl、本人確認を課すなら Trusted Devices

クラウド側で完結させたい用途なら Routines によるクラウド無人実行のほうが噛み合います。公式ドキュメントの “Choose the right approach” にある比較表も、Dispatch / Channels / Slack / Scheduled tasks を含めた選択の目安になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次