ろぼいんブログ

ChatGPT AppなしでCodex CLIのみでリモートコントロールを有効化する方法

ChatGPTのアプリが表示されたスマートフォンが机の上に置かれている写真

Codexのリモートコントロールを使うと、外出先からでもスマホで自宅のPCのCodexに指示を送信できるため非常に便利です。リモートコントロールを使うには、基本的にPC側でChatGPT Appを起動しておく必要があります。

ChatGPT Appの全体的な品質は素晴らしいのですが、アプリを開いたりプロジェクトを起動したりした直後にPC全体の応答性が著しく低下するという問題があり、筆者はChatGPT Appをアンインストールしてしまいました。

広告

実は隠しフラグを使用することで、ChatGPT AppをインストールしていなくてもCodex CLIのみでリモートコントロールを起動できます。

Codex CLIからリモートコントロールを起動するコマンド

Codex CLIからリモートコントロールを起動するには、次のコマンドを実行します。

Terminal window
codex app-server --listen off

このコマンドは終了せず、リモートコントロールを利用したい間はコマンドを実行したターミナルを起動したままにしておいてください。これで、PCのChatGPT AppがなくてもスマホのChatGPTアプリからリモートコントロールで遠隔操作できるようになります。

なお、一部の記事ではcodex remote-controlでリモートコントロールを起動できると書かれていることがありますが、こちらのコマンドはWindows環境でエラーになりました。

Terminal window
$ codex remote-control
Starting app-server daemon with remote control enabled...
Error: codex app-server daemon lifecycle is only supported on Unix platforms

Codex CLIのみでペアリングしたい場合

前述のリモートコントロールを起動するコマンドを利用するには、ChatGPT Appでリモートコントロールのペアリングを済ませている必要があります。

広告

CLIからはcodex remote-control pairでペアリングできるのですが、こちらもやはりWindows環境では壊れており、「Error: codex app-server daemon lifecycle is only supported on Unix platforms」というエラーになります。

Windows環境でペアリングするには、次のコマンドを実行します。

Terminal window
codex app-server --listen ws://127.0.0.1:8765

そのコマンドを実行した状態のまま別のターミナルから次のコマンドを実行します。

Terminal window
$ws = [Net.WebSockets.ClientWebSocket]::new()
$ct = [Threading.CancellationToken]::None
$ws.ConnectAsync([Uri]"ws://127.0.0.1:8765", $ct).GetAwaiter().GetResult()
function Send-Json($obj) {
$bytes = [Text.Encoding]::UTF8.GetBytes(
($obj | ConvertTo-Json -Depth 10 -Compress)
)
$ws.SendAsync(
[ArraySegment[byte]]::new($bytes),
[Net.WebSockets.WebSocketMessageType]::Text,
$true,
$ct
).GetAwaiter().GetResult()
}
function Receive-Json {
$buffer = New-Object byte[] 65536
$ms = [IO.MemoryStream]::new()
do {
$r = $ws.ReceiveAsync(
[ArraySegment[byte]]::new($buffer),
$ct
).GetAwaiter().GetResult()
if ($r.MessageType -eq [Net.WebSockets.WebSocketMessageType]::Close) {
throw "WebSocket closed"
}
$ms.Write($buffer, 0, $r.Count)
} until ($r.EndOfMessage)
[Text.Encoding]::UTF8.GetString($ms.ToArray()) | ConvertFrom-Json
}
function Wait-Response($id) {
do {
$r = Receive-Json
} until ($r.id -eq $id)
if ($r.error) {
throw $r.error.message
}
$r.result
}
Send-Json @{
method = "initialize"
id = 1
params = @{
clientInfo = @{
name = "codex_remote_pair"
title = "Codex Remote Pair"
version = "1.0"
}
capabilities = @{
experimentalApi = $true
}
}
}
$null = Wait-Response 1
Send-Json @{
method = "initialized"
params = @{}
}
# 永続的にRemote Controlを有効化
Send-Json @{
method = "remoteControl/enable"
id = 2
params = @{}
}
$null = Wait-Response 2
# ペアリングコードを発行
Send-Json @{
method = "remoteControl/pairing/start"
id = 3
params = @{
manualCode = $true
}
}
(Wait-Response 3).manualPairingCode
$ws.Dispose()

ペアリングコードが出力されるので、スマホのChatGPTのペアリング画面で「手動でペアリング」からペアリングコードを入力するとペアリングできます。codex app-server --listen ws://127.0.0.1:8765を終了してcodex app-server --listen offを実行するとスマホから接続できるようになります。

この記事の検証内容

検証環境

  • OS:Windows 11
  • Codex CLIバージョン0.147.0

検証内容

Windows環境においてcodex remote-controlがエラーになり、codex app-server --remote-control --listen offでは問題なくリモートコントロールを起動できることを確認

最終検証日

更新履歴

  • 2026年8月19日午前3時56分:初版公開
  • 2026年8月25日午前2時50分:初版で記載していたコマンドが不安定だったため、より安定したコマンドに変更

記事をシェア

フォローして最新情報を入手

Googleの優先ソースに追加すると、このサイトの記事をGoogleで見つけやすくなります。また、ぜひXやRSSフィードもフォローしてください。

Googleの優先ソースとして追加するGoogleの優先ソースとして追加する
著者のアイコン画像

生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。

Webフロントエンドプログラマーとして、TypeScriptを用いたWebアプリやブラウザー拡張機能を制作。Xのシャドウバン検知ツール「Shadowban Scanner」やリンクカード復活ツール「Restore Link Card」を公開し、国内外のメディアで紹介されました。iGEM 2023ではJapan-UnitedチームのWikiを制作してGrand Prizeの獲得に貢献。ブログではXやSNSの最新ニュース、不具合の検証と対処法、フロントエンド開発の知見を発信しています。