Codex CLI のエラー

unexpected status 401 Unauthorized: Missing bearer or basic authentication in header

結論

認証情報を送れていない状態。10回リトライしてから終わるため、固まったように見える。

確認した版 Codex CLI v0.153.0
確認日 2026年9月3日
最終更新 2026年9月3日
根拠 実機で確認

エラー文字列

Codex CLI
unexpected status 401 Unauthorized: Missing bearer or basic authentication in header

⚠️ すぐには終わりません。 リトライを繰り返してから諦めるため、固まったように見えます。

何が起きているか

認証情報を送れていません。 ログインしていないか、保存された認証が読めていない状態です。

🔴 諦めるまでに10回リトライします

v0.149.0 で実測した順序です。

1. WebSocket で接続 → 401 → Reconnecting 1/5 … 5/5
2. HTTPS へフォールバック  ← ここで経路が変わる
3. HTTPS でも 401 → Reconnecting 1/5 … 5/5
4. 終了(exit 1)

⚠️ 途中の表示は ERROR: Reconnecting... だけで、原因が 401 だとは書かれません。 ネットワークの問題だと誤解しやすいところです。

回線を疑う前に、ログイン状態を見てください。 通信は届いています。届いた先で認証が拒否されているだけです。

直し方

1. まずログイン状態を確認する

codex login status

通信しないコマンドです。 結果は2つだけです。

表示 意味
Not logged in 認証情報が無い。次へ進む
Logged in using ChatGPT 認証はある。3. を見る

2. ログインする

codex login

3. ログイン済みなのに 401 が出る場合

認証情報の置き場所がずれている可能性があります。CODEX_HOME が設定されていると、そちらを読みます。

Windows(PowerShell)

if ($env:CODEX_HOME) { "CODEX_HOME = $env:CODEX_HOME" } else { "既定: $env:USERPROFILE\.codex" }

macOS / Linux

echo "${CODEX_HOME:-$HOME/.codex}"

⚠️ codex login したときと、いま実行しているときで、この値が同じか確認してください。 CI やスクリプトが環境変数を変えていると、別の場所を見にいきます。

4. リトライを待たずに切り上げる

原因が分かっているなら、10回のリトライを待つ意味はありません。Ctrl+C で止めて構いません。

再発防止

  • Reconnecting を見たら、回線ではなく codex login status を先に見る
  • CI では CODEX_HOME を明示して固定する。既定任せにすると、実行環境によって読み先が変わる
  • 認証を必要とする処理の前に codex login status を挟み、失敗したらそこで止める

この手順で直りませんでしたか?

環境を添えて報告いただければ、追加の原因を検証してこのページに反映します。

エラーを報告する