Codex CLI のログインが「Finish signing in via your browser」で止まる — 常駐 app-server がポート 1455 を握っていた
普段使いの Codex CLI を起動したところ、TUI が次の画面から先に進まなくなりました。
Welcome to Codex, OpenAI's command-line coding agent
Finish signing in via your browser
If the link doesn't open automatically, open the following link to authenticate:
https://auth.openai.com/oauth/authorize?response_type=code&client_id=app_EMoamEEZ73f0CkXaXp7hrann&redirect_uri=http%3A%2F%2Flocalhost%3A1455%2Fauth%2Fcallback&...
On a remote or headless machine? Press esc and choose Sign in with Device Code.
Press esc to cancelブラウザ側では ChatGPT の同意画面まで進んで「続行」も押しているのに、TUI 側は待機表示のまま。順を追って原因と解決手順を残しておきます。
確認したこと
まず、ログインそのものは成立しているか確認しました。
codex login status
# => Logged in using ChatGPT~/.codex/auth.json のタイムスタンプも同日 11:31 に更新されていて、トークンは書き込まれています。つまり OAuth は完了しているのに、TUI がそのことを検知できていないだけの状態です。
次に、OAuth のコールバック先である localhost:1455 を誰が握っているかを確認しました。
lsof -i :1455listen していたのは、今開いている codex の TUI (PID 28816) ではなく、18 時間前から動いていた常駐プロセス codex app-server --managed-daemon (PID 21226) でした。
Codex CLI は複数のクライアント(TUI・VS Code 拡張・デスクトップアプリなど)が同じ認証状態を共有できるように、--managed-daemon の app-server を常駐させる構成になっています。OAuth の戻り先ポートを既存の常駐プロセスが握っていると、後から起動した TUI が自分のコールバックを受け取れず、「Finish signing in via your browser」の待機表示が解けません。
試した順序と結果
上から順に試して、最終的に 3 番目で解決しました。
1. Esc で TUI を止めて codex を起動し直す
ログイン自体は済んでいるので、多くの場合はこれで通常起動します。今回は再起動しても同じ画面に戻ってしまい効きませんでした。
2. デバイスコード方式で codex login --device-auth
ブラウザリダイレクトを使わずに済むデバイスコード方式を試しました。
codex logout && codex login --device-authすると ChatGPT の同意画面(auth.openai.com/sign-in-with-chatgpt/codex/consent)で次の警告が表示されました。
ChatGPT のセキュリティ設定で、Codex、Excel、PowerPoint、Word のデバイスコードによるサインインを有効にしてから、「codex login —device-auth」をもう一度実行してください。
デバイスコードでのサインインは ChatGPT 側のセキュリティ設定でオプトインが必要な扱いになっています。この設定を変更してまで進めたくなかったので、この方式は見送りました。
3. ポート 1455 を握っている常駐プロセスを止めて codex login
ポートを握っている常駐プロセスを止めてから、通常の OAuth ログインをやり直します。
lsof -i :1455
# => codex app-server --managed-daemon など、TUI とは別の PID が表示される
kill 21226 68415
codex loginkill する PID は環境ごとに変わるので、lsof -i :1455 で実際に listen しているプロセスを確認してから指定してください。デスクトップアプリやブラウザ拡張が同じ常駐プロセスを共有している場合があるので、それらは先に閉じておきます。
常駐プロセスがいなくなった状態で codex login を実行すると、今回起動した TUI 自身が localhost:1455 を listen できるようになり、ブラウザ側の OAuth リダイレクトを正しく受け取ってログインが完了しました。
同じ症状に当たったときの確認順
サブスクリプションや ChatGPT アカウント側の問題ではなく、ローカルの状態が古いだけのことがあるので、次の順で切り分けると早いです。
codex login statusと~/.codex/auth.jsonのタイムスタンプで、認証情報が更新されているかを確認するlsof -i :1455でlocalhost:1455を握っているプロセスを確認し、今開いている TUI とは別のcodex app-server --managed-daemonなどが listen していないかを見る- まずは Esc で TUI を止めて
codexを起動し直す - 通らなければ、常駐プロセスを
killしてからcodex loginをやり直す。デスクトップアプリやブラウザ拡張が同じ常駐プロセスを使っている場合があるため、先にそれらを閉じてから止める - デバイスコード方式
codex login --device-authは、ChatGPT のセキュリティ設定変更を許容できる場合の代替として残しておく
以上、Codex CLI の TUI が「Finish signing in via your browser」で止まったときに、localhost:1455 を握っていた常駐 codex app-server --managed-daemon を止めて codex login をやり直して解決した、現場からお送りしました。