unexpected status 401 Unauthorized: Missing bearer or basic authentication in header
結論
認証情報を送れていない状態。10回リトライしてから終わるため、固まったように見える。
確認した版
Codex CLI v0.153.0
確認日
2026年9月3日
最終更新
2026年9月3日
根拠
実機で確認
エラー文字列
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を挟み、失敗したらそこで止める