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