Codex CLI の config.toml でモデル・推論の深さ・プロファイルを切り替える
Codex CLI の設定ファイル ~/.codex/config.toml の主要な項目を解説します。model と model_reasoning_effort の指定、プロジェクトごとの設定、用途別プロファイルの定義と --profile での切り替え、環境変数の扱いを紹介します。
目次
Codex CLI の挙動は ~/.codex/config.toml で決まります。モデル、推論の深さ、承認ポリシー、サンドボックス、MCP サーバーなど、ほぼすべての設定がここに集まっています。この記事では、日常的に触ることになる項目に絞って、書き方と使い分けを整理します。
KEY POINT
この記事で分かること
modelとmodel_reasoning_effortの指定方法と選び方- 用途別プロファイルの定義と
--profileでの切り替え - 環境変数・コマンドラインオプションとの優先順位
config.toml の場所と基本構造
# ~/.codex/config.toml
model = "gpt-5-codex"
model_reasoning_effort = "medium"
approval_policy = "on-request"
sandbox_mode = "workspace-write"
TOML 形式で、トップレベルに既定値、[profiles.名前] や [mcp_servers.名前] のようなテーブルで個別の設定を書きます。ファイルがなければ作成してください。
用語解説
TOML: キー = 値 の形式で書く設定ファイル形式です。文字列はダブルクォート、真偽値は true / false、セクションは [名前] で表します。
モデルと推論の深さ
| キー | 値の例 | 意味 |
|---|---|---|
model | "gpt-5-codex" など | 使用するモデル。利用可能な名前は /model で確認する |
model_reasoning_effort | "low" / "medium" / "high" / "xhigh" / "max" / "ultra" | 推論にかける深さ。高いほど慎重だが遅く、消費も増える。使える段階はモデルとクライアントによるとリファレンスは書いている |
モデル名はリリースごとに変わります。config.toml に書いたモデルが使えなくなった場合はエラーになるので、/model で現在の選択肢を確認して書き換えてください。
推論の深さの目安:
low: 定型的な修正、コメント追加、小さなリファクタリングmedium: 日常の開発全般high: 設計判断、難しいバグの調査、大規模な変更
対話中は /model からモデルと推論の深さを一時的に切り替えられます。config.toml の値は次回起動時の既定です。
effort(推論の深さ)を変更する 3 つの方法
変更を「どのくらい持続させたいか」で使い分けます。
| やりたいこと | 方法 |
|---|---|
| 恒久的に変える | ~/.codex/config.toml の model_reasoning_effort を設定する |
| 1 回だけ変える | codex -c model_reasoning_effort='"high"' "<プロンプト>" |
| セッション中に変える | /model を実行する |
設定リファレンスは、この値を「選んだモデルが公表する推論の深さ。たとえば low、medium、high、xhigh、max、ultra」と説明し、使える段階はモデルとクライアントによると付け加えています(以前のリファレンスにあった minimal は現在は載っていません)。Plan モード用の plan_mode_reasoning_effort と、起動されるエージェント用の agents.default_subagent_reasoning_effort は別のキーです。詳細は Codex CLI で推論の深さ(effort)を変更する方法 にまとめています。
プロファイルで用途を切り替える
同じ設定を毎回オプションで指定するのではなく、プロファイルとして定義します。
model = "gpt-5-codex"
model_reasoning_effort = "medium"
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[profiles.quick]
model_reasoning_effort = "low"
approval_policy = "on-failure"
[profiles.deep]
model_reasoning_effort = "high"
approval_policy = "on-request"
[profiles.readonly]
sandbox_mode = "read-only"
approval_policy = "on-request"
codex --profile quick "typo を直して"
codex --profile deep "認証周りの設計を見直して"
codex --profile readonly "この機能の呼び出し元を洗い出して"
プロファイルに書かなかったキーは、トップレベルの値が使われます。承認とサンドボックスの選び方は approval mode と sandbox 設定の違い を参照してください。
既定のプロファイルを指定する
profile = "quick"
と書くと、--profile を付けないときに quick が使われます。
設定の優先順位
同じ項目が複数の場所で指定された場合、次の順で優先されます。
- コマンドラインオプション(
--model、--sandboxなど) --profileで選んだプロファイルの値- config.toml のトップレベルの値
- Codex の組み込み既定値
「オプション > プロファイル > トップレベル > 既定」と覚えておけば、意図しない値が使われたときに原因を追えます。
その他のよく使う項目
# 起動時に読み込む AGENTS.md の合計サイズ上限(バイト)
project_doc_max_bytes = 32768
# 通知(対応する環境で、タスク完了時にデスクトップ通知)
notify = ["notify-send", "Codex"]
# 履歴の保存
[history]
persistence = "save-all"
キー名や対応状況はバージョンによって変わります。設定が効かない場合は、公式ドキュメントの設定リファレンスで現在の名前を確認してください。
API キーは config.toml に書かない
OPENAI_API_KEY は環境変数か codex login --api-key で登録します。config.toml に直接書くと、ファイルの共有やバックアップ時に漏れる原因になります。
yolo モード(--yolo)は config.toml に書かない
codex --yolo は、公式ドキュメントで --dangerously-bypass-approvals-and-sandbox の別名として記載されているフラグです。承認プロンプトもサンドボックスも通さずにコマンドを実行します。ドキュメントは「使う前に注意してください」と明記しており、--yolo などのフルアクセス設定では Web 検索が既定でライブ結果になるとも書かれています。
これは 1 回の起動で指定するフラグで、config.toml に恒久設定として書くものではありません。設定で近い状態を作るなら approval_policy と sandbox_mode を個別に指定し、使い捨てのコンテナや CI ランナーに限定してください。組み合わせは Codex の承認モードとサンドボックスを使い分ける にまとめています。
MCP サーバーの設定
MCP サーバーも config.toml の [mcp_servers.名前] に書きます。設定例と接続確認の方法は Codex CLI に MCP サーバーを設定する にまとめています。
設定を確認する
対話中に /status を実行すると、現在のモデル、推論の深さ、承認ポリシー、サンドボックス、読み込まれた AGENTS.md が表示されます。config.toml を編集した後は、この画面で反映を確認する習慣をつけてください。
まとめ
- 設定は
~/.codex/config.toml。トップレベルに既定値、[profiles.名前]で用途別の設定を書く modelは/modelで確認できる名前を書き、model_reasoning_effortは low / medium / high / xhigh / max / ultra から選ぶcodex --profile 名前で切り替え、profile = "名前"で既定を決める- 優先順位は「コマンドラインオプション > プロファイル > トップレベル > 既定」
よくある質問
- config.toml はどこにありますか?
- ユーザーのホームディレクトリ配下の ~/.codex/config.toml です。存在しなければ作成します。
- プロジェクトごとに設定を変えられますか?
- プロファイルを定義して --profile で切り替えるのが基本です。リポジトリ内の .codex/ 配下に設定を置ける場合もあるため、公式ドキュメントで対応状況を確認してください。
- Codex CLI で effort(推論の深さ)を変更するには?
- ~/.codex/config.toml の model_reasoning_effort に low / medium / high / xhigh / max / ultra のいずれかを指定します。1 回だけ変えるなら codex -c model_reasoning_effort='"high"'、セッション中なら /model です。
- Codex CLI の yolo モードとは何ですか?
- 公式ドキュメントによると --yolo は --dangerously-bypass-approvals-and-sandbox の別名で、承認もサンドボックスも通さずに実行するモードです。ホストでは使わず、使い捨てのコンテナに限定してください。
読者からの質問と回答
Q. Codex の PreToolUse フックで sys.exit(2) を返しても、Windows ではブロックされずコマンドが実行されてしまいます。PowerShell が終了コード 2 を 1 に変えているようです。確実にブロックする書き方はありますか。
Codex の PreToolUse フックには、ブロックを伝える方法が 2 つ 公式に用意されています。終了コードに頼らないほうを使えば、シェルが終了コードを書き換えても影響を受けません。
方法 1(終了コード): 公式ドキュメントは「You can also use exit code 2 and write the blocking reason to stderr」と書いています。also という語が示すとおり、これは補助的な書き方です。
方法 2(stdout の JSON): hookSpecificOutput を stdout に出す方法です。こちらは終了コード 0 で動きます。
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "本番の設定ファイルは変更できません"
}
}
公式ドキュメントは、トップレベルに decision を "block" にして reason を添える旧形式も受け付けると書いています。なお PreToolUse では stdout のプレーンテキストは無視されます(「Plain text on stdout is ignored」)ので、JSON として出す必要があります。
Windows 専用のコマンドを指定する手もあります。 フックの設定には commandWindows(TOML では command_windows)があり、公式ドキュメントは「an optional Windows-only command override」と説明しています。管理フックの例では Windows 側のコマンドとして py -3 にスクリプトのパスを渡す形が示されています。シェルの差で終了コードが変わるなら、ここに終了コードを保つ呼び出し方を書くのが筋のよい対処です。
フックがどのシェルで起動されるかは公式に書かれていない
公式のフックのページは、コマンドの実行について「run with the session cwd as their working directory」と書くだけで、どのシェルを経由するかを明記していません。PowerShell への言及もありません。したがって「Windows PowerShell 5.1 が終了コード 2 を 1 に変える」という挙動自体は、公式ドキュメントでは確認できませんでした。終了コードに依存しない JSON 形式を使うべき理由は、この不確かさの側にあります。
なお、フックを使うには設定で有効にする必要があります。設定リファレンスの features.hooks は「Enable lifecycle hooks loaded from hooks.json or inline [hooks] config」と説明されています。
config.toml の全体像は Codex の config.toml でできる設定 にまとめてあります。
参考にした一次情報
この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合は お問い合わせからお知らせください。