Tech カテゴリのイメージ

Hermes AgentでChatGPTサブスクを使う。Codex OAuth認証で詰まったところ

Hermes Agentのモデルプロバイダーに「ChatGPT or Codex Subscription(openai-codex)」を選んだところ、モデルを切り替えられなかった。

表示されたのは、次のエラーである。

Could not switch to configured model:
Could not resolve credentials for provider
'ChatGPT or Codex Subscription':
No Codex credentials stored.
Run `hermes auth` to authenticate.

Hermes側にCodex用の認証情報がない、という内容だ。ところが、案内どおりにOAuth認証を始めても一度では完了しなかった。自分の環境では、ChatGPT側でCodexのデバイスコード認証を許可してから、認証をやり直す必要があった。

APIキーではなくopenai-codexを選んだ

今回やりたかったのは、OpenAI APIのキーをHermesへ登録することではない。Hermesの openai-codex プロバイダーを使い、ChatGPTまたはCodexのサブスクリプションに紐づくOAuth認証を通すことだった。

Hermes Agentの公式リポジトリでも、openai-codex はHermesが管理するCodex OAuth認証を使い、認証情報を ~/.hermes/auth.json から読む構成になっている。APIキーを登録する経路とは別である。

認証を追加するため、Hermesを動かしている環境で次を実行した。

Terminal window
hermes auth add openai-codex --type oauth

すると、ブラウザで開くURLと、その場限りのデバイスコードが表示された。

To continue, follow these steps:
1. Open this URL in your browser:
https://auth.openai.com/codex/device
2. Enter this code:
XXXX-XXXXX
Waiting for sign-in...

ここに出るコードは毎回発行される認証情報なので、記事やスクリーンショットで公開しない。上の例でも伏せている。

デバイスコードを入れても拒否された

表示されたURLを開き、コードを入力した。これで終わると思ったが、ChatGPT側に「セキュリティ設定でCodexのデバイスコード認証を有効化してから、もう一度実行する」という趣旨の案内が出た。

最初のエラーは No Codex credentials stored だったので、Hermes側だけを調べたくなる。しかし、この時点で止めていたのはChatGPT側のセキュリティ設定だった。

自分の画面では、ChatGPTの次の場所に設定があった。

設定
└ セキュリティとログイン
└ Codex に対してデバイスコード認証を有効にする

この項目をONにした。設定画面の名称や場所は今後変わる可能性があるため、見つからない場合は、エラー画面に表示された案内とChatGPTのセキュリティ設定を確認するのがよい。

古いコードではなく、新しいコードでやり直す

設定を変えたあと、同じデバイスコードを使い回すのではなく、Hermesの認証コマンドをもう一度実行した。

Terminal window
hermes auth add openai-codex --type oauth

新しく表示されたコードを https://auth.openai.com/codex/device で入力すると、今度は認証が完了した。

Added openai-codex OAuth credential #1:
"openai-codex-oauth-1"

これでHermes側にOpenAI Codex用のOAuth credentialが保存され、openai-codex を選べるようになった。

詰まったときに確認する順番

今回の流れを短くすると、次のようになる。

  1. Hermesで openai-codex を選ぶ
  2. hermes auth add openai-codex --type oauth を実行する
  3. 表示されたOpenAIの認証ページを自分で開く
  4. ChatGPT側から拒否されたら、セキュリティ設定でCodexのデバイスコード認証を確認する
  5. 設定を有効にしたあと、Hermesの認証コマンドを再実行する
  6. 新しく発行されたコードを入力する
  7. Added openai-codex OAuth credential が表示されたことを確認する

No Codex credentials stored は、まだHermesへ認証情報が保存されていないことを示している。ただし、OAuthフローが最後まで進まない原因までHermes側にあるとは限らない。認証ページで止まったなら、ChatGPT側の表示も見る必要がある。

デバイスコードは自分で発行したものだけを使う

デバイスコード認証は、Hermesをリモート環境やブラウザを直接開きにくい環境で動かすときに便利である。一方、コードを知った第三者が認証を誘導するフィッシングにも注意が必要だ。

自分で hermes auth を実行した直後に表示されたコードだけを、自分で開いたOpenAIの認証ページへ入力する。他人から送られたコードは入力せず、ターミナルや認証完了画面のスクリーンショットにもコードを残さない。

常時使う必要がなければ、認証が終わったあとにChatGPT側のデバイスコード認証をOFFへ戻す運用も選べる。利便性のために有効にする設定だからこそ、何の認証に使っているか分かる状態で扱いたい。

以前、CodexとClaude Codeの両方からこのブログを編集できるようにしたときも、接続先だけでなく認証と運用ルールの引き継ぎが重要だった。Hermesでも同じで、モデル名を選ぶだけでは使い始められない。今回はHermesのコマンド、OpenAIの認証ページ、ChatGPTのセキュリティ設定という3か所がそろって、ようやく接続できた。

参考: