Claude Code の Remote Control を iPhone から使っている。通勤中に進捗を確認したり、指示を出したりできるやつだ。
が、すぐ止まる。
止まる
初回、3 ターンくらいで iPhone の画面が進まなくなった。PC に戻ると選択肢が出ていた。PC 側で選ぶと続いた。
別の日は 1 時間くらい続いた。設計の話をしていて、plan mode の承認ダイアログが出たところで止まった。Chrome リモートデスクトップで PC に繋いで承認した。iPhone から操作するための機能なのに、結局 PC を触っている。
原因を調べた
最初は AskUserQuestion(ボタン式の選択肢 UI)を疑った。GitHub にも関連 Issue がいくつかある。
RC 経由で実際に試したら、2 択も 3 択も 4 択も普通に選べた。これは問題ない。
止まるのは Y/N のパーミッションダイアログだった。ファイル編集の許可、plan mode の承認。これらが iPhone に表示されない。何も出ない。セッションが止まる。
Issue はある。
- #15686 — plan mode が iOS でハングする。パーミッションプロンプトが表示されない
-
#29214 —
--dangerously-skip-permissionsでもモバイルにプロンプトが出る
--dangerously-skip-permissions で回避しようとしても、逆にモバイル側にプロンプトが出てくるバグがある。塞がっている。
回避策
RC からは直接ファイル編集や Bash を叩かず、サブエージェントを発射する。
iPhone → RC → Claude → サブエージェント(bypassPermissions) → 実作業
サブエージェントは自分のパーミッションで動くので、RC 側にダイアログが出ない。
やってみたらいくつかわかった。
-
mode: "dontAsk"だとバックグラウンドの Bash が全拒否される。bypassPermissionsが要る - 親セッションの直接 Bash は RC でもダイアログが出ない。
git statusやnpm run testは直接叩ける - サブエージェントは破壊的操作(
git push --force等)を自己判断で拒否する。これは親セッションで直接やる -
bypassPermissionsは PreToolUse フックで防御できる
RC を「操作端末」ではなく「発射台」として使う。読み取りと非破壊コマンドは直接、書き込みはサブエージェント経由、破壊的操作は親セッションで直接。
通知か回避か
RC が止まる問題に対して、アプローチは 2 つある。
通知: セッションが止まったら iPhone に push 通知を送る。Bark や ntfy.sh を hook から飛ばす方法がいくつか紹介されている。止まった事実は早くわかるが、結局 PC に戻って操作する。
回避: そもそも止まる原因を消す。この記事のサブエージェント方式。パーミッションダイアログが出ない構造にする。
どちらか片方では完結しない。回避策で止まる頻度を下げつつ、それでも止まったら通知で気づく。
まとめ
RC で止まる原因は AskUserQuestion ではなく Y/N ダイアログ。紹介記事でよく見る「指示を出して結果を見る」だけなら止まらない。パーミッションや承認が絡むと止まる。
使っていてオススメしている人たちは、たぶんそこまで使っていない。