codex-advisor
# codex-advisor
OpenAI Codex CLI に Claude Code の advisor 相当の「セカンドオピニオン」を追加する
個人用 MCP サーバー。既定では、ChatGPT でログイン済みの Codex CLI を介して
GPT を利用する。Codex CLI の ChatGPT認証またはAPIキー認証、OpenAI API・Claude・Gemini、および OpenAI
互換エンドポイントの任意モデルにも切り替えられる。
## 公開範囲と利用条件
このリポジトリは公開準備中の実験的な個人用ツールです。公開しても、現時点で
マルチユーザー対応、互換性の保証、運用サポート SLA は提供しません。
ライセンス: この個人開発ではライセンスを付与していません。リポジトリには
`LICENSE` ファイルを含めていません。
## セットアップ
前提: Python 3.12以上、uv、Codex CLI 0.144.1以上。`codex/` providerは
既定でChatGPTログインを使う。
```bash
bash install.sh # advisor.toml / advisor.env 作成 + MCP 登録 + AGENTS.md 誘導
codex login status # ChatGPT認証を使う場合に確認
vi ~/.codex/advisor.env # API provider または Codex API認証で使うキーを記入
```
`install.sh` は既存の `advisor.toml` を上書きしない。旧版から移行する場合は、
下記の `model` を手動で変更する。
## 使い方
- Codex が計画前・エラー反復時・完了宣言前に自動で `consult_advisor` を呼ぶ
- 手動相談: 「advisor に相談して」
- ChatGPT認証のGPT: `model = "codex/gpt-5.6-sol"`(既定)
- Codex APIキーのGPT: `model = "codex/gpt-5.6-sol"` に加えて、下記の `[providers.codex]` を設定
- OpenAI API: `model = "openai/<Chat Completions 対応モデル ID>"`
- モデル切替: 「advisor を codex/gpt-5.6-sol にして」(または `~/.codex/advisor.toml` の `model =` を編集)
- 無効化: 「advisor を off にして」または `advisor.toml` で `enabled = false`
`codex/` と `openai/` は同居できる。`codex/` は隔離した Codex CLI 経由で、認証方式を
`chatgpt`(既定)または `api` から明示的に選ぶ。`openai/` は直接HTTP呼び出しで
`OPENAI_API_KEY` を使う。1回の相談では `model` が示す一方だけを使い、認証失敗時に
別の認証方式や `openai/` へ自動フォールバックしない。
## 設定 (~/.codex/advisor.toml)
```toml
enabled = true
model = "codex/gpt-5.6-sol" # "<provider>/<model>"。モデル名は無検証
max_context_chars = 400000 # advisor に渡す会話の上限(古い方から切り詰め)
max_consults_per_session = 20 # セッションあたり相談回数上限
reasoning = "medium" # 任意: low/medium/high/xhigh。デフォルトは medium。reasoning = "" でプロバイダ既定に戻せる
# Codex CLI のAPIキー認証を使う場合だけ指定(ChatGPT認証が既定)
[providers.codex]
auth_method = "api" # chatgpt または api
api_key_env = "OPENAI_API_KEY" # 省略時はCodex CLI保存済み認証を使う
# OpenAI 互換エンドポイントの追加例(OpenRouter / ollama など)
[providers.openrouter]
kind = "openai"
base_url = "https://openrouter.ai/api/v1"
api_key_env = "OPENROUTER_API_KEY"
```
`advisor.toml` は相談ごとに読み直すため、モデル切替にMCP再起動は不要。
`advisor.env` はMCP起動時にだけ読むため、APIキーの追加・変更後はCodexセッションを
再起動する。
`xhigh` は `codex/` と `openai/` providerで利用できる。選択モデルが非対応の場合は
下流のCodex CLIまたはAPIがエラーを返し、値を自動変更しない。Anthropic/Geminiでは
意味の異なる値へ推測変換せず、相談実行前に明示的な非対応エラーを返す。
## セキュリティ
API キーは `~/.codex/advisor.env` のみに置く。ChatGPT認証の `codex/` 子プロセスには
advisor用credentialを渡さない。API認証の `codex/` では、設定した `api_key_env` の
値だけを子プロセス用の `CODEX_API_KEY` として渡し、それ以外のcredentialは除去する。
環境変数を指定しない場合は、Codex CLIの `codex login --with-api-key` で保存した認証を使う。
`api_key_env` を指定した場合、その変数が未設定なら保存済み認証へ切り替えずエラーにする。
子Codexは
一時directory、read-only sandbox、ephemeral sessionで実行し、shell・Web・MCP・
app・subagent等を無効化する。APIエラーに含まれる選択providerのキー値は伏せ字化する。
データ送信: `consult_advisor` は、現在のセッションから復元した user/assistant メッセージ、
tool call、tool result を、設定された advisor provider に送信します。`codex/` では
ログイン中のChatGPT workspace、API providerでは各APIアカウントのデータ処理条件が
適用されます。transcript の秘密情報は自動除去されません。
## 開発
```bash
uv run pytest -q # テスト
uv run ruff check src tests && uv run pyright # lint+型
```
TDQS
Scored across 2 tools
The two tools are completely distinct: one performs a consultation, the other manages configuration. No overlap or ambiguity exists between them.
Tool names use different patterns: 'consult_advisor' follows verb_noun, while 'advisor_config' is noun_noun. The inconsistency is noticeable but both names are clear and self-explanatory.
With only 2 tools, the set feels thin but is appropriate for the narrow scope of advisor consultation and configuration. It covers the essential actions without unnecessary bloat.
The domain of consulting and configuring an advisor is well-covered. A minor gap is the lack of consultation history or logging, but for the stated purpose (strategic guidance and settings) the surface is essentially complete.