高度な設定
ドキュメントの完全な索引については、llms.txtをご覧ください。ドキュメントページの Markdown 版は、ページ URL の末尾に .md を追加すると利用できます。
プロバイダー、ポリシー、統合をより細かく制御する必要がある場合は、これらのオプションを使用します。すぐに始めるには、設定の基本をご覧ください。
プロジェクトのガイダンス、再利用可能な機能、カスタムスラッシュコマンド、サブエージェントのワークフロー、統合の背景については、カスタマイズをご覧ください。設定キーについては、設定リファレンスをご覧ください。
プロファイル
プロファイルを使用すると、名前付きの設定レイヤーを保存し、CLI から切り替えられます。
--profile profile-name を渡すと、Codex は
~/.codex/config.toml を読み込み、その上に ~/.codex/profile-name.config.toml を重ねます。
プロファイル名には、英字、数字、ハイフン、アンダースコアを使用できます。
プロファイルごとに個別の TOML ファイルを作成します。プロファイルファイルではトップレベルの設定キーを使用し、
[profiles.profile-name] の下にネストしないでください。
# ~/.codex/deep-review.config.toml
model = "gpt-5.5"
model_reasoning_effort = "xhigh"
approval_policy = "on-request"
model_catalog_json = "/Users/me/.codex/model-catalogs/deep-review.json"codex --profile deep-review
codex exec --profile deep-review "review this change"プロファイルファイルは、基本のユーザー設定より上、プロジェクト設定と CLI 設定より下の
レイヤーであるため、基本設定と異なる値だけを記述すれば十分です。
プロファイルファイルでは model_catalog_json も上書きできます。両方のファイルで設定されている場合、Codex は
プロファイル側の値を使用します。
Codex 0.134.0 以降では、--profile は config.toml から
[profiles.profile-name] を読み込まなくなり、トップレベルの profile = "profile-name" セレクターも
サポートされなくなりました。従来のプロファイル設定を
~/.codex/profile-name.config.toml に移動してから、対応する
[profiles.profile-name] テーブルと profile = "profile-name" セレクターを
config.toml から削除してください。
CLI からの一時的な上書き
~/.codex/config.toml を編集するだけでなく、CLI から単一の実行に対して設定を上書きできます。
- 専用フラグがある場合は、それを優先してください(例:
--model)。 - 任意のキーを上書きする必要がある場合は、
-c/--configを使用します。
例:
# Dedicated flag
codex --model gpt-5.6-terra
# Generic key/value override (value is TOML, not JSON)
codex --config model='"gpt-5.6-terra"'
codex --config sandbox_workspace_write.network_access=true
codex --config 'shell_environment_policy.include_only=["PATH","HOME"]'注意事項:
- キーではドット記法を使用して、ネストされた値を設定できます(例:
mcp_servers.context7.enabled=false)。 --configの値は TOML として解析されます。不明な場合は、シェルが空白で値を分割しないよう引用符で囲んでください。- 値を TOML として解析できない場合、Codex は文字列として扱います。
設定と状態の保存場所
Codex はローカル状態を CODEX_HOME(デフォルトは ~/.codex)の下に保存します。
そこに配置される一般的なファイルは次のとおりです。
config.toml(ローカル設定)auth.json(ファイルベースの認証情報ストレージを使用する場合)、または OS のキーチェーン/キーリングhistory.jsonl(履歴の永続化が有効な場合)- ログやキャッシュなど、その他のユーザー単位の状態
認証の詳細(認証情報の保存モードを含む)については、認証をご覧ください。設定キーの完全な一覧については、設定リファレンスをご覧ください。
リポジトリまたはシステムパスにチェックインされる共有のデフォルト、ルール、スキルについては、チーム設定をご覧ください。
組み込みの OpenAI プロバイダーを LLM プロキシ、ルーター、またはデータレジデンシーが有効なプロジェクトに向けるだけでよい場合は、新しいプロバイダーを定義せず、config.toml で openai_base_url を設定します。これにより、別の model_providers.<id> エントリを必要とせずに、組み込みの openai プロバイダーのベース URL が変更されます。
openai_base_url = "https://us.api.openai.com/v1"プロジェクト設定ファイル(.codex/config.toml)
ユーザー設定に加えて、Codex はリポジトリ内の .codex/config.toml ファイルから、プロジェクトスコープの上書きを読み込みます。Codex はプロジェクトルートから現在の作業ディレクトリまでをたどり、見つかったすべての .codex/config.toml を読み込みます。複数のファイルで同じキーが定義されている場合、作業ディレクトリに最も近いファイルが優先されます。
セキュリティ上、Codex がプロジェクトスコープの設定ファイルを読み込むのは、プロジェクトが信頼されている場合のみです。プロジェクトが信頼されていない場合、Codex は .codex/config.toml、プロジェクトローカルのフック、プロジェクトローカルのルールを含む、プロジェクトの .codex/ レイヤーを無視します。ユーザーレイヤーとシステムレイヤーは分離されたままで、引き続き読み込まれます。
プロジェクト設定内の相対パス(例: model_instructions_file)は、config.toml を含む .codex/ フォルダーを基準に解決されます。
プロジェクト設定ファイルでは、認証情報の転送先を変更する設定、ホスト所有アプリの
リクエストメタデータを変更する設定、プロバイダー認証を変更する設定、設定プロファイルを選択する設定、
またはマシンローカルの通知/テレメトリコマンドを実行する設定を上書きできません。Codex はプロジェクトローカルの
.codex/config.toml にある次のキーを無視し、検出時に起動警告を
表示します: openai_base_url、chatgpt_base_url、
apps_mcp_product_sku、model_provider、model_providers、notify、
profile、profiles、experimental_realtime_ws_base_url、otel。プロバイダー、
通知、テレメトリのキーはユーザーレベルの
~/.codex/config.toml で設定し、設定プロファイルは --profile profile-name
と ~/.codex/profile-name.config.toml で選択してください。
フック
Codex は、アクティブな設定レイヤーの隣にある config.toml ファイル内の hooks.json ファイル、またはインラインの
[hooks] テーブルから、ライフサイクルフックを読み込むこともできます。
実際には、次の 4 つの場所が最も便利です。
~/.codex/hooks.json~/.codex/config.toml<repo>/.codex/hooks.json<repo>/.codex/config.toml
プロジェクトローカルのフックが読み込まれるのは、プロジェクトの .codex/ レイヤーが信頼されている場合のみです。
ユーザーレベルのフックは、プロジェクトの信頼状態とは独立しています。
インライン TOML フックは、hooks.json と同じイベント構造を使用します。
[[hooks.PreToolUse]]
matcher = "^Bash$"
[[hooks.PreToolUse.hooks]]
type = "command"
command = '/usr/bin/python3 "$(git rev-parse --show-toplevel)/.codex/hooks/pre_tool_use_policy.py"'
timeout = 30
statusMessage = "Checking Bash command"単一のレイヤーに hooks.json とインラインの [hooks] の両方が含まれている場合、Codex は
両方を読み込み、警告を表示します。レイヤーごとにいずれか一方の表現を使用してください。
現在のイベント一覧、入力フィールド、出力動作、制限事項については、 フックをご覧ください。
エージェントロール(config.toml 内の [agents])
サブエージェントのロール設定(config.toml 内の [agents])については、サブエージェントをご覧ください。
プロジェクトルートの検出
Codex は、プロジェクトルートに到達するまで作業ディレクトリから上位へたどることで、プロジェクト設定(.codex/ レイヤーや AGENTS.md など)を検出します。
デフォルトでは、Codex は .git を含むディレクトリをプロジェクトルートとして扱います。この動作をカスタマイズするには、config.toml で project_root_markers を設定します。
# Treat a directory as the project root when it contains any of these markers.
project_root_markers = [".git", ".hg", ".sl"]親ディレクトリの検索を省略し、現在の作業ディレクトリをプロジェクトルートとして扱うには、project_root_markers = [] を設定します。
カスタムモデルプロバイダー
モデルプロバイダーは、Codex がモデルに接続する方法(ベース URL、ワイヤー API、認証、任意の HTTP ヘッダー)を定義します。カスタムプロバイダーでは、予約済みの組み込みプロバイダー ID(openai、ollama、lmstudio)を再利用できません。
追加のプロバイダーを定義し、model_provider でそれらを指定します。
model = "gpt-5.6-terra"
model_provider = "proxy"
[model_providers.proxy]
name = "OpenAI using LLM proxy"
base_url = "http://proxy.example.com"
env_key = "OPENAI_API_KEY"
[model_providers.local_ollama]
name = "Ollama"
base_url = "http://localhost:11434/v1"
[model_providers.mistral]
name = "Mistral"
base_url = "https://api.mistral.ai/v1"
env_key = "MISTRAL_API_KEY"カスタムプロバイダーがスタンドアロンのウェブ検索エンドポイントをサポートする場合は、 プロバイダー設定でその機能を宣言します。
[model_providers.proxy]
name = "OpenAI using LLM proxy"
base_url = "https://proxy.example.com/v1"
env_key = "OPENAI_API_KEY"
supports_standalone_web_search = trueカスタムプロバイダーでは、この設定のデフォルトは false です。スタンドアロンのウェブ検索は
開発中であり、デフォルトでは無効です。プロバイダー機能を true に設定しても
有効にはなりません。プロバイダーが互換性のあるエンドポイントをサポートし、
選択したモデルとランタイムがスタンドアロン検索をサポートしている必要があります。
設定された web_search モードと
管理対象の検索制限も引き続き適用されます。
必要に応じてリクエストヘッダーを追加します。
[model_providers.example]
http_headers = { "X-Example-Header" = "example-value" }
env_http_headers = { "X-Example-Features" = "EXAMPLE_FEATURES" }プロバイダーが外部の認証情報ヘルパーから bearer token を取得するよう Codex に要求する場合は、コマンドベースの認証を使用します。
[model_providers.proxy]
name = "OpenAI using LLM proxy"
base_url = "https://proxy.example.com/v1"
wire_api = "responses"
[model_providers.proxy.auth]
command = "/usr/local/bin/fetch-codex-token"
args = ["--audience", "codex"]
timeout_ms = 5000
refresh_interval_ms = 300000認証コマンドは stdin を受け取らず、トークンを stdout に出力する必要があります。Codex は前後の空白を削除し、空のトークンをエラーとして扱い、refresh_interval_ms の時点で事前に更新します。認証の再試行後にのみ更新するには、refresh_interval_ms = 0 を設定してください。[model_providers.<id>.auth] を env_key、experimental_bearer_token、requires_openai_auth と組み合わせないでください。
Amazon Bedrock プロバイダー
Codex には、組み込みの amazon-bedrock モデルプロバイダーが含まれています。これを
model_provider として直接設定します。カスタムプロバイダーとは異なり、この組み込みプロバイダーがサポートするのは、
ネストされた AWS プロファイルとリージョンの上書きのみです。
model_provider = "amazon-bedrock"
model = "<bedrock-model-id>"
[model_providers.amazon-bedrock.aws]
profile = "default"
region = "eu-central-1"profile を省略すると、Codex は標準の AWS 認証情報チェーンを使用します。
リクエストを処理する、サポート対象の Bedrock リージョンを region に設定してください。
完全なセットアップ手順、認証オプション、サポート対象モデル、機能の 利用可否については、Amazon Bedrock で ChatGPT Work と Codex を使用するをご覧ください。
OSS モード(ローカルプロバイダー)
--oss を渡すと、Codex は Ollama や LM
Studio などのローカルな「オープンソース」プロバイダーに対して実行できます。単一の実行で使用するプロバイダーを
--local-provider で選択するか、oss_provider でデフォルトを設定します。どちらも設定されていない場合、
対話型 CLI で選択を求められます。codex exec はエラーで終了します。
# Default local provider used with `--oss`
oss_provider = "ollama" # or "lmstudio"Azure プロバイダーとプロバイダーごとの調整
[model_providers.azure]
name = "Azure"
base_url = "https://YOUR_PROJECT_NAME.openai.azure.com/openai"
env_key = "AZURE_OPENAI_API_KEY"
query_params = { api-version = "2025-04-01-preview" }
wire_api = "responses"
request_max_retries = 4
stream_max_retries = 10
stream_idle_timeout_ms = 300000組み込みの OpenAI プロバイダーのベース URL を変更するには、openai_base_url を使用します。組み込みプロバイダーの ID は上書きできないため、[model_providers.openai] を作成しないでください。
データレジデンシーを使用する ChatGPT のお客様
データレジデンシーを有効にして作成したプロジェクトでは、モデルプロバイダーを作成し、正しいプレフィックスを使用して base_url を更新できます。
model_provider = "openaidr"
[model_providers.openaidr]
name = "OpenAI Data Residency"
base_url = "https://us.api.openai.com/v1" # Replace 'us' with domain prefixモデルの推論、詳細度、制限
model_reasoning_summary = "none" # Disable summaries
model_verbosity = "low" # Shorten responses
model_supports_reasoning_summaries = true # Force reasoning
model_context_window = 128000 # Context window sizemodel_verbosity は、Responses API を使用するプロバイダーにのみ適用されます。Chat Completions プロバイダーでは、この設定は無視されます。
承認ポリシーとサンドボックスモード
承認の厳格さ(Codex が一時停止するタイミングに影響)とサンドボックスレベル(ファイル/ネットワークアクセスに影響)を選択します。
config.toml を編集する際に留意すべき運用上の詳細については、一般的なサンドボックスと承認の組み合わせ、書き込み可能なルート内の保護されたパス、ネットワークアクセスをご覧ください。
ファイルシステムとネットワークアクセスをまとめて設定するベータ版の権限プロファイルについては、権限をご覧ください。
詳細な承認ポリシー(approval_policy = { granular = { ... } })を使用して、プロンプトのカテゴリごとに許可または自動拒否することもできます。これは、一部のケースでは通常の対話型承認を使用しつつ、request_permissions やスキルスクリプトのプロンプトなど、その他のケースでは自動的に拒否して安全側に倒したい場合に便利です。
対象となる対話型の承認リクエストを自動レビュー経由で処理するには、
approvals_reviewer = "auto_review" を設定します。これにより変更されるのはレビュー担当であり、サンドボックスの
境界ではありません。
ローカルのレビュー担当向けポリシー指示には、[auto_review].policy を使用します。管理対象の
guardian_policy_config が優先されます。
approval_policy = "untrusted" # Other options: on-request, never, or { granular = { ... } }
approvals_reviewer = "user" # Or "auto_review" for automatic review
sandbox_mode = "workspace-write"
allow_login_shell = false # Optional hardening: disallow login shells for shell tools
# Example granular approval policy:
# approval_policy = { granular = {
# sandbox_approval = true,
# rules = true,
# mcp_elicitations = true,
# request_permissions = false,
# skill_approval = false
# } }
[sandbox_workspace_write]
exclude_tmpdir_env_var = false # Allow $TMPDIR
exclude_slash_tmp = false # Allow /tmp
writable_roots = ["/Users/YOU/.pyenv/shims"]
network_access = false # Opt in to outbound network
[auto_review]
policy = """
Use your organization's automatic review policy.
"""名前付き権限プロファイル
組み込みプロファイル、カスタムプロファイルの構文、ファイルシステムと ネットワーク設定の完全なモデルについては、権限をご覧ください。
キーの完全な一覧と要件の制約については、 設定リファレンスと 管理対象の設定をご覧ください。
サンドボックスを完全に無効にします(環境ですでにプロセスが隔離されている場合にのみ使用してください)。
sandbox_mode = "danger-full-access"シェル環境ポリシー
shell_environment_policy は、Codex が起動したコマンドに渡す環境変数を
制御します。inherit = "none" を使用して空の環境から開始するか、
inherit = "core" を使用して絞り込まれた変数セットを継承します。不要なシークレットが
起動したコマンドに渡らないよう、明示的な値とキーベースのフィルターを追加します。
[shell_environment_policy]
inherit = "core"
set = { MY_FLAG = "1" }
ignore_default_excludes = false
[shell_environment_policy.filters]
"AWS_*" = "exclude"
"AZURE_*" = "exclude"フィルターパターンでは大文字と小文字が区別されず、* と ? がサポートされます。一致する変数を
削除するには、"exclude" を使用します。パターンのいずれかで "include" を使用すると、Codex は
包含パターンに一致する変数のみを保持します。包含では、すでに除外された変数は
復元されません。フィルターキーは、設定レイヤー間で大文字と小文字を区別せずに
マージされます。
ignore_default_excludes のデフォルトは true であるため、Codex は KEY、SECRET、TOKEN を含む変数名を
自動的には削除しません。明示的なフィルターが実行される前にこれらの自動除外を適用するには、
false に設定します。
Codex は、自動除外、カスタム除外、
set の値、最後に包含パターンの許可リストの順に適用します。set は
除外後に実行されるため、除外された変数を復元できます。包含パターンの許可リストでは、
復元された値も削除される可能性があります。
従来の exclude 配列と include_only 配列も、既存の
設定で引き続きサポートされます。同じ設定レイヤーで、いずれかの配列を
[shell_environment_policy.filters] と組み合わせないでください。Codex は
この組み合わせを拒否します。
MCP サーバー
設定の詳細については、専用の MCP ドキュメントをご覧ください。
オブザーバビリティとテレメトリ
OpenTelemetry(OTel)のログエクスポートを有効にすると、Codex の実行(API リクエスト、SSE/イベント、プロンプト、ツールの承認/結果)を追跡できます。デフォルトでは無効です。[otel] でオプトインします。
[otel]
environment = "staging" # defaults to "dev"
exporter = "none" # set to otlp-http or otlp-grpc to send events
log_user_prompt = false # redact user prompts unless explicitly enabledエクスポーターを選択します。
[otel]
exporter = { otlp-http = {
endpoint = "https://otel.example.com/v1/logs",
protocol = "binary",
headers = { "x-otlp-api-key" = "${OTLP_TOKEN}" }
}}[otel]
exporter = { otlp-grpc = {
endpoint = "https://otel.example.com:4317",
headers = { "x-otlp-meta" = "abc123" }
}}exporter = "none" の場合、Codex はイベントを記録しますが、何も送信しません。エクスポーターは非同期でバッチ処理し、終了時にフラッシュします。イベントメタデータには、サービス名、CLI バージョン、環境タグ、会話 ID、モデル、サンドボックス/承認設定、イベントごとのフィールドが含まれます(設定リファレンスを参照)。
送信される内容
Codex は、実行とツール使用について構造化ログイベントを送信します。代表的なイベントタイプは次のとおりです。
codex.conversation_starts(モデル、推論設定、サンドボックス/承認ポリシー)codex.api_request(試行、ステータス/成功、所要時間、エラーの詳細)codex.sse_event(ストリームイベントの種類、成功/失敗、所要時間、およびresponse.completedのトークン数)codex.websocket_requestとcodex.websocket_event(リクエストの所要時間、およびメッセージごとの種類/成功/エラー)codex.user_prompt(長さ。明示的に有効にしない限り、内容は編集されます)codex.tool_decision(承認/拒否、および判断元が設定かユーザーか)codex.tool_result(所要時間、成功、出力の抜粋)
送信される OTel メトリクス
OTel メトリクスパイプラインが有効な場合、Codex は API、ストリーム、ツールのアクティビティについて、カウンターと所要時間のヒストグラムを送信します。
以下の各メトリクスには、デフォルトのメタデータタグ auth_mode、originator、session_source、model、app.version も含まれます。
| メトリクス | タイプ | フィールド | 説明 |
|---|---|---|---|
codex.api_request |
カウンター | status, success |
HTTP ステータスおよび成功/失敗別の API リクエスト数。 |
codex.api_request.duration_ms |
ヒストグラム | status, success |
API リクエストの所要時間(ミリ秒)。 |
codex.sse_event |
カウンター | kind, success |
イベントの種類および成功/失敗別の SSE イベント数。 |
codex.sse_event.duration_ms |
ヒストグラム | kind, success |
SSE イベント処理の所要時間(ミリ秒)。 |
codex.websocket.request |
カウンター | success |
成功/失敗別の WebSocket リクエスト数。 |
codex.websocket.request.duration_ms |
ヒストグラム | success |
WebSocket リクエストの所要時間(ミリ秒)。 |
codex.websocket.event |
カウンター | kind, success |
タイプおよび成功/失敗別の WebSocket メッセージ/イベント数。 |
codex.websocket.event.duration_ms |
ヒストグラム | kind, success |
WebSocket メッセージ/イベント処理の所要時間(ミリ秒)。 |
codex.tool.call |
カウンター | tool, success |
ツール名および成功/失敗別のツール呼び出し数。 |
codex.tool.call.duration_ms |
ヒストグラム | tool, success |
ツール名および結果別のツール実行時間(ミリ秒)。 |
テレメトリに関するセキュリティとプライバシーの詳細なガイダンスについては、セキュリティをご覧ください。
メトリクス
デフォルトでは、Codex は少量の匿名の使用状況データと正常性データを定期的に OpenAI へ送信します。これは、Codex が正しく動作していない状況を検出し、使用されている機能や設定オプションを把握するのに役立ちます。これにより、Codex チームは重要な事項に注力できます。これらのメトリクスには、個人を特定できる情報(PII)は含まれません。メトリクス収集は、OTel のログ/トレースのエクスポートとは独立しています。
マシン上の ChatGPT デスクトップアプリ、Codex CLI、IDE 拡張機能全体でメトリクス収集を完全に無効にする場合は、設定で分析フラグを設定します。
[analytics]
enabled = false各メトリクスには、固有のフィールドに加えて、以下のデフォルトコンテキストフィールドが含まれます。
デフォルトのコンテキストフィールド(すべてのイベント/メトリクスに適用)
auth_mode:swic|api|unknown。model: 使用したモデルの名前。app.version: Codex のバージョン。
メトリクスカタログ
各メトリクスには、必須フィールドと上記のデフォルトコンテキストフィールドが含まれます。以下のメトリクス名では、codex. プレフィックスを省略しています。
ほとんどのメトリクス名は codex-rs/otel/src/metrics/names.rs に集約されています。このファイル以外で送信される機能固有のメトリクスも、ここに含まれています。
メトリクスに tool フィールドが含まれる場合、その値は使用された内部ツール(apply_patch や shell など)を表し、実際のシェルコマンドや、codex が適用しようとしているパッチは含まれません。
ランタイムとモデルのトランスポート
| メトリクス | タイプ | フィールド | 説明 |
|---|---|---|---|
api_request |
カウンター | status, success |
HTTP ステータスおよび成功/失敗別の API リクエスト数。 |
api_request.duration_ms |
ヒストグラム | status, success |
API リクエストの所要時間(ミリ秒)。 |
sse_event |
カウンター | kind, success |
イベントの種類および成功/失敗別の SSE イベント数。 |
sse_event.duration_ms |
ヒストグラム | kind, success |
SSE イベント処理の所要時間(ミリ秒)。 |
websocket.request |
カウンター | success |
成功/失敗別の WebSocket リクエスト数。 |
websocket.request.duration_ms |
ヒストグラム | success |
WebSocket リクエストの所要時間(ミリ秒)。 |
websocket.event |
カウンター | kind, success |
タイプおよび成功/失敗別の WebSocket メッセージ/イベント数。 |
websocket.event.duration_ms |
ヒストグラム | kind, success |
WebSocket メッセージ/イベント処理の所要時間(ミリ秒)。 |
responses_api_overhead.duration_ms |
ヒストグラム | WebSocket レスポンスにおける Responses API のオーバーヘッド時間。 | |
responses_api_inference_time.duration_ms |
ヒストグラム | WebSocket レスポンスにおける Responses API の推論時間。 | |
responses_api_engine_iapi_ttft.duration_ms |
ヒストグラム | Responses API エンジンの IAPI における最初のトークンまでの時間。 | |
responses_api_engine_service_ttft.duration_ms |
ヒストグラム | Responses API エンジンサービスにおける最初のトークンまでの時間。 | |
responses_api_engine_iapi_tbt.duration_ms |
ヒストグラム | Responses API エンジンの IAPI におけるトークン間の時間。 | |
responses_api_engine_service_tbt.duration_ms |
ヒストグラム | Responses API エンジンサービスにおけるトークン間の時間。 | |
transport.fallback_to_http |
カウンター | from_wire_api |
WebSocket から HTTP へのフォールバック回数。 |
remote_models.fetch_update.duration_ms |
ヒストグラム | リモートモデル定義の取得時間。 | |
remote_models.load_cache.duration_ms |
ヒストグラム | リモートモデルキャッシュの読み込み時間。 | |
startup_prewarm.duration_ms |
ヒストグラム | status |
結果別の起動時プリウォーム所要時間。 |
startup_prewarm.age_at_first_turn_ms |
ヒストグラム | status |
最初の実際のターンで解決された時点の起動時プリウォーム経過時間。 |
cloud_requirements.fetch.duration_ms |
ヒストグラム | ワークスペース管理のクラウド要件の取得時間。 | |
cloud_requirements.fetch_attempt |
カウンター | 注記を参照 | ワークスペース管理のクラウド要件の取得試行回数。 |
cloud_requirements.fetch_final |
カウンター | 注記を参照 | ワークスペース管理のクラウド要件取得の最終結果。 |
cloud_requirements.load |
カウンター | trigger, outcome |
ワークスペース管理のクラウド要件の読み込み結果。 |
cloud_requirements.fetch_attempt メトリクスには、trigger、attempt、outcome、status_code フィールドが含まれます。cloud_requirements.fetch_final メトリクスには、trigger、outcome、reason、attempt_count、status_code フィールドが含まれます。
ターンとツールのアクティビティ
| メトリクス | タイプ | フィールド | 説明 |
|---|---|---|---|
turn.e2e_duration_ms |
ヒストグラム | ターン全体のエンドツーエンド時間。 | |
turn.ttft.duration_ms |
ヒストグラム | ターンで最初のトークンが出るまでの時間。 | |
turn.ttfm.duration_ms |
ヒストグラム | ターンで最初のモデル出力項目が出るまでの時間。 | |
turn.network_proxy |
カウンター | active, tmp_mem_enabled |
ターンで管理対象のネットワークプロキシがアクティブだったかどうか。 |
turn.memory |
カウンター | read_allowed, feature_enabled, config_use_memories, has_citations |
ターンごとのメモリ読み取り可否とメモリ引用の使用状況。 |
turn.tool.call |
ヒストグラム | tmp_mem_enabled |
ターン内のツール呼び出し数。 |
turn.token_usage |
ヒストグラム | token_type, tmp_mem_enabled |
トークンタイプ(total、input、cached_input、output、reasoning_output)別のターンごとのトークン使用量。 |
tool.call |
カウンター | tool, success |
ツール名および成功/失敗別のツール呼び出し数。 |
tool.call.duration_ms |
ヒストグラム | tool, success |
ツール名および結果別のツール実行時間(ミリ秒)。 |
tool.unified_exec |
カウンター | tty |
TTY モード別の統合 exec ツール呼び出し。 |
approval.requested |
カウンター | tool, approved |
ツール承認リクエストの結果(approved、approved_with_amendment、approved_for_session、denied、abort)。 |
mcp.call |
カウンター | 注記を参照 | MCP ツール呼び出しの結果。 |
mcp.call.duration_ms |
ヒストグラム | 注記を参照 | MCP ツール呼び出しの所要時間。 |
mcp.tools.list.duration_ms |
ヒストグラム | cache |
キャッシュのヒット/ミス状態を含む MCP ツール一覧取得時間。 |
mcp.tools.fetch_uncached.duration_ms |
ヒストグラム | キャッシュミスした MCP ツール取得の所要時間。 | |
mcp.tools.cache_write.duration_ms |
ヒストグラム | Codex Apps MCP ツールキャッシュの書き込み時間。 | |
hooks.run |
カウンター | hook_name, source, status |
フック名、ソース、ステータス別のフック実行数。 |
hooks.run.duration_ms |
ヒストグラム | hook_name, source, status |
フック実行の所要時間(ミリ秒)。 |
mcp.call と mcp.call.duration_ms のメトリクスには status が含まれます。通常のツール呼び出しの送信には tool も含まれ、利用可能な場合は connector_id と connector_name も含まれます。ブロックされた Codex Apps MCP 呼び出しでは、status のみを伴う mcp.call が送信されることがあります。
スレッド、タスク、機能
| メトリクス | タイプ | フィールド | 説明 |
|---|---|---|---|
feature.state |
カウンター | feature, value |
デフォルトと異なる機能値(デフォルト以外の値ごとに 1 行を送信)。 |
status_line |
カウンター | 設定済みのステータス行で開始されたセッション。 | |
model_warning |
カウンター | モデルに送信された警告。 | |
thread.started |
カウンター | is_git |
新規作成されたスレッド。作業ディレクトリが Git リポジトリ内かどうかでタグ付け。 |
conversation.turn.count |
カウンター | スレッド終了時に記録される、スレッドごとのユーザー/アシスタントのターン数。 | |
thread.fork |
カウンター | source |
既存のスレッドをフォークして作成された新しいスレッド。 |
thread.rename |
カウンター | 名前が変更されたスレッド。 | |
thread.side |
カウンター | source |
作成されたサイド会話。 |
thread.skills.enabled_total |
ヒストグラム | 新しいスレッドで有効になっているスキル数。 | |
thread.skills.kept_total |
ヒストグラム | プロンプトのレンダリング後も保持された有効なスキル数。 | |
thread.skills.truncated |
ヒストグラム | スキルのレンダリングで有効なスキル一覧が切り詰められたかどうか(1 または 0)。 |
|
task.compact |
カウンター | type |
タイプ(remote または local)ごとの圧縮回数。手動と自動を含みます。 |
task.review |
カウンター | 実行されたレビューの回数。 | |
task.undo |
カウンター | 実行された取り消し操作の回数。 | |
task.user_shell |
カウンター | ユーザーによるシェル操作の回数(TUI の ! など)。 |
|
shell_snapshot |
カウンター | 注記を参照 | シェルスナップショットの取得が成功したかどうか。 |
shell_snapshot.duration_ms |
ヒストグラム | success |
シェルスナップショットの取得時間。 |
skill.injected |
カウンター | status, skill |
スキル別のスキル注入結果。 |
plugins.startup_sync |
カウンター | transport, status |
キュレーション済みプラグインの起動時同期試行。 |
plugins.startup_sync.final |
カウンター | transport, status |
キュレーション済みプラグインの起動時同期の最終結果。 |
multi_agent.spawn |
カウンター | role |
ロール別のエージェント起動数。 |
multi_agent.resume |
カウンター | エージェントの再開。 | |
multi_agent.nickname_pool_reset |
カウンター | エージェントのニックネームプールのリセット。 |
shell_snapshot メトリクスには success が含まれ、失敗時には failure_reason も含まれます。
メモリとローカル状態
| メトリクス | タイプ | フィールド | 説明 |
|---|---|---|---|
memory.phase1 |
カウンター | status |
ステータス別のメモリフェーズ 1 ジョブ数。 |
memory.phase1.e2e_ms |
ヒストグラム | メモリフェーズ 1 のエンドツーエンド所要時間。 | |
memory.phase1.output |
カウンター | 書き込まれたメモリフェーズ 1 の出力数。 | |
memory.phase1.token_usage |
ヒストグラム | token_type |
トークンタイプ別のメモリフェーズ 1 のトークン使用量。 |
memory.phase2 |
カウンター | status |
ステータス別のメモリフェーズ 2 ジョブ数。 |
memory.phase2.e2e_ms |
ヒストグラム | メモリフェーズ 2 のエンドツーエンド所要時間。 | |
memory.phase2.input |
カウンター | メモリフェーズ 2 の入力数。 | |
memory.phase2.token_usage |
ヒストグラム | token_type |
トークンタイプ別のメモリフェーズ 2 のトークン使用量。 |
memories.usage |
カウンター | kind, tool, success |
種類、ツール、成功/失敗別のメモリ使用状況。 |
external_agent_config.detect |
カウンター | 注記を参照 | 移行項目タイプ別の外部エージェント設定の検出数。 |
external_agent_config.import |
カウンター | 注記を参照 | 移行項目タイプ別の外部エージェント設定のインポート数。 |
db.backfill |
カウンター | status |
初期状態 DB バックフィルの結果(upserted、failed)。 |
db.backfill.duration_ms |
ヒストグラム | status |
初期状態 DB バックフィルの所要時間。 |
db.error |
カウンター | stage |
状態 DB 操作中のエラー。 |
external_agent_config.detect と external_agent_config.import のメトリクスには migration_type が含まれ、スキルの移行には skills_count も含まれます。
Windows サンドボックス
| メトリクス | タイプ | フィールド | 説明 |
|---|---|---|---|
windows_sandbox.setup_success |
カウンター | originator, mode |
Windows サンドボックスのセットアップ成功。 |
windows_sandbox.setup_failure |
カウンター | originator, mode |
Windows サンドボックスのセットアップ失敗。 |
windows_sandbox.setup_duration_ms |
ヒストグラム | result, originator, mode |
Windows サンドボックスのセットアップ所要時間。 |
windows_sandbox.elevated_setup_success |
カウンター | 昇格版 Windows サンドボックスのセットアップ成功。 | |
windows_sandbox.elevated_setup_failure |
カウンター | 注記を参照 | 昇格版 Windows サンドボックスのセットアップ失敗。 |
windows_sandbox.elevated_setup_canceled |
カウンター | 注記を参照 | キャンセルされた昇格版 Windows サンドボックスのセットアップ試行。 |
windows_sandbox.elevated_setup_duration_ms |
ヒストグラム | result |
昇格版サンドボックスのセットアップ所要時間。 |
windows_sandbox.elevated_prompt_shown |
カウンター | 昇格版サンドボックスのセットアッププロンプトの表示。 | |
windows_sandbox.elevated_prompt_accept |
カウンター | 昇格版サンドボックスのセットアッププロンプトの承認。 | |
windows_sandbox.elevated_prompt_use_legacy |
カウンター | 昇格プロンプトでユーザーが従来のサンドボックスを選択。 | |
windows_sandbox.elevated_prompt_quit |
カウンター | 昇格プロンプトでユーザーが終了。 | |
windows_sandbox.fallback_prompt_shown |
カウンター | フォールバック用サンドボックスプロンプトの表示。 | |
windows_sandbox.fallback_retry_elevated |
カウンター | フォールバックプロンプトから昇格セットアップを再試行。 | |
windows_sandbox.fallback_use_legacy |
カウンター | フォールバックプロンプトで従来のサンドボックスを選択。 | |
windows_sandbox.fallback_prompt_quit |
カウンター | フォールバックプロンプトでユーザーが終了。 | |
windows_sandbox.legacy_setup_preflight_failed |
カウンター | 注記を参照 | 従来の Windows サンドボックスのセットアップ事前チェック失敗。 |
windows_sandbox.setup_elevated_sandbox_command |
カウンター | 昇格版サンドボックスのセットアップコマンドの呼び出し。 | |
windows_sandbox.createprocessasuserw_failed |
カウンター | error_code, path_kind, exe, level |
Windows の CreateProcessAsUserW の失敗。 |
昇格されたセットアップの失敗メトリクスには、Windows のセットアップ失敗の詳細を取得できる場合、code と message が含まれます。また、共有セットアップパスから出力された場合は、originator が含まれることがあります。windows_sandbox.legacy_setup_preflight_failed メトリクスには、共有セットアップパスから出力された場合、originator が含まれますが、フォールバックプロンプトのプリフライト失敗にはフィールドが一切含まれないことがあります。
フィードバックの制御
デフォルトでは、ローカルクライアントでユーザーが /feedback からフィードバックを送信できます。マシン上の ChatGPT デスクトップアプリ、Codex CLI、IDE 拡張機能のすべてでフィードバック収集を無効にするには、設定を更新します。
[feedback]
enabled = false無効にすると、/feedback に無効であることを示すメッセージが表示され、Codex はフィードバックの送信を拒否します。
推論イベントを非表示または表示する
(CI ログなどで)ノイズとなる「推論」の出力を減らしたい場合は、非表示にできます。
hide_agent_reasoning = trueモデルが生の推論内容を出力したときに、それを表示したい場合は、次のように設定します。
show_raw_agent_reasoning = true生の推論は、ワークフロー上問題がない場合にのみ有効にしてください。一部のモデル/プロバイダー(gpt-oss など)は生の推論を出力しません。その場合、この設定による目に見える変化はありません。
通知
Codex が対応イベント(現在は agent-turn-complete のみ)を出力するたびに外部プログラムを起動するには、notify を使用します。これは、デスクトップのトースト通知、チャットの Webhook、CI の更新、または組み込みの TUI 通知では対応できない別経路のアラートに便利です。
notify = ["python3", "/path/to/notify.py"]agent-turn-complete に反応する notify.py の例(抜粋)です。
#!/usr/bin/env python3
import json, subprocess, sys
def main() -> int:
notification = json.loads(sys.argv[1])
if notification.get("type") != "agent-turn-complete":
return 0
title = f"Codex: {notification.get('last-assistant-message', 'Turn Complete!')}"
message = " ".join(notification.get("input-messages", []))
subprocess.check_output([
"terminal-notifier",
"-title", title,
"-message", message,
"-group", "codex-" + notification.get("thread-id", ""),
"-activate", "com.googlecode.iterm2",
])
return 0
if __name__ == "__main__":
sys.exit(main())スクリプトは単一の JSON 引数を受け取ります。一般的なフィールドは次のとおりです。
type(現在はagent-turn-complete)thread-id(セッション識別子)turn-id(ターン識別子)cwd(作業ディレクトリ)input-messages(そのターンにつながったユーザーメッセージ)last-assistant-message(最後のアシスタントメッセージのテキスト)
スクリプトをディスク上の任意の場所に配置し、notify でその場所を指定します。
notify と tui.notifications の違い
notifyは外部プログラムを実行します(Webhook、デスクトップ通知、CI フックに適しています)。tui.notificationsは TUI に組み込まれており、必要に応じてイベント種別(agent-turn-completeやapproval-requestedなど)で絞り込めます。tui.notification_methodは、TUI がターミナル通知を出力する方法(auto、osc9、またはbel)を制御します。tui.notification_conditionは、ターミナルがunfocusedまたはalwaysの場合にのみ TUI 通知を発行するかどうかを制御します。
auto モードでは、Codex は OSC 9 通知(一部のターミナルがデスクトップ通知として解釈するターミナルエスケープシーケンス)を優先し、それ以外の場合は BEL(\x07)にフォールバックします。
正確なキーについては、設定リファレンスを参照してください。
履歴の永続化
デフォルトでは、Codex はローカルセッションの記録を CODEX_HOME 配下(たとえば ~/.codex/history.jsonl)に保存します。ローカル履歴の永続化を無効にするには、次のように設定します。
[history]
persistence = "none"履歴ファイルのサイズに上限を設定するには、history.max_bytes を指定します。ファイルが上限を超えると、Codex は最も古いエントリを削除し、最新の記録を保持したままファイルを圧縮します。
[history]
max_bytes = 104857600 # 100 MiBクリック可能な引用
対応するターミナル/エディター統合を使用している場合、Codex はファイルの引用をクリック可能なリンクとして表示できます。Codex が使用する URI スキームを選択するには、file_opener を設定します。
file_opener = "vscode" # or cursor, windsurf, vscode-insiders, none例:/home/user/project/main.py:42 のような引用は、クリック可能な vscode://file/...:42 リンクに書き換えられます。
プロジェクト指示の検出
Codex は AGENTS.md(および関連ファイル)を読み取り、セッションの最初のターンに、限られた量のプロジェクトガイダンスを含めます。この動作は、次の 2 つの設定で制御します。
project_doc_max_bytes:各AGENTS.mdファイルから読み取る量project_doc_fallback_filenames:あるディレクトリ階層にAGENTS.mdがない場合に追加で試すファイル名
詳しい手順については、AGENTS.md によるカスタム指示を参照してください。
デスクトップ
このセクションのオプションは、ChatGPT デスクトップアプリにのみ適用されます。
カスタムファイルハンドラーを追加する
ユーザーレベルの ~/.codex/config.toml で、desktop.custom_file_handlers の下にエントリを追加すると、ChatGPT デスクトップアプリがデフォルトで対応していないエディターや内部ランチャーでファイルを開けます。各エントリによって、アプリの アプリケーションで開く メニューにエディターの選択肢が追加されます。command が既存の絶対パスであるか、アプリの PATH から解決できる場合に、その選択肢が表示されます。
次の例では、ファイルをハンドラーに渡す 3 つの方法を示します。
# Append the opened path directly after the command.
[desktop.custom_file_handlers.vscodium]
label = "VSCodium"
icon = "/Users/you/.codex/icons/vscodium.png"
command = "codium"
# Place fixed arguments before the opened path.
[desktop.custom_file_handlers.textedit]
label = "TextEdit"
icon = "/Users/you/.codex/icons/textedit.png"
command = "/usr/bin/open"
args = ["-a", "TextEdit"]
# Append one JSON argument with the path and editor context.
[desktop.custom_file_handlers.company_editor]
label = "Company Editor"
icon = "/opt/company/editor/icon.png"
command = "/opt/company/bin/editor"
input = "json_argument"config.toml を保存してから、ChatGPT デスクトップアプリを再起動します。
ハンドラー ID は TOML テーブルヘッダーの最後の部分です。1~64 文字で、ASCII の英字または数字で始まり、それ以外には ASCII の英字、数字、ピリオド、アンダースコア、ハイフンのみを使用できます。アプリは ID に custom: プレフィックスを付けて公開します。たとえば、company_editor は custom:company_editor になります。ピリオドを含む ID は、TOML でネストされたテーブルとして解釈されないように引用符で囲んでください。例:
[desktop.custom_file_handlers."company.editor"]
label = "Company Editor"
icon = "/opt/company/editor/icon.png"
command = "/opt/company/bin/editor"各ハンドラーでは、次のフィールドを使用できます。
| フィールド | 必須 | 説明 |
|---|---|---|
label |
はい | アプリ内の表示名。 |
icon |
はい | apps/vscode.png などの同梱アプリアイコン、base64 data:image/... URL、file: URI、またはローカル画像の絶対パス。未対応のソースでは、デフォルトの VS Code アイコンが使用されます。 |
command |
はい | 検出して起動する実行可能ファイルのパスまたはコマンド名。 |
args |
いいえ | command とファイル入力の間に挿入される文字列配列。デフォルトは [] です。 |
input |
いいえ | アプリがファイル入力を渡す方法:path、json_argument、または json_stdin。デフォルトは path です。 |
supports_ssh |
いいえ | SSH ワークスペース内のファイルに対してハンドラーを選択肢として表示するかどうか。デフォルトは false です。ハンドラーがリモートホストとパスの詳細を必要とする場合は、json_stdin を使用します。 |
input の値は、args の後に続く内容を制御します。
pathは、パスをコマンドの最後の引数として追加します。json_argumentは、target、path、appPath、およびlocationを含む JSON オブジェクトを追加します。locationの値は、1 から始まるlineとcolumnの値を持つオブジェクト、またはnullです。json_stdinは、JSON オブジェクトを引数として追加する代わりに標準入力へ書き込みます。また、hostConfig、remoteWorkspaceRoot、およびremotePathも含まれます。該当しない場合、これらのフィールドはnullになります。
たとえば、ユーザーが特定のソース位置を開いた場合、company_editor は次の引数を受け取れます。
{
"target": "custom:company_editor",
"path": "/repo/src/index.ts",
"appPath": null,
"location": { "line": 12, "column": 3 }
}カスタムハンドラーを優先エディターとして選択すると、組み込みエディターを選択した場合と同じ方法で、プロジェクトごとの設定を含めて選択内容が保持されます。
TUI オプション
サブコマンドを指定せずに codex を実行すると、対話型のターミナル UI(TUI)が起動します。Codex では、[tui] の下に次のような TUI 固有の設定があります。
tui.notifications:通知を有効/無効にする(または特定の種類に制限する)tui.notification_method:ターミナル通知にauto、osc9、またはbelを選択するtui.notification_condition:通知を発行するタイミングとしてunfocusedまたはalwaysを選択するtui.animations:ASCII アニメーションとシマー効果を有効/無効にするtui.alternate_screen:代替画面の使用を制御する(ターミナルのスクロールバックを保持するにはneverに設定する)tui.show_tooltips:ウェルカム画面のオンボーディングツールチップを表示または非表示にする
tui.notification_method のデフォルトは auto です。auto モードでは、ターミナルが対応していると判断された場合、Codex は OSC 9 通知(一部のターミナルがデスクトップ通知として解釈するターミナルエスケープシーケンス)を優先し、それ以外の場合は BEL(\x07)にフォールバックします。
キーの完全な一覧については、設定リファレンスを参照してください。