幸者堂

AIエージェントのリモートコントロールのすすめ

update:2026/09/20

Category : AI, command line tool


TL;DR

codex app-server daemon start
codex app-server daemon enable-remote-control
codex remote-control pair

出てきた数字をスマホにコピペしたらスマホからsshしなくてもcodexを操作できます。

claude

を実行したら

/rc

と入力すればスマホアプリから操作できます。

はじめに

皆さんはAIエージェントを用いた開発をしていますか。 私はどっぷり使っています。AIエージェントは我々が明示的に指示をしなくてもローカル上のファイルを自律的に見て、必要な操作を勝手にやってくれます。こんなに便利なものはないでしょう。

PCからSSHして使うことが多いと思うのですが、これでは電車の中やお布団の中、散歩の途中などではなかなか使えません。せっかくいいアイデアが思いついたのに!となったことも多いのではないでしょうか?

そこで、今回はスマホアプリからsshサーバ先のcodexやclaudeに支持を投げる方法、remote-controlを皆さんに共有したいと思います。

なお、AIエージェントをホスト上で実行するのが怖いという方向けに、最後にdockerコンテナ上でAIエージェントを動かすための構成例も紹介します。

codexの場合

codexはOpenAIが提供するツールですね。 cli上で

codex                               # 通常起動
codex --sandbox danger-full-access  # サンドボックスの制限を外して起動

を実行することで使用できます。なお、codexは権限回りがかなり厳しめに作られているので、私は--sandbox danger-full-accessをオプションでつけることをお勧めします。

私は普段研究していて、codexに機械学習の進捗などを監視させています。もちろんメールで送信するように命令しても良いのですが、私自身から「あれもしろ、これもしろ」と後から命令を変えたくなることも多々あります。しかしそれは電車の中かもしれないし、散歩の途中かもしれません。そういう時スマホから操作できたらな———できるんです!

まずはcodexを実行するマシン側で

codex app-server daemon start
codex app-server daemon enable-remote-control
codex remote-control pair

を実行してください。これは何をしているのかというと、

  1. app-server daemonを常駐させる。codexがずっと動いている状態になる
  2. app-server daemonにremote-control(外部端末からの操作)を可能にする
  3. remote-controlをする端末とのペアリングをする

という三段階を実行しています。

実際にやってみるとこんな感じ。

$ codex app-server daemon  start                                                                                                                                                              return = 1
{"status":"started","backend":"pid","pid":1061,"managedCodexPath":"/home/yukijya/.codex/packages/standalone/current/bin/codex","managedCodexVersion":"0.155.1","socketPath":"/home/yukijya/.codex/app-server-control/app-server-control.sock","cliVersion":"0.155.1","appServerVersion":"0.155.1"}

$ codex app-server daemon  enable-remote-control
{"status":"alreadyEnabled","backend":"pid","remoteControlEnabled":true,"socketPath":"/home/yukijya/.codex/app-server-control/app-server-control.sock","cliVersion":"0.155.1","appServerVersion":"0.155.1"}

$ codex remote-control pair
Pairing code: ****-**** #実際は英数字のワンタイムパスワードが出る

出てきたPairing codeはスマホのアプリで使います。

次にスマホのchatGPTアプリを起動します。

メニュー欄からリモートを選択
→
右上の設定ボタンから接続を追加
→
ペアリングコードを入力

上記の画像のように

  1. メニュー欄からリモートを選択
  2. …ボタンから接続を追加を選択
  3. 代わりに手動でペアリングを選択し、Pairing codeを入れる。(この時ハイフン-も入力すること)

これでスマホからも、リモートサーバのcliからも同一のセッションを開いて、codexを操作することができるようになります。

claude codeの場合

claude codeはとても簡単です。

claude code中で/rcを実行するだけ。あとはスマホからも操作できます。

Claudeアプリのメニューからコードを選択
→
コード画面のセッション一覧に表示されたセッション

上記の画像のように

  1. Claudeアプリのメニューからコードを選択
  2. セッションの一覧から、/rcを実行したセッションを選択

docker上で使用する方へ

codex,claude code, opencodeのサンドボックス環境を作るための方法をここでご提案します。 といっても大したことはやっていません。ただコンテナ上で実行すれば良いじゃんと言っているだけです。

まずはDockerfileでcodexなどのAIエージェントのバイナリを焼きます。例としてubuntuイメージを用いていますが、なんでも大丈夫です。作業できる環境のイメージに追加してくださればよろしいかと。 Dockerfileの例です。ベースイメージやユーザ名は各自の環境に合わせて調整してください。

FROM ubuntu:latest
ARG USER=developer
USER root
RUN rm -f /etc/apt/apt.conf.d/docker-clean \
    && echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    --mount=type=cache,target=/var/lib/apt,sharing=locked \
    apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y \
    curl
RUN useradd --create-home --shell /bin/bash ${USER}

ENV PATH="/app/.venv/bin:/home/${USER}/.local/share/mise/shims:/home/${USER}/.local/bin:$PATH"
USER ${USER}
WORKDIR /home/${USER}

RUN curl --fail --location --silent --show-error https://mise.run | sh
RUN mise use -g uv codex claude opencode
RUN mkdir -p /home/${USER}/.claude \
    /home/${USER}/.codex \
    /home/${USER}/.local/share/opencode

CMD ["/bin/bash"]

なお、この構成ではmise経由でcodexを入れているので、ちょっとだるいかも。対応方法は後述のトラブルシューティングへ。

compose.ymlにはvolumeでセッション情報などを保持するのが楽です。コンテナはバンバン落とすので、毎回認証をやり直すのは面倒でしょう。 なお、使い終わったらdocker compose down -vをしてvolumeファイルごと消しましょう。

以下のcompose.ymlは一例です。使いたい既存のcomposeファイルに追加して書くとよろしいかと思います。

services:
  app:
    volumes:
      - claude-config:/home/${USER:-developer}/.claude
      - codex-config:/home/${USER:-developer}/.codex
      - ./agent/skills:/opt/codex-skills #もしスキルが欲しければ、/opt/codex-skillsに配置すれば見てくれる。
      - opencode-data:/home/${USER:-developer}/.local/share/opencode
volumes:
  claude-config:
  codex-config:
  opencode-data:

トラブルシューティング

mise経由でcodexをインストールした場合

$ codex app-server daemon enable-remote-control
codex app-server daemon  start
codex remote-control pair
{"status":"enabled","remoteControlEnabled":true,"socketPath":"/home/yukijya/.codex/app-server-control/app-server-control.sock","cliVersion":"0.155.1"}
Error: managed standalone Codex install not found at /home/yukijya/.codex/packages/standalone/current/codex

This command requires the standalone install managed by the Codex installer, because the daemon starts and updates app-server from that fixed path.

Install it with:
  curl -fsSL https://chatgpt.com/codex/install.sh | sh

Then rerun the command you just tried.
Error: failed to connect to /home/yukijya/.codex/app-server-control/app-server-control.sock

Caused by:
    No such file or directory (os error 2)

こんな感じのエラーが出るかもしれません。エラー文にあるとおり、daemonはapp-serverを~/.codex/packages/standalone/current/という固定パスから起動・更新する仕様になっています。miseでインストールすると~/.local/share/mise/shims/codexにバイナリが置かれるだけで、この固定パスには何も無いため、PATHが通っていてもdaemonは起動できません。 おすすめはおとなしく公式のインストール方法を用いることなのですが、それじゃ面白くない。

nohup codex app-server  --remote-control --listen unix:// &

のようにnohupを用いることでdaemonによる常駐を回避することで

$ codex remote-control pair
Pairing code: ****-****

のように実行できます。