config-reference.md +1724 −2376
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).Project-scoped config can't override machine-local provider, auth,
1010 notification, profile, or telemetry routing keys. Codex ignores
1111| Key | Type / Values | Details |`openai_base_url`, `chatgpt_base_url`, `model_provider`, `model_providers`,
1212| --- | --- | --- |`notify`, `profile`, `profiles`, `experimental_realtime_ws_base_url`, and
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. |`otel` when they appear in a project-local `.codex/config.toml`; put those in
1414| `agents.<name>.description` | `string` | Role guidance shown to Codex when choosing and spawning that agent type. |user-level config instead.
1515| `agents.max_depth` | `number` | Maximum nesting depth allowed for spawned agent threads (root sessions start at depth 0; default: 1). |
1616| `agents.max_threads` | `number` | Maximum number of agent threads that can be open concurrently. |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).
1717| `allow_login_shell` | `boolean` | 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. |
1818| `approval_policy` | `untrusted | on-request | never | { reject = { sandbox_approval = bool, rules = bool, mcp_elicitations = bool } }` | Controls when Codex pauses for approval before executing commands. You can also use `approval_policy = { reject = { ... } }` to 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. |<ConfigTable
1919| `approval_policy.reject.mcp_elicitations` | `boolean` | When `true`, MCP elicitation prompts are auto-rejected instead of shown to the user. | options={[
2020| `approval_policy.reject.rules` | `boolean` | When `true`, approvals triggered by execpolicy `prompt` rules are auto-rejected. | {
2121| `approval_policy.reject.sandbox_approval` | `boolean` | When `true`, sandbox escalation approval prompts are auto-rejected. | key: "model",
2222| `apps._default.destructive_enabled` | `boolean` | Default allow/deny for app tools with `destructive_hint = true`. | type: "string",
2323| `apps._default.enabled` | `boolean` | Default app enabled state for all apps unless overridden per app. | description: "Model to use (e.g., `gpt-5.5`).",
2424| `apps._default.open_world_enabled` | `boolean` | Default allow/deny for app tools with `open_world_hint = true`. | },
2525| `apps.<id>.default_tools_approval_mode` | `auto | prompt | approve` | Default approval behavior for tools in this app unless a per-tool override exists. | {
2626| `apps.<id>.default_tools_enabled` | `boolean` | Default enabled state for tools in this app unless a per-tool override exists. | key: "review_model",
2727| `apps.<id>.destructive_enabled` | `boolean` | Allow or block tools in this app that advertise `destructive_hint = true`. | type: "string",
2828| `apps.<id>.enabled` | `boolean` | Enable or disable a specific app/connector by id (default: true). | description:
2929| `apps.<id>.open_world_enabled` | `boolean` | Allow or block tools in this app that advertise `open_world_hint = true`. | "Optional model override used by `/review` (defaults to the current session model).",
3030| `apps.<id>.tools.<tool>.approval_mode` | `auto | prompt | approve` | Per-tool approval behavior override for a single app tool. | },
3131| `apps.<id>.tools.<tool>.enabled` | `boolean` | Per-tool enabled override for an app tool (for example `repos/list`). | {
3232| `background_terminal_max_timeout` | `number` | Maximum poll window in milliseconds for empty `write_stdin` polls (background terminal polling). Default: `300000` (5 minutes). Replaces the older `background_terminal_timeout` key. | key: "model_provider",
3333| `chatgpt_base_url` | `string` | Override the base URL used during the ChatGPT login flow. | type: "string",
3434| `check_for_update_on_startup` | `boolean` | Check for Codex updates on startup (set to false only when updates are centrally managed). | description: "Provider id from `model_providers` (default: `openai`).",
3535| `cli_auth_credentials_store` | `file | keyring | auto` | Control where the CLI stores cached credentials (file-based auth.json vs OS keychain). | },
3636| `compact_prompt` | `string` | Inline override for the history compaction prompt. | {
3737| `developer_instructions` | `string` | Additional developer instructions injected into the session (optional). | key: "openai_base_url",
3838| `disable_paste_burst` | `boolean` | Disable burst-paste detection in the TUI. | type: "string",
3939| `experimental_compact_prompt_file` | `string (path)` | Load the compaction prompt override from a file (experimental). | description:
4040| `experimental_use_freeform_apply_patch` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform` or `codex --enable apply_patch_freeform`. | "Base URL override for the built-in `openai` model provider.",
4141| `experimental_use_unified_exec_tool` | `boolean` | Legacy name for enabling unified exec; prefer `[features].unified_exec` or `codex --enable unified_exec`. | },
4242| `features.apply_patch_freeform` | `boolean` | Expose the freeform `apply_patch` tool (experimental). | {
4343| `features.apps` | `boolean` | Enable ChatGPT Apps/connectors support (experimental). | key: "model_context_window",
4444| `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). | type: "number",
4545| `features.child_agents_md` | `boolean` | Append AGENTS.md scope/precedence guidance even when no AGENTS.md is present (experimental). | description: "Context window tokens available to the active model.",
4646| `features.collaboration_modes` | `boolean` | Enable collaboration modes such as plan mode (stable; on by default). | },
4747| `features.elevated_windows_sandbox` | `boolean` | Enable the elevated Windows sandbox pipeline (experimental). | {
4848| `features.experimental_windows_sandbox` | `boolean` | Run the Windows restricted-token sandbox (experimental). | key: "model_auto_compact_token_limit",
4949| `features.multi_agent` | `boolean` | Enable multi-agent collaboration tools (`spawn\_agent`, `send\_input`, `resume\_agent`, `wait`, and `close\_agent`) (experimental; off by default). | type: "number",
5050| `features.personality` | `boolean` | Enable personality selection controls (stable; on by default). | description:
5151| `features.powershell_utf8` | `boolean` | Force PowerShell UTF-8 output (defaults to true). | "Token threshold that triggers automatic history compaction (unset uses model defaults).",
5252| `features.remote_models` | `boolean` | Refresh remote model list before showing readiness (experimental). | },
5353| `features.request_rule` | `boolean` | Enable Smart approvals (`prefix_rule` suggestions on escalation requests; stable; on by default). | {
5454| `features.runtime_metrics` | `boolean` | Show runtime metrics summary in TUI turn separators (experimental). | key: "model_catalog_json",
5555| `features.search_tool` | `boolean` | Enable `search_tool_bm25` for Apps tool discovery before invoking app MCP tools (experimental). | type: "string (path)",
5656| `features.shell_snapshot` | `boolean` | Snapshot shell environment to speed up repeated commands (beta). | description:
5757| `features.shell_tool` | `boolean` | Enable the default `shell` tool for running commands (stable; on by default). | "Optional path to a JSON model catalog loaded on startup. Profile-level `profiles.<name>.model_catalog_json` can override this per profile.",
5858| `features.unified_exec` | `boolean` | Use the unified PTY-backed exec tool (beta). | },
5959| `features.use_linux_sandbox_bwrap` | `boolean` | Use the bubblewrap-based Linux sandbox pipeline (experimental; off by default). | {
6060| `features.web_search` | `boolean` | Deprecated legacy toggle; prefer the top-level `web_search` setting. | key: "oss_provider",
6161| `features.web_search_cached` | `boolean` | Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "cached"`. | type: "lmstudio | ollama",
6262| `features.web_search_request` | `boolean` | Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "live"`. | description:
6363| `feedback.enabled` | `boolean` | Enable feedback submission via `/feedback` across Codex surfaces (default: true). | "Default local provider used when running with `--oss` (defaults to prompting if unset).",
6464| `file_opener` | `vscode | vscode-insiders | windsurf | cursor | none` | URI scheme used to open citations from Codex output (default: `vscode`). | },
6565| `forced_chatgpt_workspace_id` | `string (uuid)` | Limit ChatGPT logins to a specific workspace identifier. | {
6666| `forced_login_method` | `chatgpt | api` | Restrict Codex to a specific authentication method. | key: "approval_policy",
6767| `hide_agent_reasoning` | `boolean` | Suppress reasoning events in both the TUI and `codex exec` output. | type: "untrusted | on-request | never | { granular = { sandbox_approval = bool, rules = bool, mcp_elicitations = bool, request_permissions = bool, skill_approval = bool } }",
6868| `history.max_bytes` | `number` | If set, caps the history file size in bytes by dropping oldest entries. | description:
6969| `history.persistence` | `save-all | none` | Control whether Codex saves session transcripts to history.jsonl. | "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.",
7070| `include_apply_patch_tool` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`. | },
7171| `instructions` | `string` | Reserved for future use; prefer `model_instructions_file` or `AGENTS.md`. | {
7272| `log_dir` | `string (path)` | Directory where Codex writes log files (for example `codex-tui.log`); defaults to `$CODEX_HOME/log`. | key: "approval_policy.granular.sandbox_approval",
7373| `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. | type: "boolean",
7474| `mcp_oauth_callback_url` | `string` | Optional redirect URI override for MCP OAuth login (for example, a devbox ingress URL). `mcp_oauth_callback_port` still controls the callback listener port. | description:
7575| `mcp_oauth_credentials_store` | `auto | file | keyring` | Preferred store for MCP OAuth credentials. | "When `true`, sandbox escalation approval prompts are allowed to surface.",
7676| `mcp_servers.<id>.args` | `array<string>` | Arguments passed to the MCP stdio server command. | },
7777| `mcp_servers.<id>.bearer_token_env_var` | `string` | Environment variable sourcing the bearer token for an MCP HTTP server. | {
7878| `mcp_servers.<id>.command` | `string` | Launcher command for an MCP stdio server. | key: "approval_policy.granular.rules",
7979| `mcp_servers.<id>.cwd` | `string` | Working directory for the MCP stdio server process. | type: "boolean",
8080| `mcp_servers.<id>.disabled_tools` | `array<string>` | Deny list applied after `enabled_tools` for the MCP server. | description:
8181| `mcp_servers.<id>.enabled` | `boolean` | Disable an MCP server without removing its configuration. | "When `true`, approvals triggered by execpolicy `prompt` rules are allowed to surface.",
8282| `mcp_servers.<id>.enabled_tools` | `array<string>` | Allow list of tool names exposed by the MCP server. | },
8383| `mcp_servers.<id>.env` | `map<string,string>` | Environment variables forwarded to the MCP stdio server. | {
8484| `mcp_servers.<id>.env_http_headers` | `map<string,string>` | HTTP headers populated from environment variables for an MCP HTTP server. | key: "approval_policy.granular.mcp_elicitations",
8585| `mcp_servers.<id>.env_vars` | `array<string>` | Additional environment variables to whitelist for an MCP stdio server. | type: "boolean",
8686| `mcp_servers.<id>.http_headers` | `map<string,string>` | Static HTTP headers included with each MCP HTTP request. | description:
8787| `mcp_servers.<id>.required` | `boolean` | When true, fail startup/resume if this enabled MCP server cannot initialize. | "When `true`, MCP elicitation prompts are allowed to surface instead of being auto-rejected.",
8888| `mcp_servers.<id>.startup_timeout_ms` | `number` | Alias for `startup_timeout_sec` in milliseconds. | },
8989| `mcp_servers.<id>.startup_timeout_sec` | `number` | Override the default 10s startup timeout for an MCP server. | {
9090| `mcp_servers.<id>.tool_timeout_sec` | `number` | Override the default 60s per-tool timeout for an MCP server. | key: "approval_policy.granular.request_permissions",
9191| `mcp_servers.<id>.url` | `string` | Endpoint for an MCP streamable HTTP server. | type: "boolean",
9292| `model` | `string` | Model to use (e.g., `gpt-5-codex`). | description:
9393| `model_auto_compact_token_limit` | `number` | Token threshold that triggers automatic history compaction (unset uses model defaults). | "When `true`, prompts from the `request_permissions` tool are allowed to surface.",
9494| `model_catalog_json` | `string (path)` | Optional path to a JSON model catalog loaded on startup. Profile-level `profiles.<name>.model_catalog_json` can override this per profile. | },
9595| `model_context_window` | `number` | Context window tokens available to the active model. | {
9696| `model_instructions_file` | `string (path)` | Replacement for built-in instructions instead of `AGENTS.md`. | key: "approval_policy.granular.skill_approval",
9797| `model_provider` | `string` | Provider id from `model_providers` (default: `openai`). | type: "boolean",
9898| `model_providers.<id>.base_url` | `string` | API base URL for the model provider. | description:
9999| `model_providers.<id>.env_http_headers` | `map<string,string>` | HTTP headers populated from environment variables when present. | "When `true`, skill-script approval prompts are allowed to surface.",
100100| `model_providers.<id>.env_key` | `string` | Environment variable supplying the provider API key. | },
101101| `model_providers.<id>.env_key_instructions` | `string` | Optional setup guidance for the provider API key. | {
102102| `model_providers.<id>.experimental_bearer_token` | `string` | Direct bearer token for the provider (discouraged; use `env_key`). | key: "approvals_reviewer",
103103| `model_providers.<id>.http_headers` | `map<string,string>` | Static HTTP headers added to provider requests. | type: "user | auto_review",
104104| `model_providers.<id>.name` | `string` | Display name for a custom model provider. | description:
105105| `model_providers.<id>.query_params` | `map<string,string>` | Extra query parameters appended to provider requests. | "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.",
106106| `model_providers.<id>.request_max_retries` | `number` | Retry count for HTTP requests to the provider (default: 4). | },
107107| `model_providers.<id>.requires_openai_auth` | `boolean` | The provider uses OpenAI authentication (defaults to false). | {
108108| `model_providers.<id>.stream_idle_timeout_ms` | `number` | Idle timeout for SSE streams in milliseconds (default: 300000). | key: "auto_review.policy",
109109| `model_providers.<id>.stream_max_retries` | `number` | Retry count for SSE streaming interruptions (default: 5). | type: "string",
110110| `model_providers.<id>.wire_api` | `chat | responses` | Protocol used by the provider (defaults to `chat` if omitted). | description:
111111| `model_reasoning_effort` | `minimal | low | medium | high | xhigh` | Adjust reasoning effort for supported models (Responses API only; `xhigh` is model-dependent). | "Local Markdown policy instructions for automatic review. Managed `guardian_policy_config` takes precedence. Blank values are ignored.",
112112| `model_reasoning_summary` | `auto | concise | detailed | none` | Select reasoning summary detail or disable summaries entirely. | },
113113| `model_supports_reasoning_summaries` | `boolean` | Force Codex to send or not send reasoning metadata. | {
114114| `model_verbosity` | `low | medium | high` | Control GPT-5 Responses API verbosity (defaults to `medium`). | key: "allow_login_shell",
115115| `notice.hide_full_access_warning` | `boolean` | Track acknowledgement of the full access warning prompt. | type: "boolean",
116116| `notice.hide_gpt-5.1-codex-max_migration_prompt` | `boolean` | Track acknowledgement of the gpt-5.1-codex-max migration prompt. | description:
117117| `notice.hide_gpt5_1_migration_prompt` | `boolean` | Track acknowledgement of the GPT-5.1 migration prompt. | "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.",
118118| `notice.hide_rate_limit_model_nudge` | `boolean` | Track opt-out of the rate limit model switch reminder. | },
119119| `notice.hide_world_writable_warning` | `boolean` | Track acknowledgement of the Windows world-writable directories warning. | {
120120| `notice.model_migrations` | `map<string,string>` | Track acknowledged model migrations as old->new mappings. | key: "sandbox_mode",
121121| `notify` | `array<string>` | Command invoked for notifications; receives a JSON payload from Codex. | type: "read-only | workspace-write | danger-full-access",
122122| `oss_provider` | `lmstudio | ollama` | Default local provider used when running with `--oss` (defaults to prompting if unset). | description:
123123| `otel.environment` | `string` | Environment tag applied to emitted OpenTelemetry events (default: `dev`). | "Sandbox policy for filesystem and network access during command execution.",
124124| `otel.exporter` | `none | otlp-http | otlp-grpc` | Select the OpenTelemetry exporter and provide any endpoint metadata. | },
125125| `otel.exporter.<id>.endpoint` | `string` | Exporter endpoint for OTEL logs. | {
126126| `otel.exporter.<id>.headers` | `map<string,string>` | Static headers included with OTEL exporter requests. | key: "sandbox_workspace_write.writable_roots",
127127| `otel.exporter.<id>.protocol` | `binary | json` | Protocol used by the OTLP/HTTP exporter. | type: "array<string>",
128128| `otel.exporter.<id>.tls.ca-certificate` | `string` | CA certificate path for OTEL exporter TLS. | description:
129129| `otel.exporter.<id>.tls.client-certificate` | `string` | Client certificate path for OTEL exporter TLS. | 'Additional writable roots when `sandbox_mode = "workspace-write"`.',
130130| `otel.exporter.<id>.tls.client-private-key` | `string` | Client private key path for OTEL exporter TLS. | },
131131| `otel.log_user_prompt` | `boolean` | Opt in to exporting raw user prompts with OpenTelemetry logs. | {
132132| `otel.trace_exporter` | `none | otlp-http | otlp-grpc` | Select the OpenTelemetry trace exporter and provide any endpoint metadata. | key: "sandbox_workspace_write.network_access",
133133| `otel.trace_exporter.<id>.endpoint` | `string` | Trace exporter endpoint for OTEL logs. | type: "boolean",
134134| `otel.trace_exporter.<id>.headers` | `map<string,string>` | Static headers included with OTEL trace exporter requests. | description:
135135| `otel.trace_exporter.<id>.protocol` | `binary | json` | Protocol used by the OTLP/HTTP trace exporter. | "Allow outbound network access inside the workspace-write sandbox.",
136136| `otel.trace_exporter.<id>.tls.ca-certificate` | `string` | CA certificate path for OTEL trace exporter TLS. | },
137137| `otel.trace_exporter.<id>.tls.client-certificate` | `string` | Client certificate path for OTEL trace exporter TLS. | {
138138| `otel.trace_exporter.<id>.tls.client-private-key` | `string` | Client private key path for OTEL trace exporter TLS. | key: "sandbox_workspace_write.exclude_tmpdir_env_var",
139139| `personality` | `none | friendly | pragmatic` | Default communication style for models that advertise `supportsPersonality`; can be overridden per thread/turn or via `/personality`. | type: "boolean",
140140| `profile` | `string` | Default profile applied at startup (equivalent to `--profile`). | description:
141141| `profiles.<name>.*` | `various` | Profile-scoped overrides for any of the supported configuration keys. | "Exclude `$TMPDIR` from writable roots in workspace-write mode.",
142142| `profiles.<name>.experimental_use_freeform_apply_patch` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`. | },
143143| `profiles.<name>.experimental_use_unified_exec_tool` | `boolean` | Legacy name for enabling unified exec; prefer `[features].unified_exec`. | {
144144| `profiles.<name>.include_apply_patch_tool` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`. | key: "sandbox_workspace_write.exclude_slash_tmp",
145145| `profiles.<name>.model_catalog_json` | `string (path)` | Profile-scoped model catalog JSON path override (applied on startup only; overrides the top-level `model_catalog_json` for that profile). | type: "boolean",
146146| `profiles.<name>.oss_provider` | `lmstudio | ollama` | Profile-scoped OSS provider for `--oss` sessions. | description:
147147| `profiles.<name>.personality` | `none | friendly | pragmatic` | Profile-scoped communication style override for supported models. | "Exclude `/tmp` from writable roots in workspace-write mode.",
148148| `profiles.<name>.web_search` | `disabled | cached | live` | Profile-scoped web search mode override (default: `"cached"`). | },
149149| `project_doc_fallback_filenames` | `array<string>` | Additional filenames to try when `AGENTS.md` is missing. | {
150150| `project_doc_max_bytes` | `number` | Maximum bytes read from `AGENTS.md` when building project instructions. | key: "windows.sandbox",
151151| `project_root_markers` | `array<string>` | List of project root marker filenames; used when searching parent directories for the project root. | type: "unelevated | elevated",
152152| `projects.<path>.trust_level` | `string` | Mark a project or worktree as trusted or untrusted (`"trusted"` | `"untrusted"`). Untrusted projects skip project-scoped `.codex/` layers. | description:
153153| `review_model` | `string` | Optional model override used by `/review` (defaults to the current session model). | "Windows-only native sandbox mode when running Codex natively on Windows.",
154154| `sandbox_mode` | `read-only | workspace-write | danger-full-access` | Sandbox policy for filesystem and network access during command execution. | },
155155| `sandbox_workspace_write.exclude_slash_tmp` | `boolean` | Exclude `/tmp` from writable roots in workspace-write mode. | {
156156| `sandbox_workspace_write.exclude_tmpdir_env_var` | `boolean` | Exclude `$TMPDIR` from writable roots in workspace-write mode. | key: "windows.sandbox_private_desktop",
157157| `sandbox_workspace_write.network_access` | `boolean` | Allow outbound network access inside the workspace-write sandbox. | type: "boolean",
158158| `sandbox_workspace_write.writable_roots` | `array<string>` | Additional writable roots when `sandbox_mode = "workspace-write"`. | description:
159159| `shell_environment_policy.exclude` | `array<string>` | Glob patterns for removing environment variables after the defaults. | "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.",
160160| `shell_environment_policy.experimental_use_profile` | `boolean` | Use the user shell profile when spawning subprocesses. | },
161161| `shell_environment_policy.ignore_default_excludes` | `boolean` | Keep variables containing KEY/SECRET/TOKEN before other filters run. | {
162162| `shell_environment_policy.include_only` | `array<string>` | Whitelist of patterns; when set only matching variables are kept. | key: "notify",
163163| `shell_environment_policy.inherit` | `all | core | none` | Baseline environment inheritance when spawning subprocesses. | type: "array<string>",
164164| `shell_environment_policy.set` | `map<string,string>` | Explicit environment overrides injected into every subprocess. | description:
165165| `show_raw_agent_reasoning` | `boolean` | Surface raw reasoning content when the active model emits it. | "Command invoked for notifications; receives a JSON payload from Codex.",
166166| `skills.config` | `array<object>` | Per-skill enablement overrides stored in config.toml. | },
167167| `skills.config.<index>.enabled` | `boolean` | Enable or disable the referenced skill. | {
168168| `skills.config.<index>.path` | `string (path)` | Path to a skill folder containing `SKILL.md`. | key: "check_for_update_on_startup",
169169| `suppress_unstable_features_warning` | `boolean` | Suppress the warning that appears when under-development feature flags are enabled. | type: "boolean",
170170| `tool_output_token_limit` | `number` | Token budget for storing individual tool/function outputs in history. | description:
171171| `tools.web_search` | `boolean` | Deprecated legacy toggle for web search; prefer the top-level `web_search` setting. | "Check for Codex updates on startup (set to false only when updates are centrally managed).",
172172| `tui` | `table` | TUI-specific options such as enabling inline desktop notifications. | },
173173| `tui.alternate_screen` | `auto | always | never` | Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback). | {
174174| `tui.animations` | `boolean` | Enable terminal animations (welcome screen, shimmer, spinner) (default: true). | key: "feedback.enabled",
175175| `tui.notification_method` | `auto | osc9 | bel` | Notification method for unfocused terminal notifications (default: auto). | type: "boolean",
176176| `tui.notifications` | `boolean | array<string>` | Enable TUI notifications; optionally restrict to specific event types. | description:
177177| `tui.show_tooltips` | `boolean` | Show onboarding tooltips in the TUI welcome screen (default: true). | "Enable feedback submission via `/feedback` across Codex surfaces (default: true).",
178178| `tui.status_line` | `array<string> | null` | Ordered list of TUI footer status-line item identifiers. `null` disables the status line. | },
179179| `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. | {
180180| `windows_wsl_setup_acknowledged` | `boolean` | Track Windows onboarding acknowledgement (Windows only). | key: "analytics.enabled",
181181 type: "boolean",
182182Key description:
183183 "Enable or disable analytics for this machine/profile. When unset, the client default applies.",
184184`agents.<name>.config_file` },
185185 {
186186Type / Values key: "instructions",
187187 type: "string",
188188`string (path)` description:
189189 "Reserved for future use; prefer `model_instructions_file` or `AGENTS.md`.",
190190Details },
191191 {
192192Path to a TOML config layer for that role; relative paths resolve from the config file that declares the role. key: "developer_instructions",
193193 type: "string",
194194Key description:
195195 "Additional developer instructions injected into the session (optional).",
196196`agents.<name>.description` },
197197 {
198198Type / Values key: "log_dir",
199199 type: "string (path)",
200200`string` description:
201201 "Directory where Codex writes log files (for example `codex-tui.log`); defaults to `$CODEX_HOME/log`.",
202202Details },
203203 {
204204Role guidance shown to Codex when choosing and spawning that agent type. key: "sqlite_home",
205205 type: "string (path)",
206206Key description:
207207 "Directory where Codex stores the SQLite-backed state DB used by agent jobs and other resumable runtime state.",
208208`agents.max_depth` },
209209 {
210210Type / Values key: "compact_prompt",
211211 type: "string",
212212`number` description: "Inline override for the history compaction prompt.",
213213 },
214214Details {
215215 key: "commit_attribution",
216216Maximum nesting depth allowed for spawned agent threads (root sessions start at depth 0; default: 1). type: "string",
217217 description:
218218Key 'Commit co-author trailer used when `[features].codex_git_commit` is enabled. Defaults to `Codex <noreply@openai.com>`; set `""` to disable.',
219219 },
220220`agents.max_threads` {
221221 key: "model_instructions_file",
222222Type / Values type: "string (path)",
223223 description:
224224`number` "Replacement for built-in instructions instead of `AGENTS.md`.",
225225 },
226226Details {
227227 key: "personality",
228228Maximum number of agent threads that can be open concurrently. type: "none | friendly | pragmatic",
229229 description:
230230Key "Default communication style for models that advertise `supportsPersonality`; can be overridden per thread/turn or via `/personality`.",
231231 },
232232`allow_login_shell` {
233233 key: "service_tier",
234234Type / Values type: "string",
235235 description:
236236`boolean` "Preferred service tier for new turns. Built-in values include `flex` and `fast`; legacy `fast` config maps to the request value `priority`, and catalog-provided tier IDs can also be stored.",
237237 },
238238Details {
239239 key: "experimental_compact_prompt_file",
240240Allow 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. type: "string (path)",
241241 description:
242242Key "Load the compaction prompt override from a file (experimental).",
243243 },
244244`approval_policy` {
245245 key: "skills.config",
246246Type / Values type: "array<object>",
247247 description: "Per-skill enablement overrides stored in config.toml.",
248248`untrusted | on-request | never | { reject = { sandbox_approval = bool, rules = bool, mcp_elicitations = bool } }` },
249249 {
250250Details key: "skills.config.<index>.path",
251251 type: "string (path)",
252252Controls when Codex pauses for approval before executing commands. You can also use `approval_policy = { reject = { ... } }` to 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. description: "Path to a skill folder containing `SKILL.md`.",
253253 },
254254Key {
255255 key: "skills.config.<index>.enabled",
256256`approval_policy.reject.mcp_elicitations` type: "boolean",
257257 description: "Enable or disable the referenced skill.",
258258Type / Values },
259259 {
260260`boolean` key: "apps.<id>.enabled",
261261 type: "boolean",
262262Details description:
263263 "Enable or disable a specific app/connector by id (default: true).",
264264When `true`, MCP elicitation prompts are auto-rejected instead of shown to the user. },
265265 {
266266Key key: "apps._default.enabled",
267267 type: "boolean",
268268`approval_policy.reject.rules` description:
269269 "Default app enabled state for all apps unless overridden per app.",
270270Type / Values },
271271 {
272272`boolean` key: "apps._default.destructive_enabled",
273273 type: "boolean",
274274Details description:
275275 "Default allow/deny for app tools with `destructive_hint = true`.",
276276When `true`, approvals triggered by execpolicy `prompt` rules are auto-rejected. },
277277 {
278278Key key: "apps._default.open_world_enabled",
279279 type: "boolean",
280280`approval_policy.reject.sandbox_approval` description:
281281 "Default allow/deny for app tools with `open_world_hint = true`.",
282282Type / Values },
283283 {
284284`boolean` key: "apps.<id>.destructive_enabled",
285285 type: "boolean",
286286Details description:
287287 "Allow or block tools in this app that advertise `destructive_hint = true`.",
288288When `true`, sandbox escalation approval prompts are auto-rejected. },
289289 {
290290Key key: "apps.<id>.open_world_enabled",
291291 type: "boolean",
292292`apps._default.destructive_enabled` description:
293293 "Allow or block tools in this app that advertise `open_world_hint = true`.",
294294Type / Values },
295295 {
296296`boolean` key: "apps.<id>.default_tools_enabled",
297297 type: "boolean",
298298Details description:
299299 "Default enabled state for tools in this app unless a per-tool override exists.",
300300Default allow/deny for app tools with `destructive_hint = true`. },
301301 {
302302Key key: "apps.<id>.default_tools_approval_mode",
303303 type: "auto | prompt | approve",
304304`apps._default.enabled` description:
305305 "Default approval behavior for tools in this app unless a per-tool override exists.",
306306Type / Values },
307307 {
308308`boolean` key: "apps.<id>.tools.<tool>.enabled",
309309 type: "boolean",
310310Details description:
311311 "Per-tool enabled override for an app tool (for example `repos/list`).",
312312Default app enabled state for all apps unless overridden per app. },
313313 {
314314Key key: "apps.<id>.tools.<tool>.approval_mode",
315315 type: "auto | prompt | approve",
316316`apps._default.open_world_enabled` description: "Per-tool approval behavior override for a single app tool.",
317317 },
318318Type / Values {
319319 key: "tool_suggest.discoverables",
320320`boolean` type: "array<table>",
321321 description:
322322Details 'Allow tool suggestions for additional discoverable connectors or plugins. Each entry uses `type = "connector"` or `"plugin"` and an `id`.',
323323 },
324324Default allow/deny for app tools with `open_world_hint = true`. {
325325 key: "tool_suggest.disabled_tools",
326326Key type: "array<table>",
327327 description:
328328`apps.<id>.default_tools_approval_mode` 'Disable suggestions for specific discoverable connectors or plugins. Each entry uses `type = "connector"` or `"plugin"` and an `id`.',
329329 },
330330Type / Values {
331331 key: "features.apps",
332332`auto | prompt | approve` type: "boolean",
333333 description: "Enable ChatGPT Apps/connectors support (experimental).",
334334Details },
335335 {
336336Default approval behavior for tools in this app unless a per-tool override exists. key: "features.hooks",
337337 type: "boolean",
338338Key description:
339339 "Enable lifecycle hooks loaded from `hooks.json` or inline `[hooks]` config. `features.codex_hooks` is a deprecated alias.",
340340`apps.<id>.default_tools_enabled` },
341341 {
342342Type / Values key: "features.codex_git_commit",
343343 type: "boolean",
344344`boolean` description:
345345 "Enable Codex-generated git commits. When enabled, Codex uses `commit_attribution` to append a `Co-authored-by:` trailer to generated commit messages.",
346346Details },
347347 {
348348Default enabled state for tools in this app unless a per-tool override exists. key: "hooks",
349349 type: "table",
350350Key description:
351351 "Lifecycle hooks configured inline in `config.toml`. Uses the same event schema as `hooks.json`; see the Hooks guide for examples and supported events.",
352352`apps.<id>.destructive_enabled` },
353353 {
354354Type / Values key: "features.plugin_hooks",
355355 type: "boolean",
356356`boolean` description:
357357 "Opt into lifecycle hooks bundled with enabled plugins. Off by default in this release; set to `true` to opt in.",
358358Details },
359359 {
360360Allow or block tools in this app that advertise `destructive_hint = true`. key: "features.memories",
361361 type: "boolean",
362362Key description: "Enable [Memories](https://developers.openai.com/codex/memories) (off by default).",
363363 },
364364`apps.<id>.enabled` {
365365 key: "mcp_servers.<id>.command",
366366Type / Values type: "string",
367367 description: "Launcher command for an MCP stdio server.",
368368`boolean` },
369369 {
370370Details key: "mcp_servers.<id>.args",
371371 type: "array<string>",
372372Enable or disable a specific app/connector by id (default: true). description: "Arguments passed to the MCP stdio server command.",
373373 },
374374Key {
375375 key: "mcp_servers.<id>.env",
376376`apps.<id>.open_world_enabled` type: "map<string,string>",
377377 description: "Environment variables forwarded to the MCP stdio server.",
378378Type / Values },
379379 {
380380`boolean` key: "mcp_servers.<id>.env_vars",
381381 type: 'array<string | { name = string, source = "local" | "remote" }>',
382382Details description:
383383 '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.',
384384Allow or block tools in this app that advertise `open_world_hint = true`. },
385385 {
386386Key key: "mcp_servers.<id>.cwd",
387387 type: "string",
388388`apps.<id>.tools.<tool>.approval_mode` description: "Working directory for the MCP stdio server process.",
389389 },
390390Type / Values {
391391 key: "mcp_servers.<id>.url",
392392`auto | prompt | approve` type: "string",
393393 description: "Endpoint for an MCP streamable HTTP server.",
394394Details },
395395 {
396396Per-tool approval behavior override for a single app tool. key: "mcp_servers.<id>.bearer_token_env_var",
397397 type: "string",
398398Key description:
399399 "Environment variable sourcing the bearer token for an MCP HTTP server.",
400400`apps.<id>.tools.<tool>.enabled` },
401401 {
402402Type / Values key: "mcp_servers.<id>.http_headers",
403403 type: "map<string,string>",
404404`boolean` description: "Static HTTP headers included with each MCP HTTP request.",
405405 },
406406Details {
407407 key: "mcp_servers.<id>.env_http_headers",
408408Per-tool enabled override for an app tool (for example `repos/list`). type: "map<string,string>",
409409 description:
410410Key "HTTP headers populated from environment variables for an MCP HTTP server.",
411411 },
412412`background_terminal_max_timeout` {
413413 key: "mcp_servers.<id>.enabled",
414414Type / Values type: "boolean",
415415 description: "Disable an MCP server without removing its configuration.",
416416`number` },
417417 {
418418Details key: "mcp_servers.<id>.required",
419419 type: "boolean",
420420Maximum poll window in milliseconds for empty `write_stdin` polls (background terminal polling). Default: `300000` (5 minutes). Replaces the older `background_terminal_timeout` key. description:
421421 "When true, fail startup/resume if this enabled MCP server cannot initialize.",
422422Key },
423423 {
424424`chatgpt_base_url` key: "mcp_servers.<id>.startup_timeout_sec",
425425 type: "number",
426426Type / Values description:
427427 "Override the default 10s startup timeout for an MCP server.",
428428`string` },
429429 {
430430Details key: "mcp_servers.<id>.startup_timeout_ms",
431431 type: "number",
432432Override the base URL used during the ChatGPT login flow. description: "Alias for `startup_timeout_sec` in milliseconds.",
433433 },
434434Key {
435435 key: "mcp_servers.<id>.tool_timeout_sec",
436436`check_for_update_on_startup` type: "number",
437437 description:
438438Type / Values "Override the default 60s per-tool timeout for an MCP server.",
439439 },
440440`boolean` {
441441 key: "mcp_servers.<id>.enabled_tools",
442442Details type: "array<string>",
443443 description: "Allow list of tool names exposed by the MCP server.",
444444Check for Codex updates on startup (set to false only when updates are centrally managed). },
445445 {
446446Key key: "mcp_servers.<id>.disabled_tools",
447447 type: "array<string>",
448448`cli_auth_credentials_store` description:
449449 "Deny list applied after `enabled_tools` for the MCP server.",
450450Type / Values },
451451 {
452452`file | keyring | auto` key: "mcp_servers.<id>.default_tools_approval_mode",
453453 type: "auto | prompt | approve",
454454Details description:
455455 "Default approval behavior for MCP tools on this server unless a per-tool override exists.",
456456Control where the CLI stores cached credentials (file-based auth.json vs OS keychain). },
457457 {
458458Key key: "mcp_servers.<id>.tools.<tool>.approval_mode",
459459 type: "auto | prompt | approve",
460460`compact_prompt` description:
461461 "Per-tool approval behavior override for one MCP tool on this server.",
462462Type / Values },
463463 {
464464`string` key: "mcp_servers.<id>.scopes",
465465 type: "array<string>",
466466Details description:
467467 "OAuth scopes to request when authenticating to that MCP server.",
468468Inline override for the history compaction prompt. },
469469 {
470470Key key: "mcp_servers.<id>.oauth_resource",
471471 type: "string",
472472`developer_instructions` description:
473473 "Optional RFC 8707 OAuth resource parameter to include during MCP login.",
474474Type / Values },
475475 {
476476`string` key: "mcp_servers.<id>.experimental_environment",
477477 type: "local | remote",
478478Details description:
479479 "Experimental placement for an MCP server. `remote` starts stdio servers through a remote executor environment; streamable HTTP remote placement is not implemented.",
480480Additional developer instructions injected into the session (optional). },
481481 {
482482Key key: "agents.max_threads",
483483 type: "number",
484484`disable_paste_burst` description:
485485 "Maximum number of agent threads that can be open concurrently. Defaults to `6` when unset.",
486486Type / Values },
487487 {
488488`boolean` key: "agents.max_depth",
489489 type: "number",
490490Details description:
491491 "Maximum nesting depth allowed for spawned agent threads (root sessions start at depth 0; default: 1).",
492492Disable burst-paste detection in the TUI. },
493493 {
494494Key key: "agents.job_max_runtime_seconds",
495495 type: "number",
496496`experimental_compact_prompt_file` description:
497497 "Default per-worker timeout for `spawn_agents_on_csv` jobs. When unset, the tool falls back to 1800 seconds per worker.",
498498Type / Values },
499499 {
500500`string (path)` key: "agents.<name>.description",
501501 type: "string",
502502Details description:
503503 "Role guidance shown to Codex when choosing and spawning that agent type.",
504504Load the compaction prompt override from a file (experimental). },
505505 {
506506Key key: "agents.<name>.config_file",
507507 type: "string (path)",
508508`experimental_use_freeform_apply_patch` description:
509509 "Path to a TOML config layer for that role; relative paths resolve from the config file that declares the role.",
510510Type / Values },
511511 {
512512`boolean` key: "agents.<name>.nickname_candidates",
513513 type: "array<string>",
514514Details description:
515515 "Optional pool of display nicknames for spawned agents in that role.",
516516Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform` or `codex --enable apply_patch_freeform`. },
517517 {
518518Key key: "memories.generate_memories",
519519 type: "boolean",
520520`experimental_use_unified_exec_tool` description:
521521 "When `false`, newly created threads are not stored as memory-generation inputs. Defaults to `true`.",
522522Type / Values },
523523 {
524524`boolean` key: "memories.use_memories",
525525 type: "boolean",
526526Details description:
527527 "When `false`, Codex skips injecting existing memories into future sessions. Defaults to `true`.",
528528Legacy name for enabling unified exec; prefer `[features].unified_exec` or `codex --enable unified_exec`. },
529529 {
530530Key key: "memories.disable_on_external_context",
531531 type: "boolean",
532532`features.apply_patch_freeform` description:
533533 "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`.",
534534Type / Values },
535535 {
536536`boolean` key: "memories.max_raw_memories_for_consolidation",
537537 type: "number",
538538Details description:
539539 "Maximum recent raw memories retained for global consolidation. Defaults to `256` and is capped at `4096`.",
540540Expose the freeform `apply_patch` tool (experimental). },
541541 {
542542Key key: "memories.max_unused_days",
543543 type: "number",
544544`features.apps` description:
545545 "Maximum days since a memory was last used before it becomes ineligible for consolidation. Defaults to `30` and is clamped to `0`-`365`.",
546546Type / Values },
547547 {
548548`boolean` key: "memories.max_rollout_age_days",
549549 type: "number",
550550Details description:
551551 "Maximum age of threads considered for memory generation. Defaults to `30` and is clamped to `0`-`90`.",
552552Enable ChatGPT Apps/connectors support (experimental). },
553553 {
554554Key key: "memories.max_rollouts_per_startup",
555555 type: "number",
556556`features.apps_mcp_gateway` description:
557557 "Maximum rollout candidates processed per startup pass. Defaults to `16` and is capped at `128`.",
558558Type / Values },
559559 {
560560`boolean` key: "memories.min_rollout_idle_hours",
561561 type: "number",
562562Details description:
563563 "Minimum idle time before a thread is considered for memory generation. Defaults to `6` and is clamped to `1`-`48`.",
564564Route Apps MCP calls through the OpenAI connectors MCP gateway (`https://api.openai.com/v1/connectors/mcp/`) instead of legacy routing (experimental). },
565565 {
566566Key key: "memories.min_rate_limit_remaining_percent",
567567 type: "number",
568568`features.child_agents_md` description:
569569 "Minimum remaining percentage required in Codex rate-limit windows before memory generation starts. Defaults to `25` and is clamped to `0`-`100`.",
570570Type / Values },
571571 {
572572`boolean` key: "memories.extract_model",
573573 type: "string",
574574Details description: "Optional model override for per-thread memory extraction.",
575575 },
576576Append AGENTS.md scope/precedence guidance even when no AGENTS.md is present (experimental). {
577577 key: "memories.consolidation_model",
578578Key type: "string",
579579 description: "Optional model override for global memory consolidation.",
580580`features.collaboration_modes` },
581581 {
582582Type / Values key: "features.unified_exec",
583583 type: "boolean",
584584`boolean` description:
585585 "Use the unified PTY-backed exec tool (stable; enabled by default except on Windows).",
586586Details },
587587 {
588588Enable collaboration modes such as plan mode (stable; on by default). key: "features.shell_snapshot",
589589 type: "boolean",
590590Key description:
591591 "Snapshot shell environment to speed up repeated commands (stable; on by default).",
592592`features.elevated_windows_sandbox` },
593593 {
594594Type / Values key: "features.undo",
595595 type: "boolean",
596596`boolean` description: "Enable undo support (stable; off by default).",
597597 },
598598Details {
599599 key: "features.multi_agent",
600600Enable the elevated Windows sandbox pipeline (experimental). type: "boolean",
601601 description:
602602Key "Enable multi-agent collaboration tools (`spawn_agent`, `send_input`, `resume_agent`, `wait_agent`, and `close_agent`) (stable; on by default).",
603603 },
604604`features.experimental_windows_sandbox` {
605605 key: "features.personality",
606606Type / Values type: "boolean",
607607 description:
608608`boolean` "Enable personality selection controls (stable; on by default).",
609609 },
610610Details {
611611 key: "features.network_proxy",
612612Run the Windows restricted-token sandbox (experimental). type: "boolean | table",
613613 description:
614614Key "Enable sandboxed networking. Use a table form when setting network policy options such as `domains` (experimental; off by default).",
615615 },
616616`features.multi_agent` {
617617 key: "features.network_proxy.enabled",
618618Type / Values type: "boolean",
619619 description: "Enable sandboxed networking. Defaults to `false`.",
620620`boolean` },
621621 {
622622Details key: "features.network_proxy.domains",
623623 type: "map<string, allow | deny>",
624624Enable multi-agent collaboration tools (`spawn\_agent`, `send\_input`, `resume\_agent`, `wait`, and `close\_agent`) (experimental; off by default). description:
625625 "Domain policy for sandboxed networking. Unset by default, which means no external destinations are allowed until you add `allow` rules. Supports exact hosts, `*.example.com` for subdomains only, `**.example.com` for apex plus subdomains, and global `*` allow rules; prefer scoped rules because `*` broadly opens public outbound access. Add `deny` rules for blocked destinations; `deny` wins on conflicts.",
626626Key },
627627 {
628628`features.personality` key: "features.network_proxy.unix_sockets",
629629 type: "map<string, allow | none>",
630630Type / Values description:
631631 "Unix socket policy for sandboxed networking. Unset by default; add `allow` entries for permitted sockets.",
632632`boolean` },
633633 {
634634Details key: "features.network_proxy.allow_local_binding",
635635 type: "boolean",
636636Enable personality selection controls (stable; on by default). description:
637637 "Allow broader local/private-network access. Defaults to `false`; exact local IP literal or `localhost` allow rules can still permit specific local targets.",
638638Key },
639639 {
640640`features.powershell_utf8` key: "features.network_proxy.enable_socks5",
641641 type: "boolean",
642642Type / Values description: "Expose SOCKS5 support. Defaults to `true`.",
643643 },
644644`boolean` {
645645 key: "features.network_proxy.enable_socks5_udp",
646646Details type: "boolean",
647647 description: "Allow UDP over SOCKS5. Defaults to `true`.",
648648Force PowerShell UTF-8 output (defaults to true). },
649649 {
650650Key key: "features.network_proxy.allow_upstream_proxy",
651651 type: "boolean",
652652`features.remote_models` description:
653653 "Allow chaining through an upstream proxy from the environment. Defaults to `true`.",
654654Type / Values },
655655 {
656656`boolean` key: "features.network_proxy.dangerously_allow_non_loopback_proxy",
657657 type: "boolean",
658658Details description:
659659 "Permit non-loopback listener addresses. Defaults to `false`; enabling it can expose proxy listeners beyond localhost.",
660660Refresh remote model list before showing readiness (experimental). },
661661 {
662662Key key: "features.network_proxy.dangerously_allow_all_unix_sockets",
663663 type: "boolean",
664664`features.request_rule` description:
665665 "Permit arbitrary Unix socket destinations instead of allowlist-only access. Defaults to `false`; use only in tightly controlled environments.",
666666Type / Values },
667667 {
668668`boolean` key: "features.network_proxy.proxy_url",
669669 type: "string",
670670Details description:
671671 'HTTP listener URL for sandboxed networking. Defaults to `"http://127.0.0.1:3128"`.',
672672Enable Smart approvals (`prefix_rule` suggestions on escalation requests; stable; on by default). },
673673 {
674674Key key: "features.network_proxy.socks_url",
675675 type: "string",
676676`features.runtime_metrics` description:
677677 'SOCKS5 listener URL. Defaults to `"http://127.0.0.1:8081"`.',
678678Type / Values },
679679 {
680680`boolean` key: "features.web_search",
681681 type: "boolean",
682682Details description:
683683 "Deprecated legacy toggle; prefer the top-level `web_search` setting.",
684684Show runtime metrics summary in TUI turn separators (experimental). },
685685 {
686686Key key: "features.web_search_cached",
687687 type: "boolean",
688688`features.search_tool` description:
689689 'Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "cached"`.',
690690Type / Values },
691691 {
692692`boolean` key: "features.web_search_request",
693693 type: "boolean",
694694Details description:
695695 'Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "live"`.',
696696Enable `search_tool_bm25` for Apps tool discovery before invoking app MCP tools (experimental). },
697697 {
698698Key key: "features.shell_tool",
699699 type: "boolean",
700700`features.shell_snapshot` description:
701701 "Enable the default `shell` tool for running commands (stable; on by default).",
702702Type / Values },
703703 {
704704`boolean` key: "features.enable_request_compression",
705705 type: "boolean",
706706Details description:
707707 "Compress streaming request bodies with zstd when supported (stable; on by default).",
708708Snapshot shell environment to speed up repeated commands (beta). },
709709 {
710710Key key: "features.skill_mcp_dependency_install",
711711 type: "boolean",
712712`features.shell_tool` description:
713713 "Allow prompting and installing missing MCP dependencies for skills (stable; on by default).",
714714Type / Values },
715715 {
716716`boolean` key: "features.fast_mode",
717717 type: "boolean",
718718Details description:
719719 "Enable model-catalog service tier selection in the TUI, including Fast-tier commands when the active model advertises them (stable; on by default).",
720720Enable the default `shell` tool for running commands (stable; on by default). },
721721 {
722722Key key: "features.prevent_idle_sleep",
723723 type: "boolean",
724724`features.unified_exec` description:
725725 "Prevent the machine from sleeping while a turn is actively running (experimental; off by default).",
726726Type / Values },
727727 {
728728`boolean` key: "suppress_unstable_features_warning",
729729 type: "boolean",
730730Details description:
731731 "Suppress the warning that appears when under-development feature flags are enabled.",
732732Use the unified PTY-backed exec tool (beta). },
733733 {
734734Key key: "model_providers.<id>",
735735 type: "table",
736736`features.use_linux_sandbox_bwrap` description:
737737 "Custom provider definition. Built-in provider IDs (`openai`, `ollama`, and `lmstudio`) are reserved and cannot be overridden.",
738738Type / Values },
739739 {
740740`boolean` key: "model_providers.<id>.name",
741741 type: "string",
742742Details description: "Display name for a custom model provider.",
743743 },
744744Use the bubblewrap-based Linux sandbox pipeline (experimental; off by default). {
745745 key: "model_providers.<id>.base_url",
746746Key type: "string",
747747 description: "API base URL for the model provider.",
748748`features.web_search` },
749749 {
750750Type / Values key: "model_providers.<id>.env_key",
751751 type: "string",
752752`boolean` description: "Environment variable supplying the provider API key.",
753753 },
754754Details {
755755 key: "model_providers.<id>.env_key_instructions",
756756Deprecated legacy toggle; prefer the top-level `web_search` setting. type: "string",
757757 description: "Optional setup guidance for the provider API key.",
758758Key },
759759 {
760760`features.web_search_cached` key: "model_providers.<id>.experimental_bearer_token",
761761 type: "string",
762762Type / Values description:
763763 "Direct bearer token for the provider (discouraged; use `env_key`).",
764764`boolean` },
765765 {
766766Details key: "model_providers.<id>.requires_openai_auth",
767767 type: "boolean",
768768Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "cached"`. description:
769769 "The provider uses OpenAI authentication (defaults to false).",
770770Key },
771771 {
772772`features.web_search_request` key: "model_providers.<id>.wire_api",
773773 type: "responses",
774774Type / Values description:
775775 "Protocol used by the provider. `responses` is the only supported value, and it is the default when omitted.",
776776`boolean` },
777777 {
778778Details key: "model_providers.<id>.query_params",
779779 type: "map<string,string>",
780780Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "live"`. description: "Extra query parameters appended to provider requests.",
781781 },
782782Key {
783783 key: "model_providers.<id>.http_headers",
784784`feedback.enabled` type: "map<string,string>",
785785 description: "Static HTTP headers added to provider requests.",
786786Type / Values },
787787 {
788788`boolean` key: "model_providers.<id>.env_http_headers",
789789 type: "map<string,string>",
790790Details description:
791791 "HTTP headers populated from environment variables when present.",
792792Enable feedback submission via `/feedback` across Codex surfaces (default: true). },
793793 {
794794Key key: "model_providers.<id>.request_max_retries",
795795 type: "number",
796796`file_opener` description:
797797 "Retry count for HTTP requests to the provider (default: 4).",
798798Type / Values },
799799 {
800800`vscode | vscode-insiders | windsurf | cursor | none` key: "model_providers.<id>.stream_max_retries",
801801 type: "number",
802802Details description: "Retry count for SSE streaming interruptions (default: 5).",
803803 },
804804URI scheme used to open citations from Codex output (default: `vscode`). {
805805 key: "model_providers.<id>.stream_idle_timeout_ms",
806806Key type: "number",
807807 description:
808808`forced_chatgpt_workspace_id` "Idle timeout for SSE streams in milliseconds (default: 300000).",
809809 },
810810Type / Values {
811811 key: "model_providers.<id>.supports_websockets",
812812`string (uuid)` type: "boolean",
813813 description:
814814Details "Whether that provider supports the Responses API WebSocket transport.",
815815 },
816816Limit ChatGPT logins to a specific workspace identifier. {
817817 key: "model_providers.<id>.auth",
818818Key type: "table",
819819 description:
820820`forced_login_method` "Command-backed bearer token configuration for a custom provider. Do not combine with `env_key`, `experimental_bearer_token`, or `requires_openai_auth`.",
821821 },
822822Type / Values {
823823 key: "model_providers.<id>.auth.command",
824824`chatgpt | api` type: "string",
825825 description:
826826Details "Command to run when Codex needs a bearer token. The command must print the token to stdout.",
827827 },
828828Restrict Codex to a specific authentication method. {
829829 key: "model_providers.<id>.auth.args",
830830Key type: "array<string>",
831831 description: "Arguments passed to the token command.",
832832`hide_agent_reasoning` },
833833 {
834834Type / Values key: "model_providers.<id>.auth.timeout_ms",
835835 type: "number",
836836`boolean` description:
837837 "Maximum token command runtime in milliseconds (default: 5000).",
838838Details },
839839 {
840840Suppress reasoning events in both the TUI and `codex exec` output. key: "model_providers.<id>.auth.refresh_interval_ms",
841841 type: "number",
842842Key description:
843843 "How often Codex proactively refreshes the token in milliseconds (default: 300000). Set to `0` to refresh only after an authentication retry.",
844844`history.max_bytes` },
845845 {
846846Type / Values key: "model_providers.<id>.auth.cwd",
847847 type: "string (path)",
848848`number` description: "Working directory for the token command.",
849849 },
850850Details {
851851 key: "model_providers.amazon-bedrock.aws.profile",
852852If set, caps the history file size in bytes by dropping oldest entries. type: "string",
853853 description:
854854Key "AWS profile name used by the built-in `amazon-bedrock` provider.",
855855 },
856856`history.persistence` {
857857 key: "model_providers.amazon-bedrock.aws.region",
858858Type / Values type: "string",
859859 description: "AWS region used by the built-in `amazon-bedrock` provider.",
860860`save-all | none` },
861861 {
862862Details key: "model_reasoning_effort",
863863 type: "minimal | low | medium | high | xhigh",
864864Control whether Codex saves session transcripts to history.jsonl. description:
865865 "Adjust reasoning effort for supported models (Responses API only; `xhigh` is model-dependent).",
866866Key },
867867 {
868868`include_apply_patch_tool` key: "plan_mode_reasoning_effort",
869869 type: "none | minimal | low | medium | high | xhigh",
870870Type / Values description:
871871 "Plan-mode-specific reasoning override. When unset, Plan mode uses its built-in preset default.",
872872`boolean` },
873873 {
874874Details key: "model_reasoning_summary",
875875 type: "auto | concise | detailed | none",
876876Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`. description:
877877 "Select reasoning summary detail or disable summaries entirely.",
878878Key },
879879 {
880880`instructions` key: "model_verbosity",
881881 type: "low | medium | high",
882882Type / Values description:
883883 "Optional GPT-5 Responses API verbosity override; when unset, the selected model/preset default is used.",
884884`string` },
885885 {
886886Details key: "model_supports_reasoning_summaries",
887887 type: "boolean",
888888Reserved for future use; prefer `model_instructions_file` or `AGENTS.md`. description: "Force Codex to send or not send reasoning metadata.",
889889 },
890890Key {
891891 key: "shell_environment_policy.inherit",
892892`log_dir` type: "all | core | none",
893893 description:
894894Type / Values "Baseline environment inheritance when spawning subprocesses.",
895895 },
896896`string (path)` {
897897 key: "shell_environment_policy.ignore_default_excludes",
898898Details type: "boolean",
899899 description:
900900Directory where Codex writes log files (for example `codex-tui.log`); defaults to `$CODEX_HOME/log`. "Keep variables containing KEY/SECRET/TOKEN before other filters run.",
901901 },
902902Key {
903903 key: "shell_environment_policy.exclude",
904904`mcp_oauth_callback_port` type: "array<string>",
905905 description:
906906Type / Values "Glob patterns for removing environment variables after the defaults.",
907907 },
908908`integer` {
909909 key: "shell_environment_policy.include_only",
910910Details type: "array<string>",
911911 description:
912912Optional 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. "Whitelist of patterns; when set only matching variables are kept.",
913913 },
914914Key {
915915 key: "shell_environment_policy.set",
916916`mcp_oauth_callback_url` type: "map<string,string>",
917917 description:
918918Type / Values "Explicit environment overrides injected into every subprocess.",
919919 },
920920`string` {
921921 key: "shell_environment_policy.experimental_use_profile",
922922Details type: "boolean",
923923 description: "Use the user shell profile when spawning subprocesses.",
924924Optional redirect URI override for MCP OAuth login (for example, a devbox ingress URL). `mcp_oauth_callback_port` still controls the callback listener port. },
925925 {
926926Key key: "project_root_markers",
927927 type: "array<string>",
928928`mcp_oauth_credentials_store` description:
929929 "List of project root marker filenames; used when searching parent directories for the project root.",
930930Type / Values },
931931 {
932932`auto | file | keyring` key: "project_doc_max_bytes",
933933 type: "number",
934934Details description:
935935 "Maximum bytes read from `AGENTS.md` when building project instructions.",
936936Preferred store for MCP OAuth credentials. },
937937 {
938938Key key: "project_doc_fallback_filenames",
939939 type: "array<string>",
940940`mcp_servers.<id>.args` description: "Additional filenames to try when `AGENTS.md` is missing.",
941941 },
942942Type / Values {
943943 key: "profile",
944944`array<string>` type: "string",
945945 description:
946946Details "Default profile applied at startup (equivalent to `--profile`).",
947947 },
948948Arguments passed to the MCP stdio server command. {
949949 key: "profiles.<name>.*",
950950Key type: "various",
951951 description:
952952`mcp_servers.<id>.bearer_token_env_var` "Profile-scoped overrides for any of the supported configuration keys.",
953953 },
954954Type / Values {
955955 key: "profiles.<name>.service_tier",
956956`string` type: "string",
957957 description: "Profile-scoped service tier preference for new turns.",
958958Details },
959959 {
960960Environment variable sourcing the bearer token for an MCP HTTP server. key: "profiles.<name>.plan_mode_reasoning_effort",
961961 type: "none | minimal | low | medium | high | xhigh",
962962Key description: "Profile-scoped Plan-mode reasoning override.",
963963 },
964964`mcp_servers.<id>.command` {
965965 key: "profiles.<name>.web_search",
966966Type / Values type: "disabled | cached | live",
967967 description:
968968`string` 'Profile-scoped web search mode override (default: `"cached"`).',
969969 },
970970Details {
971971 key: "profiles.<name>.personality",
972972Launcher command for an MCP stdio server. type: "none | friendly | pragmatic",
973973 description:
974974Key "Profile-scoped communication style override for supported models.",
975975 },
976976`mcp_servers.<id>.cwd` {
977977 key: "profiles.<name>.model_catalog_json",
978978Type / Values type: "string (path)",
979979 description:
980980`string` "Profile-scoped model catalog JSON path override (applied on startup only; overrides the top-level `model_catalog_json` for that profile).",
981981 },
982982Details {
983983 key: "profiles.<name>.model_instructions_file",
984984Working directory for the MCP stdio server process. type: "string (path)",
985985 description:
986986Key "Profile-scoped replacement for the built-in instruction file.",
987987 },
988988`mcp_servers.<id>.disabled_tools` {
989989 key: "profiles.<name>.experimental_use_unified_exec_tool",
990990Type / Values type: "boolean",
991991 description:
992992`array<string>` "Legacy name for enabling unified exec; prefer `[features].unified_exec`.",
993993 },
994994Details {
995995 key: "profiles.<name>.oss_provider",
996996Deny list applied after `enabled_tools` for the MCP server. type: "lmstudio | ollama",
997997 description: "Profile-scoped OSS provider for `--oss` sessions.",
998998Key },
999999 {
10001000`mcp_servers.<id>.enabled` key: "profiles.<name>.tools_view_image",
10011001 type: "boolean",
10021002Type / Values description: "Enable or disable the `view_image` tool in that profile.",
10031003 },
10041004`boolean` {
10051005 key: "profiles.<name>.analytics.enabled",
10061006Details type: "boolean",
10071007 description: "Profile-scoped analytics enablement override.",
10081008Disable an MCP server without removing its configuration. },
10091009 {
10101010Key key: "profiles.<name>.windows.sandbox",
10111011 type: "unelevated | elevated",
10121012`mcp_servers.<id>.enabled_tools` description: "Profile-scoped Windows sandbox mode override.",
10131013 },
10141014Type / Values {
10151015 key: "history.persistence",
10161016`array<string>` type: "save-all | none",
10171017 description:
10181018Details "Control whether Codex saves session transcripts to history.jsonl.",
10191019 },
10201020Allow list of tool names exposed by the MCP server. {
10211021 key: "tool_output_token_limit",
10221022Key type: "number",
10231023 description:
10241024`mcp_servers.<id>.env` "Token budget for storing individual tool/function outputs in history.",
10251025 },
10261026Type / Values {
10271027 key: "background_terminal_max_timeout",
10281028`map<string,string>` type: "number",
10291029 description:
10301030Details "Maximum poll window in milliseconds for empty `write_stdin` polls (background terminal polling). Default: `300000` (5 minutes). Replaces the older `background_terminal_timeout` key.",
10311031 },
10321032Environment variables forwarded to the MCP stdio server. {
10331033 key: "history.max_bytes",
10341034Key type: "number",
10351035 description:
10361036`mcp_servers.<id>.env_http_headers` "If set, caps the history file size in bytes by dropping oldest entries.",
10371037 },
10381038Type / Values {
10391039 key: "file_opener",
10401040`map<string,string>` type: "vscode | vscode-insiders | windsurf | cursor | none",
10411041 description:
10421042Details "URI scheme used to open citations from Codex output (default: `vscode`).",
10431043 },
10441044HTTP headers populated from environment variables for an MCP HTTP server. {
10451045 key: "otel.environment",
10461046Key type: "string",
10471047 description:
10481048`mcp_servers.<id>.env_vars` "Environment tag applied to emitted OpenTelemetry events (default: `dev`).",
10491049 },
10501050Type / Values {
10511051 key: "otel.exporter",
10521052`array<string>` type: "none | otlp-http | otlp-grpc",
10531053 description:
10541054Details "Select the OpenTelemetry exporter and provide any endpoint metadata.",
10551055 },
10561056Additional environment variables to whitelist for an MCP stdio server. {
10571057 key: "otel.trace_exporter",
10581058Key type: "none | otlp-http | otlp-grpc",
10591059 description:
10601060`mcp_servers.<id>.http_headers` "Select the OpenTelemetry trace exporter and provide any endpoint metadata.",
10611061 },
10621062Type / Values {
10631063 key: "otel.metrics_exporter",
10641064`map<string,string>` type: "none | statsig | otlp-http | otlp-grpc",
10651065 description:
10661066Details "Select the OpenTelemetry metrics exporter (defaults to `statsig`).",
10671067 },
10681068Static HTTP headers included with each MCP HTTP request. {
10691069 key: "otel.log_user_prompt",
10701070Key type: "boolean",
10711071 description:
10721072`mcp_servers.<id>.required` "Opt in to exporting raw user prompts with OpenTelemetry logs.",
10731073 },
10741074Type / Values {
10751075 key: "otel.exporter.<id>.endpoint",
10761076`boolean` type: "string",
10771077 description: "Exporter endpoint for OTEL logs.",
10781078Details },
10791079 {
10801080When true, fail startup/resume if this enabled MCP server cannot initialize. key: "otel.exporter.<id>.protocol",
10811081 type: "binary | json",
10821082Key description: "Protocol used by the OTLP/HTTP exporter.",
10831083 },
10841084`mcp_servers.<id>.startup_timeout_ms` {
10851085 key: "otel.exporter.<id>.headers",
10861086Type / Values type: "map<string,string>",
10871087 description: "Static headers included with OTEL exporter requests.",
10881088`number` },
10891089 {
10901090Details key: "otel.trace_exporter.<id>.endpoint",
10911091 type: "string",
10921092Alias for `startup_timeout_sec` in milliseconds. description: "Trace exporter endpoint for OTEL logs.",
10931093 },
10941094Key {
10951095 key: "otel.trace_exporter.<id>.protocol",
10961096`mcp_servers.<id>.startup_timeout_sec` type: "binary | json",
10971097 description: "Protocol used by the OTLP/HTTP trace exporter.",
10981098Type / Values },
10991099 {
11001100`number` key: "otel.trace_exporter.<id>.headers",
11011101 type: "map<string,string>",
11021102Details description: "Static headers included with OTEL trace exporter requests.",
11031103 },
11041104Override the default 10s startup timeout for an MCP server. {
11051105 key: "otel.exporter.<id>.tls.ca-certificate",
11061106Key type: "string",
11071107 description: "CA certificate path for OTEL exporter TLS.",
11081108`mcp_servers.<id>.tool_timeout_sec` },
11091109 {
11101110Type / Values key: "otel.exporter.<id>.tls.client-certificate",
11111111 type: "string",
11121112`number` description: "Client certificate path for OTEL exporter TLS.",
11131113 },
11141114Details {
11151115 key: "otel.exporter.<id>.tls.client-private-key",
11161116Override the default 60s per-tool timeout for an MCP server. type: "string",
11171117 description: "Client private key path for OTEL exporter TLS.",
11181118Key },
11191119 {
11201120`mcp_servers.<id>.url` key: "otel.trace_exporter.<id>.tls.ca-certificate",
11211121 type: "string",
11221122Type / Values description: "CA certificate path for OTEL trace exporter TLS.",
11231123 },
11241124`string` {
11251125 key: "otel.trace_exporter.<id>.tls.client-certificate",
11261126Details type: "string",
11271127 description: "Client certificate path for OTEL trace exporter TLS.",
11281128Endpoint for an MCP streamable HTTP server. },
11291129 {
11301130Key key: "otel.trace_exporter.<id>.tls.client-private-key",
11311131 type: "string",
11321132`model` description: "Client private key path for OTEL trace exporter TLS.",
11331133 },
11341134Type / Values {
11351135 key: "tui",
11361136`string` type: "table",
11371137 description:
11381138Details "TUI-specific options such as enabling inline desktop notifications.",
11391139 },
11401140Model to use (e.g., `gpt-5-codex`). {
11411141 key: "tui.notifications",
11421142Key type: "boolean | array<string>",
11431143 description:
11441144`model_auto_compact_token_limit` "Enable TUI notifications; optionally restrict to specific event types.",
11451145 },
11461146Type / Values {
11471147 key: "tui.notification_method",
11481148`number` type: "auto | osc9 | bel",
11491149 description:
11501150Details "Notification method for terminal notifications (default: auto).",
11511151 },
11521152Token threshold that triggers automatic history compaction (unset uses model defaults). {
11531153 key: "tui.notification_condition",
11541154Key type: "unfocused | always",
11551155 description:
11561156`model_catalog_json` "Control whether TUI notifications fire only when the terminal is unfocused or regardless of focus. Defaults to `unfocused`.",
11571157 },
11581158Type / Values {
11591159 key: "tui.animations",
11601160`string (path)` type: "boolean",
11611161 description:
11621162Details "Enable terminal animations (welcome screen, shimmer, spinner) (default: true).",
11631163 },
11641164Optional path to a JSON model catalog loaded on startup. Profile-level `profiles.<name>.model_catalog_json` can override this per profile. {
11651165 key: "tui.alternate_screen",
11661166Key type: "auto | always | never",
11671167 description:
11681168`model_context_window` "Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback).",
11691169 },
11701170Type / Values {
11711171 key: "tui.vim_mode_default",
11721172`number` type: "boolean",
11731173 description:
11741174Details "Start the composer in Vim normal mode instead of insert mode (default: false). You can still toggle it per session with `/vim`.",
11751175 },
11761176Context window tokens available to the active model. {
11771177 key: "tui.raw_output_mode",
11781178Key type: "boolean",
11791179 description:
11801180`model_instructions_file` "Start the TUI in raw scrollback mode for copy-friendly terminal selection (default: false). You can toggle it with `/raw` or the default `alt-r` key binding.",
11811181 },
11821182Type / Values {
11831183 key: "tui.show_tooltips",
11841184`string (path)` type: "boolean",
11851185 description:
11861186Details "Show onboarding tooltips in the TUI welcome screen (default: true).",
11871187 },
11881188Replacement for built-in instructions instead of `AGENTS.md`. {
11891189 key: "tui.status_line",
11901190Key type: "array<string> | null",
11911191 description:
11921192`model_provider` "Ordered list of TUI footer status-line item identifiers. `null` disables the status line.",
11931193 },
11941194Type / Values {
11951195 key: "tui.terminal_title",
11961196`string` type: "array<string> | null",
11971197 description:
11981198Details 'Ordered list of terminal window/tab title item identifiers. Defaults to `["spinner", "project"]`; `null` disables title updates.',
11991199 },
12001200Provider id from `model_providers` (default: `openai`). {
12011201 key: "tui.theme",
12021202Key type: "string",
12031203 description:
12041204`model_providers.<id>.base_url` "Syntax-highlighting theme override (kebab-case theme name).",
12051205 },
12061206Type / Values {
12071207 key: "tui.keymap.<context>.<action>",
12081208`string` type: "string | array<string>",
12091209 description:
12101210Details "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`.",
12111211 },
12121212API base URL for the model provider. {
12131213 key: "tui.keymap.<context>.<action> = []",
12141214Key type: "empty array",
12151215 description:
12161216`model_providers.<id>.env_http_headers` "Unbind the action in that keymap context. Key names use normalized strings such as `ctrl-a`, `shift-enter`, `page-down`, or `minus`.",
12171217 },
12181218Type / Values {
12191219 key: "plugins.<plugin>.mcp_servers.<server>.enabled",
12201220`map<string,string>` type: "boolean",
12211221 description:
12221222Details "Enable or disable an MCP server bundled by an installed plugin without changing the plugin manifest.",
12231223 },
12241224HTTP headers populated from environment variables when present. {
12251225 key: "plugins.<plugin>.mcp_servers.<server>.default_tools_approval_mode",
12261226Key type: "auto | prompt | approve",
12271227 description:
12281228`model_providers.<id>.env_key` "Default approval behavior for tools on a plugin-provided MCP server.",
12291229 },
12301230Type / Values {
12311231 key: "plugins.<plugin>.mcp_servers.<server>.enabled_tools",
12321232`string` type: "array<string>",
12331233 description:
12341234Details "Allow list of tools exposed from a plugin-provided MCP server.",
12351235 },
12361236Environment variable supplying the provider API key. {
12371237 key: "plugins.<plugin>.mcp_servers.<server>.disabled_tools",
12381238Key type: "array<string>",
12391239 description:
12401240`model_providers.<id>.env_key_instructions` "Deny list applied after `enabled_tools` for a plugin-provided MCP server.",
12411241 },
12421242Type / Values {
12431243 key: "plugins.<plugin>.mcp_servers.<server>.tools.<tool>.approval_mode",
12441244`string` type: "auto | prompt | approve",
12451245 description:
12461246Details "Per-tool approval behavior override for a plugin-provided MCP tool.",
12471247 },
12481248Optional setup guidance for the provider API key. {
12491249 key: "tui.model_availability_nux.<model>",
12501250Key type: "integer",
12511251 description: "Internal startup-tooltip state keyed by model slug.",
12521252`model_providers.<id>.experimental_bearer_token` },
12531253 {
12541254Type / Values key: "hide_agent_reasoning",
12551255 type: "boolean",
12561256`string` description:
12571257 "Suppress reasoning events in both the TUI and `codex exec` output.",
12581258Details },
12591259 {
12601260Direct bearer token for the provider (discouraged; use `env_key`). key: "show_raw_agent_reasoning",
12611261 type: "boolean",
12621262Key description:
12631263 "Surface raw reasoning content when the active model emits it.",
12641264`model_providers.<id>.http_headers` },
12651265 {
12661266Type / Values key: "disable_paste_burst",
12671267 type: "boolean",
12681268`map<string,string>` description: "Disable burst-paste detection in the TUI.",
12691269 },
12701270Details {
12711271 key: "windows_wsl_setup_acknowledged",
12721272Static HTTP headers added to provider requests. type: "boolean",
12731273 description: "Track Windows onboarding acknowledgement (Windows only).",
12741274Key },
12751275 {
12761276`model_providers.<id>.name` key: "chatgpt_base_url",
12771277 type: "string",
12781278Type / Values description: "Override the base URL used during the ChatGPT login flow.",
12791279 },
12801280`string` {
12811281 key: "cli_auth_credentials_store",
12821282Details type: "file | keyring | auto",
12831283 description:
12841284Display name for a custom model provider. "Control where the CLI stores cached credentials (file-based auth.json vs OS keychain).",
12851285 },
12861286Key {
12871287 key: "mcp_oauth_credentials_store",
12881288`model_providers.<id>.query_params` type: "auto | file | keyring",
12891289 description: "Preferred store for MCP OAuth credentials.",
12901290Type / Values },
12911291 {
12921292`map<string,string>` key: "mcp_oauth_callback_port",
12931293 type: "integer",
12941294Details description:
12951295 "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.",
12961296Extra query parameters appended to provider requests. },
12971297 {
12981298Key key: "mcp_oauth_callback_url",
12991299 type: "string",
13001300`model_providers.<id>.request_max_retries` description:
13011301 "Optional redirect URI override for MCP OAuth login (for example, a devbox ingress URL). `mcp_oauth_callback_port` still controls the callback listener port.",
13021302Type / Values },
13031303 {
13041304`number` key: "experimental_use_unified_exec_tool",
13051305 type: "boolean",
13061306Details description:
13071307 "Legacy name for enabling unified exec; prefer `[features].unified_exec` or `codex --enable unified_exec`.",
13081308Retry count for HTTP requests to the provider (default: 4). },
13091309 {
13101310Key key: "tools.web_search",
13111311 type: 'boolean | { context_size = "low|medium|high", allowed_domains = [string], location = { country, region, city, timezone } }',
13121312`model_providers.<id>.requires_openai_auth` description:
13131313 "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.",
13141314Type / Values },
13151315 {
13161316`boolean` key: "tools.view_image",
13171317 type: "boolean",
13181318Details description: "Enable the local-image attachment tool `view_image`.",
13191319 },
13201320The provider uses OpenAI authentication (defaults to false). {
13211321 key: "web_search",
13221322Key type: "disabled | cached | live",
13231323 description:
13241324`model_providers.<id>.stream_idle_timeout_ms` '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.',
13251325 },
13261326Type / Values {
13271327 key: "default_permissions",
13281328`number` type: "string",
13291329 description:
13301330Details "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.",
13311331 },
13321332Idle timeout for SSE streams in milliseconds (default: 300000). {
13331333 key: "permissions.<name>.filesystem",
13341334Key type: "table",
13351335 description:
13361336`model_providers.<id>.stream_max_retries` "Named filesystem permission profile. Each key is an absolute path or special token such as `:minimal` or `:project_roots`.",
13371337 },
13381338Type / Values {
13391339 key: "permissions.<name>.filesystem.glob_scan_max_depth",
13401340`number` type: "number",
13411341 description:
13421342Details "Maximum depth for expanding deny-read glob patterns on platforms that snapshot matches before sandbox startup. Must be at least `1` when set.",
13431343 },
13441344Retry count for SSE streaming interruptions (default: 5). {
13451345 key: "permissions.<name>.filesystem.<path-or-glob>",
13461346Key type: '"read" | "write" | "none" | table',
13471347 description:
13481348`model_providers.<id>.wire_api` '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.',
13491349 },
13501350Type / Values {
13511351 key: 'permissions.<name>.filesystem.":project_roots".<subpath-or-glob>',
13521352`chat | responses` type: '"read" | "write" | "none"',
13531353 description:
13541354Details 'Scoped filesystem access relative to the detected project roots. Use `"."` for the root itself; glob subpaths such as `"**/*.env"` can deny reads with `"none"`.',
13551355 },
13561356Protocol used by the provider (defaults to `chat` if omitted). {
13571357 key: "permissions.<name>.network.enabled",
13581358Key type: "boolean",
13591359 description: "Enable network access for this named permissions profile.",
13601360`model_reasoning_effort` },
13611361 {
13621362Type / Values key: "permissions.<name>.network.proxy_url",
13631363 type: "string",
13641364`minimal | low | medium | high | xhigh` description:
13651365 "HTTP listener URL used when this permissions profile enables sandboxed networking.",
13661366Details },
13671367 {
13681368Adjust reasoning effort for supported models (Responses API only; `xhigh` is model-dependent). key: "permissions.<name>.network.enable_socks5",
13691369 type: "boolean",
13701370Key description:
13711371 "Expose SOCKS5 support when this permissions profile enables sandboxed networking.",
13721372`model_reasoning_summary` },
13731373 {
13741374Type / Values key: "permissions.<name>.network.socks_url",
13751375 type: "string",
13761376`auto | concise | detailed | none` description: "SOCKS5 proxy endpoint used by this permissions profile.",
13771377 },
13781378Details {
13791379 key: "permissions.<name>.network.enable_socks5_udp",
13801380Select reasoning summary detail or disable summaries entirely. type: "boolean",
13811381 description: "Allow UDP over the SOCKS5 listener when enabled.",
13821382Key },
13831383 {
13841384`model_supports_reasoning_summaries` key: "permissions.<name>.network.allow_upstream_proxy",
13851385 type: "boolean",
13861386Type / Values description:
13871387 "Allow sandboxed networking to chain through another upstream proxy.",
13881388`boolean` },
13891389 {
13901390Details key: "permissions.<name>.network.dangerously_allow_non_loopback_proxy",
13911391 type: "boolean",
13921392Force Codex to send or not send reasoning metadata. description:
13931393 "Permit non-loopback bind addresses for sandboxed networking listeners. Enabling it can expose listeners beyond localhost.",
13941394Key },
13951395 {
13961396`model_verbosity` key: "permissions.<name>.network.dangerously_allow_all_unix_sockets",
13971397 type: "boolean",
13981398Type / Values description:
13991399 "Allow arbitrary Unix socket destinations instead of the default restricted set. Use only in tightly controlled environments.",
14001400`low | medium | high` },
14011401 {
14021402Details key: "permissions.<name>.network.domains",
14031403 type: "map<string, allow | deny>",
14041404Control GPT-5 Responses API verbosity (defaults to `medium`). description:
14051405 "Domain rules for sandboxed networking. Supports exact hosts, `*.example.com` for subdomains only, `**.example.com` for apex plus subdomains, and global `*` allow rules. `deny` wins on conflicts.",
14061406Key },
14071407 {
14081408`notice.hide_full_access_warning` key: "permissions.<name>.network.unix_sockets",
14091409 type: "map<string, allow | none>",
14101410Type / Values description:
14111411 "Unix socket rules for sandboxed networking. Use socket paths as keys, with `allow` or `none` values.",
14121412`boolean` },
14131413 {
14141414Details key: "permissions.<name>.network.allow_local_binding",
14151415 type: "boolean",
14161416Track acknowledgement of the full access warning prompt. description:
14171417 "Permit broader local/private-network access through sandboxed networking. Exact local IP literal or `localhost` allow rules can still permit specific local targets when this stays `false`.",
14181418Key },
14191419 {
14201420`notice.hide_gpt-5.1-codex-max_migration_prompt` key: "projects.<path>.trust_level",
14211421 type: "string",
14221422Type / Values description:
14231423 '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.',
14241424`boolean` },
14251425 {
14261426Details key: "notice.hide_full_access_warning",
14271427 type: "boolean",
14281428Track acknowledgement of the gpt-5.1-codex-max migration prompt. description: "Track acknowledgement of the full access warning prompt.",
14291429 },
14301430Key {
14311431 key: "notice.hide_world_writable_warning",
14321432`notice.hide_gpt5_1_migration_prompt` type: "boolean",
14331433 description:
14341434Type / Values "Track acknowledgement of the Windows world-writable directories warning.",
14351435 },
14361436`boolean` {
14371437 key: "notice.hide_rate_limit_model_nudge",
14381438Details type: "boolean",
14391439 description: "Track opt-out of the rate limit model switch reminder.",
14401440Track acknowledgement of the GPT-5.1 migration prompt. },
14411441 {
14421442Key key: "notice.hide_gpt5_1_migration_prompt",
14431443 type: "boolean",
14441444`notice.hide_rate_limit_model_nudge` description: "Track acknowledgement of the GPT-5.1 migration prompt.",
14451445 },
14461446Type / Values {
14471447 key: "notice.hide_gpt-5.1-codex-max_migration_prompt",
14481448`boolean` type: "boolean",
14491449 description:
14501450Details "Track acknowledgement of the gpt-5.1-codex-max migration prompt.",
14511451 },
14521452Track opt-out of the rate limit model switch reminder. {
14531453 key: "notice.model_migrations",
14541454Key type: "map<string,string>",
14551455 description: "Track acknowledged model migrations as old->new mappings.",
14561456`notice.hide_world_writable_warning` },
14571457 {
14581458Type / Values key: "forced_login_method",
14591459 type: "chatgpt | api",
14601460`boolean` description: "Restrict Codex to a specific authentication method.",
14611461 },
14621462Details {
14631463 key: "forced_chatgpt_workspace_id",
14641464Track acknowledgement of the Windows world-writable directories warning. type: "string (uuid)",
14651465 description: "Limit ChatGPT logins to a specific workspace identifier.",
14661466Key },
14671467 ]}
14681468`notice.model_migrations` client:load
14691469 />
1470Type / Values
1471
1472`map<string,string>`
1473
1474Details
1475
1476Track acknowledged model migrations as old->new mappings.
1477
1478Key
1479
1480`notify`
1481
1482Type / Values
1483
1484`array<string>`
1485
1486Details
1487
1488Command invoked for notifications; receives a JSON payload from Codex.
1489
1490Key
1491
1492`oss_provider`
1493
1494Type / Values
1495
1496`lmstudio | ollama`
1497
1498Details
1499
1500Default local provider used when running with `--oss` (defaults to prompting if unset).
1501
1502Key
1503
1504`otel.environment`
1505
1506Type / Values
1507
1508`string`
1509
1510Details
1511
1512Environment tag applied to emitted OpenTelemetry events (default: `dev`).
1513
1514Key
1515
1516`otel.exporter`
1517
1518Type / Values
1519
1520`none | otlp-http | otlp-grpc`
1521
1522Details
1523
1524Select the OpenTelemetry exporter and provide any endpoint metadata.
1525
1526Key
1527
1528`otel.exporter.<id>.endpoint`
1529
1530Type / Values
1531
1532`string`
1533
1534Details
1535
1536Exporter endpoint for OTEL logs.
1537
1538Key
1539
1540`otel.exporter.<id>.headers`
1541
1542Type / Values
1543
1544`map<string,string>`
1545
1546Details
1547
1548Static headers included with OTEL exporter requests.
1549
1550Key
1551
1552`otel.exporter.<id>.protocol`
1553
1554Type / Values
1555
1556`binary | json`
1557
1558Details
1559
1560Protocol used by the OTLP/HTTP exporter.
1561
1562Key
1563
1564`otel.exporter.<id>.tls.ca-certificate`
1565
1566Type / Values
1567
1568`string`
1569
1570Details
1571
1572CA certificate path for OTEL exporter TLS.
1573
1574Key
1575
1576`otel.exporter.<id>.tls.client-certificate`
1577
1578Type / Values
1579
1580`string`
1581
1582Details
1583
1584Client certificate path for OTEL exporter TLS.
1585
1586Key
1587
1588`otel.exporter.<id>.tls.client-private-key`
1589
1590Type / Values
1591
1592`string`
1593
1594Details
1595
1596Client private key path for OTEL exporter TLS.
1597
1598Key
1599
1600`otel.log_user_prompt`
1601
1602Type / Values
1603
1604`boolean`
1605
1606Details
1607
1608Opt in to exporting raw user prompts with OpenTelemetry logs.
1609
1610Key
1611
1612`otel.trace_exporter`
1613
1614Type / Values
1615
1616`none | otlp-http | otlp-grpc`
1617
1618Details
1619
1620Select the OpenTelemetry trace exporter and provide any endpoint metadata.
1621
1622Key
1623
1624`otel.trace_exporter.<id>.endpoint`
1625
1626Type / Values
1627
1628`string`
1629
1630Details
1631
1632Trace exporter endpoint for OTEL logs.
1633
1634Key
1635
1636`otel.trace_exporter.<id>.headers`
1637
1638Type / Values
1639
1640`map<string,string>`
1641
1642Details
1643
1644Static headers included with OTEL trace exporter requests.
1645
1646Key
1647
1648`otel.trace_exporter.<id>.protocol`
1649
1650Type / Values
1651
1652`binary | json`
1653
1654Details
1655
1656Protocol used by the OTLP/HTTP trace exporter.
1657
1658Key
1659
1660`otel.trace_exporter.<id>.tls.ca-certificate`
1661
1662Type / Values
1663
1664`string`
1665
1666Details
1667
1668CA certificate path for OTEL trace exporter TLS.
1669
1670Key
1671
1672`otel.trace_exporter.<id>.tls.client-certificate`
1673
1674Type / Values
1675
1676`string`
1677
1678Details
1679
1680Client certificate path for OTEL trace exporter TLS.
1681
1682Key
1683
1684`otel.trace_exporter.<id>.tls.client-private-key`
1685
1686Type / Values
1687
1688`string`
1689
1690Details
1691
1692Client private key path for OTEL trace exporter TLS.
1693
1694Key
1695
1696`personality`
1697
1698Type / Values
1699
1700`none | friendly | pragmatic`
1701
1702Details
1703
1704Default communication style for models that advertise `supportsPersonality`; can be overridden per thread/turn or via `/personality`.
1705
1706Key
1707
1708`profile`
1709
1710Type / Values
1711
1712`string`
1713
1714Details
1715
1716Default profile applied at startup (equivalent to `--profile`).
1717
1718Key
1719
1720`profiles.<name>.*`
1721
1722Type / Values
1723
1724`various`
1725
1726Details
1727
1728Profile-scoped overrides for any of the supported configuration keys.
1729
1730Key
1731
1732`profiles.<name>.experimental_use_freeform_apply_patch`
1733
1734Type / Values
1735
1736`boolean`
1737
1738Details
1739
1740Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`.
1741
1742Key
1743
1744`profiles.<name>.experimental_use_unified_exec_tool`
1745
1746Type / Values
1747
1748`boolean`
1749
1750Details
1751
1752Legacy name for enabling unified exec; prefer `[features].unified_exec`.
1753
1754Key
1755
1756`profiles.<name>.include_apply_patch_tool`
1757
1758Type / Values
1759
1760`boolean`
1761
1762Details
1763
1764Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`.
1765
1766Key
1767
1768`profiles.<name>.model_catalog_json`
1769
1770Type / Values
1771
1772`string (path)`
1773
1774Details
1775
1776Profile-scoped model catalog JSON path override (applied on startup only; overrides the top-level `model_catalog_json` for that profile).
1777
1778Key
1779
1780`profiles.<name>.oss_provider`
1781
1782Type / Values
1783
1784`lmstudio | ollama`
1785
1786Details
1787
1788Profile-scoped OSS provider for `--oss` sessions.
1789
1790Key
1791
1792`profiles.<name>.personality`
1793
1794Type / Values
1795
1796`none | friendly | pragmatic`
1797
1798Details
1799
1800Profile-scoped communication style override for supported models.
1801
1802Key
1803
1804`profiles.<name>.web_search`
1805
1806Type / Values
1807
1808`disabled | cached | live`
1809
1810Details
1811
1812Profile-scoped web search mode override (default: `"cached"`).
1813
1814Key
1815
1816`project_doc_fallback_filenames`
1817
1818Type / Values
1819
1820`array<string>`
1821
1822Details
1823
1824Additional filenames to try when `AGENTS.md` is missing.
1825
1826Key
1827
1828`project_doc_max_bytes`
1829
1830Type / Values
1831
1832`number`
1833
1834Details
1835
1836Maximum bytes read from `AGENTS.md` when building project instructions.
1837
1838Key
1839
1840`project_root_markers`
1841
1842Type / Values
1843
1844`array<string>`
1845
1846Details
1847
1848List of project root marker filenames; used when searching parent directories for the project root.
1849
1850Key
1851
1852`projects.<path>.trust_level`
1853
1854Type / Values
1855
1856`string`
1857
1858Details
1859
1860Mark a project or worktree as trusted or untrusted (`"trusted"` | `"untrusted"`). Untrusted projects skip project-scoped `.codex/` layers.
1861
1862Key
1863
1864`review_model`
1865
1866Type / Values
1867
1868`string`
1869
1870Details
1871
1872Optional model override used by `/review` (defaults to the current session model).
1873
1874Key
1875
1876`sandbox_mode`
1877
1878Type / Values
1879
1880`read-only | workspace-write | danger-full-access`
1881
1882Details
1883
1884Sandbox policy for filesystem and network access during command execution.
1885
1886Key
1887
1888`sandbox_workspace_write.exclude_slash_tmp`
1889
1890Type / Values
1891
1892`boolean`
1893
1894Details
1895
1896Exclude `/tmp` from writable roots in workspace-write mode.
1897
1898Key
1899
1900`sandbox_workspace_write.exclude_tmpdir_env_var`
1901
1902Type / Values
1903
1904`boolean`
1905
1906Details
1907
1908Exclude `$TMPDIR` from writable roots in workspace-write mode.
1909
1910Key
1911
1912`sandbox_workspace_write.network_access`
1913
1914Type / Values
1915
1916`boolean`
1917
1918Details
1919
1920Allow outbound network access inside the workspace-write sandbox.
1921
1922Key
1923
1924`sandbox_workspace_write.writable_roots`
1925
1926Type / Values
1927
1928`array<string>`
1929
1930Details
1931
1932Additional writable roots when `sandbox_mode = "workspace-write"`.
1933
1934Key
1935
1936`shell_environment_policy.exclude`
1937
1938Type / Values
1939
1940`array<string>`
1941
1942Details
1943
1944Glob patterns for removing environment variables after the defaults.
1945
1946Key
1947
1948`shell_environment_policy.experimental_use_profile`
1949
1950Type / Values
1951
1952`boolean`
1953
1954Details
1955
1956Use the user shell profile when spawning subprocesses.
1957
1958Key
1959
1960`shell_environment_policy.ignore_default_excludes`
1961
1962Type / Values
1963
1964`boolean`
1965
1966Details
1967
1968Keep variables containing KEY/SECRET/TOKEN before other filters run.
1969
1970Key
1971
1972`shell_environment_policy.include_only`
1973
1974Type / Values
1975
1976`array<string>`
1977
1978Details
1979
1980Whitelist of patterns; when set only matching variables are kept.
1981
1982Key
1983
1984`shell_environment_policy.inherit`
1985
1986Type / Values
1987
1988`all | core | none`
1989
1990Details
1991
1992Baseline environment inheritance when spawning subprocesses.
1993
1994Key
1995
1996`shell_environment_policy.set`
1997
1998Type / Values
1999
2000`map<string,string>`
2001
2002Details
2003
2004Explicit environment overrides injected into every subprocess.
2005
2006Key
2007
2008`show_raw_agent_reasoning`
2009
2010Type / Values
2011
2012`boolean`
2013
2014Details
2015
2016Surface raw reasoning content when the active model emits it.
2017
2018Key
2019
2020`skills.config`
2021
2022Type / Values
2023
2024`array<object>`
2025
2026Details
2027
2028Per-skill enablement overrides stored in config.toml.
2029
2030Key
2031
2032`skills.config.<index>.enabled`
2033
2034Type / Values
2035
2036`boolean`
2037
2038Details
2039
2040Enable or disable the referenced skill.
2041
2042Key
2043
2044`skills.config.<index>.path`
2045
2046Type / Values
2047
2048`string (path)`
2049
2050Details
2051
2052Path to a skill folder containing `SKILL.md`.
2053
2054Key
2055
2056`suppress_unstable_features_warning`
2057
2058Type / Values
2059
2060`boolean`
2061
2062Details
2063
2064Suppress the warning that appears when under-development feature flags are enabled.
2065
2066Key
2067
2068`tool_output_token_limit`
2069
2070Type / Values
2071
2072`number`
2073
2074Details
2075
2076Token budget for storing individual tool/function outputs in history.
2077
2078Key
2079
2080`tools.web_search`
2081
2082Type / Values
2083
2084`boolean`
2085
2086Details
2087
2088Deprecated legacy toggle for web search; prefer the top-level `web_search` setting.
2089
2090Key
2091
2092`tui`
2093
2094Type / Values
2095
2096`table`
2097
2098Details
2099
2100TUI-specific options such as enabling inline desktop notifications.
2101
2102Key
2103
2104`tui.alternate_screen`
2105
2106Type / Values
2107
2108`auto | always | never`
2109
2110Details
2111
2112Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback).
2113
2114Key
2115
2116`tui.animations`
2117
2118Type / Values
2119
2120`boolean`
2121
2122Details
2123
2124Enable terminal animations (welcome screen, shimmer, spinner) (default: true).
2125
2126Key
2127
2128`tui.notification_method`
2129
2130Type / Values
2131
2132`auto | osc9 | bel`
2133
2134Details
2135
2136Notification method for unfocused terminal notifications (default: auto).
2137
2138Key
2139
2140`tui.notifications`
2141
2142Type / Values
2143
2144`boolean | array<string>`
2145
2146Details
2147
2148Enable TUI notifications; optionally restrict to specific event types.
2149
2150Key
2151
2152`tui.show_tooltips`
2153
2154Type / Values
2155
2156`boolean`
2157
2158Details
2159
2160Show onboarding tooltips in the TUI welcome screen (default: true).
2161
2162Key
2163
2164`tui.status_line`
2165
2166Type / Values
2167
2168`array<string> | null`
2169
2170Details
2171
2172Ordered list of TUI footer status-line item identifiers. `null` disables the status line.
2173
2174Key
2175
2176`web_search`
2177
2178Type / Values
2179
2180`disabled | cached | live`
2181
2182Details
2183
2184Web 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.
2185
2186Key
2187
2188`windows_wsl_setup_acknowledged`
2189
2190Type / Values
2191
2192`boolean`
2193
2194Details
2195
2196Track Windows onboarding acknowledgement (Windows only).
2197
2198Expand to view all
2199 1470
2200You can find the latest JSON schema for `config.toml` [here](https://developers.openai.com/codex/config-schema.json).1471You can find the latest JSON schema for `config.toml` [here](https://developers.openai.com/codex/config-schema.json).
2201 1472
2214For ChatGPT Business and Enterprise users, Codex can also apply cloud-fetched1485For ChatGPT Business and Enterprise users, Codex can also apply cloud-fetched
2215requirements. See the security page for precedence details.1486requirements. See the security page for precedence details.
2216 1487
22171488| Key | Type / Values | Details |Use `[features]` in `requirements.toml` to pin feature flags by the same
22181489| --- | --- | --- |canonical keys that `config.toml` uses. Omitted keys remain unconstrained.
22191490| `allowed_approval_policies` | `array<string>` | Allowed values for `approval_policy` (for example `untrusted`, `on-request`, `never`, and `reject`). |
22201491| `allowed_sandbox_modes` | `array<string>` | Allowed values for `sandbox_mode`. |<ConfigTable
22211492| `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={[
22221493| `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. | {
22231494| `mcp_servers.<id>.identity` | `table` | Identity rule for a single MCP server. Set either `command` (stdio) or `url` (streamable HTTP). | key: "allowed_approval_policies",
22241495| `mcp_servers.<id>.identity.command` | `string` | Allow an MCP stdio server when its `mcp_servers.<id>.command` matches this command. | type: "array<string>",
22251496| `mcp_servers.<id>.identity.url` | `string` | Allow an MCP streamable HTTP server when its `mcp_servers.<id>.url` matches this URL. | description:
22261497| `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`).",
22271498| `rules.prefix_rules` | `array<table>` | List of enforced prefix rules. Each rule must include `pattern` and `decision`. | },
22281499| `rules.prefix_rules[].decision` | `prompt | forbidden` | Required. Requirements rules can only prompt or forbid (not allow). | {
22291500| `rules.prefix_rules[].justification` | `string` | Optional non-empty rationale surfaced in approval prompts or rejection messages. | key: "allowed_approvals_reviewers",
22301501| `rules.prefix_rules[].pattern` | `array<table>` | Command prefix expressed as pattern tokens. Each token sets either `token` or `any_of`. | type: "array<string>",
22311502| `rules.prefix_rules[].pattern[].any_of` | `array<string>` | A list of allowed alternative tokens at this position. | description:
22321503| `rules.prefix_rules[].pattern[].token` | `string` | A single literal token at this position. | "Allowed values for `approvals_reviewer`, such as `user` and `auto_review`.",
22331504 },
22341505Key {
22351506 key: "guardian_policy_config",
22361507`allowed_approval_policies` type: "string",
22371508 description:
22381509Type / Values "Managed Markdown policy instructions for automatic review. This takes precedence over local `[auto_review].policy`. Blank values are ignored.",
22391510 },
22401511`array<string>` {
22411512 key: "allowed_sandbox_modes",
22421513Details type: "array<string>",
22431514 description: "Allowed values for `sandbox_mode`.",
22441515Allowed values for `approval_policy` (for example `untrusted`, `on-request`, `never`, and `reject`). },
22451516 {
22461517Key key: "remote_sandbox_config",
22471518 type: "array<table>",
22481519`allowed_sandbox_modes` description:
22491520 "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.",
22501521Type / Values },
22511522 {
22521523`array<string>` key: "remote_sandbox_config[].hostname_patterns",
22531524 type: "array<string>",
22541525Details description:
22551526 "Case-insensitive host name patterns. Supports `*` for any sequence of characters and `?` for one character.",
22561527Allowed values for `sandbox_mode`. },
22571528 {
22581529Key key: "remote_sandbox_config[].allowed_sandbox_modes",
22591530 type: "array<string>",
22601531`allowed_web_search_modes` description:
22611532 "Allowed sandbox modes to apply when this host-specific entry matches.",
22621533Type / Values },
22631534 {
22641535`array<string>` key: "allowed_web_search_modes",
22651536 type: "array<string>",
22661537Details description:
22671538 "Allowed values for `web_search` (`disabled`, `cached`, `live`). `disabled` is always allowed; an empty list effectively allows only `disabled`.",
22681539Allowed values for `web_search` (`disabled`, `cached`, `live`). `disabled` is always allowed; an empty list effectively allows only `disabled`. },
22691540 {
22701541Key key: "features",
22711542 type: "table",
22721543`mcp_servers` description:
22731544 "Pinned feature values keyed by the canonical names from `config.toml`'s `[features]` table.",
22741545Type / Values },
22751546 {
22761547`table` key: "features.<name>",
22771548 type: "boolean",
22781549Details description:
22791550 "Require a specific canonical feature key to stay enabled or disabled.",
22801551Allowlist 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. },
22811552 {
22821553Key key: "features.in_app_browser",
22831554 type: "boolean",
22841555`mcp_servers.<id>.identity` description:
22851556 "Set to `false` in `requirements.toml` to disable the in-app browser pane.",
22861557Type / Values },
22871558 {
22881559`table` key: "features.browser_use",
22891560 type: "boolean",
22901561Details description:
22911562 "Set to `false` in `requirements.toml` to disable Browser Use and Browser Agent availability.",
22921563Identity rule for a single MCP server. Set either `command` (stdio) or `url` (streamable HTTP). },
22931564 {
22941565Key key: "features.computer_use",
22951566 type: "boolean",
22961567`mcp_servers.<id>.identity.command` description:
22971568 "Set to `false` in `requirements.toml` to disable Computer Use availability and related install or enablement flows.",
22981569Type / Values },
22991570 {
23001571`string` key: "experimental_network",
23011572 type: "table",
23021573Details description:
23031574 "Network access requirements enforced from `requirements.toml`. These constraints are separate from `features.network_proxy` and can configure sandboxed networking without the user feature flag.",
23041575Allow an MCP stdio server when its `mcp_servers.<id>.command` matches this command. },
23051576 {
23061577Key key: "experimental_network.enabled",
23071578 type: "boolean",
23081579`mcp_servers.<id>.identity.url` description:
23091580 "Enable sandboxed networking requirements. This does not grant network access when the active sandbox keeps command networking off.",
23101581Type / Values },
23111582 {
23121583`string` key: "experimental_network.http_port",
23131584 type: "integer",
23141585Details description:
23151586 "Loopback HTTP listener port to use for `[experimental_network]` requirements.",
23161587Allow an MCP streamable HTTP server when its `mcp_servers.<id>.url` matches this URL. },
23171588 {
23181589Key key: "experimental_network.socks_port",
23191590 type: "integer",
23201591`rules` description:
23211592 "Loopback SOCKS5 listener port to use for `[experimental_network]` requirements.",
23221593Type / Values },
23231594 {
23241595`table` key: "experimental_network.allow_upstream_proxy",
23251596 type: "boolean",
23261597Details description:
23271598 "Allow sandboxed networking to chain through an upstream proxy from the environment.",
23281599Admin-enforced command rules merged with `.rules` files. Requirements rules must be restrictive. },
23291600 {
23301601Key key: "experimental_network.dangerously_allow_non_loopback_proxy",
23311602 type: "boolean",
23321603`rules.prefix_rules` description:
23331604 "Permit non-loopback listener addresses for `[experimental_network]` requirements. Enabling it can expose listeners beyond localhost.",
23341605Type / Values },
23351606 {
23361607`array<table>` key: "experimental_network.dangerously_allow_all_unix_sockets",
23371608 type: "boolean",
23381609Details description:
23391610 "Permit arbitrary Unix socket destinations instead of allowlist-only access. Use only in tightly controlled environments.",
23401611List of enforced prefix rules. Each rule must include `pattern` and `decision`. },
23411612 {
23421613Key key: "experimental_network.domains",
23431614 type: "map<string, allow | deny>",
23441615`rules.prefix_rules[].decision` description:
23451616 "Map-shaped administrator domain policy for sandboxed networking. Supports exact hosts, `*.example.com` for subdomains only, `**.example.com` for apex plus subdomains, and global `*` allow rules; prefer scoped rules because `*` broadly opens public outbound access. `deny` wins on conflicts. Do not combine this with `experimental_network.allowed_domains` or `experimental_network.denied_domains`.",
23461617Type / Values },
23471618 {
23481619`prompt | forbidden` key: "experimental_network.allowed_domains",
23491620 type: "array<string>",
23501621Details description:
23511622 "List-shaped administrator allow rules for sandboxed networking. Do not combine this with `experimental_network.domains`.",
23521623Required. Requirements rules can only prompt or forbid (not allow). },
23531624 {
23541625Key key: "experimental_network.denied_domains",
23551626 type: "array<string>",
23561627`rules.prefix_rules[].justification` description:
23571628 "List-shaped administrator deny rules for sandboxed networking. Do not combine this with `experimental_network.domains`.",
23581629Type / Values },
23591630 {
23601631`string` key: "experimental_network.managed_allowed_domains_only",
23611632 type: "boolean",
23621633Details description:
23631634 "When `true`, only administrator-managed allow rules remain effective while sandboxed networking requirements are active; user allowlist additions are ignored. Without managed allow rules, user-added domain allow rules do not remain effective.",
23641635Optional non-empty rationale surfaced in approval prompts or rejection messages. },
23651636 {
23661637Key key: "experimental_network.unix_sockets",
23671638 type: "map<string, allow | none>",
23681639`rules.prefix_rules[].pattern` description:
23691640 "Administrator-managed Unix socket policy for sandboxed networking.",
23701641Type / Values },
23711642 {
23721643`array<table>` key: "experimental_network.allow_local_binding",
23731644 type: "boolean",
23741645Details description:
23751646 "Permit broader local/private-network access for sandboxed networking. Exact local IP literal or `localhost` allow rules can still permit specific local targets when this stays `false`.",
23761647Command prefix expressed as pattern tokens. Each token sets either `token` or `any_of`. },
23771648 {
23781649Key key: "hooks",
23791650 type: "table",
23801651`rules.prefix_rules[].pattern[].any_of` description:
23811652 "Admin-enforced managed lifecycle hooks. Requires a managed hook directory and uses the same event schema as inline `[hooks]` in `config.toml`.",
23821653Type / Values },
23831654 {
23841655`array<string>` key: "hooks.managed_dir",
23851656 type: "string (absolute path)",
23861657Details description:
23871658 "Directory containing managed hook scripts on macOS and Linux. Codex validates that it is absolute and exists before loading managed hooks.",
23881659A list of allowed alternative tokens at this position. },
23891660 {
23901661Key key: "hooks.windows_managed_dir",
23911662 type: "string (absolute path)",
23921663`rules.prefix_rules[].pattern[].token` description:
23931664 "Directory containing managed hook scripts on Windows. Codex validates that it is absolute and exists before loading managed hooks.",
23941665Type / Values },
23951666 {
23961667`string` key: "hooks.<Event>",
23971668 type: "array<table>",
23981669Details description:
23991670 "Matcher groups for a hook event such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `SessionStart`, `UserPromptSubmit`, or `Stop`.",
24001671A single literal token at this position. },
24011672 {
24021673Expand to view all key: "hooks.<Event>[].hooks",
1674 type: "array<table>",
1675 description:
1676 "Hook handlers for a matcher group. Command hooks are currently supported; prompt and agent hook handlers are parsed but skipped.",
1677 },
1678 {
1679 key: "permissions.filesystem.deny_read",
1680 type: "array<string>",
1681 description:
1682 "Admin-enforced filesystem read denials. Entries can be paths or glob patterns, and users cannot weaken them with local config.",
1683 },
1684 {
1685 key: "mcp_servers",
1686 type: "table",
1687 description:
1688 "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.",
1689 },
1690 {
1691 key: "mcp_servers.<id>.identity",
1692 type: "table",
1693 description:
1694 "Identity rule for a single MCP server. Set either `command` (stdio) or `url` (streamable HTTP).",
1695 },
1696 {
1697 key: "mcp_servers.<id>.identity.command",
1698 type: "string",
1699 description:
1700 "Allow an MCP stdio server when its `mcp_servers.<id>.command` matches this command.",
1701 },
1702 {
1703 key: "mcp_servers.<id>.identity.url",
1704 type: "string",
1705 description:
1706 "Allow an MCP streamable HTTP server when its `mcp_servers.<id>.url` matches this URL.",
1707 },
1708 {
1709 key: "rules",
1710 type: "table",
1711 description:
1712 "Admin-enforced command rules merged with `.rules` files. Requirements rules must be restrictive.",
1713 },
1714 {
1715 key: "rules.prefix_rules",
1716 type: "array<table>",
1717 description:
1718 "List of enforced prefix rules. Each rule must include `pattern` and `decision`.",
1719 },
1720 {
1721 key: "rules.prefix_rules[].pattern",
1722 type: "array<table>",
1723 description:
1724 "Command prefix expressed as pattern tokens. Each token sets either `token` or `any_of`.",
1725 },
1726 {
1727 key: "rules.prefix_rules[].pattern[].token",
1728 type: "string",
1729 description: "A single literal token at this position.",
1730 },
1731 {
1732 key: "rules.prefix_rules[].pattern[].any_of",
1733 type: "array<string>",
1734 description: "A list of allowed alternative tokens at this position.",
1735 },
1736 {
1737 key: "rules.prefix_rules[].decision",
1738 type: "prompt | forbidden",
1739 description:
1740 "Required. Requirements rules can only prompt or forbid (not allow).",
1741 },
1742 {
1743 key: "rules.prefix_rules[].justification",
1744 type: "string",
1745 description:
1746 "Optional non-empty rationale surfaced in approval prompts or rejection messages.",
1747 },
1748 ]}
1749 client:load
1750/>