私用のmacの設定をいろいろと見直してClaude Codeのremote controlが割と使い物になる状態になったのだが、出先でiPhoneから作業をしようとすると新しいClaude Codeのセッションを立ち上げたいことがよくあり困っていた。
本当は簡単なやり方があるのかもしれないが例えばClaude Code自身に頼んでもできなくて、今回はcmuxの機能を使ってなんとかしたのでさらっと書き残しておく。
自身がcmux上で実行されているかの確認
公式のAPIリファレンスでも紹介されているがcmuxの検出はこのへんのコマンドでできる。
# Prefer explicit socket path if set
SOCK="${CMUX_SOCKET_PATH:-/tmp/cmux.sock}"
[ -S "$SOCK" ] && echo "Socket available"
# Check for the CLI
command -v cmux &>/dev/null && echo "cmux available"
# In cmux-managed terminals these are auto-set
[ -n "${CMUX_WORKSPACE_ID:-}" ] && [ -n "${CMUX_SURFACE_ID:-}" ] && echo "Inside cmux surface"
# Distinguish from regular Ghostty
[ "$TERM_PROGRAM" = "ghostty" ] && [ -n "${CMUX_WORKSPACE_ID:-}" ] && echo "In cmux"
細かいところは省略するがcmux内部で実行されているのを確認するために以下のコマンドを使っている。
[ -n "${CMUX_WORKSPACE_ID:-}" ] && [ -n "${CMUX_SURFACE_ID:-}" ] && echo "Inside cmux surface"
cmuxのworkspaceを開く
これも細かいところは省略するが、以下のコマンドで指定のディレクトリでclaudeを実行できる。
cmux new-workspace --cwd /path/to/somewhere --command claude
実行すると OK workspace:XX という結果が返ってくる。この後半の workspace:XX 部分が後段で使うWorkspace IDとなる。
ディレクトリの信頼性確認を突破する
実行履歴が残っている場所ならたぶん聞かれないのだが、実行履歴がなかったり、その他特定のpathだったりするとこのディレクトリを信頼しますか?的なのを聞かれて新しいセッションを開けないので、最終的にはこういうコマンドでこれを突破した。
WSID=$(cmux --json new-workspace --cwd /path/to/somewhere --command 'claude --remote-control' | cut -d ' ' -f 2) && \
sleep 5 && \
cmux send-key enter --workspace $WSID
指示の待ち受け状態でエンターを押しても何も起こらないので、確認が入っても入らなくてもこれで動く。
あとは /config で Enable Remote Control for all sessions を true にしておけば新しいセッションが立ったときに必ずremote controlを有効にしておけるし、それが嫌なら --remote-control 付きで起動すればよい。わたしは後者にした。
以上をまとめてSkillにする
ここまでの諸々をClaude Codeに伝えて良い感じのSkillにしてもらえば、cmuxでひとつセッションを立ち上げておくだけで、出先でiPhoneから新しいセッションを立ち上げてそっちで作業、みたいなことができる。まだ出先で試すところまではやれていないがけっこう便利に使えそう。
AskUserQuestionを呼び出されるとApp側では処理が止まってしまうっぽいのでそのあたりは工夫が必要。Skillのargumentとしてpathやら何やらを渡せるようにしておくと良さそう。
もっと良いやり方もありそうなので何かあればこっそり教えてもらえるとうれしい。