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
9For 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).9Project-scoped config can't override machine-local provider, auth,
10 10notification, profile, or telemetry routing keys. Codex ignores
11| Key | Type / Values | Details |11`openai_base_url`, `chatgpt_base_url`, `model_provider`, `model_providers`,
12| --- | --- | --- |12`notify`, `profile`, `profiles`, `experimental_realtime_ws_base_url`, and
13| `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. |13`otel` when they appear in a project-local `.codex/config.toml`; put those in
14| `agents.<name>.description` | `string` | Role guidance shown to Codex when choosing and spawning that agent type. |14user-level config instead.
15| `agents.max_depth` | `number` | Maximum nesting depth allowed for spawned agent threads (root sessions start at depth 0; default: 1). |15
16| `agents.max_threads` | `number` | Maximum number of agent threads that can be open concurrently. |16For 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).
17| `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. |17
18| `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. |18<ConfigTable
19| `approval_policy.reject.mcp_elicitations` | `boolean` | When `true`, MCP elicitation prompts are auto-rejected instead of shown to the user. |19 options={[
20| `approval_policy.reject.rules` | `boolean` | When `true`, approvals triggered by execpolicy `prompt` rules are auto-rejected. |20 {
21| `approval_policy.reject.sandbox_approval` | `boolean` | When `true`, sandbox escalation approval prompts are auto-rejected. |21 key: "model",
22| `apps._default.destructive_enabled` | `boolean` | Default allow/deny for app tools with `destructive_hint = true`. |22 type: "string",
23| `apps._default.enabled` | `boolean` | Default app enabled state for all apps unless overridden per app. |23 description: "Model to use (e.g., `gpt-5.5`).",
24| `apps._default.open_world_enabled` | `boolean` | Default allow/deny for app tools with `open_world_hint = true`. |24 },
25| `apps.<id>.default_tools_approval_mode` | `auto | prompt | approve` | Default approval behavior for tools in this app unless a per-tool override exists. |25 {
26| `apps.<id>.default_tools_enabled` | `boolean` | Default enabled state for tools in this app unless a per-tool override exists. |26 key: "review_model",
27| `apps.<id>.destructive_enabled` | `boolean` | Allow or block tools in this app that advertise `destructive_hint = true`. |27 type: "string",
28| `apps.<id>.enabled` | `boolean` | Enable or disable a specific app/connector by id (default: true). |28 description:
29| `apps.<id>.open_world_enabled` | `boolean` | Allow or block tools in this app that advertise `open_world_hint = true`. |29 "Optional model override used by `/review` (defaults to the current session model).",
30| `apps.<id>.tools.<tool>.approval_mode` | `auto | prompt | approve` | Per-tool approval behavior override for a single app tool. |30 },
31| `apps.<id>.tools.<tool>.enabled` | `boolean` | Per-tool enabled override for an app tool (for example `repos/list`). |31 {
32| `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. |32 key: "model_provider",
33| `chatgpt_base_url` | `string` | Override the base URL used during the ChatGPT login flow. |33 type: "string",
34| `check_for_update_on_startup` | `boolean` | Check for Codex updates on startup (set to false only when updates are centrally managed). |34 description: "Provider id from `model_providers` (default: `openai`).",
35| `cli_auth_credentials_store` | `file | keyring | auto` | Control where the CLI stores cached credentials (file-based auth.json vs OS keychain). |35 },
36| `compact_prompt` | `string` | Inline override for the history compaction prompt. |36 {
37| `developer_instructions` | `string` | Additional developer instructions injected into the session (optional). |37 key: "openai_base_url",
38| `disable_paste_burst` | `boolean` | Disable burst-paste detection in the TUI. |38 type: "string",
39| `experimental_compact_prompt_file` | `string (path)` | Load the compaction prompt override from a file (experimental). |39 description:
40| `experimental_use_freeform_apply_patch` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform` or `codex --enable apply_patch_freeform`. |40 "Base URL override for the built-in `openai` model provider.",
41| `experimental_use_unified_exec_tool` | `boolean` | Legacy name for enabling unified exec; prefer `[features].unified_exec` or `codex --enable unified_exec`. |41 },
42| `features.apply_patch_freeform` | `boolean` | Expose the freeform `apply_patch` tool (experimental). |42 {
43| `features.apps` | `boolean` | Enable ChatGPT Apps/connectors support (experimental). |43 key: "model_context_window",
44| `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). |44 type: "number",
45| `features.child_agents_md` | `boolean` | Append AGENTS.md scope/precedence guidance even when no AGENTS.md is present (experimental). |45 description: "Context window tokens available to the active model.",
46| `features.collaboration_modes` | `boolean` | Enable collaboration modes such as plan mode (stable; on by default). |46 },
47| `features.elevated_windows_sandbox` | `boolean` | Enable the elevated Windows sandbox pipeline (experimental). |47 {
48| `features.experimental_windows_sandbox` | `boolean` | Run the Windows restricted-token sandbox (experimental). |48 key: "model_auto_compact_token_limit",
49| `features.multi_agent` | `boolean` | Enable multi-agent collaboration tools (`spawn\_agent`, `send\_input`, `resume\_agent`, `wait`, and `close\_agent`) (experimental; off by default). |49 type: "number",
50| `features.personality` | `boolean` | Enable personality selection controls (stable; on by default). |50 description:
51| `features.powershell_utf8` | `boolean` | Force PowerShell UTF-8 output (defaults to true). |51 "Token threshold that triggers automatic history compaction (unset uses model defaults).",
52| `features.remote_models` | `boolean` | Refresh remote model list before showing readiness (experimental). |52 },
53| `features.request_rule` | `boolean` | Enable Smart approvals (`prefix_rule` suggestions on escalation requests; stable; on by default). |53 {
54| `features.runtime_metrics` | `boolean` | Show runtime metrics summary in TUI turn separators (experimental). |54 key: "model_catalog_json",
55| `features.search_tool` | `boolean` | Enable `search_tool_bm25` for Apps tool discovery before invoking app MCP tools (experimental). |55 type: "string (path)",
56| `features.shell_snapshot` | `boolean` | Snapshot shell environment to speed up repeated commands (beta). |56 description:
57| `features.shell_tool` | `boolean` | Enable the default `shell` tool for running commands (stable; on by default). |57 "Optional path to a JSON model catalog loaded on startup. Profile-level `profiles.<name>.model_catalog_json` can override this per profile.",
58| `features.unified_exec` | `boolean` | Use the unified PTY-backed exec tool (beta). |58 },
59| `features.use_linux_sandbox_bwrap` | `boolean` | Use the bubblewrap-based Linux sandbox pipeline (experimental; off by default). |59 {
60| `features.web_search` | `boolean` | Deprecated legacy toggle; prefer the top-level `web_search` setting. |60 key: "oss_provider",
61| `features.web_search_cached` | `boolean` | Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "cached"`. |61 type: "lmstudio | ollama",
62| `features.web_search_request` | `boolean` | Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "live"`. |62 description:
63| `feedback.enabled` | `boolean` | Enable feedback submission via `/feedback` across Codex surfaces (default: true). |63 "Default local provider used when running with `--oss` (defaults to prompting if unset).",
64| `file_opener` | `vscode | vscode-insiders | windsurf | cursor | none` | URI scheme used to open citations from Codex output (default: `vscode`). |64 },
65| `forced_chatgpt_workspace_id` | `string (uuid)` | Limit ChatGPT logins to a specific workspace identifier. |65 {
66| `forced_login_method` | `chatgpt | api` | Restrict Codex to a specific authentication method. |66 key: "approval_policy",
67| `hide_agent_reasoning` | `boolean` | Suppress reasoning events in both the TUI and `codex exec` output. |67 type: "untrusted | on-request | never | { granular = { sandbox_approval = bool, rules = bool, mcp_elicitations = bool, request_permissions = bool, skill_approval = bool } }",
68| `history.max_bytes` | `number` | If set, caps the history file size in bytes by dropping oldest entries. |68 description:
69| `history.persistence` | `save-all | none` | Control whether Codex saves session transcripts to history.jsonl. |69 "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.",
70| `include_apply_patch_tool` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`. |70 },
71| `instructions` | `string` | Reserved for future use; prefer `model_instructions_file` or `AGENTS.md`. |71 {
72| `log_dir` | `string (path)` | Directory where Codex writes log files (for example `codex-tui.log`); defaults to `$CODEX_HOME/log`. |72 key: "approval_policy.granular.sandbox_approval",
73| `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. |73 type: "boolean",
74| `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. |74 description:
75| `mcp_oauth_credentials_store` | `auto | file | keyring` | Preferred store for MCP OAuth credentials. |75 "When `true`, sandbox escalation approval prompts are allowed to surface.",
76| `mcp_servers.<id>.args` | `array<string>` | Arguments passed to the MCP stdio server command. |76 },
77| `mcp_servers.<id>.bearer_token_env_var` | `string` | Environment variable sourcing the bearer token for an MCP HTTP server. |77 {
78| `mcp_servers.<id>.command` | `string` | Launcher command for an MCP stdio server. |78 key: "approval_policy.granular.rules",
79| `mcp_servers.<id>.cwd` | `string` | Working directory for the MCP stdio server process. |79 type: "boolean",
80| `mcp_servers.<id>.disabled_tools` | `array<string>` | Deny list applied after `enabled_tools` for the MCP server. |80 description:
81| `mcp_servers.<id>.enabled` | `boolean` | Disable an MCP server without removing its configuration. |81 "When `true`, approvals triggered by execpolicy `prompt` rules are allowed to surface.",
82| `mcp_servers.<id>.enabled_tools` | `array<string>` | Allow list of tool names exposed by the MCP server. |82 },
83| `mcp_servers.<id>.env` | `map<string,string>` | Environment variables forwarded to the MCP stdio server. |83 {
84| `mcp_servers.<id>.env_http_headers` | `map<string,string>` | HTTP headers populated from environment variables for an MCP HTTP server. |84 key: "approval_policy.granular.mcp_elicitations",
85| `mcp_servers.<id>.env_vars` | `array<string>` | Additional environment variables to whitelist for an MCP stdio server. |85 type: "boolean",
86| `mcp_servers.<id>.http_headers` | `map<string,string>` | Static HTTP headers included with each MCP HTTP request. |86 description:
87| `mcp_servers.<id>.required` | `boolean` | When true, fail startup/resume if this enabled MCP server cannot initialize. |87 "When `true`, MCP elicitation prompts are allowed to surface instead of being auto-rejected.",
88| `mcp_servers.<id>.startup_timeout_ms` | `number` | Alias for `startup_timeout_sec` in milliseconds. |88 },
89| `mcp_servers.<id>.startup_timeout_sec` | `number` | Override the default 10s startup timeout for an MCP server. |89 {
90| `mcp_servers.<id>.tool_timeout_sec` | `number` | Override the default 60s per-tool timeout for an MCP server. |90 key: "approval_policy.granular.request_permissions",
91| `mcp_servers.<id>.url` | `string` | Endpoint for an MCP streamable HTTP server. |91 type: "boolean",
92| `model` | `string` | Model to use (e.g., `gpt-5-codex`). |92 description:
93| `model_auto_compact_token_limit` | `number` | Token threshold that triggers automatic history compaction (unset uses model defaults). |93 "When `true`, prompts from the `request_permissions` tool are allowed to surface.",
94| `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. |94 },
95| `model_context_window` | `number` | Context window tokens available to the active model. |95 {
96| `model_instructions_file` | `string (path)` | Replacement for built-in instructions instead of `AGENTS.md`. |96 key: "approval_policy.granular.skill_approval",
97| `model_provider` | `string` | Provider id from `model_providers` (default: `openai`). |97 type: "boolean",
98| `model_providers.<id>.base_url` | `string` | API base URL for the model provider. |98 description:
99| `model_providers.<id>.env_http_headers` | `map<string,string>` | HTTP headers populated from environment variables when present. |99 "When `true`, skill-script approval prompts are allowed to surface.",
100| `model_providers.<id>.env_key` | `string` | Environment variable supplying the provider API key. |100 },
101| `model_providers.<id>.env_key_instructions` | `string` | Optional setup guidance for the provider API key. |101 {
102| `model_providers.<id>.experimental_bearer_token` | `string` | Direct bearer token for the provider (discouraged; use `env_key`). |102 key: "approvals_reviewer",
103| `model_providers.<id>.http_headers` | `map<string,string>` | Static HTTP headers added to provider requests. |103 type: "user | auto_review",
104| `model_providers.<id>.name` | `string` | Display name for a custom model provider. |104 description:
105| `model_providers.<id>.query_params` | `map<string,string>` | Extra query parameters appended to provider requests. |105 "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.",
106| `model_providers.<id>.request_max_retries` | `number` | Retry count for HTTP requests to the provider (default: 4). |106 },
107| `model_providers.<id>.requires_openai_auth` | `boolean` | The provider uses OpenAI authentication (defaults to false). |107 {
108| `model_providers.<id>.stream_idle_timeout_ms` | `number` | Idle timeout for SSE streams in milliseconds (default: 300000). |108 key: "auto_review.policy",
109| `model_providers.<id>.stream_max_retries` | `number` | Retry count for SSE streaming interruptions (default: 5). |109 type: "string",
110| `model_providers.<id>.wire_api` | `chat | responses` | Protocol used by the provider (defaults to `chat` if omitted). |110 description:
111| `model_reasoning_effort` | `minimal | low | medium | high | xhigh` | Adjust reasoning effort for supported models (Responses API only; `xhigh` is model-dependent). |111 "Local Markdown policy instructions for automatic review. Managed `guardian_policy_config` takes precedence. Blank values are ignored.",
112| `model_reasoning_summary` | `auto | concise | detailed | none` | Select reasoning summary detail or disable summaries entirely. |112 },
113| `model_supports_reasoning_summaries` | `boolean` | Force Codex to send or not send reasoning metadata. |113 {
114| `model_verbosity` | `low | medium | high` | Control GPT-5 Responses API verbosity (defaults to `medium`). |114 key: "allow_login_shell",
115| `notice.hide_full_access_warning` | `boolean` | Track acknowledgement of the full access warning prompt. |115 type: "boolean",
116| `notice.hide_gpt-5.1-codex-max_migration_prompt` | `boolean` | Track acknowledgement of the gpt-5.1-codex-max migration prompt. |116 description:
117| `notice.hide_gpt5_1_migration_prompt` | `boolean` | Track acknowledgement of the GPT-5.1 migration prompt. |117 "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.",
118| `notice.hide_rate_limit_model_nudge` | `boolean` | Track opt-out of the rate limit model switch reminder. |118 },
119| `notice.hide_world_writable_warning` | `boolean` | Track acknowledgement of the Windows world-writable directories warning. |119 {
120| `notice.model_migrations` | `map<string,string>` | Track acknowledged model migrations as old->new mappings. |120 key: "sandbox_mode",
121| `notify` | `array<string>` | Command invoked for notifications; receives a JSON payload from Codex. |121 type: "read-only | workspace-write | danger-full-access",
122| `oss_provider` | `lmstudio | ollama` | Default local provider used when running with `--oss` (defaults to prompting if unset). |122 description:
123| `otel.environment` | `string` | Environment tag applied to emitted OpenTelemetry events (default: `dev`). |123 "Sandbox policy for filesystem and network access during command execution.",
124| `otel.exporter` | `none | otlp-http | otlp-grpc` | Select the OpenTelemetry exporter and provide any endpoint metadata. |124 },
125| `otel.exporter.<id>.endpoint` | `string` | Exporter endpoint for OTEL logs. |125 {
126| `otel.exporter.<id>.headers` | `map<string,string>` | Static headers included with OTEL exporter requests. |126 key: "sandbox_workspace_write.writable_roots",
127| `otel.exporter.<id>.protocol` | `binary | json` | Protocol used by the OTLP/HTTP exporter. |127 type: "array<string>",
128| `otel.exporter.<id>.tls.ca-certificate` | `string` | CA certificate path for OTEL exporter TLS. |128 description:
129| `otel.exporter.<id>.tls.client-certificate` | `string` | Client certificate path for OTEL exporter TLS. |129 'Additional writable roots when `sandbox_mode = "workspace-write"`.',
130| `otel.exporter.<id>.tls.client-private-key` | `string` | Client private key path for OTEL exporter TLS. |130 },
131| `otel.log_user_prompt` | `boolean` | Opt in to exporting raw user prompts with OpenTelemetry logs. |131 {
132| `otel.trace_exporter` | `none | otlp-http | otlp-grpc` | Select the OpenTelemetry trace exporter and provide any endpoint metadata. |132 key: "sandbox_workspace_write.network_access",
133| `otel.trace_exporter.<id>.endpoint` | `string` | Trace exporter endpoint for OTEL logs. |133 type: "boolean",
134| `otel.trace_exporter.<id>.headers` | `map<string,string>` | Static headers included with OTEL trace exporter requests. |134 description:
135| `otel.trace_exporter.<id>.protocol` | `binary | json` | Protocol used by the OTLP/HTTP trace exporter. |135 "Allow outbound network access inside the workspace-write sandbox.",
136| `otel.trace_exporter.<id>.tls.ca-certificate` | `string` | CA certificate path for OTEL trace exporter TLS. |136 },
137| `otel.trace_exporter.<id>.tls.client-certificate` | `string` | Client certificate path for OTEL trace exporter TLS. |137 {
138| `otel.trace_exporter.<id>.tls.client-private-key` | `string` | Client private key path for OTEL trace exporter TLS. |138 key: "sandbox_workspace_write.exclude_tmpdir_env_var",
139| `personality` | `none | friendly | pragmatic` | Default communication style for models that advertise `supportsPersonality`; can be overridden per thread/turn or via `/personality`. |139 type: "boolean",
140| `profile` | `string` | Default profile applied at startup (equivalent to `--profile`). |140 description:
141| `profiles.<name>.*` | `various` | Profile-scoped overrides for any of the supported configuration keys. |141 "Exclude `$TMPDIR` from writable roots in workspace-write mode.",
142| `profiles.<name>.experimental_use_freeform_apply_patch` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`. |142 },
143| `profiles.<name>.experimental_use_unified_exec_tool` | `boolean` | Legacy name for enabling unified exec; prefer `[features].unified_exec`. |143 {
144| `profiles.<name>.include_apply_patch_tool` | `boolean` | Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`. |144 key: "sandbox_workspace_write.exclude_slash_tmp",
145| `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). |145 type: "boolean",
146| `profiles.<name>.oss_provider` | `lmstudio | ollama` | Profile-scoped OSS provider for `--oss` sessions. |146 description:
147| `profiles.<name>.personality` | `none | friendly | pragmatic` | Profile-scoped communication style override for supported models. |147 "Exclude `/tmp` from writable roots in workspace-write mode.",
148| `profiles.<name>.web_search` | `disabled | cached | live` | Profile-scoped web search mode override (default: `"cached"`). |148 },
149| `project_doc_fallback_filenames` | `array<string>` | Additional filenames to try when `AGENTS.md` is missing. |149 {
150| `project_doc_max_bytes` | `number` | Maximum bytes read from `AGENTS.md` when building project instructions. |150 key: "windows.sandbox",
151| `project_root_markers` | `array<string>` | List of project root marker filenames; used when searching parent directories for the project root. |151 type: "unelevated | elevated",
152| `projects.<path>.trust_level` | `string` | Mark a project or worktree as trusted or untrusted (`"trusted"` | `"untrusted"`). Untrusted projects skip project-scoped `.codex/` layers. |152 description:
153| `review_model` | `string` | Optional model override used by `/review` (defaults to the current session model). |153 "Windows-only native sandbox mode when running Codex natively on Windows.",
154| `sandbox_mode` | `read-only | workspace-write | danger-full-access` | Sandbox policy for filesystem and network access during command execution. |154 },
155| `sandbox_workspace_write.exclude_slash_tmp` | `boolean` | Exclude `/tmp` from writable roots in workspace-write mode. |155 {
156| `sandbox_workspace_write.exclude_tmpdir_env_var` | `boolean` | Exclude `$TMPDIR` from writable roots in workspace-write mode. |156 key: "windows.sandbox_private_desktop",
157| `sandbox_workspace_write.network_access` | `boolean` | Allow outbound network access inside the workspace-write sandbox. |157 type: "boolean",
158| `sandbox_workspace_write.writable_roots` | `array<string>` | Additional writable roots when `sandbox_mode = "workspace-write"`. |158 description:
159| `shell_environment_policy.exclude` | `array<string>` | Glob patterns for removing environment variables after the defaults. |159 "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.",
160| `shell_environment_policy.experimental_use_profile` | `boolean` | Use the user shell profile when spawning subprocesses. |160 },
161| `shell_environment_policy.ignore_default_excludes` | `boolean` | Keep variables containing KEY/SECRET/TOKEN before other filters run. |161 {
162| `shell_environment_policy.include_only` | `array<string>` | Whitelist of patterns; when set only matching variables are kept. |162 key: "notify",
163| `shell_environment_policy.inherit` | `all | core | none` | Baseline environment inheritance when spawning subprocesses. |163 type: "array<string>",
164| `shell_environment_policy.set` | `map<string,string>` | Explicit environment overrides injected into every subprocess. |164 description:
165| `show_raw_agent_reasoning` | `boolean` | Surface raw reasoning content when the active model emits it. |165 "Command invoked for notifications; receives a JSON payload from Codex.",
166| `skills.config` | `array<object>` | Per-skill enablement overrides stored in config.toml. |166 },
167| `skills.config.<index>.enabled` | `boolean` | Enable or disable the referenced skill. |167 {
168| `skills.config.<index>.path` | `string (path)` | Path to a skill folder containing `SKILL.md`. |168 key: "check_for_update_on_startup",
169| `suppress_unstable_features_warning` | `boolean` | Suppress the warning that appears when under-development feature flags are enabled. |169 type: "boolean",
170| `tool_output_token_limit` | `number` | Token budget for storing individual tool/function outputs in history. |170 description:
171| `tools.web_search` | `boolean` | Deprecated legacy toggle for web search; prefer the top-level `web_search` setting. |171 "Check for Codex updates on startup (set to false only when updates are centrally managed).",
172| `tui` | `table` | TUI-specific options such as enabling inline desktop notifications. |172 },
173| `tui.alternate_screen` | `auto | always | never` | Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback). |173 {
174| `tui.animations` | `boolean` | Enable terminal animations (welcome screen, shimmer, spinner) (default: true). |174 key: "feedback.enabled",
175| `tui.notification_method` | `auto | osc9 | bel` | Notification method for unfocused terminal notifications (default: auto). |175 type: "boolean",
176| `tui.notifications` | `boolean | array<string>` | Enable TUI notifications; optionally restrict to specific event types. |176 description:
177| `tui.show_tooltips` | `boolean` | Show onboarding tooltips in the TUI welcome screen (default: true). |177 "Enable feedback submission via `/feedback` across Codex surfaces (default: true).",
178| `tui.status_line` | `array<string> | null` | Ordered list of TUI footer status-line item identifiers. `null` disables the status line. |178 },
179| `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. |179 {
180| `windows_wsl_setup_acknowledged` | `boolean` | Track Windows onboarding acknowledgement (Windows only). |180 key: "analytics.enabled",
181 181 type: "boolean",
182Key182 description:
183 183 "Enable or disable analytics for this machine/profile. When unset, the client default applies.",
184`agents.<name>.config_file`184 },
185 185 {
186Type / Values186 key: "instructions",
187 187 type: "string",
188`string (path)`188 description:
189 189 "Reserved for future use; prefer `model_instructions_file` or `AGENTS.md`.",
190Details190 },
191 191 {
192Path to a TOML config layer for that role; relative paths resolve from the config file that declares the role.192 key: "developer_instructions",
193 193 type: "string",
194Key194 description:
195 195 "Additional developer instructions injected into the session (optional).",
196`agents.<name>.description`196 },
197 197 {
198Type / Values198 key: "log_dir",
199 199 type: "string (path)",
200`string`200 description:
201 201 "Directory where Codex writes log files (for example `codex-tui.log`); defaults to `$CODEX_HOME/log`.",
202Details202 },
203 203 {
204Role guidance shown to Codex when choosing and spawning that agent type.204 key: "sqlite_home",
205 205 type: "string (path)",
206Key206 description:
207 207 "Directory where Codex stores the SQLite-backed state DB used by agent jobs and other resumable runtime state.",
208`agents.max_depth`208 },
209 209 {
210Type / Values210 key: "compact_prompt",
211 211 type: "string",
212`number`212 description: "Inline override for the history compaction prompt.",
213 213 },
214Details214 {
215 215 key: "commit_attribution",
216Maximum nesting depth allowed for spawned agent threads (root sessions start at depth 0; default: 1).216 type: "string",
217 217 description:
218Key218 'Commit co-author trailer used when `[features].codex_git_commit` is enabled. Defaults to `Codex <noreply@openai.com>`; set `""` to disable.',
219 219 },
220`agents.max_threads`220 {
221 221 key: "model_instructions_file",
222Type / Values222 type: "string (path)",
223 223 description:
224`number`224 "Replacement for built-in instructions instead of `AGENTS.md`.",
225 225 },
226Details226 {
227 227 key: "personality",
228Maximum number of agent threads that can be open concurrently.228 type: "none | friendly | pragmatic",
229 229 description:
230Key230 "Default communication style for models that advertise `supportsPersonality`; can be overridden per thread/turn or via `/personality`.",
231 231 },
232`allow_login_shell`232 {
233 233 key: "service_tier",
234Type / Values234 type: "string",
235 235 description:
236`boolean`236 "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.",
237 237 },
238Details238 {
239 239 key: "experimental_compact_prompt_file",
240Allow 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.240 type: "string (path)",
241 241 description:
242Key242 "Load the compaction prompt override from a file (experimental).",
243 243 },
244`approval_policy`244 {
245 245 key: "skills.config",
246Type / Values246 type: "array<object>",
247 247 description: "Per-skill enablement overrides stored in config.toml.",
248`untrusted | on-request | never | { reject = { sandbox_approval = bool, rules = bool, mcp_elicitations = bool } }`248 },
249 249 {
250Details250 key: "skills.config.<index>.path",
251 251 type: "string (path)",
252Controls 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.252 description: "Path to a skill folder containing `SKILL.md`.",
253 253 },
254Key254 {
255 255 key: "skills.config.<index>.enabled",
256`approval_policy.reject.mcp_elicitations`256 type: "boolean",
257 257 description: "Enable or disable the referenced skill.",
258Type / Values258 },
259 259 {
260`boolean`260 key: "apps.<id>.enabled",
261 261 type: "boolean",
262Details262 description:
263 263 "Enable or disable a specific app/connector by id (default: true).",
264When `true`, MCP elicitation prompts are auto-rejected instead of shown to the user.264 },
265 265 {
266Key266 key: "apps._default.enabled",
267 267 type: "boolean",
268`approval_policy.reject.rules`268 description:
269 269 "Default app enabled state for all apps unless overridden per app.",
270Type / Values270 },
271 271 {
272`boolean`272 key: "apps._default.destructive_enabled",
273 273 type: "boolean",
274Details274 description:
275 275 "Default allow/deny for app tools with `destructive_hint = true`.",
276When `true`, approvals triggered by execpolicy `prompt` rules are auto-rejected.276 },
277 277 {
278Key278 key: "apps._default.open_world_enabled",
279 279 type: "boolean",
280`approval_policy.reject.sandbox_approval`280 description:
281 281 "Default allow/deny for app tools with `open_world_hint = true`.",
282Type / Values282 },
283 283 {
284`boolean`284 key: "apps.<id>.destructive_enabled",
285 285 type: "boolean",
286Details286 description:
287 287 "Allow or block tools in this app that advertise `destructive_hint = true`.",
288When `true`, sandbox escalation approval prompts are auto-rejected.288 },
289 289 {
290Key290 key: "apps.<id>.open_world_enabled",
291 291 type: "boolean",
292`apps._default.destructive_enabled`292 description:
293 293 "Allow or block tools in this app that advertise `open_world_hint = true`.",
294Type / Values294 },
295 295 {
296`boolean`296 key: "apps.<id>.default_tools_enabled",
297 297 type: "boolean",
298Details298 description:
299 299 "Default enabled state for tools in this app unless a per-tool override exists.",
300Default allow/deny for app tools with `destructive_hint = true`.300 },
301 301 {
302Key302 key: "apps.<id>.default_tools_approval_mode",
303 303 type: "auto | prompt | approve",
304`apps._default.enabled`304 description:
305 305 "Default approval behavior for tools in this app unless a per-tool override exists.",
306Type / Values306 },
307 307 {
308`boolean`308 key: "apps.<id>.tools.<tool>.enabled",
309 309 type: "boolean",
310Details310 description:
311 311 "Per-tool enabled override for an app tool (for example `repos/list`).",
312Default app enabled state for all apps unless overridden per app.312 },
313 313 {
314Key314 key: "apps.<id>.tools.<tool>.approval_mode",
315 315 type: "auto | prompt | approve",
316`apps._default.open_world_enabled`316 description: "Per-tool approval behavior override for a single app tool.",
317 317 },
318Type / Values318 {
319 319 key: "tool_suggest.discoverables",
320`boolean`320 type: "array<table>",
321 321 description:
322Details322 'Allow tool suggestions for additional discoverable connectors or plugins. Each entry uses `type = "connector"` or `"plugin"` and an `id`.',
323 323 },
324Default allow/deny for app tools with `open_world_hint = true`.324 {
325 325 key: "tool_suggest.disabled_tools",
326Key326 type: "array<table>",
327 327 description:
328`apps.<id>.default_tools_approval_mode`328 'Disable suggestions for specific discoverable connectors or plugins. Each entry uses `type = "connector"` or `"plugin"` and an `id`.',
329 329 },
330Type / Values330 {
331 331 key: "features.apps",
332`auto | prompt | approve`332 type: "boolean",
333 333 description: "Enable ChatGPT Apps/connectors support (experimental).",
334Details334 },
335 335 {
336Default approval behavior for tools in this app unless a per-tool override exists.336 key: "features.hooks",
337 337 type: "boolean",
338Key338 description:
339 339 "Enable lifecycle hooks loaded from `hooks.json` or inline `[hooks]` config. `features.codex_hooks` is a deprecated alias.",
340`apps.<id>.default_tools_enabled`340 },
341 341 {
342Type / Values342 key: "features.codex_git_commit",
343 343 type: "boolean",
344`boolean`344 description:
345 345 "Enable Codex-generated git commits. When enabled, Codex uses `commit_attribution` to append a `Co-authored-by:` trailer to generated commit messages.",
346Details346 },
347 347 {
348Default enabled state for tools in this app unless a per-tool override exists.348 key: "hooks",
349 349 type: "table",
350Key350 description:
351 351 "Lifecycle hooks configured inline in `config.toml`. Uses the same event schema as `hooks.json`; see the Hooks guide for examples and supported events.",
352`apps.<id>.destructive_enabled`352 },
353 353 {
354Type / Values354 key: "features.plugin_hooks",
355 355 type: "boolean",
356`boolean`356 description:
357 357 "Opt into lifecycle hooks bundled with enabled plugins. Off by default in this release; set to `true` to opt in.",
358Details358 },
359 359 {
360Allow or block tools in this app that advertise `destructive_hint = true`.360 key: "features.memories",
361 361 type: "boolean",
362Key362 description: "Enable [Memories](https://developers.openai.com/codex/memories) (off by default).",
363 363 },
364`apps.<id>.enabled`364 {
365 365 key: "mcp_servers.<id>.command",
366Type / Values366 type: "string",
367 367 description: "Launcher command for an MCP stdio server.",
368`boolean`368 },
369 369 {
370Details370 key: "mcp_servers.<id>.args",
371 371 type: "array<string>",
372Enable or disable a specific app/connector by id (default: true).372 description: "Arguments passed to the MCP stdio server command.",
373 373 },
374Key374 {
375 375 key: "mcp_servers.<id>.env",
376`apps.<id>.open_world_enabled`376 type: "map<string,string>",
377 377 description: "Environment variables forwarded to the MCP stdio server.",
378Type / Values378 },
379 379 {
380`boolean`380 key: "mcp_servers.<id>.env_vars",
381 381 type: 'array<string | { name = string, source = "local" | "remote" }>',
382Details382 description:
383 383 '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.',
384Allow or block tools in this app that advertise `open_world_hint = true`.384 },
385 385 {
386Key386 key: "mcp_servers.<id>.cwd",
387 387 type: "string",
388`apps.<id>.tools.<tool>.approval_mode`388 description: "Working directory for the MCP stdio server process.",
389 389 },
390Type / Values390 {
391 391 key: "mcp_servers.<id>.url",
392`auto | prompt | approve`392 type: "string",
393 393 description: "Endpoint for an MCP streamable HTTP server.",
394Details394 },
395 395 {
396Per-tool approval behavior override for a single app tool.396 key: "mcp_servers.<id>.bearer_token_env_var",
397 397 type: "string",
398Key398 description:
399 399 "Environment variable sourcing the bearer token for an MCP HTTP server.",
400`apps.<id>.tools.<tool>.enabled`400 },
401 401 {
402Type / Values402 key: "mcp_servers.<id>.http_headers",
403 403 type: "map<string,string>",
404`boolean`404 description: "Static HTTP headers included with each MCP HTTP request.",
405 405 },
406Details406 {
407 407 key: "mcp_servers.<id>.env_http_headers",
408Per-tool enabled override for an app tool (for example `repos/list`).408 type: "map<string,string>",
409 409 description:
410Key410 "HTTP headers populated from environment variables for an MCP HTTP server.",
411 411 },
412`background_terminal_max_timeout`412 {
413 413 key: "mcp_servers.<id>.enabled",
414Type / Values414 type: "boolean",
415 415 description: "Disable an MCP server without removing its configuration.",
416`number`416 },
417 417 {
418Details418 key: "mcp_servers.<id>.required",
419 419 type: "boolean",
420Maximum poll window in milliseconds for empty `write_stdin` polls (background terminal polling). Default: `300000` (5 minutes). Replaces the older `background_terminal_timeout` key.420 description:
421 421 "When true, fail startup/resume if this enabled MCP server cannot initialize.",
422Key422 },
423 423 {
424`chatgpt_base_url`424 key: "mcp_servers.<id>.startup_timeout_sec",
425 425 type: "number",
426Type / Values426 description:
427 427 "Override the default 10s startup timeout for an MCP server.",
428`string`428 },
429 429 {
430Details430 key: "mcp_servers.<id>.startup_timeout_ms",
431 431 type: "number",
432Override the base URL used during the ChatGPT login flow.432 description: "Alias for `startup_timeout_sec` in milliseconds.",
433 433 },
434Key434 {
435 435 key: "mcp_servers.<id>.tool_timeout_sec",
436`check_for_update_on_startup`436 type: "number",
437 437 description:
438Type / Values438 "Override the default 60s per-tool timeout for an MCP server.",
439 439 },
440`boolean`440 {
441 441 key: "mcp_servers.<id>.enabled_tools",
442Details442 type: "array<string>",
443 443 description: "Allow list of tool names exposed by the MCP server.",
444Check for Codex updates on startup (set to false only when updates are centrally managed).444 },
445 445 {
446Key446 key: "mcp_servers.<id>.disabled_tools",
447 447 type: "array<string>",
448`cli_auth_credentials_store`448 description:
449 449 "Deny list applied after `enabled_tools` for the MCP server.",
450Type / Values450 },
451 451 {
452`file | keyring | auto`452 key: "mcp_servers.<id>.default_tools_approval_mode",
453 453 type: "auto | prompt | approve",
454Details454 description:
455 455 "Default approval behavior for MCP tools on this server unless a per-tool override exists.",
456Control where the CLI stores cached credentials (file-based auth.json vs OS keychain).456 },
457 457 {
458Key458 key: "mcp_servers.<id>.tools.<tool>.approval_mode",
459 459 type: "auto | prompt | approve",
460`compact_prompt`460 description:
461 461 "Per-tool approval behavior override for one MCP tool on this server.",
462Type / Values462 },
463 463 {
464`string`464 key: "mcp_servers.<id>.scopes",
465 465 type: "array<string>",
466Details466 description:
467 467 "OAuth scopes to request when authenticating to that MCP server.",
468Inline override for the history compaction prompt.468 },
469 469 {
470Key470 key: "mcp_servers.<id>.oauth_resource",
471 471 type: "string",
472`developer_instructions`472 description:
473 473 "Optional RFC 8707 OAuth resource parameter to include during MCP login.",
474Type / Values474 },
475 475 {
476`string`476 key: "mcp_servers.<id>.experimental_environment",
477 477 type: "local | remote",
478Details478 description:
479 479 "Experimental placement for an MCP server. `remote` starts stdio servers through a remote executor environment; streamable HTTP remote placement is not implemented.",
480Additional developer instructions injected into the session (optional).480 },
481 481 {
482Key482 key: "agents.max_threads",
483 483 type: "number",
484`disable_paste_burst`484 description:
485 485 "Maximum number of agent threads that can be open concurrently. Defaults to `6` when unset.",
486Type / Values486 },
487 487 {
488`boolean`488 key: "agents.max_depth",
489 489 type: "number",
490Details490 description:
491 491 "Maximum nesting depth allowed for spawned agent threads (root sessions start at depth 0; default: 1).",
492Disable burst-paste detection in the TUI.492 },
493 493 {
494Key494 key: "agents.job_max_runtime_seconds",
495 495 type: "number",
496`experimental_compact_prompt_file`496 description:
497 497 "Default per-worker timeout for `spawn_agents_on_csv` jobs. When unset, the tool falls back to 1800 seconds per worker.",
498Type / Values498 },
499 499 {
500`string (path)`500 key: "agents.<name>.description",
501 501 type: "string",
502Details502 description:
503 503 "Role guidance shown to Codex when choosing and spawning that agent type.",
504Load the compaction prompt override from a file (experimental).504 },
505 505 {
506Key506 key: "agents.<name>.config_file",
507 507 type: "string (path)",
508`experimental_use_freeform_apply_patch`508 description:
509 509 "Path to a TOML config layer for that role; relative paths resolve from the config file that declares the role.",
510Type / Values510 },
511 511 {
512`boolean`512 key: "agents.<name>.nickname_candidates",
513 513 type: "array<string>",
514Details514 description:
515 515 "Optional pool of display nicknames for spawned agents in that role.",
516Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform` or `codex --enable apply_patch_freeform`.516 },
517 517 {
518Key518 key: "memories.generate_memories",
519 519 type: "boolean",
520`experimental_use_unified_exec_tool`520 description:
521 521 "When `false`, newly created threads are not stored as memory-generation inputs. Defaults to `true`.",
522Type / Values522 },
523 523 {
524`boolean`524 key: "memories.use_memories",
525 525 type: "boolean",
526Details526 description:
527 527 "When `false`, Codex skips injecting existing memories into future sessions. Defaults to `true`.",
528Legacy name for enabling unified exec; prefer `[features].unified_exec` or `codex --enable unified_exec`.528 },
529 529 {
530Key530 key: "memories.disable_on_external_context",
531 531 type: "boolean",
532`features.apply_patch_freeform`532 description:
533 533 "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`.",
534Type / Values534 },
535 535 {
536`boolean`536 key: "memories.max_raw_memories_for_consolidation",
537 537 type: "number",
538Details538 description:
539 539 "Maximum recent raw memories retained for global consolidation. Defaults to `256` and is capped at `4096`.",
540Expose the freeform `apply_patch` tool (experimental).540 },
541 541 {
542Key542 key: "memories.max_unused_days",
543 543 type: "number",
544`features.apps`544 description:
545 545 "Maximum days since a memory was last used before it becomes ineligible for consolidation. Defaults to `30` and is clamped to `0`-`365`.",
546Type / Values546 },
547 547 {
548`boolean`548 key: "memories.max_rollout_age_days",
549 549 type: "number",
550Details550 description:
551 551 "Maximum age of threads considered for memory generation. Defaults to `30` and is clamped to `0`-`90`.",
552Enable ChatGPT Apps/connectors support (experimental).552 },
553 553 {
554Key554 key: "memories.max_rollouts_per_startup",
555 555 type: "number",
556`features.apps_mcp_gateway`556 description:
557 557 "Maximum rollout candidates processed per startup pass. Defaults to `16` and is capped at `128`.",
558Type / Values558 },
559 559 {
560`boolean`560 key: "memories.min_rollout_idle_hours",
561 561 type: "number",
562Details562 description:
563 563 "Minimum idle time before a thread is considered for memory generation. Defaults to `6` and is clamped to `1`-`48`.",
564Route Apps MCP calls through the OpenAI connectors MCP gateway (`https://api.openai.com/v1/connectors/mcp/`) instead of legacy routing (experimental).564 },
565 565 {
566Key566 key: "memories.min_rate_limit_remaining_percent",
567 567 type: "number",
568`features.child_agents_md`568 description:
569 569 "Minimum remaining percentage required in Codex rate-limit windows before memory generation starts. Defaults to `25` and is clamped to `0`-`100`.",
570Type / Values570 },
571 571 {
572`boolean`572 key: "memories.extract_model",
573 573 type: "string",
574Details574 description: "Optional model override for per-thread memory extraction.",
575 575 },
576Append AGENTS.md scope/precedence guidance even when no AGENTS.md is present (experimental).576 {
577 577 key: "memories.consolidation_model",
578Key578 type: "string",
579 579 description: "Optional model override for global memory consolidation.",
580`features.collaboration_modes`580 },
581 581 {
582Type / Values582 key: "features.unified_exec",
583 583 type: "boolean",
584`boolean`584 description:
585 585 "Use the unified PTY-backed exec tool (stable; enabled by default except on Windows).",
586Details586 },
587 587 {
588Enable collaboration modes such as plan mode (stable; on by default).588 key: "features.shell_snapshot",
589 589 type: "boolean",
590Key590 description:
591 591 "Snapshot shell environment to speed up repeated commands (stable; on by default).",
592`features.elevated_windows_sandbox`592 },
593 593 {
594Type / Values594 key: "features.undo",
595 595 type: "boolean",
596`boolean`596 description: "Enable undo support (stable; off by default).",
597 597 },
598Details598 {
599 599 key: "features.multi_agent",
600Enable the elevated Windows sandbox pipeline (experimental).600 type: "boolean",
601 601 description:
602Key602 "Enable multi-agent collaboration tools (`spawn_agent`, `send_input`, `resume_agent`, `wait_agent`, and `close_agent`) (stable; on by default).",
603 603 },
604`features.experimental_windows_sandbox`604 {
605 605 key: "features.personality",
606Type / Values606 type: "boolean",
607 607 description:
608`boolean`608 "Enable personality selection controls (stable; on by default).",
609 609 },
610Details610 {
611 611 key: "features.network_proxy",
612Run the Windows restricted-token sandbox (experimental).612 type: "boolean | table",
613 613 description:
614Key614 "Enable sandboxed networking. Use a table form when setting network policy options such as `domains` (experimental; off by default).",
615 615 },
616`features.multi_agent`616 {
617 617 key: "features.network_proxy.enabled",
618Type / Values618 type: "boolean",
619 619 description: "Enable sandboxed networking. Defaults to `false`.",
620`boolean`620 },
621 621 {
622Details622 key: "features.network_proxy.domains",
623 623 type: "map<string, allow | deny>",
624Enable multi-agent collaboration tools (`spawn\_agent`, `send\_input`, `resume\_agent`, `wait`, and `close\_agent`) (experimental; off by default).624 description:
625 625 "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.",
626Key626 },
627 627 {
628`features.personality`628 key: "features.network_proxy.unix_sockets",
629 629 type: "map<string, allow | none>",
630Type / Values630 description:
631 631 "Unix socket policy for sandboxed networking. Unset by default; add `allow` entries for permitted sockets.",
632`boolean`632 },
633 633 {
634Details634 key: "features.network_proxy.allow_local_binding",
635 635 type: "boolean",
636Enable personality selection controls (stable; on by default).636 description:
637 637 "Allow broader local/private-network access. Defaults to `false`; exact local IP literal or `localhost` allow rules can still permit specific local targets.",
638Key638 },
639 639 {
640`features.powershell_utf8`640 key: "features.network_proxy.enable_socks5",
641 641 type: "boolean",
642Type / Values642 description: "Expose SOCKS5 support. Defaults to `true`.",
643 643 },
644`boolean`644 {
645 645 key: "features.network_proxy.enable_socks5_udp",
646Details646 type: "boolean",
647 647 description: "Allow UDP over SOCKS5. Defaults to `true`.",
648Force PowerShell UTF-8 output (defaults to true).648 },
649 649 {
650Key650 key: "features.network_proxy.allow_upstream_proxy",
651 651 type: "boolean",
652`features.remote_models`652 description:
653 653 "Allow chaining through an upstream proxy from the environment. Defaults to `true`.",
654Type / Values654 },
655 655 {
656`boolean`656 key: "features.network_proxy.dangerously_allow_non_loopback_proxy",
657 657 type: "boolean",
658Details658 description:
659 659 "Permit non-loopback listener addresses. Defaults to `false`; enabling it can expose proxy listeners beyond localhost.",
660Refresh remote model list before showing readiness (experimental).660 },
661 661 {
662Key662 key: "features.network_proxy.dangerously_allow_all_unix_sockets",
663 663 type: "boolean",
664`features.request_rule`664 description:
665 665 "Permit arbitrary Unix socket destinations instead of allowlist-only access. Defaults to `false`; use only in tightly controlled environments.",
666Type / Values666 },
667 667 {
668`boolean`668 key: "features.network_proxy.proxy_url",
669 669 type: "string",
670Details670 description:
671 671 'HTTP listener URL for sandboxed networking. Defaults to `"http://127.0.0.1:3128"`.',
672Enable Smart approvals (`prefix_rule` suggestions on escalation requests; stable; on by default).672 },
673 673 {
674Key674 key: "features.network_proxy.socks_url",
675 675 type: "string",
676`features.runtime_metrics`676 description:
677 677 'SOCKS5 listener URL. Defaults to `"http://127.0.0.1:8081"`.',
678Type / Values678 },
679 679 {
680`boolean`680 key: "features.web_search",
681 681 type: "boolean",
682Details682 description:
683 683 "Deprecated legacy toggle; prefer the top-level `web_search` setting.",
684Show runtime metrics summary in TUI turn separators (experimental).684 },
685 685 {
686Key686 key: "features.web_search_cached",
687 687 type: "boolean",
688`features.search_tool`688 description:
689 689 'Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "cached"`.',
690Type / Values690 },
691 691 {
692`boolean`692 key: "features.web_search_request",
693 693 type: "boolean",
694Details694 description:
695 695 'Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "live"`.',
696Enable `search_tool_bm25` for Apps tool discovery before invoking app MCP tools (experimental).696 },
697 697 {
698Key698 key: "features.shell_tool",
699 699 type: "boolean",
700`features.shell_snapshot`700 description:
701 701 "Enable the default `shell` tool for running commands (stable; on by default).",
702Type / Values702 },
703 703 {
704`boolean`704 key: "features.enable_request_compression",
705 705 type: "boolean",
706Details706 description:
707 707 "Compress streaming request bodies with zstd when supported (stable; on by default).",
708Snapshot shell environment to speed up repeated commands (beta).708 },
709 709 {
710Key710 key: "features.skill_mcp_dependency_install",
711 711 type: "boolean",
712`features.shell_tool`712 description:
713 713 "Allow prompting and installing missing MCP dependencies for skills (stable; on by default).",
714Type / Values714 },
715 715 {
716`boolean`716 key: "features.fast_mode",
717 717 type: "boolean",
718Details718 description:
719 719 "Enable model-catalog service tier selection in the TUI, including Fast-tier commands when the active model advertises them (stable; on by default).",
720Enable the default `shell` tool for running commands (stable; on by default).720 },
721 721 {
722Key722 key: "features.prevent_idle_sleep",
723 723 type: "boolean",
724`features.unified_exec`724 description:
725 725 "Prevent the machine from sleeping while a turn is actively running (experimental; off by default).",
726Type / Values726 },
727 727 {
728`boolean`728 key: "suppress_unstable_features_warning",
729 729 type: "boolean",
730Details730 description:
731 731 "Suppress the warning that appears when under-development feature flags are enabled.",
732Use the unified PTY-backed exec tool (beta).732 },
733 733 {
734Key734 key: "model_providers.<id>",
735 735 type: "table",
736`features.use_linux_sandbox_bwrap`736 description:
737 737 "Custom provider definition. Built-in provider IDs (`openai`, `ollama`, and `lmstudio`) are reserved and cannot be overridden.",
738Type / Values738 },
739 739 {
740`boolean`740 key: "model_providers.<id>.name",
741 741 type: "string",
742Details742 description: "Display name for a custom model provider.",
743 743 },
744Use the bubblewrap-based Linux sandbox pipeline (experimental; off by default).744 {
745 745 key: "model_providers.<id>.base_url",
746Key746 type: "string",
747 747 description: "API base URL for the model provider.",
748`features.web_search`748 },
749 749 {
750Type / Values750 key: "model_providers.<id>.env_key",
751 751 type: "string",
752`boolean`752 description: "Environment variable supplying the provider API key.",
753 753 },
754Details754 {
755 755 key: "model_providers.<id>.env_key_instructions",
756Deprecated legacy toggle; prefer the top-level `web_search` setting.756 type: "string",
757 757 description: "Optional setup guidance for the provider API key.",
758Key758 },
759 759 {
760`features.web_search_cached`760 key: "model_providers.<id>.experimental_bearer_token",
761 761 type: "string",
762Type / Values762 description:
763 763 "Direct bearer token for the provider (discouraged; use `env_key`).",
764`boolean`764 },
765 765 {
766Details766 key: "model_providers.<id>.requires_openai_auth",
767 767 type: "boolean",
768Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "cached"`.768 description:
769 769 "The provider uses OpenAI authentication (defaults to false).",
770Key770 },
771 771 {
772`features.web_search_request`772 key: "model_providers.<id>.wire_api",
773 773 type: "responses",
774Type / Values774 description:
775 775 "Protocol used by the provider. `responses` is the only supported value, and it is the default when omitted.",
776`boolean`776 },
777 777 {
778Details778 key: "model_providers.<id>.query_params",
779 779 type: "map<string,string>",
780Deprecated legacy toggle. When `web_search` is unset, true maps to `web_search = "live"`.780 description: "Extra query parameters appended to provider requests.",
781 781 },
782Key782 {
783 783 key: "model_providers.<id>.http_headers",
784`feedback.enabled`784 type: "map<string,string>",
785 785 description: "Static HTTP headers added to provider requests.",
786Type / Values786 },
787 787 {
788`boolean`788 key: "model_providers.<id>.env_http_headers",
789 789 type: "map<string,string>",
790Details790 description:
791 791 "HTTP headers populated from environment variables when present.",
792Enable feedback submission via `/feedback` across Codex surfaces (default: true).792 },
793 793 {
794Key794 key: "model_providers.<id>.request_max_retries",
795 795 type: "number",
796`file_opener`796 description:
797 797 "Retry count for HTTP requests to the provider (default: 4).",
798Type / Values798 },
799 799 {
800`vscode | vscode-insiders | windsurf | cursor | none`800 key: "model_providers.<id>.stream_max_retries",
801 801 type: "number",
802Details802 description: "Retry count for SSE streaming interruptions (default: 5).",
803 803 },
804URI scheme used to open citations from Codex output (default: `vscode`).804 {
805 805 key: "model_providers.<id>.stream_idle_timeout_ms",
806Key806 type: "number",
807 807 description:
808`forced_chatgpt_workspace_id`808 "Idle timeout for SSE streams in milliseconds (default: 300000).",
809 809 },
810Type / Values810 {
811 811 key: "model_providers.<id>.supports_websockets",
812`string (uuid)`812 type: "boolean",
813 813 description:
814Details814 "Whether that provider supports the Responses API WebSocket transport.",
815 815 },
816Limit ChatGPT logins to a specific workspace identifier.816 {
817 817 key: "model_providers.<id>.auth",
818Key818 type: "table",
819 819 description:
820`forced_login_method`820 "Command-backed bearer token configuration for a custom provider. Do not combine with `env_key`, `experimental_bearer_token`, or `requires_openai_auth`.",
821 821 },
822Type / Values822 {
823 823 key: "model_providers.<id>.auth.command",
824`chatgpt | api`824 type: "string",
825 825 description:
826Details826 "Command to run when Codex needs a bearer token. The command must print the token to stdout.",
827 827 },
828Restrict Codex to a specific authentication method.828 {
829 829 key: "model_providers.<id>.auth.args",
830Key830 type: "array<string>",
831 831 description: "Arguments passed to the token command.",
832`hide_agent_reasoning`832 },
833 833 {
834Type / Values834 key: "model_providers.<id>.auth.timeout_ms",
835 835 type: "number",
836`boolean`836 description:
837 837 "Maximum token command runtime in milliseconds (default: 5000).",
838Details838 },
839 839 {
840Suppress reasoning events in both the TUI and `codex exec` output.840 key: "model_providers.<id>.auth.refresh_interval_ms",
841 841 type: "number",
842Key842 description:
843 843 "How often Codex proactively refreshes the token in milliseconds (default: 300000). Set to `0` to refresh only after an authentication retry.",
844`history.max_bytes`844 },
845 845 {
846Type / Values846 key: "model_providers.<id>.auth.cwd",
847 847 type: "string (path)",
848`number`848 description: "Working directory for the token command.",
849 849 },
850Details850 {
851 851 key: "model_providers.amazon-bedrock.aws.profile",
852If set, caps the history file size in bytes by dropping oldest entries.852 type: "string",
853 853 description:
854Key854 "AWS profile name used by the built-in `amazon-bedrock` provider.",
855 855 },
856`history.persistence`856 {
857 857 key: "model_providers.amazon-bedrock.aws.region",
858Type / Values858 type: "string",
859 859 description: "AWS region used by the built-in `amazon-bedrock` provider.",
860`save-all | none`860 },
861 861 {
862Details862 key: "model_reasoning_effort",
863 863 type: "minimal | low | medium | high | xhigh",
864Control whether Codex saves session transcripts to history.jsonl.864 description:
865 865 "Adjust reasoning effort for supported models (Responses API only; `xhigh` is model-dependent).",
866Key866 },
867 867 {
868`include_apply_patch_tool`868 key: "plan_mode_reasoning_effort",
869 869 type: "none | minimal | low | medium | high | xhigh",
870Type / Values870 description:
871 871 "Plan-mode-specific reasoning override. When unset, Plan mode uses its built-in preset default.",
872`boolean`872 },
873 873 {
874Details874 key: "model_reasoning_summary",
875 875 type: "auto | concise | detailed | none",
876Legacy name for enabling freeform apply\_patch; prefer `[features].apply_patch_freeform`.876 description:
877 877 "Select reasoning summary detail or disable summaries entirely.",
878Key878 },
879 879 {
880`instructions`880 key: "model_verbosity",
881 881 type: "low | medium | high",
882Type / Values882 description:
883 883 "Optional GPT-5 Responses API verbosity override; when unset, the selected model/preset default is used.",
884`string`884 },
885 885 {
886Details886 key: "model_supports_reasoning_summaries",
887 887 type: "boolean",
888Reserved for future use; prefer `model_instructions_file` or `AGENTS.md`.888 description: "Force Codex to send or not send reasoning metadata.",
889 889 },
890Key890 {
891 891 key: "shell_environment_policy.inherit",
892`log_dir`892 type: "all | core | none",
893 893 description:
894Type / Values894 "Baseline environment inheritance when spawning subprocesses.",
895 895 },
896`string (path)`896 {
897 897 key: "shell_environment_policy.ignore_default_excludes",
898Details898 type: "boolean",
899 899 description:
900Directory where Codex writes log files (for example `codex-tui.log`); defaults to `$CODEX_HOME/log`.900 "Keep variables containing KEY/SECRET/TOKEN before other filters run.",
901 901 },
902Key902 {
903 903 key: "shell_environment_policy.exclude",
904`mcp_oauth_callback_port`904 type: "array<string>",
905 905 description:
906Type / Values906 "Glob patterns for removing environment variables after the defaults.",
907 907 },
908`integer`908 {
909 909 key: "shell_environment_policy.include_only",
910Details910 type: "array<string>",
911 911 description:
912Optional 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.912 "Whitelist of patterns; when set only matching variables are kept.",
913 913 },
914Key914 {
915 915 key: "shell_environment_policy.set",
916`mcp_oauth_callback_url`916 type: "map<string,string>",
917 917 description:
918Type / Values918 "Explicit environment overrides injected into every subprocess.",
919 919 },
920`string`920 {
921 921 key: "shell_environment_policy.experimental_use_profile",
922Details922 type: "boolean",
923 923 description: "Use the user shell profile when spawning subprocesses.",
924Optional redirect URI override for MCP OAuth login (for example, a devbox ingress URL). `mcp_oauth_callback_port` still controls the callback listener port.924 },
925 925 {
926Key926 key: "project_root_markers",
927 927 type: "array<string>",
928`mcp_oauth_credentials_store`928 description:
929 929 "List of project root marker filenames; used when searching parent directories for the project root.",
930Type / Values930 },
931 931 {
932`auto | file | keyring`932 key: "project_doc_max_bytes",
933 933 type: "number",
934Details934 description:
935 935 "Maximum bytes read from `AGENTS.md` when building project instructions.",
936Preferred store for MCP OAuth credentials.936 },
937 937 {
938Key938 key: "project_doc_fallback_filenames",
939 939 type: "array<string>",
940`mcp_servers.<id>.args`940 description: "Additional filenames to try when `AGENTS.md` is missing.",
941 941 },
942Type / Values942 {
943 943 key: "profile",
944`array<string>`944 type: "string",
945 945 description:
946Details946 "Default profile applied at startup (equivalent to `--profile`).",
947 947 },
948Arguments passed to the MCP stdio server command.948 {
949 949 key: "profiles.<name>.*",
950Key950 type: "various",
951 951 description:
952`mcp_servers.<id>.bearer_token_env_var`952 "Profile-scoped overrides for any of the supported configuration keys.",
953 953 },
954Type / Values954 {
955 955 key: "profiles.<name>.service_tier",
956`string`956 type: "string",
957 957 description: "Profile-scoped service tier preference for new turns.",
958Details958 },
959 959 {
960Environment variable sourcing the bearer token for an MCP HTTP server.960 key: "profiles.<name>.plan_mode_reasoning_effort",
961 961 type: "none | minimal | low | medium | high | xhigh",
962Key962 description: "Profile-scoped Plan-mode reasoning override.",
963 963 },
964`mcp_servers.<id>.command`964 {
965 965 key: "profiles.<name>.web_search",
966Type / Values966 type: "disabled | cached | live",
967 967 description:
968`string`968 'Profile-scoped web search mode override (default: `"cached"`).',
969 969 },
970Details970 {
971 971 key: "profiles.<name>.personality",
972Launcher command for an MCP stdio server.972 type: "none | friendly | pragmatic",
973 973 description:
974Key974 "Profile-scoped communication style override for supported models.",
975 975 },
976`mcp_servers.<id>.cwd`976 {
977 977 key: "profiles.<name>.model_catalog_json",
978Type / Values978 type: "string (path)",
979 979 description:
980`string`980 "Profile-scoped model catalog JSON path override (applied on startup only; overrides the top-level `model_catalog_json` for that profile).",
981 981 },
982Details982 {
983 983 key: "profiles.<name>.model_instructions_file",
984Working directory for the MCP stdio server process.984 type: "string (path)",
985 985 description:
986Key986 "Profile-scoped replacement for the built-in instruction file.",
987 987 },
988`mcp_servers.<id>.disabled_tools`988 {
989 989 key: "profiles.<name>.experimental_use_unified_exec_tool",
990Type / Values990 type: "boolean",
991 991 description:
992`array<string>`992 "Legacy name for enabling unified exec; prefer `[features].unified_exec`.",
993 993 },
994Details994 {
995 995 key: "profiles.<name>.oss_provider",
996Deny list applied after `enabled_tools` for the MCP server.996 type: "lmstudio | ollama",
997 997 description: "Profile-scoped OSS provider for `--oss` sessions.",
998Key998 },
999 999 {
1000`mcp_servers.<id>.enabled`1000 key: "profiles.<name>.tools_view_image",
1001 1001 type: "boolean",
1002Type / Values1002 description: "Enable or disable the `view_image` tool in that profile.",
1003 1003 },
1004`boolean`1004 {
1005 1005 key: "profiles.<name>.analytics.enabled",
1006Details1006 type: "boolean",
1007 1007 description: "Profile-scoped analytics enablement override.",
1008Disable an MCP server without removing its configuration.1008 },
1009 1009 {
1010Key1010 key: "profiles.<name>.windows.sandbox",
1011 1011 type: "unelevated | elevated",
1012`mcp_servers.<id>.enabled_tools`1012 description: "Profile-scoped Windows sandbox mode override.",
1013 1013 },
1014Type / Values1014 {
1015 1015 key: "history.persistence",
1016`array<string>`1016 type: "save-all | none",
1017 1017 description:
1018Details1018 "Control whether Codex saves session transcripts to history.jsonl.",
1019 1019 },
1020Allow list of tool names exposed by the MCP server.1020 {
1021 1021 key: "tool_output_token_limit",
1022Key1022 type: "number",
1023 1023 description:
1024`mcp_servers.<id>.env`1024 "Token budget for storing individual tool/function outputs in history.",
1025 1025 },
1026Type / Values1026 {
1027 1027 key: "background_terminal_max_timeout",
1028`map<string,string>`1028 type: "number",
1029 1029 description:
1030Details1030 "Maximum poll window in milliseconds for empty `write_stdin` polls (background terminal polling). Default: `300000` (5 minutes). Replaces the older `background_terminal_timeout` key.",
1031 1031 },
1032Environment variables forwarded to the MCP stdio server.1032 {
1033 1033 key: "history.max_bytes",
1034Key1034 type: "number",
1035 1035 description:
1036`mcp_servers.<id>.env_http_headers`1036 "If set, caps the history file size in bytes by dropping oldest entries.",
1037 1037 },
1038Type / Values1038 {
1039 1039 key: "file_opener",
1040`map<string,string>`1040 type: "vscode | vscode-insiders | windsurf | cursor | none",
1041 1041 description:
1042Details1042 "URI scheme used to open citations from Codex output (default: `vscode`).",
1043 1043 },
1044HTTP headers populated from environment variables for an MCP HTTP server.1044 {
1045 1045 key: "otel.environment",
1046Key1046 type: "string",
1047 1047 description:
1048`mcp_servers.<id>.env_vars`1048 "Environment tag applied to emitted OpenTelemetry events (default: `dev`).",
1049 1049 },
1050Type / Values1050 {
1051 1051 key: "otel.exporter",
1052`array<string>`1052 type: "none | otlp-http | otlp-grpc",
1053 1053 description:
1054Details1054 "Select the OpenTelemetry exporter and provide any endpoint metadata.",
1055 1055 },
1056Additional environment variables to whitelist for an MCP stdio server.1056 {
1057 1057 key: "otel.trace_exporter",
1058Key1058 type: "none | otlp-http | otlp-grpc",
1059 1059 description:
1060`mcp_servers.<id>.http_headers`1060 "Select the OpenTelemetry trace exporter and provide any endpoint metadata.",
1061 1061 },
1062Type / Values1062 {
1063 1063 key: "otel.metrics_exporter",
1064`map<string,string>`1064 type: "none | statsig | otlp-http | otlp-grpc",
1065 1065 description:
1066Details1066 "Select the OpenTelemetry metrics exporter (defaults to `statsig`).",
1067 1067 },
1068Static HTTP headers included with each MCP HTTP request.1068 {
1069 1069 key: "otel.log_user_prompt",
1070Key1070 type: "boolean",
1071 1071 description:
1072`mcp_servers.<id>.required`1072 "Opt in to exporting raw user prompts with OpenTelemetry logs.",
1073 1073 },
1074Type / Values1074 {
1075 1075 key: "otel.exporter.<id>.endpoint",
1076`boolean`1076 type: "string",
1077 1077 description: "Exporter endpoint for OTEL logs.",
1078Details1078 },
1079 1079 {
1080When true, fail startup/resume if this enabled MCP server cannot initialize.1080 key: "otel.exporter.<id>.protocol",
1081 1081 type: "binary | json",
1082Key1082 description: "Protocol used by the OTLP/HTTP exporter.",
1083 1083 },
1084`mcp_servers.<id>.startup_timeout_ms`1084 {
1085 1085 key: "otel.exporter.<id>.headers",
1086Type / Values1086 type: "map<string,string>",
1087 1087 description: "Static headers included with OTEL exporter requests.",
1088`number`1088 },
1089 1089 {
1090Details1090 key: "otel.trace_exporter.<id>.endpoint",
1091 1091 type: "string",
1092Alias for `startup_timeout_sec` in milliseconds.1092 description: "Trace exporter endpoint for OTEL logs.",
1093 1093 },
1094Key1094 {
1095 1095 key: "otel.trace_exporter.<id>.protocol",
1096`mcp_servers.<id>.startup_timeout_sec`1096 type: "binary | json",
1097 1097 description: "Protocol used by the OTLP/HTTP trace exporter.",
1098Type / Values1098 },
1099 1099 {
1100`number`1100 key: "otel.trace_exporter.<id>.headers",
1101 1101 type: "map<string,string>",
1102Details1102 description: "Static headers included with OTEL trace exporter requests.",
1103 1103 },
1104Override the default 10s startup timeout for an MCP server.1104 {
1105 1105 key: "otel.exporter.<id>.tls.ca-certificate",
1106Key1106 type: "string",
1107 1107 description: "CA certificate path for OTEL exporter TLS.",
1108`mcp_servers.<id>.tool_timeout_sec`1108 },
1109 1109 {
1110Type / Values1110 key: "otel.exporter.<id>.tls.client-certificate",
1111 1111 type: "string",
1112`number`1112 description: "Client certificate path for OTEL exporter TLS.",
1113 1113 },
1114Details1114 {
1115 1115 key: "otel.exporter.<id>.tls.client-private-key",
1116Override the default 60s per-tool timeout for an MCP server.1116 type: "string",
1117 1117 description: "Client private key path for OTEL exporter TLS.",
1118Key1118 },
1119 1119 {
1120`mcp_servers.<id>.url`1120 key: "otel.trace_exporter.<id>.tls.ca-certificate",
1121 1121 type: "string",
1122Type / Values1122 description: "CA certificate path for OTEL trace exporter TLS.",
1123 1123 },
1124`string`1124 {
1125 1125 key: "otel.trace_exporter.<id>.tls.client-certificate",
1126Details1126 type: "string",
1127 1127 description: "Client certificate path for OTEL trace exporter TLS.",
1128Endpoint for an MCP streamable HTTP server.1128 },
1129 1129 {
1130Key1130 key: "otel.trace_exporter.<id>.tls.client-private-key",
1131 1131 type: "string",
1132`model`1132 description: "Client private key path for OTEL trace exporter TLS.",
1133 1133 },
1134Type / Values1134 {
1135 1135 key: "tui",
1136`string`1136 type: "table",
1137 1137 description:
1138Details1138 "TUI-specific options such as enabling inline desktop notifications.",
1139 1139 },
1140Model to use (e.g., `gpt-5-codex`).1140 {
1141 1141 key: "tui.notifications",
1142Key1142 type: "boolean | array<string>",
1143 1143 description:
1144`model_auto_compact_token_limit`1144 "Enable TUI notifications; optionally restrict to specific event types.",
1145 1145 },
1146Type / Values1146 {
1147 1147 key: "tui.notification_method",
1148`number`1148 type: "auto | osc9 | bel",
1149 1149 description:
1150Details1150 "Notification method for terminal notifications (default: auto).",
1151 1151 },
1152Token threshold that triggers automatic history compaction (unset uses model defaults).1152 {
1153 1153 key: "tui.notification_condition",
1154Key1154 type: "unfocused | always",
1155 1155 description:
1156`model_catalog_json`1156 "Control whether TUI notifications fire only when the terminal is unfocused or regardless of focus. Defaults to `unfocused`.",
1157 1157 },
1158Type / Values1158 {
1159 1159 key: "tui.animations",
1160`string (path)`1160 type: "boolean",
1161 1161 description:
1162Details1162 "Enable terminal animations (welcome screen, shimmer, spinner) (default: true).",
1163 1163 },
1164Optional path to a JSON model catalog loaded on startup. Profile-level `profiles.<name>.model_catalog_json` can override this per profile.1164 {
1165 1165 key: "tui.alternate_screen",
1166Key1166 type: "auto | always | never",
1167 1167 description:
1168`model_context_window`1168 "Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback).",
1169 1169 },
1170Type / Values1170 {
1171 1171 key: "tui.vim_mode_default",
1172`number`1172 type: "boolean",
1173 1173 description:
1174Details1174 "Start the composer in Vim normal mode instead of insert mode (default: false). You can still toggle it per session with `/vim`.",
1175 1175 },
1176Context window tokens available to the active model.1176 {
1177 1177 key: "tui.raw_output_mode",
1178Key1178 type: "boolean",
1179 1179 description:
1180`model_instructions_file`1180 "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.",
1181 1181 },
1182Type / Values1182 {
1183 1183 key: "tui.show_tooltips",
1184`string (path)`1184 type: "boolean",
1185 1185 description:
1186Details1186 "Show onboarding tooltips in the TUI welcome screen (default: true).",
1187 1187 },
1188Replacement for built-in instructions instead of `AGENTS.md`.1188 {
1189 1189 key: "tui.status_line",
1190Key1190 type: "array<string> | null",
1191 1191 description:
1192`model_provider`1192 "Ordered list of TUI footer status-line item identifiers. `null` disables the status line.",
1193 1193 },
1194Type / Values1194 {
1195 1195 key: "tui.terminal_title",
1196`string`1196 type: "array<string> | null",
1197 1197 description:
1198Details1198 'Ordered list of terminal window/tab title item identifiers. Defaults to `["spinner", "project"]`; `null` disables title updates.',
1199 1199 },
1200Provider id from `model_providers` (default: `openai`).1200 {
1201 1201 key: "tui.theme",
1202Key1202 type: "string",
1203 1203 description:
1204`model_providers.<id>.base_url`1204 "Syntax-highlighting theme override (kebab-case theme name).",
1205 1205 },
1206Type / Values1206 {
1207 1207 key: "tui.keymap.<context>.<action>",
1208`string`1208 type: "string | array<string>",
1209 1209 description:
1210Details1210 "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`.",
1211 1211 },
1212API base URL for the model provider.1212 {
1213 1213 key: "tui.keymap.<context>.<action> = []",
1214Key1214 type: "empty array",
1215 1215 description:
1216`model_providers.<id>.env_http_headers`1216 "Unbind the action in that keymap context. Key names use normalized strings such as `ctrl-a`, `shift-enter`, `page-down`, or `minus`.",
1217 1217 },
1218Type / Values1218 {
1219 1219 key: "plugins.<plugin>.mcp_servers.<server>.enabled",
1220`map<string,string>`1220 type: "boolean",
1221 1221 description:
1222Details1222 "Enable or disable an MCP server bundled by an installed plugin without changing the plugin manifest.",
1223 1223 },
1224HTTP headers populated from environment variables when present.1224 {
1225 1225 key: "plugins.<plugin>.mcp_servers.<server>.default_tools_approval_mode",
1226Key1226 type: "auto | prompt | approve",
1227 1227 description:
1228`model_providers.<id>.env_key`1228 "Default approval behavior for tools on a plugin-provided MCP server.",
1229 1229 },
1230Type / Values1230 {
1231 1231 key: "plugins.<plugin>.mcp_servers.<server>.enabled_tools",
1232`string`1232 type: "array<string>",
1233 1233 description:
1234Details1234 "Allow list of tools exposed from a plugin-provided MCP server.",
1235 1235 },
1236Environment variable supplying the provider API key.1236 {
1237 1237 key: "plugins.<plugin>.mcp_servers.<server>.disabled_tools",
1238Key1238 type: "array<string>",
1239 1239 description:
1240`model_providers.<id>.env_key_instructions`1240 "Deny list applied after `enabled_tools` for a plugin-provided MCP server.",
1241 1241 },
1242Type / Values1242 {
1243 1243 key: "plugins.<plugin>.mcp_servers.<server>.tools.<tool>.approval_mode",
1244`string`1244 type: "auto | prompt | approve",
1245 1245 description:
1246Details1246 "Per-tool approval behavior override for a plugin-provided MCP tool.",
1247 1247 },
1248Optional setup guidance for the provider API key.1248 {
1249 1249 key: "tui.model_availability_nux.<model>",
1250Key1250 type: "integer",
1251 1251 description: "Internal startup-tooltip state keyed by model slug.",
1252`model_providers.<id>.experimental_bearer_token`1252 },
1253 1253 {
1254Type / Values1254 key: "hide_agent_reasoning",
1255 1255 type: "boolean",
1256`string`1256 description:
1257 1257 "Suppress reasoning events in both the TUI and `codex exec` output.",
1258Details1258 },
1259 1259 {
1260Direct bearer token for the provider (discouraged; use `env_key`).1260 key: "show_raw_agent_reasoning",
1261 1261 type: "boolean",
1262Key1262 description:
1263 1263 "Surface raw reasoning content when the active model emits it.",
1264`model_providers.<id>.http_headers`1264 },
1265 1265 {
1266Type / Values1266 key: "disable_paste_burst",
1267 1267 type: "boolean",
1268`map<string,string>`1268 description: "Disable burst-paste detection in the TUI.",
1269 1269 },
1270Details1270 {
1271 1271 key: "windows_wsl_setup_acknowledged",
1272Static HTTP headers added to provider requests.1272 type: "boolean",
1273 1273 description: "Track Windows onboarding acknowledgement (Windows only).",
1274Key1274 },
1275 1275 {
1276`model_providers.<id>.name`1276 key: "chatgpt_base_url",
1277 1277 type: "string",
1278Type / Values1278 description: "Override the base URL used during the ChatGPT login flow.",
1279 1279 },
1280`string`1280 {
1281 1281 key: "cli_auth_credentials_store",
1282Details1282 type: "file | keyring | auto",
1283 1283 description:
1284Display name for a custom model provider.1284 "Control where the CLI stores cached credentials (file-based auth.json vs OS keychain).",
1285 1285 },
1286Key1286 {
1287 1287 key: "mcp_oauth_credentials_store",
1288`model_providers.<id>.query_params`1288 type: "auto | file | keyring",
1289 1289 description: "Preferred store for MCP OAuth credentials.",
1290Type / Values1290 },
1291 1291 {
1292`map<string,string>`1292 key: "mcp_oauth_callback_port",
1293 1293 type: "integer",
1294Details1294 description:
1295 1295 "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.",
1296Extra query parameters appended to provider requests.1296 },
1297 1297 {
1298Key1298 key: "mcp_oauth_callback_url",
1299 1299 type: "string",
1300`model_providers.<id>.request_max_retries`1300 description:
1301 1301 "Optional redirect URI override for MCP OAuth login (for example, a devbox ingress URL). `mcp_oauth_callback_port` still controls the callback listener port.",
1302Type / Values1302 },
1303 1303 {
1304`number`1304 key: "experimental_use_unified_exec_tool",
1305 1305 type: "boolean",
1306Details1306 description:
1307 1307 "Legacy name for enabling unified exec; prefer `[features].unified_exec` or `codex --enable unified_exec`.",
1308Retry count for HTTP requests to the provider (default: 4).1308 },
1309 1309 {
1310Key1310 key: "tools.web_search",
1311 1311 type: 'boolean | { context_size = "low|medium|high", allowed_domains = [string], location = { country, region, city, timezone } }',
1312`model_providers.<id>.requires_openai_auth`1312 description:
1313 1313 "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.",
1314Type / Values1314 },
1315 1315 {
1316`boolean`1316 key: "tools.view_image",
1317 1317 type: "boolean",
1318Details1318 description: "Enable the local-image attachment tool `view_image`.",
1319 1319 },
1320The provider uses OpenAI authentication (defaults to false).1320 {
1321 1321 key: "web_search",
1322Key1322 type: "disabled | cached | live",
1323 1323 description:
1324`model_providers.<id>.stream_idle_timeout_ms`1324 '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.',
1325 1325 },
1326Type / Values1326 {
1327 1327 key: "default_permissions",
1328`number`1328 type: "string",
1329 1329 description:
1330Details1330 "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.",
1331 1331 },
1332Idle timeout for SSE streams in milliseconds (default: 300000).1332 {
1333 1333 key: "permissions.<name>.filesystem",
1334Key1334 type: "table",
1335 1335 description:
1336`model_providers.<id>.stream_max_retries`1336 "Named filesystem permission profile. Each key is an absolute path or special token such as `:minimal` or `:project_roots`.",
1337 1337 },
1338Type / Values1338 {
1339 1339 key: "permissions.<name>.filesystem.glob_scan_max_depth",
1340`number`1340 type: "number",
1341 1341 description:
1342Details1342 "Maximum depth for expanding deny-read glob patterns on platforms that snapshot matches before sandbox startup. Must be at least `1` when set.",
1343 1343 },
1344Retry count for SSE streaming interruptions (default: 5).1344 {
1345 1345 key: "permissions.<name>.filesystem.<path-or-glob>",
1346Key1346 type: '"read" | "write" | "none" | table',
1347 1347 description:
1348`model_providers.<id>.wire_api`1348 '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.',
1349 1349 },
1350Type / Values1350 {
1351 1351 key: 'permissions.<name>.filesystem.":project_roots".<subpath-or-glob>',
1352`chat | responses`1352 type: '"read" | "write" | "none"',
1353 1353 description:
1354Details1354 'Scoped filesystem access relative to the detected project roots. Use `"."` for the root itself; glob subpaths such as `"**/*.env"` can deny reads with `"none"`.',
1355 1355 },
1356Protocol used by the provider (defaults to `chat` if omitted).1356 {
1357 1357 key: "permissions.<name>.network.enabled",
1358Key1358 type: "boolean",
1359 1359 description: "Enable network access for this named permissions profile.",
1360`model_reasoning_effort`1360 },
1361 1361 {
1362Type / Values1362 key: "permissions.<name>.network.proxy_url",
1363 1363 type: "string",
1364`minimal | low | medium | high | xhigh`1364 description:
1365 1365 "HTTP listener URL used when this permissions profile enables sandboxed networking.",
1366Details1366 },
1367 1367 {
1368Adjust reasoning effort for supported models (Responses API only; `xhigh` is model-dependent).1368 key: "permissions.<name>.network.enable_socks5",
1369 1369 type: "boolean",
1370Key1370 description:
1371 1371 "Expose SOCKS5 support when this permissions profile enables sandboxed networking.",
1372`model_reasoning_summary`1372 },
1373 1373 {
1374Type / Values1374 key: "permissions.<name>.network.socks_url",
1375 1375 type: "string",
1376`auto | concise | detailed | none`1376 description: "SOCKS5 proxy endpoint used by this permissions profile.",
1377 1377 },
1378Details1378 {
1379 1379 key: "permissions.<name>.network.enable_socks5_udp",
1380Select reasoning summary detail or disable summaries entirely.1380 type: "boolean",
1381 1381 description: "Allow UDP over the SOCKS5 listener when enabled.",
1382Key1382 },
1383 1383 {
1384`model_supports_reasoning_summaries`1384 key: "permissions.<name>.network.allow_upstream_proxy",
1385 1385 type: "boolean",
1386Type / Values1386 description:
1387 1387 "Allow sandboxed networking to chain through another upstream proxy.",
1388`boolean`1388 },
1389 1389 {
1390Details1390 key: "permissions.<name>.network.dangerously_allow_non_loopback_proxy",
1391 1391 type: "boolean",
1392Force Codex to send or not send reasoning metadata.1392 description:
1393 1393 "Permit non-loopback bind addresses for sandboxed networking listeners. Enabling it can expose listeners beyond localhost.",
1394Key1394 },
1395 1395 {
1396`model_verbosity`1396 key: "permissions.<name>.network.dangerously_allow_all_unix_sockets",
1397 1397 type: "boolean",
1398Type / Values1398 description:
1399 1399 "Allow arbitrary Unix socket destinations instead of the default restricted set. Use only in tightly controlled environments.",
1400`low | medium | high`1400 },
1401 1401 {
1402Details1402 key: "permissions.<name>.network.domains",
1403 1403 type: "map<string, allow | deny>",
1404Control GPT-5 Responses API verbosity (defaults to `medium`).1404 description:
1405 1405 "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.",
1406Key1406 },
1407 1407 {
1408`notice.hide_full_access_warning`1408 key: "permissions.<name>.network.unix_sockets",
1409 1409 type: "map<string, allow | none>",
1410Type / Values1410 description:
1411 1411 "Unix socket rules for sandboxed networking. Use socket paths as keys, with `allow` or `none` values.",
1412`boolean`1412 },
1413 1413 {
1414Details1414 key: "permissions.<name>.network.allow_local_binding",
1415 1415 type: "boolean",
1416Track acknowledgement of the full access warning prompt.1416 description:
1417 1417 "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`.",
1418Key1418 },
1419 1419 {
1420`notice.hide_gpt-5.1-codex-max_migration_prompt`1420 key: "projects.<path>.trust_level",
1421 1421 type: "string",
1422Type / Values1422 description:
1423 1423 '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.',
1424`boolean`1424 },
1425 1425 {
1426Details1426 key: "notice.hide_full_access_warning",
1427 1427 type: "boolean",
1428Track acknowledgement of the gpt-5.1-codex-max migration prompt.1428 description: "Track acknowledgement of the full access warning prompt.",
1429 1429 },
1430Key1430 {
1431 1431 key: "notice.hide_world_writable_warning",
1432`notice.hide_gpt5_1_migration_prompt`1432 type: "boolean",
1433 1433 description:
1434Type / Values1434 "Track acknowledgement of the Windows world-writable directories warning.",
1435 1435 },
1436`boolean`1436 {
1437 1437 key: "notice.hide_rate_limit_model_nudge",
1438Details1438 type: "boolean",
1439 1439 description: "Track opt-out of the rate limit model switch reminder.",
1440Track acknowledgement of the GPT-5.1 migration prompt.1440 },
1441 1441 {
1442Key1442 key: "notice.hide_gpt5_1_migration_prompt",
1443 1443 type: "boolean",
1444`notice.hide_rate_limit_model_nudge`1444 description: "Track acknowledgement of the GPT-5.1 migration prompt.",
1445 1445 },
1446Type / Values1446 {
1447 1447 key: "notice.hide_gpt-5.1-codex-max_migration_prompt",
1448`boolean`1448 type: "boolean",
1449 1449 description:
1450Details1450 "Track acknowledgement of the gpt-5.1-codex-max migration prompt.",
1451 1451 },
1452Track opt-out of the rate limit model switch reminder.1452 {
1453 1453 key: "notice.model_migrations",
1454Key1454 type: "map<string,string>",
1455 1455 description: "Track acknowledged model migrations as old->new mappings.",
1456`notice.hide_world_writable_warning`1456 },
1457 1457 {
1458Type / Values1458 key: "forced_login_method",
1459 1459 type: "chatgpt | api",
1460`boolean`1460 description: "Restrict Codex to a specific authentication method.",
1461 1461 },
1462Details1462 {
1463 1463 key: "forced_chatgpt_workspace_id",
1464Track acknowledgement of the Windows world-writable directories warning.1464 type: "string (uuid)",
1465 1465 description: "Limit ChatGPT logins to a specific workspace identifier.",
1466Key1466 },
1467 1467 ]}
1468`notice.model_migrations`1468 client:load
1469 1469/>
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
2217| Key | Type / Values | Details |1488Use `[features]` in `requirements.toml` to pin feature flags by the same
2218| --- | --- | --- |1489canonical keys that `config.toml` uses. Omitted keys remain unconstrained.
2219| `allowed_approval_policies` | `array<string>` | Allowed values for `approval_policy` (for example `untrusted`, `on-request`, `never`, and `reject`). |1490
2220| `allowed_sandbox_modes` | `array<string>` | Allowed values for `sandbox_mode`. |1491<ConfigTable
2221| `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`. |1492 options={[
2222| `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. |1493 {
2223| `mcp_servers.<id>.identity` | `table` | Identity rule for a single MCP server. Set either `command` (stdio) or `url` (streamable HTTP). |1494 key: "allowed_approval_policies",
2224| `mcp_servers.<id>.identity.command` | `string` | Allow an MCP stdio server when its `mcp_servers.<id>.command` matches this command. |1495 type: "array<string>",
2225| `mcp_servers.<id>.identity.url` | `string` | Allow an MCP streamable HTTP server when its `mcp_servers.<id>.url` matches this URL. |1496 description:
2226| `rules` | `table` | Admin-enforced command rules merged with `.rules` files. Requirements rules must be restrictive. |1497 "Allowed values for `approval_policy` (for example `untrusted`, `on-request`, `never`, and `granular`).",
2227| `rules.prefix_rules` | `array<table>` | List of enforced prefix rules. Each rule must include `pattern` and `decision`. |1498 },
2228| `rules.prefix_rules[].decision` | `prompt | forbidden` | Required. Requirements rules can only prompt or forbid (not allow). |1499 {
2229| `rules.prefix_rules[].justification` | `string` | Optional non-empty rationale surfaced in approval prompts or rejection messages. |1500 key: "allowed_approvals_reviewers",
2230| `rules.prefix_rules[].pattern` | `array<table>` | Command prefix expressed as pattern tokens. Each token sets either `token` or `any_of`. |1501 type: "array<string>",
2231| `rules.prefix_rules[].pattern[].any_of` | `array<string>` | A list of allowed alternative tokens at this position. |1502 description:
2232| `rules.prefix_rules[].pattern[].token` | `string` | A single literal token at this position. |1503 "Allowed values for `approvals_reviewer`, such as `user` and `auto_review`.",
2233 1504 },
2234Key1505 {
2235 1506 key: "guardian_policy_config",
2236`allowed_approval_policies`1507 type: "string",
2237 1508 description:
2238Type / Values1509 "Managed Markdown policy instructions for automatic review. This takes precedence over local `[auto_review].policy`. Blank values are ignored.",
2239 1510 },
2240`array<string>`1511 {
2241 1512 key: "allowed_sandbox_modes",
2242Details1513 type: "array<string>",
2243 1514 description: "Allowed values for `sandbox_mode`.",
2244Allowed values for `approval_policy` (for example `untrusted`, `on-request`, `never`, and `reject`).1515 },
2245 1516 {
2246Key1517 key: "remote_sandbox_config",
2247 1518 type: "array<table>",
2248`allowed_sandbox_modes`1519 description:
2249 1520 "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.",
2250Type / Values1521 },
2251 1522 {
2252`array<string>`1523 key: "remote_sandbox_config[].hostname_patterns",
2253 1524 type: "array<string>",
2254Details1525 description:
2255 1526 "Case-insensitive host name patterns. Supports `*` for any sequence of characters and `?` for one character.",
2256Allowed values for `sandbox_mode`.1527 },
2257 1528 {
2258Key1529 key: "remote_sandbox_config[].allowed_sandbox_modes",
2259 1530 type: "array<string>",
2260`allowed_web_search_modes`1531 description:
2261 1532 "Allowed sandbox modes to apply when this host-specific entry matches.",
2262Type / Values1533 },
2263 1534 {
2264`array<string>`1535 key: "allowed_web_search_modes",
2265 1536 type: "array<string>",
2266Details1537 description:
2267 1538 "Allowed values for `web_search` (`disabled`, `cached`, `live`). `disabled` is always allowed; an empty list effectively allows only `disabled`.",
2268Allowed values for `web_search` (`disabled`, `cached`, `live`). `disabled` is always allowed; an empty list effectively allows only `disabled`.1539 },
2269 1540 {
2270Key1541 key: "features",
2271 1542 type: "table",
2272`mcp_servers`1543 description:
2273 1544 "Pinned feature values keyed by the canonical names from `config.toml`'s `[features]` table.",
2274Type / Values1545 },
2275 1546 {
2276`table`1547 key: "features.<name>",
2277 1548 type: "boolean",
2278Details1549 description:
2279 1550 "Require a specific canonical feature key to stay enabled or disabled.",
2280Allowlist 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.1551 },
2281 1552 {
2282Key1553 key: "features.in_app_browser",
2283 1554 type: "boolean",
2284`mcp_servers.<id>.identity`1555 description:
2285 1556 "Set to `false` in `requirements.toml` to disable the in-app browser pane.",
2286Type / Values1557 },
2287 1558 {
2288`table`1559 key: "features.browser_use",
2289 1560 type: "boolean",
2290Details1561 description:
2291 1562 "Set to `false` in `requirements.toml` to disable Browser Use and Browser Agent availability.",
2292Identity rule for a single MCP server. Set either `command` (stdio) or `url` (streamable HTTP).1563 },
2293 1564 {
2294Key1565 key: "features.computer_use",
2295 1566 type: "boolean",
2296`mcp_servers.<id>.identity.command`1567 description:
2297 1568 "Set to `false` in `requirements.toml` to disable Computer Use availability and related install or enablement flows.",
2298Type / Values1569 },
2299 1570 {
2300`string`1571 key: "experimental_network",
2301 1572 type: "table",
2302Details1573 description:
2303 1574 "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.",
2304Allow an MCP stdio server when its `mcp_servers.<id>.command` matches this command.1575 },
2305 1576 {
2306Key1577 key: "experimental_network.enabled",
2307 1578 type: "boolean",
2308`mcp_servers.<id>.identity.url`1579 description:
2309 1580 "Enable sandboxed networking requirements. This does not grant network access when the active sandbox keeps command networking off.",
2310Type / Values1581 },
2311 1582 {
2312`string`1583 key: "experimental_network.http_port",
2313 1584 type: "integer",
2314Details1585 description:
2315 1586 "Loopback HTTP listener port to use for `[experimental_network]` requirements.",
2316Allow an MCP streamable HTTP server when its `mcp_servers.<id>.url` matches this URL.1587 },
2317 1588 {
2318Key1589 key: "experimental_network.socks_port",
2319 1590 type: "integer",
2320`rules`1591 description:
2321 1592 "Loopback SOCKS5 listener port to use for `[experimental_network]` requirements.",
2322Type / Values1593 },
2323 1594 {
2324`table`1595 key: "experimental_network.allow_upstream_proxy",
2325 1596 type: "boolean",
2326Details1597 description:
2327 1598 "Allow sandboxed networking to chain through an upstream proxy from the environment.",
2328Admin-enforced command rules merged with `.rules` files. Requirements rules must be restrictive.1599 },
2329 1600 {
2330Key1601 key: "experimental_network.dangerously_allow_non_loopback_proxy",
2331 1602 type: "boolean",
2332`rules.prefix_rules`1603 description:
2333 1604 "Permit non-loopback listener addresses for `[experimental_network]` requirements. Enabling it can expose listeners beyond localhost.",
2334Type / Values1605 },
2335 1606 {
2336`array<table>`1607 key: "experimental_network.dangerously_allow_all_unix_sockets",
2337 1608 type: "boolean",
2338Details1609 description:
2339 1610 "Permit arbitrary Unix socket destinations instead of allowlist-only access. Use only in tightly controlled environments.",
2340List of enforced prefix rules. Each rule must include `pattern` and `decision`.1611 },
2341 1612 {
2342Key1613 key: "experimental_network.domains",
2343 1614 type: "map<string, allow | deny>",
2344`rules.prefix_rules[].decision`1615 description:
2345 1616 "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`.",
2346Type / Values1617 },
2347 1618 {
2348`prompt | forbidden`1619 key: "experimental_network.allowed_domains",
2349 1620 type: "array<string>",
2350Details1621 description:
2351 1622 "List-shaped administrator allow rules for sandboxed networking. Do not combine this with `experimental_network.domains`.",
2352Required. Requirements rules can only prompt or forbid (not allow).1623 },
2353 1624 {
2354Key1625 key: "experimental_network.denied_domains",
2355 1626 type: "array<string>",
2356`rules.prefix_rules[].justification`1627 description:
2357 1628 "List-shaped administrator deny rules for sandboxed networking. Do not combine this with `experimental_network.domains`.",
2358Type / Values1629 },
2359 1630 {
2360`string`1631 key: "experimental_network.managed_allowed_domains_only",
2361 1632 type: "boolean",
2362Details1633 description:
2363 1634 "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.",
2364Optional non-empty rationale surfaced in approval prompts or rejection messages.1635 },
2365 1636 {
2366Key1637 key: "experimental_network.unix_sockets",
2367 1638 type: "map<string, allow | none>",
2368`rules.prefix_rules[].pattern`1639 description:
2369 1640 "Administrator-managed Unix socket policy for sandboxed networking.",
2370Type / Values1641 },
2371 1642 {
2372`array<table>`1643 key: "experimental_network.allow_local_binding",
2373 1644 type: "boolean",
2374Details1645 description:
2375 1646 "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`.",
2376Command prefix expressed as pattern tokens. Each token sets either `token` or `any_of`.1647 },
2377 1648 {
2378Key1649 key: "hooks",
2379 1650 type: "table",
2380`rules.prefix_rules[].pattern[].any_of`1651 description:
2381 1652 "Admin-enforced managed lifecycle hooks. Requires a managed hook directory and uses the same event schema as inline `[hooks]` in `config.toml`.",
2382Type / Values1653 },
2383 1654 {
2384`array<string>`1655 key: "hooks.managed_dir",
2385 1656 type: "string (absolute path)",
2386Details1657 description:
2387 1658 "Directory containing managed hook scripts on macOS and Linux. Codex validates that it is absolute and exists before loading managed hooks.",
2388A list of allowed alternative tokens at this position.1659 },
2389 1660 {
2390Key1661 key: "hooks.windows_managed_dir",
2391 1662 type: "string (absolute path)",
2392`rules.prefix_rules[].pattern[].token`1663 description:
2393 1664 "Directory containing managed hook scripts on Windows. Codex validates that it is absolute and exists before loading managed hooks.",
2394Type / Values1665 },
2395 1666 {
2396`string`1667 key: "hooks.<Event>",
2397 1668 type: "array<table>",
2398Details1669 description:
2399 1670 "Matcher groups for a hook event such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `SessionStart`, `UserPromptSubmit`, or `Stop`.",
2400A single literal token at this position.1671 },
2401 1672 {
2402Expand to view all1673 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/>