config-reference.md +1509 −2156
6 6
7User-level configuration lives in `~/.codex/config.toml`. You can also add project-scoped overrides in `.codex/config.toml` files. Codex loads project-scoped config files only when you trust the project.7User-level configuration lives in `~/.codex/config.toml`. You can also add project-scoped overrides in `.codex/config.toml` files. Codex loads project-scoped config files only when you trust the project.
8 8
99For sandbox and approval keys (`approval_policy`, `sandbox_mode`, and `sandbox_workspace_write.*`), pair this reference with [Sandbox and approvals](https://developers.openai.com/codex/security#sandbox-and-approvals), [Protected paths in writable roots](https://developers.openai.com/codex/security#protected-paths-in-writable-roots), and [Network access](https://developers.openai.com/codex/security#network-access).For sandbox and approval keys (`approval_policy`, `sandbox_mode`, and `sandbox_workspace_write.*`), pair this reference with [Sandbox and approvals](https://developers.openai.com/codex/agent-approvals-security#sandbox-and-approvals), [Protected paths in writable roots](https://developers.openai.com/codex/agent-approvals-security#protected-paths-in-writable-roots), and [Network access](https://developers.openai.com/codex/agent-approvals-security#network-access).
1010
1111| Key | Type / Values | Details |<ConfigTable
1212| --- | --- | --- | options={[
1313| `agents.<name>.config_file` | `string (path)` | Path to a TOML config layer for that role; relative paths resolve from the config file that declares the role. | {
1414| `agents.<name>.description` | `string` | Role guidance shown to Codex when choosing and spawning that agent type. | key: "model",
1515| `agents.max_threads` | `number` | Maximum number of agent threads that can be open concurrently. | type: "string",
1616| `approval_policy` | `untrusted | on-request | never` | Controls when Codex pauses for approval before executing commands. `on-failure` is deprecated; use `on-request` for interactive runs or `never` for non-interactive runs. | description: "Model to use (e.g., `gpt-5.5`).",
1717| `apps.<id>.disabled_reason` | `unknown | user` | Optional reason attached when an app/connector is disabled. | },
1818| `apps.<id>.enabled` | `boolean` | Enable or disable a specific app/connector by id (default: true). | {
1919| `chatgpt_base_url` | `string` | Override the base URL used during the ChatGPT login flow. | key: "review_model",
2020| `check_for_update_on_startup` | `boolean` | Check for Codex updates on startup (set to false only when updates are centrally managed). | type: "string",
2121| `cli_auth_credentials_store` | `file | keyring | auto` | Control where the CLI stores cached credentials (file-based auth.json vs OS keychain). | description:
2222| `compact_prompt` | `string` | Inline override for the history compaction prompt. | "Optional model override used by `/review` (defaults to the current session model).",
2323| `developer_instructions` | `string` | Additional developer instructions injected into the session (optional). | },
2424| `disable_paste_burst` | `boolean` | Disable burst-paste detection in the TUI. | {
2525| `experimental_compact_prompt_file` | `string (path)` | Load the compaction prompt override from a file (experimental). | key: "model_provider",
2626| `experimental_use_freeform_apply_patch` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform` or `codex --enable apply_patch_freeform`. | type: "string",
2727| `experimental_use_unified_exec_tool` | `boolean` | Legacy name for enabling unified exec; prefer `[features].unified_exec` or `codex --enable unified_exec`. | description: "Provider id from `model_providers` (default: `openai`).",
2828| `features.apply_patch_freeform` | `boolean` | Expose the freeform `apply_patch` tool (experimental). | },
2929| `features.apps` | `boolean` | Enable ChatGPT Apps/connectors support (experimental). | {
3030| `features.apps_mcp_gateway` | `boolean` | Route Apps MCP calls through the OpenAI connectors MCP gateway (`https://api.openai.com/v1/connectors/mcp/`) instead of legacy routing (experimental). | key: "openai_base_url",
3131| `features.child_agents_md` | `boolean` | Append AGENTS.md scope/precedence guidance even when no AGENTS.md is present (experimental). | type: "string",
3232| `features.collaboration_modes` | `boolean` | Enable collaboration modes such as plan mode (stable; on by default). | description:
3333| `features.elevated_windows_sandbox` | `boolean` | Enable the elevated Windows sandbox pipeline (experimental). | "Base URL override for the built-in `openai` model provider.",
3434| `features.experimental_windows_sandbox` | `boolean` | Run the Windows restricted-token sandbox (experimental). | },
3535| `features.multi_agent` | `boolean` | Enable multi-agent collaboration tools (`spawn\_agent`, `send\_input`, `resume\_agent`, `wait`, and `close\_agent`) (experimental; off by default). | {
3636| `features.personality` | `boolean` | Enable personality selection controls (stable; on by default). | key: "model_context_window",
3737| `features.powershell_utf8` | `boolean` | Force PowerShell UTF-8 output (defaults to true). | type: "number",
3838| `features.remote_models` | `boolean` | Refresh remote model list before showing readiness (experimental). | description: "Context window tokens available to the active model.",
3939| `features.request_rule` | `boolean` | Enable Smart approvals (`prefix_rule` suggestions on escalation requests; stable; on by default). | },
4040| `features.runtime_metrics` | `boolean` | Show runtime metrics summary in TUI turn separators (experimental). | {
4141| `features.search_tool` | `boolean` | Enable `search_tool_bm25` for Apps tool discovery before invoking app MCP tools (experimental). | key: "model_auto_compact_token_limit",
4242| `features.shell_snapshot` | `boolean` | Snapshot shell environment to speed up repeated commands (beta). | type: "number",
4343| `features.shell_tool` | `boolean` | Enable the default `shell` tool for running commands (stable; on by default). | description:
4444| `features.unified_exec` | `boolean` | Use the unified PTY-backed exec tool (beta). | "Token threshold that triggers automatic history compaction (unset uses model defaults).",
4545| `features.use_linux_sandbox_bwrap` | `boolean` | Use the bubblewrap-based Linux sandbox pipeline (experimental; off by default). | },
4646| `features.web_search` | `boolean` | Deprecated legacy toggle; prefer the top-level `web_search` setting. | {
4747| `features.web_search_cached` | `boolean` | Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "cached"`. | key: "model_catalog_json",
4848| `features.web_search_request` | `boolean` | Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "live"`. | type: "string (path)",
4949| `feedback.enabled` | `boolean` | Enable feedback submission via `/feedback` across Codex surfaces (default: true). | description:
5050| `file_opener` | `vscode | vscode-insiders | windsurf | cursor | none` | URI scheme used to open citations from Codex output (default: `vscode`). | "Optional path to a JSON model catalog loaded on startup. Profile-level `profiles.<name>.model_catalog_json` can override this per profile.",
5151| `forced_chatgpt_workspace_id` | `string (uuid)` | Limit ChatGPT logins to a specific workspace identifier. | },
5252| `forced_login_method` | `chatgpt | api` | Restrict Codex to a specific authentication method. | {
5353| `hide_agent_reasoning` | `boolean` | Suppress reasoning events in both the TUI and `codex exec` output. | key: "oss_provider",
5454| `history.max_bytes` | `number` | If set, caps the history file size in bytes by dropping oldest entries. | type: "lmstudio | ollama",
5555| `history.persistence` | `save-all | none` | Control whether Codex saves session transcripts to history.jsonl. | description:
5656| `include_apply_patch_tool` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`. | "Default local provider used when running with `--oss` (defaults to prompting if unset).",
5757| `instructions` | `string` | Reserved for future use; prefer `model_instructions_file` or `AGENTS.md`. | },
5858| `log_dir` | `string (path)` | Directory where Codex writes log files (for example `codex-tui.log`); defaults to `$CODEX_HOME/log`. | {
5959| `mcp_oauth_callback_port` | `integer` | Optional fixed port for the local HTTP callback server used during MCP OAuth login. When unset, Codex binds to an ephemeral port chosen by the OS. | key: "approval_policy",
6060| `mcp_oauth_credentials_store` | `auto | file | keyring` | Preferred store for MCP OAuth credentials. | type: "untrusted | on-request | never | { granular = { sandbox_approval = bool, rules = bool, mcp_elicitations = bool, request_permissions = bool, skill_approval = bool } }",
6161| `mcp_servers.<id>.args` | `array<string>` | Arguments passed to the MCP stdio server command. | description:
6262| `mcp_servers.<id>.bearer_token_env_var` | `string` | Environment variable sourcing the bearer token for an MCP HTTP server. | "Controls when Codex pauses for approval before executing commands. You can also use `approval_policy = { granular = { ... } }` to allow or auto-reject specific prompt categories while keeping other prompts interactive. `on-failure` is deprecated; use `on-request` for interactive runs or `never` for non-interactive runs.",
6363| `mcp_servers.<id>.command` | `string` | Launcher command for an MCP stdio server. | },
6464| `mcp_servers.<id>.cwd` | `string` | Working directory for the MCP stdio server process. | {
6565| `mcp_servers.<id>.disabled_tools` | `array<string>` | Deny list applied after `enabled_tools` for the MCP server. | key: "approval_policy.granular.sandbox_approval",
6666| `mcp_servers.<id>.enabled` | `boolean` | Disable an MCP server without removing its configuration. | type: "boolean",
6767| `mcp_servers.<id>.enabled_tools` | `array<string>` | Allow list of tool names exposed by the MCP server. | description:
6868| `mcp_servers.<id>.env` | `map<string,string>` | Environment variables forwarded to the MCP stdio server. | "When `true`, sandbox escalation approval prompts are allowed to surface.",
6969| `mcp_servers.<id>.env_http_headers` | `map<string,string>` | HTTP headers populated from environment variables for an MCP HTTP server. | },
7070| `mcp_servers.<id>.env_vars` | `array<string>` | Additional environment variables to whitelist for an MCP stdio server. | {
7171| `mcp_servers.<id>.http_headers` | `map<string,string>` | Static HTTP headers included with each MCP HTTP request. | key: "approval_policy.granular.rules",
7272| `mcp_servers.<id>.required` | `boolean` | When true, fail startup/resume if this enabled MCP server cannot initialize. | type: "boolean",
7373| `mcp_servers.<id>.startup_timeout_ms` | `number` | Alias for `startup_timeout_sec` in milliseconds. | description:
7474| `mcp_servers.<id>.startup_timeout_sec` | `number` | Override the default 10s startup timeout for an MCP server. | "When `true`, approvals triggered by execpolicy `prompt` rules are allowed to surface.",
7575| `mcp_servers.<id>.tool_timeout_sec` | `number` | Override the default 60s per-tool timeout for an MCP server. | },
7676| `mcp_servers.<id>.url` | `string` | Endpoint for an MCP streamable HTTP server. | {
7777| `model` | `string` | Model to use (e.g., `gpt-5-codex`). | key: "approval_policy.granular.mcp_elicitations",
7878| `model_auto_compact_token_limit` | `number` | Token threshold that triggers automatic history compaction (unset uses model defaults). | type: "boolean",
7979| `model_context_window` | `number` | Context window tokens available to the active model. | description:
8080| `model_instructions_file` | `string (path)` | Replacement for built-in instructions instead of `AGENTS.md`. | "When `true`, MCP elicitation prompts are allowed to surface instead of being auto-rejected.",
8181| `model_provider` | `string` | Provider id from `model_providers` (default: `openai`). | },
8282| `model_providers.<id>.base_url` | `string` | API base URL for the model provider. | {
8383| `model_providers.<id>.env_http_headers` | `map<string,string>` | HTTP headers populated from environment variables when present. | key: "approval_policy.granular.request_permissions",
8484| `model_providers.<id>.env_key` | `string` | Environment variable supplying the provider API key. | type: "boolean",
8585| `model_providers.<id>.env_key_instructions` | `string` | Optional setup guidance for the provider API key. | description:
8686| `model_providers.<id>.experimental_bearer_token` | `string` | Direct bearer token for the provider (discouraged; use `env_key`). | "When `true`, prompts from the `request_permissions` tool are allowed to surface.",
8787| `model_providers.<id>.http_headers` | `map<string,string>` | Static HTTP headers added to provider requests. | },
8888| `model_providers.<id>.name` | `string` | Display name for a custom model provider. | {
8989| `model_providers.<id>.query_params` | `map<string,string>` | Extra query parameters appended to provider requests. | key: "approval_policy.granular.skill_approval",
9090| `model_providers.<id>.request_max_retries` | `number` | Retry count for HTTP requests to the provider (default: 4). | type: "boolean",
9191| `model_providers.<id>.requires_openai_auth` | `boolean` | The provider uses OpenAI authentication (defaults to false). | description:
9292| `model_providers.<id>.stream_idle_timeout_ms` | `number` | Idle timeout for SSE streams in milliseconds (default: 300000). | "When `true`, skill-script approval prompts are allowed to surface.",
9393| `model_providers.<id>.stream_max_retries` | `number` | Retry count for SSE streaming interruptions (default: 5). | },
9494| `model_providers.<id>.wire_api` | `chat | responses` | Protocol used by the provider (defaults to `chat` if omitted). | {
9595| `model_reasoning_effort` | `minimal | low | medium | high | xhigh` | Adjust reasoning effort for supported models (Responses API only; `xhigh` is model-dependent). | key: "approvals_reviewer",
9696| `model_reasoning_summary` | `auto | concise | detailed | none` | Select reasoning summary detail or disable summaries entirely. | type: "user | auto_review",
9797| `model_supports_reasoning_summaries` | `boolean` | Force Codex to send or not send reasoning metadata. | description:
9898| `model_verbosity` | `low | medium | high` | Control GPT-5 Responses API verbosity (defaults to `medium`). | "Who reviews eligible approval prompts under `on-request` or granular approval policies. Defaults to `user`; `auto_review` uses the reviewer subagent. This setting doesn't change sandboxing or review actions already allowed inside the sandbox.",
9999| `notice.hide_full_access_warning` | `boolean` | Track acknowledgement of the full access warning prompt. | },
100100| `notice.hide_gpt-5.1-codex-max_migration_prompt` | `boolean` | Track acknowledgement of the gpt-5.1-codex-max migration prompt. | {
101101| `notice.hide_gpt5_1_migration_prompt` | `boolean` | Track acknowledgement of the GPT-5.1 migration prompt. | key: "auto_review.policy",
102102| `notice.hide_rate_limit_model_nudge` | `boolean` | Track opt-out of the rate limit model switch reminder. | type: "string",
103103| `notice.hide_world_writable_warning` | `boolean` | Track acknowledgement of the Windows world-writable directories warning. | description:
104104| `notice.model_migrations` | `map<string,string>` | Track acknowledged model migrations as old->new mappings. | "Local Markdown policy instructions for automatic review. Managed `guardian_policy_config` takes precedence. Blank values are ignored.",
105105| `notify` | `array<string>` | Command invoked for notifications; receives a JSON payload from Codex. | },
106106| `oss_provider` | `lmstudio | ollama` | Default local provider used when running with `--oss` (defaults to prompting if unset). | {
107107| `otel.environment` | `string` | Environment tag applied to emitted OpenTelemetry events (default: `dev`). | key: "allow_login_shell",
108108| `otel.exporter` | `none | otlp-http | otlp-grpc` | Select the OpenTelemetry exporter and provide any endpoint metadata. | type: "boolean",
109109| `otel.exporter.<id>.endpoint` | `string` | Exporter endpoint for OTEL logs. | description:
110110| `otel.exporter.<id>.headers` | `map<string,string>` | Static headers included with OTEL exporter requests. | "Allow shell-based tools to use login-shell semantics. Defaults to `true`; when `false`, `login = true` requests are rejected and omitted `login` defaults to non-login shells.",
111111| `otel.exporter.<id>.protocol` | `binary | json` | Protocol used by the OTLP/HTTP exporter. | },
112112| `otel.exporter.<id>.tls.ca-certificate` | `string` | CA certificate path for OTEL exporter TLS. | {
113113| `otel.exporter.<id>.tls.client-certificate` | `string` | Client certificate path for OTEL exporter TLS. | key: "sandbox_mode",
114114| `otel.exporter.<id>.tls.client-private-key` | `string` | Client private key path for OTEL exporter TLS. | type: "read-only | workspace-write | danger-full-access",
115115| `otel.log_user_prompt` | `boolean` | Opt in to exporting raw user prompts with OpenTelemetry logs. | description:
116116| `otel.trace_exporter` | `none | otlp-http | otlp-grpc` | Select the OpenTelemetry trace exporter and provide any endpoint metadata. | "Sandbox policy for filesystem and network access during command execution.",
117117| `otel.trace_exporter.<id>.endpoint` | `string` | Trace exporter endpoint for OTEL logs. | },
118118| `otel.trace_exporter.<id>.headers` | `map<string,string>` | Static headers included with OTEL trace exporter requests. | {
119119| `otel.trace_exporter.<id>.protocol` | `binary | json` | Protocol used by the OTLP/HTTP trace exporter. | key: "sandbox_workspace_write.writable_roots",
120120| `otel.trace_exporter.<id>.tls.ca-certificate` | `string` | CA certificate path for OTEL trace exporter TLS. | type: "array<string>",
121121| `otel.trace_exporter.<id>.tls.client-certificate` | `string` | Client certificate path for OTEL trace exporter TLS. | description:
122122| `otel.trace_exporter.<id>.tls.client-private-key` | `string` | Client private key path for OTEL trace exporter TLS. | 'Additional writable roots when `sandbox_mode = "workspace-write"`.',
123123| `personality` | `none | friendly | pragmatic` | Default communication style for models that advertise `supportsPersonality`; can be overridden per thread/turn or via `/personality`. | },
124124| `profile` | `string` | Default profile applied at startup (equivalent to `--profile`). | {
125125| `profiles.<name>.*` | `various` | Profile-scoped overrides for any of the supported configuration keys. | key: "sandbox_workspace_write.network_access",
126126| `profiles.<name>.experimental_use_freeform_apply_patch` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`. | type: "boolean",
127127| `profiles.<name>.experimental_use_unified_exec_tool` | `boolean` | Legacy name for enabling unified exec; prefer `[features].unified_exec`. | description:
128128| `profiles.<name>.include_apply_patch_tool` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`. | "Allow outbound network access inside the workspace-write sandbox.",
129129| `profiles.<name>.oss_provider` | `lmstudio | ollama` | Profile-scoped OSS provider for `--oss` sessions. | },
130130| `profiles.<name>.personality` | `none | friendly | pragmatic` | Profile-scoped communication style override for supported models. | {
131131| `profiles.<name>.web_search` | `disabled | cached | live` | Profile-scoped web search mode override (default: `"cached"`). | key: "sandbox_workspace_write.exclude_tmpdir_env_var",
132132| `project_doc_fallback_filenames` | `array<string>` | Additional filenames to try when `AGENTS.md` is missing. | type: "boolean",
133133| `project_doc_max_bytes` | `number` | Maximum bytes read from `AGENTS.md` when building project instructions. | description:
134134| `project_root_markers` | `array<string>` | List of project root marker filenames; used when searching parent directories for the project root. | "Exclude `$TMPDIR` from writable roots in workspace-write mode.",
135135| `projects.<path>.trust_level` | `string` | Mark a project or worktree as trusted or untrusted (`"trusted"` | `"untrusted"`). Untrusted projects skip project-scoped `.codex/` layers. | },
136136| `review_model` | `string` | Optional model override used by `/review` (defaults to the current session model). | {
137137| `sandbox_mode` | `read-only | workspace-write | danger-full-access` | Sandbox policy for filesystem and network access during command execution. | key: "sandbox_workspace_write.exclude_slash_tmp",
138138| `sandbox_workspace_write.exclude_slash_tmp` | `boolean` | Exclude `/tmp` from writable roots in workspace-write mode. | type: "boolean",
139139| `sandbox_workspace_write.exclude_tmpdir_env_var` | `boolean` | Exclude `$TMPDIR` from writable roots in workspace-write mode. | description:
140140| `sandbox_workspace_write.network_access` | `boolean` | Allow outbound network access inside the workspace-write sandbox. | "Exclude `/tmp` from writable roots in workspace-write mode.",
141141| `sandbox_workspace_write.writable_roots` | `array<string>` | Additional writable roots when `sandbox_mode = "workspace-write"`. | },
142142| `shell_environment_policy.exclude` | `array<string>` | Glob patterns for removing environment variables after the defaults. | {
143143| `shell_environment_policy.experimental_use_profile` | `boolean` | Use the user shell profile when spawning subprocesses. | key: "windows.sandbox",
144144| `shell_environment_policy.ignore_default_excludes` | `boolean` | Keep variables containing KEY/SECRET/TOKEN before other filters run. | type: "unelevated | elevated",
145145| `shell_environment_policy.include_only` | `array<string>` | Whitelist of patterns; when set only matching variables are kept. | description:
146146| `shell_environment_policy.inherit` | `all | core | none` | Baseline environment inheritance when spawning subprocesses. | "Windows-only native sandbox mode when running Codex natively on Windows.",
147147| `shell_environment_policy.set` | `map<string,string>` | Explicit environment overrides injected into every subprocess. | },
148148| `show_raw_agent_reasoning` | `boolean` | Surface raw reasoning content when the active model emits it. | {
149149| `skills.config` | `array<object>` | Per-skill enablement overrides stored in config.toml. | key: "windows.sandbox_private_desktop",
150150| `skills.config.<index>.enabled` | `boolean` | Enable or disable the referenced skill. | type: "boolean",
151151| `skills.config.<index>.path` | `string (path)` | Path to a skill folder containing `SKILL.md`. | description:
152152| `suppress_unstable_features_warning` | `boolean` | Suppress the warning that appears when under-development feature flags are enabled. | "Run the final sandboxed child process on a private desktop by default on native Windows. Set `false` only for compatibility with the older `Winsta0\\\\Default` behavior.",
153153| `tool_output_token_limit` | `number` | Token budget for storing individual tool/function outputs in history. | },
154154| `tools.web_search` | `boolean` | Deprecated legacy toggle for web search; prefer the top-level `web_search` setting. | {
155155| `tui` | `table` | TUI-specific options such as enabling inline desktop notifications. | key: "notify",
156156| `tui.alternate_screen` | `auto | always | never` | Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback). | type: "array<string>",
157157| `tui.animations` | `boolean` | Enable terminal animations (welcome screen, shimmer, spinner) (default: true). | description:
158158| `tui.notification_method` | `auto | osc9 | bel` | Notification method for unfocused terminal notifications (default: auto). | "Command invoked for notifications; receives a JSON payload from Codex.",
159159| `tui.notifications` | `boolean | array<string>` | Enable TUI notifications; optionally restrict to specific event types. | },
160160| `tui.show_tooltips` | `boolean` | Show onboarding tooltips in the TUI welcome screen (default: true). | {
161161| `tui.status_line` | `array<string> | null` | Ordered list of TUI footer status-line item identifiers. `null` disables the status line. | key: "check_for_update_on_startup",
162162| `web_search` | `disabled | cached | live` | Web search mode (default: `"cached"`; cached uses an OpenAI-maintained index and does not fetch live pages; if you use `--yolo` or another full access sandbox setting, it defaults to `"live"`). Use `"live"` to fetch the most recent data from the web, or `"disabled"` to remove the tool. | type: "boolean",
163163| `windows_wsl_setup_acknowledged` | `boolean` | Track Windows onboarding acknowledgement (Windows only). | description:
164164 "Check for Codex updates on startup (set to false only when updates are centrally managed).",
165165Key },
166166 {
167167`agents.<name>.config_file` key: "feedback.enabled",
168168 type: "boolean",
169169Type / Values description:
170170 "Enable feedback submission via `/feedback` across Codex surfaces (default: true).",
171171`string (path)` },
172172 {
173173Details key: "analytics.enabled",
174174 type: "boolean",
175175Path to a TOML config layer for that role; relative paths resolve from the config file that declares the role. description:
176176 "Enable or disable analytics for this machine/profile. When unset, the client default applies.",
177177Key },
178178 {
179179`agents.<name>.description` key: "instructions",
180180 type: "string",
181181Type / Values description:
182182 "Reserved for future use; prefer `model_instructions_file` or `AGENTS.md`.",
183183`string` },
184184 {
185185Details key: "developer_instructions",
186186 type: "string",
187187Role guidance shown to Codex when choosing and spawning that agent type. description:
188188 "Additional developer instructions injected into the session (optional).",
189189Key },
190190 {
191191`agents.max_threads` key: "log_dir",
192192 type: "string (path)",
193193Type / Values description:
194194 "Directory where Codex writes log files (for example `codex-tui.log`); defaults to `$CODEX_HOME/log`.",
195195`number` },
196196 {
197197Details key: "sqlite_home",
198198 type: "string (path)",
199199Maximum number of agent threads that can be open concurrently. description:
200200 "Directory where Codex stores the SQLite-backed state DB used by agent jobs and other resumable runtime state.",
201201Key },
202202 {
203203`approval_policy` key: "compact_prompt",
204204 type: "string",
205205Type / Values description: "Inline override for the history compaction prompt.",
206206 },
207207`untrusted | on-request | never` {
208208 key: "commit_attribution",
209209Details type: "string",
210210 description:
211211Controls when Codex pauses for approval before executing commands. `on-failure` is deprecated; use `on-request` for interactive runs or `never` for non-interactive runs. "Override the commit co-author trailer text. Set an empty string to disable automatic attribution.",
212212 },
213213Key {
214214 key: "model_instructions_file",
215215`apps.<id>.disabled_reason` type: "string (path)",
216216 description:
217217Type / Values "Replacement for built-in instructions instead of `AGENTS.md`.",
218218 },
219219`unknown | user` {
220220 key: "personality",
221221Details type: "none | friendly | pragmatic",
222222 description:
223223Optional reason attached when an app/connector is disabled. "Default communication style for models that advertise `supportsPersonality`; can be overridden per thread/turn or via `/personality`.",
224224 },
225225Key {
226226 key: "service_tier",
227227`apps.<id>.enabled` type: "flex | fast",
228228 description: "Preferred service tier for new turns.",
229229Type / Values },
230230 {
231231`boolean` key: "experimental_compact_prompt_file",
232232 type: "string (path)",
233233Details description:
234234 "Load the compaction prompt override from a file (experimental).",
235235Enable or disable a specific app/connector by id (default: true). },
236236 {
237237Key key: "skills.config",
238238 type: "array<object>",
239239`chatgpt_base_url` description: "Per-skill enablement overrides stored in config.toml.",
240240 },
241241Type / Values {
242242 key: "skills.config.<index>.path",
243243`string` type: "string (path)",
244244 description: "Path to a skill folder containing `SKILL.md`.",
245245Details },
246246 {
247247Override the base URL used during the ChatGPT login flow. key: "skills.config.<index>.enabled",
248248 type: "boolean",
249249Key description: "Enable or disable the referenced skill.",
250250 },
251251`check_for_update_on_startup` {
252252 key: "apps.<id>.enabled",
253253Type / Values type: "boolean",
254254 description:
255255`boolean` "Enable or disable a specific app/connector by id (default: true).",
256256 },
257257Details {
258258 key: "apps._default.enabled",
259259Check for Codex updates on startup (set to false only when updates are centrally managed). type: "boolean",
260260 description:
261261Key "Default app enabled state for all apps unless overridden per app.",
262262 },
263263`cli_auth_credentials_store` {
264264 key: "apps._default.destructive_enabled",
265265Type / Values type: "boolean",
266266 description:
267267`file | keyring | auto` "Default allow/deny for app tools with `destructive_hint = true`.",
268268 },
269269Details {
270270 key: "apps._default.open_world_enabled",
271271Control where the CLI stores cached credentials (file-based auth.json vs OS keychain). type: "boolean",
272272 description:
273273Key "Default allow/deny for app tools with `open_world_hint = true`.",
274274 },
275275`compact_prompt` {
276276 key: "apps.<id>.destructive_enabled",
277277Type / Values type: "boolean",
278278 description:
279279`string` "Allow or block tools in this app that advertise `destructive_hint = true`.",
280280 },
281281Details {
282282 key: "apps.<id>.open_world_enabled",
283283Inline override for the history compaction prompt. type: "boolean",
284284 description:
285285Key "Allow or block tools in this app that advertise `open_world_hint = true`.",
286286 },
287287`developer_instructions` {
288288 key: "apps.<id>.default_tools_enabled",
289289Type / Values type: "boolean",
290290 description:
291291`string` "Default enabled state for tools in this app unless a per-tool override exists.",
292292 },
293293Details {
294294 key: "apps.<id>.default_tools_approval_mode",
295295Additional developer instructions injected into the session (optional). type: "auto | prompt | approve",
296296 description:
297297Key "Default approval behavior for tools in this app unless a per-tool override exists.",
298298 },
299299`disable_paste_burst` {
300300 key: "apps.<id>.tools.<tool>.enabled",
301301Type / Values type: "boolean",
302302 description:
303303`boolean` "Per-tool enabled override for an app tool (for example `repos/list`).",
304304 },
305305Details {
306306 key: "apps.<id>.tools.<tool>.approval_mode",
307307Disable burst-paste detection in the TUI. type: "auto | prompt | approve",
308308 description: "Per-tool approval behavior override for a single app tool.",
309309Key },
310310 {
311311`experimental_compact_prompt_file` key: "tool_suggest.discoverables",
312312 type: "array<table>",
313313Type / Values description:
314314 'Allow tool suggestions for additional discoverable connectors or plugins. Each entry uses `type = "connector"` or `"plugin"` and an `id`.',
315315`string (path)` },
316316 {
317317Details key: "tool_suggest.disabled_tools",
318318 type: "array<table>",
319319Load the compaction prompt override from a file (experimental). description:
320320 'Disable suggestions for specific discoverable connectors or plugins. Each entry uses `type = "connector"` or `"plugin"` and an `id`.',
321321Key },
322322 {
323323`experimental_use_freeform_apply_patch` key: "features.apps",
324324 type: "boolean",
325325Type / Values description: "Enable ChatGPT Apps/connectors support (experimental).",
326326 },
327327`boolean` {
328328 key: "features.codex_hooks",
329329Details type: "boolean",
330330 description:
331331Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform` or `codex --enable apply_patch_freeform`. "Enable lifecycle hooks loaded from `hooks.json` or inline `[hooks]` config.",
332332 },
333333Key {
334334 key: "hooks",
335335`experimental_use_unified_exec_tool` type: "table",
336336 description:
337337Type / Values "Lifecycle hooks configured inline in `config.toml`. Uses the same event schema as `hooks.json`; see the Hooks guide for examples and supported events.",
338338 },
339339`boolean` {
340340 key: "features.memories",
341341Details type: "boolean",
342342 description: "Enable [Memories](https://developers.openai.com/codex/memories) (off by default).",
343343Legacy name for enabling unified exec; prefer `[features].unified_exec` or `codex --enable unified_exec`. },
344344 {
345345Key key: "mcp_servers.<id>.command",
346346 type: "string",
347347`features.apply_patch_freeform` description: "Launcher command for an MCP stdio server.",
348348 },
349349Type / Values {
350350 key: "mcp_servers.<id>.args",
351351`boolean` type: "array<string>",
352352 description: "Arguments passed to the MCP stdio server command.",
353353Details },
354354 {
355355Expose the freeform `apply_patch` tool (experimental). key: "mcp_servers.<id>.env",
356356 type: "map<string,string>",
357357Key description: "Environment variables forwarded to the MCP stdio server.",
358358 },
359359`features.apps` {
360360 key: "mcp_servers.<id>.env_vars",
361361Type / Values type: 'array<string | { name = string, source = "local" | "remote" }>',
362362 description:
363363`boolean` 'Additional environment variables to whitelist for an MCP stdio server. String entries default to `source = "local"`; use `source = "remote"` only with executor-backed remote stdio.',
364364 },
365365Details {
366366 key: "mcp_servers.<id>.cwd",
367367Enable ChatGPT Apps/connectors support (experimental). type: "string",
368368 description: "Working directory for the MCP stdio server process.",
369369Key },
370370 {
371371`features.apps_mcp_gateway` key: "mcp_servers.<id>.url",
372372 type: "string",
373373Type / Values description: "Endpoint for an MCP streamable HTTP server.",
374374 },
375375`boolean` {
376376 key: "mcp_servers.<id>.bearer_token_env_var",
377377Details type: "string",
378378 description:
379379Route Apps MCP calls through the OpenAI connectors MCP gateway (`https://api.openai.com/v1/connectors/mcp/`) instead of legacy routing (experimental). "Environment variable sourcing the bearer token for an MCP HTTP server.",
380380 },
381381Key {
382382 key: "mcp_servers.<id>.http_headers",
383383`features.child_agents_md` type: "map<string,string>",
384384 description: "Static HTTP headers included with each MCP HTTP request.",
385385Type / Values },
386386 {
387387`boolean` key: "mcp_servers.<id>.env_http_headers",
388388 type: "map<string,string>",
389389Details description:
390390 "HTTP headers populated from environment variables for an MCP HTTP server.",
391391Append AGENTS.md scope/precedence guidance even when no AGENTS.md is present (experimental). },
392392 {
393393Key key: "mcp_servers.<id>.enabled",
394394 type: "boolean",
395395`features.collaboration_modes` description: "Disable an MCP server without removing its configuration.",
396396 },
397397Type / Values {
398398 key: "mcp_servers.<id>.required",
399399`boolean` type: "boolean",
400400 description:
401401Details "When true, fail startup/resume if this enabled MCP server cannot initialize.",
402402 },
403403Enable collaboration modes such as plan mode (stable; on by default). {
404404 key: "mcp_servers.<id>.startup_timeout_sec",
405405Key type: "number",
406406 description:
407407`features.elevated_windows_sandbox` "Override the default 10s startup timeout for an MCP server.",
408408 },
409409Type / Values {
410410 key: "mcp_servers.<id>.startup_timeout_ms",
411411`boolean` type: "number",
412412 description: "Alias for `startup_timeout_sec` in milliseconds.",
413413Details },
414414 {
415415Enable the elevated Windows sandbox pipeline (experimental). key: "mcp_servers.<id>.tool_timeout_sec",
416416 type: "number",
417417Key description:
418418 "Override the default 60s per-tool timeout for an MCP server.",
419419`features.experimental_windows_sandbox` },
420420 {
421421Type / Values key: "mcp_servers.<id>.enabled_tools",
422422 type: "array<string>",
423423`boolean` description: "Allow list of tool names exposed by the MCP server.",
424424 },
425425Details {
426426 key: "mcp_servers.<id>.disabled_tools",
427427Run the Windows restricted-token sandbox (experimental). type: "array<string>",
428428 description:
429429Key "Deny list applied after `enabled_tools` for the MCP server.",
430430 },
431431`features.multi_agent` {
432432 key: "mcp_servers.<id>.scopes",
433433Type / Values type: "array<string>",
434434 description:
435435`boolean` "OAuth scopes to request when authenticating to that MCP server.",
436436 },
437437Details {
438438 key: "mcp_servers.<id>.oauth_resource",
439439Enable multi-agent collaboration tools (`spawn\_agent`, `send\_input`, `resume\_agent`, `wait`, and `close\_agent`) (experimental; off by default). type: "string",
440440 description:
441441Key "Optional RFC 8707 OAuth resource parameter to include during MCP login.",
442442 },
443443`features.personality` {
444444 key: "mcp_servers.<id>.experimental_environment",
445445Type / Values type: "local | remote",
446446 description:
447447`boolean` "Experimental placement for an MCP server. `remote` starts stdio servers through a remote executor environment; streamable HTTP remote placement is not implemented.",
448448 },
449449Details {
450450 key: "agents.max_threads",
451451Enable personality selection controls (stable; on by default). type: "number",
452452 description:
453453Key "Maximum number of agent threads that can be open concurrently. Defaults to `6` when unset.",
454454 },
455455`features.powershell_utf8` {
456456 key: "agents.max_depth",
457457Type / Values type: "number",
458458 description:
459459`boolean` "Maximum nesting depth allowed for spawned agent threads (root sessions start at depth 0; default: 1).",
460460 },
461461Details {
462462 key: "agents.job_max_runtime_seconds",
463463Force PowerShell UTF-8 output (defaults to true). type: "number",
464464 description:
465465Key "Default per-worker timeout for `spawn_agents_on_csv` jobs. When unset, the tool falls back to 1800 seconds per worker.",
466466 },
467467`features.remote_models` {
468468 key: "agents.<name>.description",
469469Type / Values type: "string",
470470 description:
471471`boolean` "Role guidance shown to Codex when choosing and spawning that agent type.",
472472 },
473473Details {
474474 key: "agents.<name>.config_file",
475475Refresh remote model list before showing readiness (experimental). type: "string (path)",
476476 description:
477477Key "Path to a TOML config layer for that role; relative paths resolve from the config file that declares the role.",
478478 },
479479`features.request_rule` {
480480 key: "agents.<name>.nickname_candidates",
481481Type / Values type: "array<string>",
482482 description:
483483`boolean` "Optional pool of display nicknames for spawned agents in that role.",
484484 },
485485Details {
486486 key: "memories.generate_memories",
487487Enable Smart approvals (`prefix_rule` suggestions on escalation requests; stable; on by default). type: "boolean",
488488 description:
489489Key "When `false`, newly created threads are not stored as memory-generation inputs. Defaults to `true`.",
490490 },
491491`features.runtime_metrics` {
492492 key: "memories.use_memories",
493493Type / Values type: "boolean",
494494 description:
495495`boolean` "When `false`, Codex skips injecting existing memories into future sessions. Defaults to `true`.",
496496 },
497497Details {
498498 key: "memories.disable_on_external_context",
499499Show runtime metrics summary in TUI turn separators (experimental). type: "boolean",
500500 description:
501501Key "When `true`, threads that use external context such as MCP tool calls, web search, or tool search are kept out of memory generation. Defaults to `false`. Legacy alias: `memories.no_memories_if_mcp_or_web_search`.",
502502 },
503503`features.search_tool` {
504504 key: "memories.max_raw_memories_for_consolidation",
505505Type / Values type: "number",
506506 description:
507507`boolean` "Maximum recent raw memories retained for global consolidation. Defaults to `256` and is capped at `4096`.",
508508 },
509509Details {
510510 key: "memories.max_unused_days",
511511Enable `search_tool_bm25` for Apps tool discovery before invoking app MCP tools (experimental). type: "number",
512512 description:
513513Key "Maximum days since a memory was last used before it becomes ineligible for consolidation. Defaults to `30` and is clamped to `0`-`365`.",
514514 },
515515`features.shell_snapshot` {
516516 key: "memories.max_rollout_age_days",
517517Type / Values type: "number",
518518 description:
519519`boolean` "Maximum age of threads considered for memory generation. Defaults to `30` and is clamped to `0`-`90`.",
520520 },
521521Details {
522522 key: "memories.max_rollouts_per_startup",
523523Snapshot shell environment to speed up repeated commands (beta). type: "number",
524524 description:
525525Key "Maximum rollout candidates processed per startup pass. Defaults to `16` and is capped at `128`.",
526526 },
527527`features.shell_tool` {
528528 key: "memories.min_rollout_idle_hours",
529529Type / Values type: "number",
530530 description:
531531`boolean` "Minimum idle time before a thread is considered for memory generation. Defaults to `6` and is clamped to `1`-`48`.",
532532 },
533533Details {
534534 key: "memories.min_rate_limit_remaining_percent",
535535Enable the default `shell` tool for running commands (stable; on by default). type: "number",
536536 description:
537537Key "Minimum remaining percentage required in Codex rate-limit windows before memory generation starts. Defaults to `25` and is clamped to `0`-`100`.",
538538 },
539539`features.unified_exec` {
540540 key: "memories.extract_model",
541541Type / Values type: "string",
542542 description: "Optional model override for per-thread memory extraction.",
543543`boolean` },
544544 {
545545Details key: "memories.consolidation_model",
546546 type: "string",
547547Use the unified PTY-backed exec tool (beta). description: "Optional model override for global memory consolidation.",
548548 },
549549Key {
550550 key: "features.unified_exec",
551551`features.use_linux_sandbox_bwrap` type: "boolean",
552552 description:
553553Type / Values "Use the unified PTY-backed exec tool (stable; enabled by default except on Windows).",
554554 },
555555`boolean` {
556556 key: "features.shell_snapshot",
557557Details type: "boolean",
558558 description:
559559Use the bubblewrap-based Linux sandbox pipeline (experimental; off by default). "Snapshot shell environment to speed up repeated commands (stable; on by default).",
560560 },
561561Key {
562562 key: "features.undo",
563563`features.web_search` type: "boolean",
564564 description: "Enable undo support (stable; off by default).",
565565Type / Values },
566566 {
567567`boolean` key: "features.multi_agent",
568568 type: "boolean",
569569Details description:
570570 "Enable multi-agent collaboration tools (`spawn_agent`, `send_input`, `resume_agent`, `wait_agent`, and `close_agent`) (stable; on by default).",
571571Deprecated legacy toggle; prefer the top-level `web_search` setting. },
572572 {
573573Key key: "features.personality",
574574 type: "boolean",
575575`features.web_search_cached` description:
576576 "Enable personality selection controls (stable; on by default).",
577577Type / Values },
578578 {
579579`boolean` key: "features.web_search",
580580 type: "boolean",
581581Details description:
582582 "Deprecated legacy toggle; prefer the top-level `web_search` setting.",
583583Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "cached"`. },
584584 {
585585Key key: "features.web_search_cached",
586586 type: "boolean",
587587`features.web_search_request` description:
588588 'Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "cached"`.',
589589Type / Values },
590590 {
591591`boolean` key: "features.web_search_request",
592592 type: "boolean",
593593Details description:
594594 'Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "live"`.',
595595Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "live"`. },
596596 {
597597Key key: "features.shell_tool",
598598 type: "boolean",
599599`feedback.enabled` description:
600600 "Enable the default `shell` tool for running commands (stable; on by default).",
601601Type / Values },
602602 {
603603`boolean` key: "features.enable_request_compression",
604604 type: "boolean",
605605Details description:
606606 "Compress streaming request bodies with zstd when supported (stable; on by default).",
607607Enable feedback submission via `/feedback` across Codex surfaces (default: true). },
608608 {
609609Key key: "features.skill_mcp_dependency_install",
610610 type: "boolean",
611611`file_opener` description:
612612 "Allow prompting and installing missing MCP dependencies for skills (stable; on by default).",
613613Type / Values },
614614 {
615615`vscode | vscode-insiders | windsurf | cursor | none` key: "features.fast_mode",
616616 type: "boolean",
617617Details description:
618618 'Enable Fast mode selection and the `service_tier = "fast"` path (stable; on by default).',
619619URI scheme used to open citations from Codex output (default: `vscode`). },
620620 {
621621Key key: "features.prevent_idle_sleep",
622622 type: "boolean",
623623`forced_chatgpt_workspace_id` description:
624624 "Prevent the machine from sleeping while a turn is actively running (experimental; off by default).",
625625Type / Values },
626626 {
627627`string (uuid)` key: "suppress_unstable_features_warning",
628628 type: "boolean",
629629Details description:
630630 "Suppress the warning that appears when under-development feature flags are enabled.",
631631Limit ChatGPT logins to a specific workspace identifier. },
632632 {
633633Key key: "model_providers.<id>",
634634 type: "table",
635635`forced_login_method` description:
636636 "Custom provider definition. Built-in provider IDs (`openai`, `ollama`, and `lmstudio`) are reserved and cannot be overridden.",
637637Type / Values },
638638 {
639639`chatgpt | api` key: "model_providers.<id>.name",
640640 type: "string",
641641Details description: "Display name for a custom model provider.",
642642 },
643643Restrict Codex to a specific authentication method. {
644644 key: "model_providers.<id>.base_url",
645645Key type: "string",
646646 description: "API base URL for the model provider.",
647647`hide_agent_reasoning` },
648648 {
649649Type / Values key: "model_providers.<id>.env_key",
650650 type: "string",
651651`boolean` description: "Environment variable supplying the provider API key.",
652652 },
653653Details {
654654 key: "model_providers.<id>.env_key_instructions",
655655Suppress reasoning events in both the TUI and `codex exec` output. type: "string",
656656 description: "Optional setup guidance for the provider API key.",
657657Key },
658658 {
659659`history.max_bytes` key: "model_providers.<id>.experimental_bearer_token",
660660 type: "string",
661661Type / Values description:
662662 "Direct bearer token for the provider (discouraged; use `env_key`).",
663663`number` },
664664 {
665665Details key: "model_providers.<id>.requires_openai_auth",
666666 type: "boolean",
667667If set, caps the history file size in bytes by dropping oldest entries. description:
668668 "The provider uses OpenAI authentication (defaults to false).",
669669Key },
670670 {
671671`history.persistence` key: "model_providers.<id>.wire_api",
672672 type: "responses",
673673Type / Values description:
674674 "Protocol used by the provider. `responses` is the only supported value, and it is the default when omitted.",
675675`save-all | none` },
676676 {
677677Details key: "model_providers.<id>.query_params",
678678 type: "map<string,string>",
679679Control whether Codex saves session transcripts to history.jsonl. description: "Extra query parameters appended to provider requests.",
680680 },
681681Key {
682682 key: "model_providers.<id>.http_headers",
683683`include_apply_patch_tool` type: "map<string,string>",
684684 description: "Static HTTP headers added to provider requests.",
685685Type / Values },
686686 {
687687`boolean` key: "model_providers.<id>.env_http_headers",
688688 type: "map<string,string>",
689689Details description:
690690 "HTTP headers populated from environment variables when present.",
691691Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`. },
692692 {
693693Key key: "model_providers.<id>.request_max_retries",
694694 type: "number",
695695`instructions` description:
696696 "Retry count for HTTP requests to the provider (default: 4).",
697697Type / Values },
698698 {
699699`string` key: "model_providers.<id>.stream_max_retries",
700700 type: "number",
701701Details description: "Retry count for SSE streaming interruptions (default: 5).",
702702 },
703703Reserved for future use; prefer `model_instructions_file` or `AGENTS.md`. {
704704 key: "model_providers.<id>.stream_idle_timeout_ms",
705705Key type: "number",
706706 description:
707707`log_dir` "Idle timeout for SSE streams in milliseconds (default: 300000).",
708708 },
709709Type / Values {
710710 key: "model_providers.<id>.supports_websockets",
711711`string (path)` type: "boolean",
712712 description:
713713Details "Whether that provider supports the Responses API WebSocket transport.",
714714 },
715715Directory where Codex writes log files (for example `codex-tui.log`); defaults to `$CODEX_HOME/log`. {
716716 key: "model_providers.<id>.auth",
717717Key type: "table",
718718 description:
719719`mcp_oauth_callback_port` "Command-backed bearer token configuration for a custom provider. Do not combine with `env_key`, `experimental_bearer_token`, or `requires_openai_auth`.",
720720 },
721721Type / Values {
722722 key: "model_providers.<id>.auth.command",
723723`integer` type: "string",
724724 description:
725725Details "Command to run when Codex needs a bearer token. The command must print the token to stdout.",
726726 },
727727Optional fixed port for the local HTTP callback server used during MCP OAuth login. When unset, Codex binds to an ephemeral port chosen by the OS. {
728728 key: "model_providers.<id>.auth.args",
729729Key type: "array<string>",
730730 description: "Arguments passed to the token command.",
731731`mcp_oauth_credentials_store` },
732732 {
733733Type / Values key: "model_providers.<id>.auth.timeout_ms",
734734 type: "number",
735735`auto | file | keyring` description:
736736 "Maximum token command runtime in milliseconds (default: 5000).",
737737Details },
738738 {
739739Preferred store for MCP OAuth credentials. key: "model_providers.<id>.auth.refresh_interval_ms",
740740 type: "number",
741741Key description:
742742 "How often Codex proactively refreshes the token in milliseconds (default: 300000). Set to `0` to refresh only after an authentication retry.",
743743`mcp_servers.<id>.args` },
744744 {
745745Type / Values key: "model_providers.<id>.auth.cwd",
746746 type: "string (path)",
747747`array<string>` description: "Working directory for the token command.",
748748 },
749749Details {
750750 key: "model_providers.amazon-bedrock.aws.profile",
751751Arguments passed to the MCP stdio server command. type: "string",
752752 description:
753753Key "AWS profile name used by the built-in `amazon-bedrock` provider.",
754754 },
755755`mcp_servers.<id>.bearer_token_env_var` {
756756 key: "model_providers.amazon-bedrock.aws.region",
757757Type / Values type: "string",
758758 description: "AWS region used by the built-in `amazon-bedrock` provider.",
759759`string` },
760760 {
761761Details key: "model_reasoning_effort",
762762 type: "minimal | low | medium | high | xhigh",
763763Environment variable sourcing the bearer token for an MCP HTTP server. description:
764764 "Adjust reasoning effort for supported models (Responses API only; `xhigh` is model-dependent).",
765765Key },
766766 {
767767`mcp_servers.<id>.command` key: "plan_mode_reasoning_effort",
768768 type: "none | minimal | low | medium | high | xhigh",
769769Type / Values description:
770770 "Plan-mode-specific reasoning override. When unset, Plan mode uses its built-in preset default.",
771771`string` },
772772 {
773773Details key: "model_reasoning_summary",
774774 type: "auto | concise | detailed | none",
775775Launcher command for an MCP stdio server. description:
776776 "Select reasoning summary detail or disable summaries entirely.",
777777Key },
778778 {
779779`mcp_servers.<id>.cwd` key: "model_verbosity",
780780 type: "low | medium | high",
781781Type / Values description:
782782 "Optional GPT-5 Responses API verbosity override; when unset, the selected model/preset default is used.",
783783`string` },
784784 {
785785Details key: "model_supports_reasoning_summaries",
786786 type: "boolean",
787787Working directory for the MCP stdio server process. description: "Force Codex to send or not send reasoning metadata.",
788788 },
789789Key {
790790 key: "shell_environment_policy.inherit",
791791`mcp_servers.<id>.disabled_tools` type: "all | core | none",
792792 description:
793793Type / Values "Baseline environment inheritance when spawning subprocesses.",
794794 },
795795`array<string>` {
796796 key: "shell_environment_policy.ignore_default_excludes",
797797Details type: "boolean",
798798 description:
799799Deny list applied after `enabled_tools` for the MCP server. "Keep variables containing KEY/SECRET/TOKEN before other filters run.",
800800 },
801801Key {
802802 key: "shell_environment_policy.exclude",
803803`mcp_servers.<id>.enabled` type: "array<string>",
804804 description:
805805Type / Values "Glob patterns for removing environment variables after the defaults.",
806806 },
807807`boolean` {
808808 key: "shell_environment_policy.include_only",
809809Details type: "array<string>",
810810 description:
811811Disable an MCP server without removing its configuration. "Whitelist of patterns; when set only matching variables are kept.",
812812 },
813813Key {
814814 key: "shell_environment_policy.set",
815815`mcp_servers.<id>.enabled_tools` type: "map<string,string>",
816816 description:
817817Type / Values "Explicit environment overrides injected into every subprocess.",
818818 },
819819`array<string>` {
820820 key: "shell_environment_policy.experimental_use_profile",
821821Details type: "boolean",
822822 description: "Use the user shell profile when spawning subprocesses.",
823823Allow list of tool names exposed by the MCP server. },
824824 {
825825Key key: "project_root_markers",
826826 type: "array<string>",
827827`mcp_servers.<id>.env` description:
828828 "List of project root marker filenames; used when searching parent directories for the project root.",
829829Type / Values },
830830 {
831831`map<string,string>` key: "project_doc_max_bytes",
832832 type: "number",
833833Details description:
834834 "Maximum bytes read from `AGENTS.md` when building project instructions.",
835835Environment variables forwarded to the MCP stdio server. },
836836 {
837837Key key: "project_doc_fallback_filenames",
838838 type: "array<string>",
839839`mcp_servers.<id>.env_http_headers` description: "Additional filenames to try when `AGENTS.md` is missing.",
840840 },
841841Type / Values {
842842 key: "profile",
843843`map<string,string>` type: "string",
844844 description:
845845Details "Default profile applied at startup (equivalent to `--profile`).",
846846 },
847847HTTP headers populated from environment variables for an MCP HTTP server. {
848848 key: "profiles.<name>.*",
849849Key type: "various",
850850 description:
851851`mcp_servers.<id>.env_vars` "Profile-scoped overrides for any of the supported configuration keys.",
852852 },
853853Type / Values {
854854 key: "profiles.<name>.service_tier",
855855`array<string>` type: "flex | fast",
856856 description: "Profile-scoped service tier preference for new turns.",
857857Details },
858858 {
859859Additional environment variables to whitelist for an MCP stdio server. key: "profiles.<name>.plan_mode_reasoning_effort",
860860 type: "none | minimal | low | medium | high | xhigh",
861861Key description: "Profile-scoped Plan-mode reasoning override.",
862862 },
863863`mcp_servers.<id>.http_headers` {
864864 key: "profiles.<name>.web_search",
865865Type / Values type: "disabled | cached | live",
866866 description:
867867`map<string,string>` 'Profile-scoped web search mode override (default: `"cached"`).',
868868 },
869869Details {
870870 key: "profiles.<name>.personality",
871871Static HTTP headers included with each MCP HTTP request. type: "none | friendly | pragmatic",
872872 description:
873873Key "Profile-scoped communication style override for supported models.",
874874 },
875875`mcp_servers.<id>.required` {
876876 key: "profiles.<name>.model_catalog_json",
877877Type / Values type: "string (path)",
878878 description:
879879`boolean` "Profile-scoped model catalog JSON path override (applied on startup only; overrides the top-level `model_catalog_json` for that profile).",
880880 },
881881Details {
882882 key: "profiles.<name>.model_instructions_file",
883883When true, fail startup/resume if this enabled MCP server cannot initialize. type: "string (path)",
884884 description:
885885Key "Profile-scoped replacement for the built-in instruction file.",
886886 },
887887`mcp_servers.<id>.startup_timeout_ms` {
888888 key: "profiles.<name>.experimental_use_unified_exec_tool",
889889Type / Values type: "boolean",
890890 description:
891891`number` "Legacy name for enabling unified exec; prefer `[features].unified_exec`.",
892892 },
893893Details {
894894 key: "profiles.<name>.oss_provider",
895895Alias for `startup_timeout_sec` in milliseconds. type: "lmstudio | ollama",
896896 description: "Profile-scoped OSS provider for `--oss` sessions.",
897897Key },
898898 {
899899`mcp_servers.<id>.startup_timeout_sec` key: "profiles.<name>.tools_view_image",
900900 type: "boolean",
901901Type / Values description: "Enable or disable the `view_image` tool in that profile.",
902902 },
903903`number` {
904904 key: "profiles.<name>.analytics.enabled",
905905Details type: "boolean",
906906 description: "Profile-scoped analytics enablement override.",
907907Override the default 10s startup timeout for an MCP server. },
908908 {
909909Key key: "profiles.<name>.windows.sandbox",
910910 type: "unelevated | elevated",
911911`mcp_servers.<id>.tool_timeout_sec` description: "Profile-scoped Windows sandbox mode override.",
912912 },
913913Type / Values {
914914 key: "history.persistence",
915915`number` type: "save-all | none",
916916 description:
917917Details "Control whether Codex saves session transcripts to history.jsonl.",
918918 },
919919Override the default 60s per-tool timeout for an MCP server. {
920920 key: "tool_output_token_limit",
921921Key type: "number",
922922 description:
923923`mcp_servers.<id>.url` "Token budget for storing individual tool/function outputs in history.",
924924 },
925925Type / Values {
926926 key: "background_terminal_max_timeout",
927927`string` type: "number",
928928 description:
929929Details "Maximum poll window in milliseconds for empty `write_stdin` polls (background terminal polling). Default: `300000` (5 minutes). Replaces the older `background_terminal_timeout` key.",
930930 },
931931Endpoint for an MCP streamable HTTP server. {
932932 key: "history.max_bytes",
933933Key type: "number",
934934 description:
935935`model` "If set, caps the history file size in bytes by dropping oldest entries.",
936936 },
937937Type / Values {
938938 key: "file_opener",
939939`string` type: "vscode | vscode-insiders | windsurf | cursor | none",
940940 description:
941941Details "URI scheme used to open citations from Codex output (default: `vscode`).",
942942 },
943943Model to use (e.g., `gpt-5-codex`). {
944944 key: "otel.environment",
945945Key type: "string",
946946 description:
947947`model_auto_compact_token_limit` "Environment tag applied to emitted OpenTelemetry events (default: `dev`).",
948948 },
949949Type / Values {
950950 key: "otel.exporter",
951951`number` type: "none | otlp-http | otlp-grpc",
952952 description:
953953Details "Select the OpenTelemetry exporter and provide any endpoint metadata.",
954954 },
955955Token threshold that triggers automatic history compaction (unset uses model defaults). {
956956 key: "otel.trace_exporter",
957957Key type: "none | otlp-http | otlp-grpc",
958958 description:
959959`model_context_window` "Select the OpenTelemetry trace exporter and provide any endpoint metadata.",
960960 },
961961Type / Values {
962962 key: "otel.metrics_exporter",
963963`number` type: "none | statsig | otlp-http | otlp-grpc",
964964 description:
965965Details "Select the OpenTelemetry metrics exporter (defaults to `statsig`).",
966966 },
967967Context window tokens available to the active model. {
968968 key: "otel.log_user_prompt",
969969Key type: "boolean",
970970 description:
971971`model_instructions_file` "Opt in to exporting raw user prompts with OpenTelemetry logs.",
972972 },
973973Type / Values {
974974 key: "otel.exporter.<id>.endpoint",
975975`string (path)` type: "string",
976976 description: "Exporter endpoint for OTEL logs.",
977977Details },
978978 {
979979Replacement for built-in instructions instead of `AGENTS.md`. key: "otel.exporter.<id>.protocol",
980980 type: "binary | json",
981981Key description: "Protocol used by the OTLP/HTTP exporter.",
982982 },
983983`model_provider` {
984984 key: "otel.exporter.<id>.headers",
985985Type / Values type: "map<string,string>",
986986 description: "Static headers included with OTEL exporter requests.",
987987`string` },
988988 {
989989Details key: "otel.trace_exporter.<id>.endpoint",
990990 type: "string",
991991Provider id from `model_providers` (default: `openai`). description: "Trace exporter endpoint for OTEL logs.",
992992 },
993993Key {
994994 key: "otel.trace_exporter.<id>.protocol",
995995`model_providers.<id>.base_url` type: "binary | json",
996996 description: "Protocol used by the OTLP/HTTP trace exporter.",
997997Type / Values },
998998 {
999999`string` key: "otel.trace_exporter.<id>.headers",
10001000 type: "map<string,string>",
10011001Details description: "Static headers included with OTEL trace exporter requests.",
10021002 },
10031003API base URL for the model provider. {
10041004 key: "otel.exporter.<id>.tls.ca-certificate",
10051005Key type: "string",
10061006 description: "CA certificate path for OTEL exporter TLS.",
10071007`model_providers.<id>.env_http_headers` },
10081008 {
10091009Type / Values key: "otel.exporter.<id>.tls.client-certificate",
10101010 type: "string",
10111011`map<string,string>` description: "Client certificate path for OTEL exporter TLS.",
10121012 },
10131013Details {
10141014 key: "otel.exporter.<id>.tls.client-private-key",
10151015HTTP headers populated from environment variables when present. type: "string",
10161016 description: "Client private key path for OTEL exporter TLS.",
10171017Key },
10181018 {
10191019`model_providers.<id>.env_key` key: "otel.trace_exporter.<id>.tls.ca-certificate",
10201020 type: "string",
10211021Type / Values description: "CA certificate path for OTEL trace exporter TLS.",
10221022 },
10231023`string` {
10241024 key: "otel.trace_exporter.<id>.tls.client-certificate",
10251025Details type: "string",
10261026 description: "Client certificate path for OTEL trace exporter TLS.",
10271027Environment variable supplying the provider API key. },
10281028 {
10291029Key key: "otel.trace_exporter.<id>.tls.client-private-key",
10301030 type: "string",
10311031`model_providers.<id>.env_key_instructions` description: "Client private key path for OTEL trace exporter TLS.",
10321032 },
10331033Type / Values {
10341034 key: "tui",
10351035`string` type: "table",
10361036 description:
10371037Details "TUI-specific options such as enabling inline desktop notifications.",
10381038 },
10391039Optional setup guidance for the provider API key. {
10401040 key: "tui.notifications",
10411041Key type: "boolean | array<string>",
10421042 description:
10431043`model_providers.<id>.experimental_bearer_token` "Enable TUI notifications; optionally restrict to specific event types.",
10441044 },
10451045Type / Values {
10461046 key: "tui.notification_method",
10471047`string` type: "auto | osc9 | bel",
10481048 description:
10491049Details "Notification method for terminal notifications (default: auto).",
10501050 },
10511051Direct bearer token for the provider (discouraged; use `env_key`). {
10521052 key: "tui.notification_condition",
10531053Key type: "unfocused | always",
10541054 description:
10551055`model_providers.<id>.http_headers` "Control whether TUI notifications fire only when the terminal is unfocused or regardless of focus. Defaults to `unfocused`.",
10561056 },
10571057Type / Values {
10581058 key: "tui.animations",
10591059`map<string,string>` type: "boolean",
10601060 description:
10611061Details "Enable terminal animations (welcome screen, shimmer, spinner) (default: true).",
10621062 },
10631063Static HTTP headers added to provider requests. {
10641064 key: "tui.alternate_screen",
10651065Key type: "auto | always | never",
10661066 description:
10671067`model_providers.<id>.name` "Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback).",
10681068 },
10691069Type / Values {
10701070 key: "tui.show_tooltips",
10711071`string` type: "boolean",
10721072 description:
10731073Details "Show onboarding tooltips in the TUI welcome screen (default: true).",
10741074 },
10751075Display name for a custom model provider. {
10761076 key: "tui.status_line",
10771077Key type: "array<string> | null",
10781078 description:
10791079`model_providers.<id>.query_params` "Ordered list of TUI footer status-line item identifiers. `null` disables the status line.",
10801080 },
10811081Type / Values {
10821082 key: "tui.terminal_title",
10831083`map<string,string>` type: "array<string> | null",
10841084 description:
10851085Details 'Ordered list of terminal window/tab title item identifiers. Defaults to `["spinner", "project"]`; `null` disables title updates.',
10861086 },
10871087Extra query parameters appended to provider requests. {
10881088 key: "tui.theme",
10891089Key type: "string",
10901090 description:
10911091`model_providers.<id>.request_max_retries` "Syntax-highlighting theme override (kebab-case theme name).",
10921092 },
10931093Type / Values {
10941094 key: "tui.keymap.<context>.<action>",
10951095`number` type: "string | array<string>",
10961096 description:
10971097Details "Keyboard shortcut binding for a TUI action. Supported contexts include `global`, `chat`, `composer`, `editor`, `pager`, `list`, and `approval`; context-specific bindings override `tui.keymap.global`.",
10981098 },
10991099Retry count for HTTP requests to the provider (default: 4). {
11001100 key: "tui.keymap.<context>.<action> = []",
11011101Key type: "empty array",
11021102 description:
11031103`model_providers.<id>.requires_openai_auth` "Unbind the action in that keymap context. Key names use normalized strings such as `ctrl-a`, `shift-enter`, or `page-down`.",
11041104 },
11051105Type / Values {
11061106 key: "tui.model_availability_nux.<model>",
11071107`boolean` type: "integer",
11081108 description: "Internal startup-tooltip state keyed by model slug.",
11091109Details },
11101110 {
11111111The provider uses OpenAI authentication (defaults to false). key: "hide_agent_reasoning",
11121112 type: "boolean",
11131113Key description:
11141114 "Suppress reasoning events in both the TUI and `codex exec` output.",
11151115`model_providers.<id>.stream_idle_timeout_ms` },
11161116 {
11171117Type / Values key: "show_raw_agent_reasoning",
11181118 type: "boolean",
11191119`number` description:
11201120 "Surface raw reasoning content when the active model emits it.",
11211121Details },
11221122 {
11231123Idle timeout for SSE streams in milliseconds (default: 300000). key: "disable_paste_burst",
11241124 type: "boolean",
11251125Key description: "Disable burst-paste detection in the TUI.",
11261126 },
11271127`model_providers.<id>.stream_max_retries` {
11281128 key: "windows_wsl_setup_acknowledged",
11291129Type / Values type: "boolean",
11301130 description: "Track Windows onboarding acknowledgement (Windows only).",
11311131`number` },
11321132 {
11331133Details key: "chatgpt_base_url",
11341134 type: "string",
11351135Retry count for SSE streaming interruptions (default: 5). description: "Override the base URL used during the ChatGPT login flow.",
11361136 },
11371137Key {
11381138 key: "cli_auth_credentials_store",
11391139`model_providers.<id>.wire_api` type: "file | keyring | auto",
11401140 description:
11411141Type / Values "Control where the CLI stores cached credentials (file-based auth.json vs OS keychain).",
11421142 },
11431143`chat | responses` {
11441144 key: "mcp_oauth_credentials_store",
11451145Details type: "auto | file | keyring",
11461146 description: "Preferred store for MCP OAuth credentials.",
11471147Protocol used by the provider (defaults to `chat` if omitted). },
11481148 {
11491149Key key: "mcp_oauth_callback_port",
11501150 type: "integer",
11511151`model_reasoning_effort` description:
11521152 "Optional fixed port for the local HTTP callback server used during MCP OAuth login. When unset, Codex binds to an ephemeral port chosen by the OS.",
11531153Type / Values },
11541154 {
11551155`minimal | low | medium | high | xhigh` key: "mcp_oauth_callback_url",
11561156 type: "string",
11571157Details description:
11581158 "Optional redirect URI override for MCP OAuth login (for example, a devbox ingress URL). `mcp_oauth_callback_port` still controls the callback listener port.",
11591159Adjust reasoning effort for supported models (Responses API only; `xhigh` is model-dependent). },
11601160 {
11611161Key key: "experimental_use_unified_exec_tool",
11621162 type: "boolean",
11631163`model_reasoning_summary` description:
11641164 "Legacy name for enabling unified exec; prefer `[features].unified_exec` or `codex --enable unified_exec`.",
11651165Type / Values },
11661166 {
11671167`auto | concise | detailed | none` key: "tools.web_search",
11681168 type: 'boolean | { context_size = "low|medium|high", allowed_domains = [string], location = { country, region, city, timezone } }',
11691169Details description:
11701170 "Optional web search tool configuration. The legacy boolean form is still accepted, but the object form lets you set search context size, allowed domains, and approximate user location.",
11711171Select reasoning summary detail or disable summaries entirely. },
11721172 {
11731173Key key: "tools.view_image",
11741174 type: "boolean",
11751175`model_supports_reasoning_summaries` description: "Enable the local-image attachment tool `view_image`.",
11761176 },
11771177Type / Values {
11781178 key: "web_search",
11791179`boolean` type: "disabled | cached | live",
11801180 description:
11811181Details 'Web search mode (default: `"cached"`; cached uses an OpenAI-maintained index and does not fetch live pages; if you use `--yolo` or another full access sandbox setting, it defaults to `"live"`). Use `"live"` to fetch the most recent data from the web, or `"disabled"` to remove the tool.',
11821182 },
11831183Force Codex to send or not send reasoning metadata. {
11841184 key: "default_permissions",
11851185Key type: "string",
11861186 description:
11871187`model_verbosity` "Name of the default permissions profile to apply to sandboxed tool calls. Built-ins are `:read-only`, `:workspace`, and `:danger-no-sandbox`; custom profile names require matching `[permissions.<name>]` tables.",
11881188 },
11891189Type / Values {
11901190 key: "permissions.<name>.filesystem",
11911191`low | medium | high` type: "table",
11921192 description:
11931193Details "Named filesystem permission profile. Each key is an absolute path or special token such as `:minimal` or `:project_roots`.",
11941194 },
11951195Control GPT-5 Responses API verbosity (defaults to `medium`). {
11961196 key: "permissions.<name>.filesystem.glob_scan_max_depth",
11971197Key type: "number",
11981198 description:
11991199`notice.hide_full_access_warning` "Maximum depth for expanding deny-read glob patterns on platforms that snapshot matches before sandbox startup. Must be at least `1` when set.",
12001200 },
12011201Type / Values {
12021202 key: "permissions.<name>.filesystem.<path-or-glob>",
12031203`boolean` type: '"read" | "write" | "none" | table',
12041204 description:
12051205Details 'Grant direct access for a path, glob pattern, or special token, or scope nested entries under that root. Use `"none"` to deny reads for matching paths.',
12061206 },
12071207Track acknowledgement of the full access warning prompt. {
12081208 key: 'permissions.<name>.filesystem.":project_roots".<subpath-or-glob>',
12091209Key type: '"read" | "write" | "none"',
12101210 description:
12111211`notice.hide_gpt-5.1-codex-max_migration_prompt` 'Scoped filesystem access relative to the detected project roots. Use `"."` for the root itself; glob subpaths such as `"**/*.env"` can deny reads with `"none"`.',
12121212 },
12131213Type / Values {
12141214 key: "permissions.<name>.network.enabled",
12151215`boolean` type: "boolean",
12161216 description: "Enable network access for this named permissions profile.",
12171217Details },
12181218 {
12191219Track acknowledgement of the gpt-5.1-codex-max migration prompt. key: "permissions.<name>.network.proxy_url",
12201220 type: "string",
12211221Key description:
12221222 "HTTP proxy endpoint used when this permissions profile enables the managed network proxy.",
12231223`notice.hide_gpt5_1_migration_prompt` },
12241224 {
12251225Type / Values key: "permissions.<name>.network.enable_socks5",
12261226 type: "boolean",
12271227`boolean` description:
12281228 "Expose a SOCKS5 listener when this permissions profile enables the managed network proxy.",
12291229Details },
12301230 {
12311231Track acknowledgement of the GPT-5.1 migration prompt. key: "permissions.<name>.network.socks_url",
12321232 type: "string",
12331233Key description: "SOCKS5 proxy endpoint used by this permissions profile.",
12341234 },
12351235`notice.hide_rate_limit_model_nudge` {
12361236 key: "permissions.<name>.network.enable_socks5_udp",
12371237Type / Values type: "boolean",
12381238 description: "Allow UDP over the SOCKS5 listener when enabled.",
12391239`boolean` },
12401240 {
12411241Details key: "permissions.<name>.network.allow_upstream_proxy",
12421242 type: "boolean",
12431243Track opt-out of the rate limit model switch reminder. description:
12441244 "Allow the managed proxy to chain to another upstream proxy.",
12451245Key },
12461246 {
12471247`notice.hide_world_writable_warning` key: "permissions.<name>.network.dangerously_allow_non_loopback_proxy",
12481248 type: "boolean",
12491249Type / Values description:
12501250 "Permit non-loopback bind addresses for the managed proxy listener.",
12511251`boolean` },
12521252 {
12531253Details key: "permissions.<name>.network.dangerously_allow_all_unix_sockets",
12541254 type: "boolean",
12551255Track acknowledgement of the Windows world-writable directories warning. description:
12561256 "Allow the proxy to use arbitrary Unix sockets instead of the default restricted set.",
12571257Key },
12581258 {
12591259`notice.model_migrations` key: "permissions.<name>.network.mode",
12601260 type: "limited | full",
12611261Type / Values description: "Network proxy mode used for subprocess traffic.",
12621262 },
12631263`map<string,string>` {
12641264 key: "permissions.<name>.network.domains",
12651265Details type: "map<string, allow | deny>",
12661266 description:
12671267Track acknowledged model migrations as old->new mappings. "Domain rules for the managed proxy. Use domain names or wildcard patterns as keys, with `allow` or `deny` values.",
12681268 },
12691269Key {
12701270 key: "permissions.<name>.network.unix_sockets",
12711271`notify` type: "map<string, allow | none>",
12721272 description:
12731273Type / Values "Unix socket rules for the managed proxy. Use socket paths as keys, with `allow` or `none` values.",
12741274 },
12751275`array<string>` {
12761276 key: "permissions.<name>.network.allow_local_binding",
12771277Details type: "boolean",
12781278 description:
12791279Command invoked for notifications; receives a JSON payload from Codex. "Permit local bind/listen operations through the managed proxy.",
12801280 },
12811281Key {
12821282 key: "projects.<path>.trust_level",
12831283`oss_provider` type: "string",
12841284 description:
12851285Type / Values 'Mark a project or worktree as trusted or untrusted (`"trusted"` | `"untrusted"`). Untrusted projects skip project-scoped `.codex/` layers, including project-local config, hooks, and rules.',
12861286 },
12871287`lmstudio | ollama` {
12881288 key: "notice.hide_full_access_warning",
12891289Details type: "boolean",
12901290 description: "Track acknowledgement of the full access warning prompt.",
12911291Default local provider used when running with `--oss` (defaults to prompting if unset). },
12921292 {
12931293Key key: "notice.hide_world_writable_warning",
12941294 type: "boolean",
12951295`otel.environment` description:
12961296 "Track acknowledgement of the Windows world-writable directories warning.",
12971297Type / Values },
12981298 {
12991299`string` key: "notice.hide_rate_limit_model_nudge",
13001300 type: "boolean",
13011301Details description: "Track opt-out of the rate limit model switch reminder.",
13021302 },
13031303Environment tag applied to emitted OpenTelemetry events (default: `dev`). {
13041304 key: "notice.hide_gpt5_1_migration_prompt",
13051305Key type: "boolean",
13061306 description: "Track acknowledgement of the GPT-5.1 migration prompt.",
13071307`otel.exporter` },
13081308 {
13091309Type / Values key: "notice.hide_gpt-5.1-codex-max_migration_prompt",
13101310 type: "boolean",
13111311`none | otlp-http | otlp-grpc` description:
13121312 "Track acknowledgement of the gpt-5.1-codex-max migration prompt.",
13131313Details },
13141314 {
13151315Select the OpenTelemetry exporter and provide any endpoint metadata. key: "notice.model_migrations",
13161316 type: "map<string,string>",
13171317Key description: "Track acknowledged model migrations as old->new mappings.",
13181318 },
13191319`otel.exporter.<id>.endpoint` {
13201320 key: "forced_login_method",
13211321Type / Values type: "chatgpt | api",
13221322 description: "Restrict Codex to a specific authentication method.",
13231323`string` },
13241324 {
13251325Details key: "forced_chatgpt_workspace_id",
13261326 type: "string (uuid)",
13271327Exporter endpoint for OTEL logs. description: "Limit ChatGPT logins to a specific workspace identifier.",
13281328 },
13291329Key ]}
13301330 client:load
13311331`otel.exporter.<id>.headers`/>
1332
1333Type / Values
1334
1335`map<string,string>`
1336
1337Details
1338
1339Static headers included with OTEL exporter requests.
1340
1341Key
1342
1343`otel.exporter.<id>.protocol`
1344
1345Type / Values
1346
1347`binary | json`
1348
1349Details
1350
1351Protocol used by the OTLP/HTTP exporter.
1352
1353Key
1354
1355`otel.exporter.<id>.tls.ca-certificate`
1356
1357Type / Values
1358
1359`string`
1360
1361Details
1362
1363CA certificate path for OTEL exporter TLS.
1364
1365Key
1366
1367`otel.exporter.<id>.tls.client-certificate`
1368
1369Type / Values
1370
1371`string`
1372
1373Details
1374
1375Client certificate path for OTEL exporter TLS.
1376
1377Key
1378
1379`otel.exporter.<id>.tls.client-private-key`
1380
1381Type / Values
1382
1383`string`
1384
1385Details
1386
1387Client private key path for OTEL exporter TLS.
1388
1389Key
1390
1391`otel.log_user_prompt`
1392
1393Type / Values
1394
1395`boolean`
1396
1397Details
1398
1399Opt in to exporting raw user prompts with OpenTelemetry logs.
1400
1401Key
1402
1403`otel.trace_exporter`
1404
1405Type / Values
1406
1407`none | otlp-http | otlp-grpc`
1408
1409Details
1410
1411Select the OpenTelemetry trace exporter and provide any endpoint metadata.
1412
1413Key
1414
1415`otel.trace_exporter.<id>.endpoint`
1416
1417Type / Values
1418
1419`string`
1420
1421Details
1422
1423Trace exporter endpoint for OTEL logs.
1424
1425Key
1426
1427`otel.trace_exporter.<id>.headers`
1428
1429Type / Values
1430
1431`map<string,string>`
1432
1433Details
1434
1435Static headers included with OTEL trace exporter requests.
1436
1437Key
1438
1439`otel.trace_exporter.<id>.protocol`
1440
1441Type / Values
1442
1443`binary | json`
1444
1445Details
1446
1447Protocol used by the OTLP/HTTP trace exporter.
1448
1449Key
1450
1451`otel.trace_exporter.<id>.tls.ca-certificate`
1452
1453Type / Values
1454
1455`string`
1456
1457Details
1458
1459CA certificate path for OTEL trace exporter TLS.
1460
1461Key
1462
1463`otel.trace_exporter.<id>.tls.client-certificate`
1464
1465Type / Values
1466
1467`string`
1468
1469Details
1470
1471Client certificate path for OTEL trace exporter TLS.
1472
1473Key
1474
1475`otel.trace_exporter.<id>.tls.client-private-key`
1476
1477Type / Values
1478
1479`string`
1480
1481Details
1482
1483Client private key path for OTEL trace exporter TLS.
1484
1485Key
1486
1487`personality`
1488
1489Type / Values
1490
1491`none | friendly | pragmatic`
1492
1493Details
1494
1495Default communication style for models that advertise `supportsPersonality`; can be overridden per thread/turn or via `/personality`.
1496
1497Key
1498
1499`profile`
1500
1501Type / Values
1502
1503`string`
1504
1505Details
1506
1507Default profile applied at startup (equivalent to `--profile`).
1508
1509Key
1510
1511`profiles.<name>.*`
1512
1513Type / Values
1514
1515`various`
1516
1517Details
1518
1519Profile-scoped overrides for any of the supported configuration keys.
1520
1521Key
1522
1523`profiles.<name>.experimental_use_freeform_apply_patch`
1524
1525Type / Values
1526
1527`boolean`
1528
1529Details
1530
1531Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`.
1532
1533Key
1534
1535`profiles.<name>.experimental_use_unified_exec_tool`
1536
1537Type / Values
1538
1539`boolean`
1540
1541Details
1542
1543Legacy name for enabling unified exec; prefer `[features].unified_exec`.
1544
1545Key
1546
1547`profiles.<name>.include_apply_patch_tool`
1548
1549Type / Values
1550
1551`boolean`
1552
1553Details
1554
1555Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`.
1556
1557Key
1558
1559`profiles.<name>.oss_provider`
1560
1561Type / Values
1562
1563`lmstudio | ollama`
1564
1565Details
1566
1567Profile-scoped OSS provider for `--oss` sessions.
1568
1569Key
1570
1571`profiles.<name>.personality`
1572
1573Type / Values
1574
1575`none | friendly | pragmatic`
1576
1577Details
1578
1579Profile-scoped communication style override for supported models.
1580
1581Key
1582
1583`profiles.<name>.web_search`
1584
1585Type / Values
1586
1587`disabled | cached | live`
1588
1589Details
1590
1591Profile-scoped web search mode override (default: `"cached"`).
1592
1593Key
1594
1595`project_doc_fallback_filenames`
1596
1597Type / Values
1598
1599`array<string>`
1600
1601Details
1602
1603Additional filenames to try when `AGENTS.md` is missing.
1604
1605Key
1606
1607`project_doc_max_bytes`
1608
1609Type / Values
1610
1611`number`
1612
1613Details
1614
1615Maximum bytes read from `AGENTS.md` when building project instructions.
1616
1617Key
1618
1619`project_root_markers`
1620
1621Type / Values
1622
1623`array<string>`
1624
1625Details
1626
1627List of project root marker filenames; used when searching parent directories for the project root.
1628
1629Key
1630
1631`projects.<path>.trust_level`
1632
1633Type / Values
1634
1635`string`
1636
1637Details
1638
1639Mark a project or worktree as trusted or untrusted (`"trusted"` | `"untrusted"`). Untrusted projects skip project-scoped `.codex/` layers.
1640
1641Key
1642
1643`review_model`
1644
1645Type / Values
1646
1647`string`
1648
1649Details
1650
1651Optional model override used by `/review` (defaults to the current session model).
1652
1653Key
1654
1655`sandbox_mode`
1656
1657Type / Values
1658
1659`read-only | workspace-write | danger-full-access`
1660
1661Details
1662
1663Sandbox policy for filesystem and network access during command execution.
1664
1665Key
1666
1667`sandbox_workspace_write.exclude_slash_tmp`
1668
1669Type / Values
1670
1671`boolean`
1672
1673Details
1674
1675Exclude `/tmp` from writable roots in workspace-write mode.
1676
1677Key
1678
1679`sandbox_workspace_write.exclude_tmpdir_env_var`
1680
1681Type / Values
1682
1683`boolean`
1684
1685Details
1686
1687Exclude `$TMPDIR` from writable roots in workspace-write mode.
1688
1689Key
1690
1691`sandbox_workspace_write.network_access`
1692
1693Type / Values
1694
1695`boolean`
1696
1697Details
1698
1699Allow outbound network access inside the workspace-write sandbox.
1700
1701Key
1702
1703`sandbox_workspace_write.writable_roots`
1704
1705Type / Values
1706
1707`array<string>`
1708
1709Details
1710
1711Additional writable roots when `sandbox_mode = "workspace-write"`.
1712
1713Key
1714
1715`shell_environment_policy.exclude`
1716
1717Type / Values
1718
1719`array<string>`
1720
1721Details
1722
1723Glob patterns for removing environment variables after the defaults.
1724
1725Key
1726
1727`shell_environment_policy.experimental_use_profile`
1728
1729Type / Values
1730
1731`boolean`
1732
1733Details
1734
1735Use the user shell profile when spawning subprocesses.
1736
1737Key
1738
1739`shell_environment_policy.ignore_default_excludes`
1740
1741Type / Values
1742
1743`boolean`
1744
1745Details
1746
1747Keep variables containing KEY/SECRET/TOKEN before other filters run.
1748
1749Key
1750
1751`shell_environment_policy.include_only`
1752
1753Type / Values
1754
1755`array<string>`
1756
1757Details
1758
1759Whitelist of patterns; when set only matching variables are kept.
1760
1761Key
1762
1763`shell_environment_policy.inherit`
1764
1765Type / Values
1766
1767`all | core | none`
1768
1769Details
1770
1771Baseline environment inheritance when spawning subprocesses.
1772
1773Key
1774
1775`shell_environment_policy.set`
1776
1777Type / Values
1778
1779`map<string,string>`
1780
1781Details
1782
1783Explicit environment overrides injected into every subprocess.
1784
1785Key
1786
1787`show_raw_agent_reasoning`
1788
1789Type / Values
1790
1791`boolean`
1792
1793Details
1794
1795Surface raw reasoning content when the active model emits it.
1796
1797Key
1798
1799`skills.config`
1800
1801Type / Values
1802
1803`array<object>`
1804
1805Details
1806
1807Per-skill enablement overrides stored in config.toml.
1808
1809Key
1810
1811`skills.config.<index>.enabled`
1812
1813Type / Values
1814
1815`boolean`
1816
1817Details
1818
1819Enable or disable the referenced skill.
1820
1821Key
1822
1823`skills.config.<index>.path`
1824
1825Type / Values
1826
1827`string (path)`
1828
1829Details
1830
1831Path to a skill folder containing `SKILL.md`.
1832
1833Key
1834
1835`suppress_unstable_features_warning`
1836
1837Type / Values
1838
1839`boolean`
1840
1841Details
1842
1843Suppress the warning that appears when under-development feature flags are enabled.
1844
1845Key
1846
1847`tool_output_token_limit`
1848
1849Type / Values
1850
1851`number`
1852
1853Details
1854
1855Token budget for storing individual tool/function outputs in history.
1856
1857Key
1858
1859`tools.web_search`
1860
1861Type / Values
1862
1863`boolean`
1864
1865Details
1866
1867Deprecated legacy toggle for web search; prefer the top-level `web_search` setting.
1868
1869Key
1870
1871`tui`
1872
1873Type / Values
1874
1875`table`
1876
1877Details
1878
1879TUI-specific options such as enabling inline desktop notifications.
1880
1881Key
1882
1883`tui.alternate_screen`
1884
1885Type / Values
1886
1887`auto | always | never`
1888
1889Details
1890
1891Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback).
1892
1893Key
1894
1895`tui.animations`
1896
1897Type / Values
1898
1899`boolean`
1900
1901Details
1902
1903Enable terminal animations (welcome screen, shimmer, spinner) (default: true).
1904
1905Key
1906
1907`tui.notification_method`
1908
1909Type / Values
1910
1911`auto | osc9 | bel`
1912
1913Details
1914
1915Notification method for unfocused terminal notifications (default: auto).
1916
1917Key
1918
1919`tui.notifications`
1920
1921Type / Values
1922
1923`boolean | array<string>`
1924
1925Details
1926
1927Enable TUI notifications; optionally restrict to specific event types.
1928
1929Key
1930
1931`tui.show_tooltips`
1932
1933Type / Values
1934
1935`boolean`
1936
1937Details
1938
1939Show onboarding tooltips in the TUI welcome screen (default: true).
1940
1941Key
1942
1943`tui.status_line`
1944
1945Type / Values
1946
1947`array<string> | null`
1948
1949Details
1950
1951Ordered list of TUI footer status-line item identifiers. `null` disables the status line.
1952
1953Key
1954
1955`web_search`
1956
1957Type / Values
1958
1959`disabled | cached | live`
1960
1961Details
1962
1963Web search mode (default: `"cached"`; cached uses an OpenAI-maintained index and does not fetch live pages; if you use `--yolo` or another full access sandbox setting, it defaults to `"live"`). Use `"live"` to fetch the most recent data from the web, or `"disabled"` to remove the tool.
1964
1965Key
1966
1967`windows_wsl_setup_acknowledged`
1968
1969Type / Values
1970
1971`boolean`
1972
1973Details
1974
1975Track Windows onboarding acknowledgement (Windows only).
1976
1977Expand to view all
1978 1332
1979You can find the latest JSON schema for `config.toml` [here](https://developers.openai.com/codex/config-schema.json).1333You can find the latest JSON schema for `config.toml` [here](https://developers.openai.com/codex/config-schema.json).
1980 1334
1988 1342
1989## `requirements.toml`1343## `requirements.toml`
1990 1344
19911345`requirements.toml` is an admin-enforced configuration file that constrains security-sensitive settings users can’t override. For details, locations, and examples, see [Admin-enforced requirements](https://developers.openai.com/codex/security#admin-enforced-requirements-requirementstoml).`requirements.toml` is an admin-enforced configuration file that constrains security-sensitive settings users can't override. For details, locations, and examples, see [Admin-enforced requirements](https://developers.openai.com/codex/enterprise/managed-configuration#admin-enforced-requirements-requirementstoml).
1992 1346
1993For ChatGPT Business and Enterprise users, Codex can also apply cloud-fetched1347For ChatGPT Business and Enterprise users, Codex can also apply cloud-fetched
1994requirements. See the security page for precedence details.1348requirements. See the security page for precedence details.
1995 1349
19961350| Key | Type / Values | Details |Use `[features]` in `requirements.toml` to pin feature flags by the same
19971351| --- | --- | --- |canonical keys that `config.toml` uses. Omitted keys remain unconstrained.
19981352| `allowed_approval_policies` | `array<string>` | Allowed values for `approval\_policy`. |
19991353| `allowed_sandbox_modes` | `array<string>` | Allowed values for `sandbox_mode`. |<ConfigTable
20001354| `allowed_web_search_modes` | `array<string>` | Allowed values for `web_search` (`disabled`, `cached`, `live`). `disabled` is always allowed; an empty list effectively allows only `disabled`. | options={[
20011355| `mcp_servers` | `table` | Allowlist of MCP servers that may be enabled. Both the server name (`<id>`) and its identity must match for the MCP server to be enabled. Any configured MCP server not in the allowlist (or with a mismatched identity) is disabled. | {
20021356| `mcp_servers.<id>.identity` | `table` | Identity rule for a single MCP server. Set either `command` (stdio) or `url` (streamable HTTP). | key: "allowed_approval_policies",
20031357| `mcp_servers.<id>.identity.command` | `string` | Allow an MCP stdio server when its `mcp_servers.<id>.command` matches this command. | type: "array<string>",
20041358| `mcp_servers.<id>.identity.url` | `string` | Allow an MCP streamable HTTP server when its `mcp_servers.<id>.url` matches this URL. | description:
20051359| `rules` | `table` | Admin-enforced command rules merged with `.rules` files. Requirements rules must be restrictive. | "Allowed values for `approval_policy` (for example `untrusted`, `on-request`, `never`, and `granular`).",
20061360| `rules.prefix_rules` | `array<table>` | List of enforced prefix rules. Each rule must include `pattern` and `decision`. | },
20071361| `rules.prefix_rules[].decision` | `prompt | forbidden` | Required. Requirements rules can only prompt or forbid (not allow). | {
20081362| `rules.prefix_rules[].justification` | `string` | Optional non-empty rationale surfaced in approval prompts or rejection messages. | key: "allowed_approvals_reviewers",
20091363| `rules.prefix_rules[].pattern` | `array<table>` | Command prefix expressed as pattern tokens. Each token sets either `token` or `any_of`. | type: "array<string>",
20101364| `rules.prefix_rules[].pattern[].any_of` | `array<string>` | A list of allowed alternative tokens at this position. | description:
20111365| `rules.prefix_rules[].pattern[].token` | `string` | A single literal token at this position. | "Allowed values for `approvals_reviewer`, such as `user` and `auto_review`.",
20121366 },
20131367Key {
20141368 key: "guardian_policy_config",
20151369`allowed_approval_policies` type: "string",
20161370 description:
20171371Type / Values "Managed Markdown policy instructions for automatic review. This takes precedence over local `[auto_review].policy`. Blank values are ignored.",
20181372 },
20191373`array<string>` {
20201374 key: "allowed_sandbox_modes",
20211375Details type: "array<string>",
20221376 description: "Allowed values for `sandbox_mode`.",
20231377Allowed values for `approval\_policy`. },
20241378 {
20251379Key key: "remote_sandbox_config",
20261380 type: "array<table>",
20271381`allowed_sandbox_modes` description:
20281382 "Host-specific sandbox requirements. The first entry whose `hostname_patterns` match the resolved host name overrides top-level `allowed_sandbox_modes` for that requirements source. Host-specific entries currently override sandbox modes only.",
20291383Type / Values },
20301384 {
20311385`array<string>` key: "remote_sandbox_config[].hostname_patterns",
20321386 type: "array<string>",
20331387Details description:
20341388 "Case-insensitive host name patterns. Supports `*` for any sequence of characters and `?` for one character.",
20351389Allowed values for `sandbox_mode`. },
20361390 {
20371391Key key: "remote_sandbox_config[].allowed_sandbox_modes",
20381392 type: "array<string>",
20391393`allowed_web_search_modes` description:
20401394 "Allowed sandbox modes to apply when this host-specific entry matches.",
20411395Type / Values },
20421396 {
20431397`array<string>` key: "allowed_web_search_modes",
20441398 type: "array<string>",
20451399Details description:
20461400 "Allowed values for `web_search` (`disabled`, `cached`, `live`). `disabled` is always allowed; an empty list effectively allows only `disabled`.",
20471401Allowed values for `web_search` (`disabled`, `cached`, `live`). `disabled` is always allowed; an empty list effectively allows only `disabled`. },
20481402 {
20491403Key key: "features",
20501404 type: "table",
20511405`mcp_servers` description:
20521406 "Pinned feature values keyed by the canonical names from `config.toml`'s `[features]` table.",
20531407Type / Values },
20541408 {
20551409`table` key: "features.<name>",
20561410 type: "boolean",
20571411Details description:
20581412 "Require a specific canonical feature key to stay enabled or disabled.",
20591413Allowlist of MCP servers that may be enabled. Both the server name (`<id>`) and its identity must match for the MCP server to be enabled. Any configured MCP server not in the allowlist (or with a mismatched identity) is disabled. },
20601414 {
20611415Key key: "features.in_app_browser",
20621416 type: "boolean",
20631417`mcp_servers.<id>.identity` description:
20641418 "Set to `false` in `requirements.toml` to disable the in-app browser pane.",
20651419Type / Values },
20661420 {
20671421`table` key: "features.browser_use",
20681422 type: "boolean",
20691423Details description:
20701424 "Set to `false` in `requirements.toml` to disable Browser Use and Browser Agent availability.",
20711425Identity rule for a single MCP server. Set either `command` (stdio) or `url` (streamable HTTP). },
20721426 {
20731427Key key: "features.computer_use",
20741428 type: "boolean",
20751429`mcp_servers.<id>.identity.command` description:
20761430 "Set to `false` in `requirements.toml` to disable Computer Use availability and related install or enablement flows.",
20771431Type / Values },
20781432 {
20791433`string` key: "hooks",
20801434 type: "table",
20811435Details description:
20821436 "Admin-enforced managed lifecycle hooks. Requires a managed hook directory and uses the same event schema as inline `[hooks]` in `config.toml`.",
20831437Allow an MCP stdio server when its `mcp_servers.<id>.command` matches this command. },
20841438 {
20851439Key key: "hooks.managed_dir",
20861440 type: "string (absolute path)",
20871441`mcp_servers.<id>.identity.url` description:
20881442 "Directory containing managed hook scripts on macOS and Linux. Codex validates that it is absolute and exists before loading managed hooks.",
20891443Type / Values },
20901444 {
20911445`string` key: "hooks.windows_managed_dir",
20921446 type: "string (absolute path)",
20931447Details description:
20941448 "Directory containing managed hook scripts on Windows. Codex validates that it is absolute and exists before loading managed hooks.",
20951449Allow an MCP streamable HTTP server when its `mcp_servers.<id>.url` matches this URL. },
20961450 {
20971451Key key: "hooks.<Event>",
20981452 type: "array<table>",
20991453`rules` description:
21001454 "Matcher groups for a hook event such as `PreToolUse`, `PostToolUse`, `PermissionRequest`, `SessionStart`, `UserPromptSubmit`, or `Stop`.",
21011455Type / Values },
21021456 {
21031457`table` key: "hooks.<Event>[].hooks",
21041458 type: "array<table>",
21051459Details description:
21061460 "Hook handlers for a matcher group. Command hooks are currently supported; prompt and agent hook handlers are parsed but skipped.",
21071461Admin-enforced command rules merged with `.rules` files. Requirements rules must be restrictive. },
21081462 {
21091463Key key: "permissions.filesystem.deny_read",
21101464 type: "array<string>",
21111465`rules.prefix_rules` description:
21121466 "Admin-enforced filesystem read denials. Entries can be paths or glob patterns, and users cannot weaken them with local config.",
21131467Type / Values },
21141468 {
21151469`array<table>` key: "mcp_servers",
21161470 type: "table",
21171471Details description:
21181472 "Allowlist of MCP servers that may be enabled. Both the server name (`<id>`) and its identity must match for the MCP server to be enabled. Any configured MCP server not in the allowlist (or with a mismatched identity) is disabled.",
21191473List of enforced prefix rules. Each rule must include `pattern` and `decision`. },
21201474 {
21211475Key key: "mcp_servers.<id>.identity",
21221476 type: "table",
21231477`rules.prefix_rules[].decision` description:
21241478 "Identity rule for a single MCP server. Set either `command` (stdio) or `url` (streamable HTTP).",
21251479Type / Values },
21261480 {
21271481`prompt | forbidden` key: "mcp_servers.<id>.identity.command",
21281482 type: "string",
21291483Details description:
21301484 "Allow an MCP stdio server when its `mcp_servers.<id>.command` matches this command.",
21311485Required. Requirements rules can only prompt or forbid (not allow). },
21321486 {
21331487Key key: "mcp_servers.<id>.identity.url",
21341488 type: "string",
21351489`rules.prefix_rules[].justification` description:
21361490 "Allow an MCP streamable HTTP server when its `mcp_servers.<id>.url` matches this URL.",
21371491Type / Values },
21381492 {
21391493`string` key: "rules",
21401494 type: "table",
21411495Details description:
21421496 "Admin-enforced command rules merged with `.rules` files. Requirements rules must be restrictive.",
21431497Optional non-empty rationale surfaced in approval prompts or rejection messages. },
21441498 {
21451499Key key: "rules.prefix_rules",
21461500 type: "array<table>",
21471501`rules.prefix_rules[].pattern` description:
21481502 "List of enforced prefix rules. Each rule must include `pattern` and `decision`.",
21491503Type / Values },
21501504 {
21511505`array<table>` key: "rules.prefix_rules[].pattern",
21521506 type: "array<table>",
21531507Details description:
21541508 "Command prefix expressed as pattern tokens. Each token sets either `token` or `any_of`.",
21551509Command prefix expressed as pattern tokens. Each token sets either `token` or `any_of`. },
21561510 {
21571511Key key: "rules.prefix_rules[].pattern[].token",
21581512 type: "string",
21591513`rules.prefix_rules[].pattern[].any_of` description: "A single literal token at this position.",
21601514 },
21611515Type / Values {
21621516 key: "rules.prefix_rules[].pattern[].any_of",
21631517`array<string>` type: "array<string>",
21641518 description: "A list of allowed alternative tokens at this position.",
21651519Details },
21661520 {
21671521A list of allowed alternative tokens at this position. key: "rules.prefix_rules[].decision",
21681522 type: "prompt | forbidden",
21691523Key description:
21701524 "Required. Requirements rules can only prompt or forbid (not allow).",
21711525`rules.prefix_rules[].pattern[].token` },
21721526 {
21731527Type / Values key: "rules.prefix_rules[].justification",
21741528 type: "string",
21751529`string` description:
21761530 "Optional non-empty rationale surfaced in approval prompts or rejection messages.",
21771531Details },
21781532 ]}
21791533A single literal token at this position. client:load
21801534 />
2181Expand to view all