Remote Control「couldn't refresh your login」で止まる原因と対処
Remote Controlが「Remote Control disconnected」と出て止まるのは、保存したclaude.aiログインで資格情報を更新できなかったときです。文言ごとの原因と、/loginで足りるかの見分け方を示します。
Remote Controlの接続中に「Remote Control disconnected — …run /login」という警告が出て、スマホやブラウザから操作できなくなることがあります。公式のエラーリファレンスでは、この系統を「Remote Control couldn't refresh your login」の節にまとめています。
要点は2つです。Remote Controlは保存済みのclaude.aiログインを使って短命の資格情報を更新し続けており、そのログインが拒否された、あるいは手元から消えたときに止まります。一方、ログインサービスが応答しないだけなら、止まらずに再試行します。
Remote Controlはなぜログインを更新し続けるのか
Remote Controlの接続は、短命の資格情報で成り立っています。Claude Codeはこの資格情報を、/loginで保存したclaude.aiのログインを使って取得し、期限が来るたびに更新します。API Keyではなくclaude.aiのサブスクリプション認証が前提なのは、この更新の元手がclaude.aiのログインだからです。
更新が失敗するパターンは、大きく2つに分かれます。
更新が失敗したとき、Remote Controlはどう動くか
応答が返らない
ログインサービスに届かない、リクエストがタイムアウトする、ログインは拒否されないままサービス側が失敗する。この場合は接続を保ったまま、現在の資格情報が有効なうちに再試行します。
拒否される・保存ログインが無い
claude.aiが保存済みログインを受け付けない、または手元に保存済みログインが残っていない。この場合はRemote Controlを止め、再サインインを求めます。
止まったあともローカルのセッションは動き続けます。失われるのはRemote Controlの接続だけで、ターミナルでの作業は中断されません。
表示されるメッセージと原因の対応
停止時は、警告と、Remote Control disconnectedで始まる会話内の行の両方に理由が出ます。メッセージの中ほどが原因を示します。
| 表示される文言 | 原因 |
|---|---|
Claude.ai login expired | 原因保存したログイントークンの期限切れ、または失効 |
Claude.ai login was rejected | 原因同上(claude.aiが受け付けなかった) |
OAuth token unavailable | 原因資格情報の更新時期に、保存済みトークンが手元に無かった |
OAuth token refresh failed | 原因再接続中にclaude.aiがログインを拒否し、更新しても新しいトークンが得られなかった |
JWT refresh failed: no OAuth token | 原因更新に使う保存済みトークンが見つからなかった |
Signed out of Claude | 原因このマシンでサインアウト済み。別ターミナルでの/logoutなど |
7行ある例文のうち、run /loginで終わる行と、run /login, then /remote-controlで終わる行があります。後者は再接続の操作まで求められる文言です。
OAuth token refresh failedだけは少し性質が違います。ログインサービスが応答しない状態が続き、接続中の資格情報の期限が切れた時点でも、この文言で停止します。つまり、拒否された場合だけでなく、長く応答がない場合の最終的な出口にもなっています。
対処は/loginと/remote-controlの2手
どの文言でも、手順は共通です。
止まったRemote Controlの復旧手順
- 1
/loginで再サインイン
Claude Codeのセッション内で
/loginを実行し、claude.aiのログインをやり直します。 - 2
/remote-controlで再接続
警告が
run /login, then /remote-controlで終わっている場合は、サインイン後に/remote-controlも実行します。
run /login to restore Remote Controlで終わる文言だけは例外で、サインインすればClaude Codeが自分で再接続します。/remote-controlの追加入力は要りません。
/login
/remote-controlサインインしてもRemote Controlの表示が戻らないときは、ログインそのものではなく別の条件で弾かれている可能性があります。次の節の切り分けに進みます。
ログインし直しても直らないときの切り分け
Remote Controlには、ログイン以外にも使えなくなる条件があります。メッセージの文言で次のように振り分けられます。
再ログイン後も戻らないときの確認順
- Qメッセージに claude.ai subscription auth の要求や ANTHROPIC_API_KEY が出ているか?答えが次へ答えがはい
API Key系の認証が優先されています。
ANTHROPIC_API_KEYやANTHROPIC_AUTH_TOKEN、apiKeyHelperを取り除き、claude auth loginでclaude.aiのログインを選び直します。 - Qメッセージに full-scope login token が出ているか?答えが次へ答えがはい
claude setup-tokenやCLAUDE_CODE_OAUTH_TOKENの長期トークンは、モデルへのリクエスト専用です。Remote Controlの接続は確立できないため、claude auth loginでフルスコープのセッショントークンを取り直します。 - Qメッセージに signed-in account or organization changed が出ているか?答えが次へ答えがはい
別のターミナルで別アカウントにサインインしたことが原因です。
/remote-controlで現在のアカウント向けに新しく開始するか、元のアカウントに/loginで戻ります。
それでも戻らないとき
/statusでプランと組織を確認します。ProやMaxなのに、以前のTeamやEnterprise組織のまま認証が残っている場合は、claude auth logoutのあとにclaude auth loginをやり直します。
ここで挙げた原因のうち、Remote Control requires the Anthropic APIは認証ではなく経路の問題です。BedrockやANTHROPIC_BASE_URLの設定が絡むため、requires the Anthropic APIの意味で別に整理しています。接続の入口から切り分けたい場合は、Remote Controlに接続できないときの見分け方が先に当たります。
同じ「ログイン切れ」でも2つのアプリ経由では動きが違う
Claude DesktopやIDEがセッションを動かしている場合、Claude Codeは/loginではなく、そのアプリからログイントークンを受け取っています。claude.aiがそのトークンを拒否すると、Claude Codeはアプリに新しいトークンを求めます。
このときアプリが「サインアウトしている」「別のClaudeアカウントでサインインしている」と答えると、Claude CodeはRemote Controlを終了し、アプリに次のような行を送ります。
Remote Control stopped — the app running this session is now signed in to a different Claude account
Remote Control stopped — the app running this session is signed out of Claude. Sign in there, then turn Remote Control back on直す場所はターミナルの/loginではなく、アプリ側です。サインアウトしていたならアプリでサインインし直し、Remote Controlを入れ直します。別アカウントに切り替わっていた場合は、終了したセッションを新しいアカウントで引き継げないため、そのアカウントで新しいセッションを始めます。
v2.1.238より前は、この2つの場合にもrun /login系のメッセージが送られていました。古い版でアプリ側にそれが出ていたら、同じ原因を指している可能性があります。
「login expired」と表示される条件は版で変わっている
同じ文言でも、版によって出る条件が違います。再現しない、あるいは古い記事と話が合わないときは、手元のバージョンを見る価値があります。
関連メッセージの変遷
- v2.1.224文言が現在の形に近づく
OAuth token refresh failedの文言とJWT refresh failed: no OAuth tokenの文言を、現在のrun /login形式にそろえました。 - v2.1.2253種のメッセージを追加
Claude.ai login expired、Claude.ai login was rejected、OAuth token unavailableが加わりました。 - v2.1.238一度の無応答では止まらなくなる
それまでは、ログイン更新が一度応答しなかっただけで
Claude.ai login expiredを出して停止していました。この版から再試行に変わり、サインアウトの場合はSigned out of Claudeとして分けて表示されます。
v2.1.238の更新履歴には、短いネットワークの途切れで更新が遅れても「login expired」で切断されなくなったという修正が載っています。ネットワークが不安定な環境でRemote Controlがすぐ切れていたなら、この版以降で挙動が変わります。
他のログイン系エラーとの見分け方
Remote Controlの停止とは別に、Claude Code本体のログイン切れもあります。こちらはLogin expired · Please run /loginと表示され、保存済みの更新トークンをOAuthサービスが拒否した結果、資格情報が消去された状態です。以後のモデルリクエストはローカルで止まるため、Remote Controlだけでなく通常の対話も進みません。
見分けの目安は、影響範囲です。
- ターミナルでの対話は続く: Remote Controlの更新失敗(本記事の話)
- 対話そのものが止まる: 本体のログイン切れ。OAuth tokenの失効と期限切れや何度もログインを求められる原因が近い
- 20分ほど放置したあとに切れる: ログインではなくアイドル切断の可能性。20分放置の切断を参照
どれも最終的な復旧は/loginですが、そのあとに/remote-controlが要るかどうかで、手順が変わります。メッセージの末尾を読んで、then /remote-controlが付いているかを先に見るのが近道です。