139 description:139 description:
140 "Controls whether the auto-compaction threshold counts the full active context (`total`, the default) or only growth after the carried compaction-window prefix (`body_after_prefix`).",140 "Controls whether the auto-compaction threshold counts the full active context (`total`, the default) or only growth after the carried compaction-window prefix (`body_after_prefix`).",
141 },141 },
142 {
143 key: "model_post_turn_compact_threshold_percent",
144 type: "integer (0–100)",
145 description:
146 "Compact history after a final response when active context reaches this percentage of the usable context window. Omit or set to `0` to disable turn-end compaction. The usual auto-compaction limits still apply.",
147 },
142 {148 {
143 key: "model_catalog_json",149 key: "model_catalog_json",
144 type: "string (path)",150 type: "string (path)",
211 description:217 description:
212 "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.",218 "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.",
213 },219 },
220 {
221 key: "allow_symlinked_codex_home",
222 type: "boolean",
223 description:
224 "On macOS, allow writable sandbox roots at or under `$CODEX_HOME` to follow symlinks. Codex reads this only from the execution host's `$CODEX_HOME/config.toml` at startup. Enabling it trusts targets outside that directory and targets that change between commands. It grants no additional writable roots. Defaults to `false`.",
225 },
214 {226 {
215 key: "sandbox_mode",227 key: "sandbox_mode",
216 type: "read-only | workspace-write | danger-full-access",228 type: "read-only | workspace-write | danger-full-access",
316 key: "analytics.enabled",328 key: "analytics.enabled",
317 type: "boolean",329 type: "boolean",
318 description:330 description:
319 "Enable or disable analytics for this machine/profile. In Codex CLI, `false` also disables custom OTLP metrics exporters. When unset, the client default applies.",331 "Enable or disable analytics for this machine or profile. Setting this to `false` disables the built-in Statsig metrics exporter. Explicit OTLP metrics exporters remain active. When unset, the client default applies.",
320 },332 },
321 {333 {
322 key: "instructions",334 key: "instructions",
371 description:383 description:
372 "Load the compaction prompt override from a file (experimental).",384 "Load the compaction prompt override from a file (experimental).",
373 },385 },
386 {
387 key: "skills.bundled.enabled",
388 type: "boolean",
389 description:
390 "Load the system skills bundled with Codex. Defaults to `true`. Set to `false` in a trusted project configuration to disable bundled skills for that project.",
391 },
392 {
393 key: "skills.include_instructions",
394 type: "boolean",
395 description:
396 "Include the automatic skills instructions in the model context. Defaults to `true`.",
397 },
374 {398 {
375 key: "skills.max_context_tokens",399 key: "skills.max_context_tokens",
376 type: "integer (positive)",400 type: "integer (positive)",
380 {404 {
381 key: "skills.config",405 key: "skills.config",
382 type: "array<object>",406 type: "array<object>",
383 description: "Per-skill enablement overrides stored in config.toml.",407 description:
408 "Enable or disable skills by name or path. If several rules match a skill, the last one wins.",
384 },409 },
385 {410 {
386 key: "skills.config.<index>.path",411 key: "skills.config.<index>.path",
387 type: "string (path)",412 type: "string (path)",
388 description: "Path to a skill folder containing `SKILL.md`.",413 description: "Absolute path to one `SKILL.md` file.",
414 },
415 {
416 key: "skills.config.<index>.name",
417 type: "string",
418 description:
419 "Match every skill with this exact name. Specify either `name` or `path` for each entry.",
389 },420 },
390 {421 {
391 key: "skills.config.<index>.enabled",422 key: "skills.config.<index>.enabled",
458 description:489 description:
459 "Default approval behavior for tools in this app unless a per-tool override exists.",490 "Default approval behavior for tools in this app unless a per-tool override exists.",
460 },491 },
492 {
493 key: "apps.<id>.omit_tools_from",
494 type: "array<string>",
495 description:
496 "Omit this app's tools from the `direct`, `deferred`, or `code_mode` surfaces. App and MCP server omissions apply together.",
497 },
461 {498 {
462 key: "apps.<id>.tools.<tool>.enabled",499 key: "apps.<id>.tools.<tool>.enabled",
463 type: "boolean",500 type: "boolean",
521 key: "features.rollout_budget.enabled",558 key: "features.rollout_budget.enabled",
522 type: "boolean",559 type: "boolean",
523 description:560 description:
524 "Enable rollout budget tracking. This feature is under development and off by default. When enabled, `features.rollout_budget.limit_tokens` is required.",561 "Enable rollout budget tracking. This feature is under development and off by default. When enabled, set both `limit_tokens` and `reminder_at_remaining_tokens`.",
525 },562 },
526 {563 {
527 key: "features.rollout_budget.limit_tokens",564 key: "features.rollout_budget.limit_tokens",
530 "Positive token limit for rollout budget tracking. Required when rollout budget is enabled.",567 "Positive token limit for rollout budget tracking. Required when rollout budget is enabled.",
531 },568 },
532 {569 {
533 key: "features.rollout_budget.reminder_interval_tokens",570 key: "features.rollout_budget.reminder_at_remaining_tokens",
534 type: "integer",571 type: "array<integer>",
535 description:572 description:
536 "Positive token interval between rollout budget reminders. Defaults to 10% of `limit_tokens`, with a minimum of 1 token.",573 "Send a reminder as the remaining weighted token budget crosses each threshold. Supply the list when rollout budget tracking is enabled. Each value must be positive and below `limit_tokens`.",
537 },574 },
538 {575 {
539 key: "features.rollout_budget.sampling_token_weight",576 key: "features.rollout_budget.sampling_token_weight",
557 key: "hooks.<Event>",594 key: "hooks.<Event>",
558 type: "array<table>",595 type: "array<table>",
559 description:596 description:
560 "Matcher groups for hook events such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SessionEnd`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, `Stop`, or `Interrupt`.",597 "Matcher groups for hook events such as `PreModelRequest`, `PostModelRequest`, `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SessionEnd`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, `Stop`, or `Interrupt`.",
561 },598 },
562 {599 {
563 key: "hooks.<Event>[].hooks",600 key: "hooks.<Event>[].hooks",
688 key: "mcp_servers.<id>.required",725 key: "mcp_servers.<id>.required",
689 type: "boolean",726 type: "boolean",
690 description:727 description:
691 "When true, fail startup/resume if this enabled MCP server cannot initialize.",728 'Require this enabled server to be ready at startup. With `startup_readiness = "catalog"`, a valid cached catalog can satisfy that requirement.',
729 },
730 {
731 key: "mcp_servers.<id>.startup_readiness",
732 type: "connection | catalog",
733 description:
734 "Use a live connection to establish startup readiness (`connection`, the default), or let a valid cached tool catalog satisfy startup while the connection opens (`catalog`). Calling a tool still requires a live connection.",
692 },735 },
693 {736 {
694 key: "mcp_servers.<id>.startup_timeout_sec",737 key: "mcp_servers.<id>.startup_timeout_sec",
718 description:761 description:
719 "Deny list applied after `enabled_tools` for the MCP server.",762 "Deny list applied after `enabled_tools` for the MCP server.",
720 },763 },
764 {
765 key: "mcp_servers.<id>.supports_parallel_tool_calls",
766 type: "boolean",
767 description:
768 "Mark every tool on this server as safe to run in parallel. Enable only when the server can handle concurrent calls to all its tools. Defaults to `false`.",
769 },
770 {
771 key: "mcp_servers.<id>.tool_input_schema_max_bytes",
772 type: "integer (positive)",
773 description:
774 "Compact each ordinary MCP tool's input schema when it exceeds this many UTF-8 bytes. The default is 5,000 bytes. Code Mode also uses an explicit value when rendering tool input types.",
775 },
776 {
777 key: "mcp_servers.<id>.omit_tools_from",
778 type: "array<string>",
779 description:
780 "Omit this server’s tools from selected model-facing surfaces. Choose `direct` (initial tools), `deferred` (tool search), or `code_mode` (Code Mode scripts). Use `disabled_tools` to block a tool. An empty list clears inherited omissions.",
781 },
721 {782 {
722 key: "mcp_servers.<id>.default_tools_approval_mode",783 key: "mcp_servers.<id>.default_tools_approval_mode",
723 type: "auto | prompt | writes | approve",784 type: "auto | prompt | writes | approve",
740 key: "mcp_servers.<id>.scopes",801 key: "mcp_servers.<id>.scopes",
741 type: "array<string>",802 type: "array<string>",
742 description:803 description:
743 "OAuth scopes to request when authenticating to that MCP server.",804 "OAuth scopes to request at login. If omitted, Codex uses the initial authentication challenge's scopes, falling back to the protected resource's metadata.",
744 },805 },
745 {806 {
746 key: "mcp_servers.<id>.oauth_resource",807 key: "mcp_servers.<id>.oauth_resource",
749 "Optional RFC 8707 OAuth resource parameter to include during MCP login.",810 "Optional RFC 8707 OAuth resource parameter to include during MCP login.",
750 },811 },
751 {812 {
752 key: "mcp_servers.<id>.experimental_environment",813 key: "mcp_servers.<id>.environment_id",
753 type: "local | remote",814 type: "string",
754 description:815 description:
755 "Experimental placement for an MCP server. `remote` starts stdio servers through a remote executor environment; streamable HTTP remote placement is not implemented.",816 "Execution environment for the MCP server. Defaults to `local`. Use the ID of a configured executor to run a stdio server or connect to a streamable HTTP server there.",
756 },817 },
757 {818 {
758 key: "agents",819 key: "agents",
807 description:868 description:
808 "Path to a TOML config layer for that role; relative paths resolve from the config file that declares the role.",869 "Path to a TOML config layer for that role; relative paths resolve from the config file that declares the role.",
809 },870 },
871 {
872 key: "memories.version",
873 type: "v1 | v2",
874 description:
875 "Select the local memory store. With memories enabled, Codex defaults to `v2` for a fresh home and `v1` if `$CODEX_HOME/memories/` exists. Explicitly setting `dual_write = false` keeps the default at `v1`.",
876 },
877 {
878 key: "memories.dual_write",
879 type: "boolean",
880 description:
881 "With `v1` selected, set to `true` to generate both stores while continuing to read `v1`. With `v2` selected, Codex writes only `v2`.",
882 },
810 {883 {
811 key: "memories.generate_memories",884 key: "memories.generate_memories",
812 type: "boolean",885 type: "boolean",
871 type: "string",944 type: "string",
872 description: "Optional model override for global memory consolidation.",945 description: "Optional model override for global memory consolidation.",
873 },946 },
947 {
948 key: "memories.consolidation_service_tier",
949 type: "string",
950 description:
951 "Service tier for global memory consolidation. Defaults to `default` (Standard).",
952 },
874 {953 {
875 key: "features.prefer_mxc",954 key: "features.prefer_mxc",
876 type: "boolean",955 type: "boolean",
883 description:962 description:
884 "Use resumable command execution (stable; enabled on all platforms). User opt-outs are ignored. Managed requirements can disable resumable processes and `write_stdin`, leaving one-shot `exec_command` available.",963 "Use resumable command execution (stable; enabled on all platforms). User opt-outs are ignored. Managed requirements can disable resumable processes and `write_stdin`, leaving one-shot `exec_command` available.",
885 },964 },
965 {
966 key: "features.view_image",
967 type: "boolean",
968 description:
969 "Enable the built-in `view_image` tool for opening local images. Defaults to `true`.",
970 },
886 {971 {
887 key: "features.shell_snapshot",972 key: "features.shell_snapshot",
888 type: "boolean",973 type: "boolean",
901 description:986 description:
902 "Enable persisted goals and automatic continuation (stable; on by default).",987 "Enable persisted goals and automatic continuation (stable; on by default).",
903 },988 },
989 {
990 key: "goals.max_goal_token_budget",
991 type: "integer (positive)",
992 description:
993 "Set the default token budget for new goals and the largest budget a goal can request. Omit to leave goals without a configured limit.",
994 },
904 {995 {
905 key: "features.remote_plugin",996 key: "features.remote_plugin",
906 type: "boolean",997 type: "boolean",
916 key: "features.network_proxy",1007 key: "features.network_proxy",
917 type: "boolean | table",1008 type: "boolean | table",
918 description:1009 description:
919 "Start the network proxy for sandboxed commands (experimental; off by default). Required to enforce permission-profile domain rules unless enabled administrator-managed `experimental_network` requirements start the proxy. Use a table when setting feature-level policy options such as `domains`. Does not filter web search, apps, MCP, or other hosted tools.",1010 "Start the network proxy for sandboxed commands (experimental; off by default). Required to enforce permission-profile domain rules unless enabled administrator-managed `network_proxy` requirements start the proxy. Use a table when setting feature-level policy options such as `domains`. Does not filter web search, apps, MCP, or other hosted tools.",
920 },1011 },
921 {1012 {
922 key: "features.network_proxy.enabled",1013 key: "features.network_proxy.enabled",
1182 type: "string (path)",1273 type: "string (path)",
1183 description: "Working directory for the token command.",1274 description: "Working directory for the token command.",
1184 },1275 },
1276 {
1277 key: "model_providers.gcp.base_url",
1278 type: "string",
1279 description:
1280 "Override the built-in Google Cloud Vertex AI endpoint. Otherwise, Codex builds it from the project ID and location.",
1281 },
1282 {
1283 key: "model_providers.gcp.project_id",
1284 type: "string",
1285 description:
1286 "Google Cloud project ID for the Vertex AI endpoint. Takes precedence over `GOOGLE_CLOUD_PROJECT`.",
1287 },
1288 {
1289 key: "model_providers.gcp.location",
1290 type: "string",
1291 description:
1292 "Google Cloud location for the Vertex AI endpoint. Takes precedence over `GOOGLE_CLOUD_LOCATION`. Defaults to `global`.",
1293 },
1294 {
1295 key: "model_providers.gcp.credential_file",
1296 type: "string (absolute path)",
1297 description:
1298 "Path to a Google Application Default Credentials (ADC) file. Overrides `GOOGLE_APPLICATION_CREDENTIALS` only for the provider\u2019s authentication command.",
1299 },
1185 {1300 {
1186 key: "model_providers.amazon-bedrock.aws.profile",1301 key: "model_providers.amazon-bedrock.aws.profile",
1187 type: "string",1302 type: "string",
1217 description:1332 description:
1218 "Optional GPT-5 Responses API verbosity override; when unset, the selected model/preset default is used.",1333 "Optional GPT-5 Responses API verbosity override; when unset, the selected model/preset default is used.",
1219 },1334 },
1220 {
1221 key: "model_supports_reasoning_summaries",
1222 type: "boolean",
1223 description: "Force Codex to send or not send reasoning metadata.",
1224 },
1225 {1335 {
1226 key: "shell_environment_policy.inherit",1336 key: "shell_environment_policy.inherit",
1227 type: "all | core | none",1337 type: "all | core | none",
1292 description:1402 description:
1293 "Token budget for storing individual tool/function outputs in history.",1403 "Token budget for storing individual tool/function outputs in history.",
1294 },1404 },
1405 {
1406 key: "thread_unload_delay_secs",
1407 type: "integer (nonnegative)",
1408 description:
1409 "Seconds the app server waits before unloading an inactive thread with no subscribers. Set to `0` to unload it as soon as it meets both conditions. Defaults to `60` seconds.",
1410 },
1295 {1411 {
1296 key: "background_terminal_max_timeout",1412 key: "background_terminal_max_timeout",
1297 type: "number",1413 type: "number",
1332 key: "otel.metrics_exporter",1448 key: "otel.metrics_exporter",
1333 type: "none | statsig | otlp-http | otlp-grpc",1449 type: "none | statsig | otlp-http | otlp-grpc",
1334 description:1450 description:
1335 "Select the OpenTelemetry metrics exporter (defaults to `statsig`). In Codex CLI, `analytics.enabled = false` disables this exporter, including custom OTLP exporters. Set to `none` to disable metrics export independently.",1451 "Select the OpenTelemetry metrics exporter. The default, `statsig`, follows `analytics.enabled`. Explicit OTLP exporters work independently of that setting. Set to `none` to disable metrics export.",
1336 },1452 },
1337 {1453 {
1338 key: "otel.log_user_prompt",1454 key: "otel.log_user_prompt",
1340 description:1456 description:
1341 "Opt in to exporting raw user prompts with OpenTelemetry logs.",1457 "Opt in to exporting raw user prompts with OpenTelemetry logs.",
1342 },1458 },
1459 {
1460 key: "otel.log_agent_responses",
1461 type: "boolean",
1462 description:
1463 "Export final response text from the main agent and spawned subagents to the configured OTLP log exporter. Defaults to `false`. Response text can contain sensitive data and is capped at 64 KiB per response.",
1464 },
1465 {
1466 key: "otel.log_guardian_assessments",
1467 type: "boolean",
1468 description:
1469 "Export completed automatic approval reviews to the configured OTLP log exporter. Defaults to `false`. Review rationales can contain sensitive data and are capped at 64 KiB each.",
1470 },
1471 {
1472 key: "otel.span_attributes",
1473 type: "map<string,string>",
1474 description: "Add string attributes to every exported trace span.",
1475 },
1476 {
1477 key: "otel.tracestate",
1478 type: "map<string,map<string,string>>",
1479 description:
1480 "Set fields on W3C tracestate members when propagating trace context. Each member maps field names to string values.",
1481 },
1482 {
1483 key: "otel.tool_result.max_bytes",
1484 type: "integer (nonnegative)",
1485 description:
1486 "Maximum number of UTF-8 bytes from each tool result to include in logs, before the truncation notice. Defaults to `2048`. This setting affects only logged output.",
1487 },
1343 {1488 {
1344 key: "otel.exporter.<id>.endpoint",1489 key: "otel.exporter.<id>.endpoint",
1345 type: "string",1490 type: "string",
1572 description:1717 description:
1573 "Optional sparse checkout paths for a Git marketplace. Include the marketplace catalog and any local plugin directories it references.",1718 "Optional sparse checkout paths for a Git marketplace. Include the marketplace catalog and any local plugin directories it references.",
1574 },1719 },
1720 {
1721 key: "plugins._default.enabled",
1722 type: "boolean",
1723 description:
1724 "Set the default activation state for installed plugins. An explicit `plugins.<plugin>.enabled` overrides this default for plugins their source enables. Omit the table to keep the source or account activation settings.",
1725 },
1575 {1726 {
1576 key: "plugins.<plugin>.enabled",1727 key: "plugins.<plugin>.enabled",
1577 type: "boolean",1728 type: "boolean",
1608 description:1759 description:
1609 "Per-tool approval behavior override for a plugin-provided MCP tool.",1760 "Per-tool approval behavior override for a plugin-provided MCP tool.",
1610 },1761 },
1762 {
1763 key: "tui.presets.<digit>.input",
1764 type: "string",
1765 description:
1766 "Save a prompt or slash command in one of the ten slots (`0`–`9`) shown by `/presets`. Use up to 8,000 UTF-8 bytes of nonempty text. Shell commands beginning with `!` are unsupported.",
1767 },
1768 {
1769 key: "tui.presets.<digit>.label",
1770 type: "string",
1771 description:
1772 "Optional name for the preset in the picker and shortcut hints.",
1773 },
1611 {1774 {
1612 key: "tui.model_availability_nux.<model>",1775 key: "tui.model_availability_nux.<model>",
1613 type: "integer",1776 type: "integer",
1631 description:1794 description:
1632 "Legacy fallback for `tui.disable_paste_burst`. Prefer the setting under `[tui]`.",1795 "Legacy fallback for `tui.disable_paste_burst`. Prefer the setting under `[tui]`.",
1633 },1796 },
1634 {
1635 key: "windows_wsl_setup_acknowledged",
1636 type: "boolean",
1637 description: "Track Windows onboarding acknowledgement (Windows only).",
1638 },
1639 {1797 {
1640 key: "chatgpt_base_url",1798 key: "chatgpt_base_url",
1641 type: "string",1799 type: "string",
1675 description:1833 description:
1676 "Optional web search tool configuration. The object form can set search context size, allowed search domains, and approximate user location. These search-domain filters are separate from sandboxed-command network domain rules and do not restrict connectors or MCP servers.",1834 "Optional web search tool configuration. The object form can set search context size, allowed search domains, and approximate user location. These search-domain filters are separate from sandboxed-command network domain rules and do not restrict connectors or MCP servers.",
1677 },1835 },
1678 {
1679 key: "tools.view_image",
1680 type: "boolean",
1681 description: "Enable the local-image attachment tool `view_image`.",
1682 },
1683 {1836 {
1684 key: "web_search",1837 key: "web_search",
1685 type: "disabled | cached | indexed | live",1838 type: "disabled | cached | indexed | live",
1990 description:2143 description:
1991 "Enforce the directory where Codex stores SQLite-backed runtime state.",2144 "Enforce the directory where Codex stores SQLite-backed runtime state.",
1992 },2145 },
2146 {
2147 key: "unsafe_enforce_sqlite_journal_mode",
2148 type: "boolean",
2149 description:
2150 "On Linux, set to `true` to migrate existing SQLite databases on NFS from WAL to DELETE journaling before opening them for writes. Defaults to `false`. The mount must support POSIX locks across hosts. Keep every other SQLite client that uses the databases stopped on every host until migration succeeds. Replacements preserve file mode bits but belong to the user running the migration and do not copy the original owner, group, or extended ACLs.",
2151 },
1993 {2152 {
1994 key: "log_dir",2153 key: "log_dir",
1995 type: "string (path)",2154 type: "string (path)",
2010 type: "boolean",2169 type: "boolean",
2011 description: "Enforce whether shell tools can start a login shell.",2170 description: "Enforce whether shell tools can start a login shell.",
2012 },2171 },
2172 {
2173 key: "config_server",
2174 type: "table",
2175 description:
2176 "Enroll Codex with a configuration server through local managed requirements. Codex retrieves its policy bundle from this server. A cloud policy cannot configure its own server.",
2177 },
2178 {
2179 key: "config_server.base_url",
2180 type: "string",
2181 description:
2182 "Required HTTPS base URL. Codex appends `/codex/config/bundle`. Omit credentials, query parameters, and fragments from the base URL.",
2183 },
2184 {
2185 key: "config_server.oauth",
2186 type: "table",
2187 description:
2188 "OAuth settings for configuration server sign-in. Requires `authorization_url`, `token_url`, and a nonempty `client_id`. Optional fields are `device_authorization_url`, `resource`, `scopes` (defaults to an empty list), and `redirect_port` (nonzero). All endpoint URLs must use HTTPS.",
2189 },
2013 {2190 {
2014 key: "allowed_login_methods",2191 key: "allowed_login_methods",
2015 type: "array<string>",2192 type: "array<string>",
2197 description:2374 description:
2198 "Set to `false` to prohibit both explicit MXC selection and automatic selection through `features.prefer_mxc`. Omitting this requirement or setting it to `true` permits MXC but doesn't enable it or require it. Legacy implementation restrictions still apply to fallback.",2375 "Set to `false` to prohibit both explicit MXC selection and automatic selection through `features.prefer_mxc`. Omitting this requirement or setting it to `true` permits MXC but doesn't enable it or require it. Legacy implementation restrictions still apply to fallback.",
2199 },2376 },
2377 {
2378 key: "windows.require_mxc",
2379 type: "boolean",
2380 description:
2381 "On Windows, set to `true` to reject any effective sandbox implementation other than MXC. Select MXC separately. If Codex cannot use it, configuration fails instead of falling back to a legacy sandbox.",
2382 },
2200 {2383 {
2201 key: "remote_sandbox_config",2384 key: "remote_sandbox_config",
2202 type: "array<table>",2385 type: "array<table>",
2269 description:2452 description:
2270 "Pin Apps integration availability on or off for managed users.",2453 "Pin Apps integration availability on or off for managed users.",
2271 },2454 },
2455 {
2456 key: "features.api_key_cyber_access_programs",
2457 type: "boolean",
2458 description:
2459 "Allow Codex to send an explicitly selected cyber access program with requests to the built-in OpenAI provider when using API key authentication. The account and model must already have access to the program.",
2460 },
2272 {2461 {
2273 key: "features.in_app_updates",2462 key: "features.in_app_updates",
2274 type: "boolean",2463 type: "boolean",
2281 description:2470 description:
2282 "Set to `false` in `requirements.toml` to disable the built-in browser pane that users open and control directly.",2471 "Set to `false` in `requirements.toml` to disable the built-in browser pane that users open and control directly.",
2283 },2472 },
2473 {
2474 key: "features.browser_annotation_api",
2475 type: "boolean",
2476 description:
2477 "Set to `false` to block website-provided annotation customizations in the built-in browser. Users can still annotate pages themselves. Set to `true` to allow customizations when the app and account support them.",
2478 },
2284 {2479 {
2285 key: "features.in_app_chat",2480 key: "features.in_app_chat",
2286 type: "boolean",2481 type: "boolean",
2293 description:2488 description:
2294 "Set to `false` to disable in-app dictation in the desktop app. Setting it to `true` does not bypass other availability checks.",2489 "Set to `false` to disable in-app dictation in the desktop app. Setting it to `true` does not bypass other availability checks.",
2295 },2490 },
2491 {
2492 key: "features.in_app_voice",
2493 type: "boolean",
2494 description:
2495 "Set to `false` to disable real-time Codex voice in the desktop app. Use `features.in_app_dictation` to manage dictation separately.",
2496 },
2296 {2497 {
2297 key: "features.in_app_local_automation",2498 key: "features.in_app_local_automation",
2298 type: "boolean",2499 type: "boolean",
2321 key: "features.fast_mode",2522 key: "features.fast_mode",
2322 type: "boolean",2523 type: "boolean",
2323 description:2524 description:
2324 "Pin the canonical `fast_mode` feature on or off for managed users.",2525 "Allow or block Fast mode for managed users. Older app servers also use this setting to control Ultrafast mode.",
2526 },
2527 {
2528 key: "features.ultrafast_mode",
2529 type: "boolean",
2530 description:
2531 "Allow or block Ultrafast mode for managed users. On app servers that support independent speed settings, this applies even when Fast mode is disabled. Availability depends on the model and account.",
2532 },
2533 {
2534 key: "features.standalone_web_search",
2535 type: "boolean",
2536 description:
2537 "Experimental. Set to `true` to keep the desktop app's native web search configuration when hosted search through MCP would otherwise be available.",
2325 },2538 },
2326 {2539 {
2327 key: "features.guardian_approval",2540 key: "features.guardian_approval",
2385 type: "table",2598 type: "table",
2386 description: "Managed requirements for agent-driven Browser Use.",2599 description: "Managed requirements for agent-driven Browser Use.",
2387 },2600 },
2601 {
2602 key: "browser_use.extension",
2603 type: "table",
2604 description:
2605 "Managed settings for Browser Use in supported Chromium browser extensions.",
2606 },
2607 {
2608 key: "browser_use.extension.request_headers",
2609 type: "array<table>",
2610 description:
2611 "Add up to 16 HTTP headers to requests from agent-controlled tabs in supported Chromium extensions. Use an empty list to send no managed headers.",
2612 },
2613 {
2614 key: "browser_use.extension.request_headers[].name",
2615 type: "string",
2616 description:
2617 "Header name. Reserved names, including `Authorization` and `Cookie`, are prohibited. Names and values support `{{session_id}}` as their only substitution.",
2618 },
2619 {
2620 key: "browser_use.extension.request_headers[].value",
2621 type: "string",
2622 description: "Header value to send with matching browser requests.",
2623 },
2388 {2624 {
2389 key: "browser_use.allow_webmcp",2625 key: "browser_use.allow_webmcp",
2390 type: "boolean",2626 type: "boolean",
2391 description:2627 description:
2392 "Set to `true` to opt the desktop app's built-in browser into site tools (WebMCP). Setting it to `false` or omitting it leaves normal feature availability checks in place; `false` does not enforce a block. User preferences and site permissions still apply.",2628 "Allow site tools (WebMCP) through workspace policy on eligible managed plans. Both `true` and an unset value allow access through this policy. Setting `false` turns off this path. Users can still have access through their account rollout. Browser settings and site permissions apply.",
2393 },2629 },
2394 {2630 {
2395 key: "browser_use.allow_history_access",2631 key: "browser_use.allow_history_access",
2605 type: "table",2841 type: "table",
2606 description: "Managed desktop application requirements.",2842 description: "Managed desktop application requirements.",
2607 },2843 },
2844 {
2845 key: "application.storage",
2846 type: "table",
2847 description:
2848 "Pin storage locations for newly created work on desktop builds that support managed storage. Each path independently overrides the local preference. Storage settings do not restrict filesystem access.",
2849 },
2850 {
2851 key: "application.storage.default_project_parent",
2852 type: "string (absolute path)",
2853 description:
2854 "Parent directory for new local projects created with Start from scratch.",
2855 },
2856 {
2857 key: "application.storage.projectless_workspace_root",
2858 type: "string (absolute path)",
2859 description: "Root directory for new chats created without a project.",
2860 },
2608 {2861 {
2609 key: "application.network",2862 key: "application.network",
2610 type: "table",2863 type: "table",
2630 "Allow or deny an exact domain. Use domain names without URL schemes, ports, or wildcards.",2883 "Allow or deny an exact domain. Use domain names without URL schemes, ports, or wildcards.",
2631 },2884 },
2632 {2885 {
2633 key: "experimental_network",2886 key: "otel",
2887 type: "table",
2888 description:
2889 "Enforce the specified OpenTelemetry settings. Each exporter replaces the entire corresponding exporter definition. Span attributes and tracestate fields override only matching entries.",
2890 },
2891 {
2892 key: "otel.environment",
2893 type: "string",
2894 description: "Enforce the environment label on telemetry.",
2895 },
2896 {
2897 key: "otel.exporter",
2898 type: "none | otlp-http | otlp-grpc",
2899 description:
2900 "Enforce the log exporter, including its endpoint, headers, and TLS settings.",
2901 },
2902 {
2903 key: "otel.trace_exporter",
2904 type: "none | otlp-http | otlp-grpc",
2905 description:
2906 "Enforce the trace exporter, including its endpoint, headers, and TLS settings.",
2907 },
2908 {
2909 key: "otel.metrics_exporter",
2910 type: "none | statsig | otlp-http | otlp-grpc",
2911 description:
2912 "Enforce the metrics exporter. The Statsig exporter follows `analytics.enabled`. Explicit OTLP metrics exporters run independently of that setting.",
2913 },
2914 {
2915 key: "otel.log_user_prompt",
2916 type: "boolean",
2917 description: "Control whether exported logs include user prompt text.",
2918 },
2919 {
2920 key: "otel.log_agent_responses",
2921 type: "boolean",
2922 description:
2923 "Control whether OTLP logs include final response text from the main agent and spawned subagents.",
2924 },
2925 {
2926 key: "otel.log_guardian_assessments",
2927 type: "boolean",
2928 description:
2929 "Control whether OTLP logs include completed automatic approval assessments and their rationales.",
2930 },
2931 {
2932 key: "otel.tool_result",
2933 type: "table",
2934 description:
2935 "Enforce the tool-result log settings as a unit. An empty table enforces the default byte limit.",
2936 },
2937 {
2938 key: "otel.tool_result.max_bytes",
2939 type: "integer (nonnegative)",
2940 description:
2941 "Maximum UTF-8 bytes of tool-result text before the truncation notice in logs. Defaults to `2048` when the managed table is present.",
2942 },
2943 {
2944 key: "otel.span_attributes",
2945 type: "map<string,string>",
2946 description:
2947 "Enforce individual string attributes on exported spans. Higher-priority requirements win for the same attribute.",
2948 },
2949 {
2950 key: "otel.tracestate",
2951 type: "map<string,map<string,string>>",
2952 description:
2953 "Enforce individual fields within W3C tracestate members. Higher-priority requirements win for the same member and field.",
2954 },
2955 {
2956 key: "network_proxy",
2634 type: "table",2957 type: "table",
2635 description:2958 description:
2636 "Administrator-managed network requirements for sandboxed local commands, enforced from `requirements.toml`. When enabled, these requirements can start the command network proxy without `features.network_proxy`. Browser tools separately check managed network denies and exclusive allowlists. These requirements do not route browser traffic through the proxy or control web search, apps, MCP servers, native-app traffic, or other capability-specific traffic. On supported managed Codex Cloud paths, these requirements constrain command networking alongside separate Cloud environment internet settings. Approved full sandbox escalation can bypass the command proxy where policy permits it. Work Cloud does not inherit these requirements.",2959 "Administrator-managed network requirements for sandboxed local commands. Codex 0.166.0 accepts `[network_proxy]` and its alias `[experimental_network]`. Use one name per requirements layer. Keep the alias in published policies until every client and policy validator supports the new name. When enabled, these requirements can start the command network proxy without `features.network_proxy`. Browser tools separately check managed network denies and exclusive allowlists. These requirements do not route browser traffic through the proxy or control web search, apps, MCP servers, native-app traffic, or other capability-specific traffic. On supported managed Codex Cloud paths, these requirements constrain command networking alongside separate Cloud environment internet settings. Approved full sandbox escalation can bypass the command proxy where policy permits it. Work Cloud does not inherit these requirements.",
2637 },2960 },
2638 {2961 {
2639 key: "experimental_network.enabled",2962 key: "network_proxy.enabled",
2640 type: "boolean",2963 type: "boolean",
2641 description:2964 description:
2642 "Enable sandboxed networking requirements. This does not grant network access when the active sandbox keeps command networking off.",2965 "Enable sandboxed networking requirements. This does not grant network access when the active sandbox keeps command networking off.",
2643 },2966 },
2644 {2967 {
2645 key: "experimental_network.http_port",2968 key: "network_proxy.http_port",
2646 type: "integer",2969 type: "integer",
2647 description:2970 description:
2648 "Loopback HTTP listener port to use for `[experimental_network]` requirements.",2971 "Loopback HTTP listener port to use for `[network_proxy]` requirements.",
2649 },2972 },
2650 {2973 {
2651 key: "experimental_network.socks_port",2974 key: "network_proxy.socks_port",
2652 type: "integer",2975 type: "integer",
2653 description:2976 description:
2654 "Loopback SOCKS5 listener port to use for `[experimental_network]` requirements.",2977 "Loopback SOCKS5 listener port to use for `[network_proxy]` requirements.",
2655 },2978 },
2656 {2979 {
2657 key: "experimental_network.allow_upstream_proxy",2980 key: "network_proxy.allow_upstream_proxy",
2658 type: "boolean",2981 type: "boolean",
2659 description:2982 description:
2660 "Allow sandboxed networking to chain through an upstream proxy from the environment.",2983 "Allow sandboxed networking to chain through an upstream proxy from the environment.",
2661 },2984 },
2662 {2985 {
2663 key: "experimental_network.dangerously_allow_non_loopback_proxy",2986 key: "network_proxy.dangerously_allow_non_loopback_proxy",
2664 type: "boolean",2987 type: "boolean",
2665 description:2988 description:
2666 "Permit non-loopback listener addresses for `[experimental_network]` requirements. Enabling it can expose listeners beyond localhost.",2989 "Permit non-loopback listener addresses for `[network_proxy]` requirements. Enabling it can expose listeners beyond localhost.",
2667 },2990 },
2668 {2991 {
2669 key: "experimental_network.dangerously_allow_all_unix_sockets",2992 key: "network_proxy.dangerously_allow_all_unix_sockets",
2670 type: "boolean",2993 type: "boolean",
2671 description:2994 description:
2672 "Permit arbitrary Unix socket destinations instead of allowlist-only access. Use only in tightly controlled environments.",2995 "Permit arbitrary Unix socket destinations instead of allowlist-only access. Use only in tightly controlled environments.",
2673 },2996 },
2674 {2997 {
2675 key: "experimental_network.domains",2998 key: "network_proxy.domains",
2676 type: "map<string, allow | deny>",2999 type: "map<string, allow | deny>",
2677 description:3000 description:
2678 "Map-shaped administrator domain policy for sandboxed networking. Supports exact hosts, `*.example.com` for subdomains only, `**.example.com` for apex plus subdomains, and global `*` allow rules. Prefer scoped rules because `*` broadly opens public outbound access. Environment rules can replace the same Global domain key within a policy. Higher-priority values replace the same key, while other inherited keys remain. After composition, a different matching `deny`, including an inherited wildcard, still blocks a request. Empty environment maps do not clear Global rules. Verify executor support. Do not combine this with `experimental_network.allowed_domains` or `experimental_network.denied_domains`.",3001 "Map-shaped administrator domain policy for sandboxed networking. Supports exact hosts, `*.example.com` for subdomains only, `**.example.com` for apex plus subdomains, and global `*` allow rules. Prefer scoped rules because `*` broadly opens public outbound access. Environment rules can replace the same Global domain key within a policy. Higher-priority values replace the same key, while other inherited keys remain. After composition, a different matching `deny`, including an inherited wildcard, still blocks a request. Empty environment maps do not clear Global rules. Verify executor support. Do not combine this with `network_proxy.allowed_domains` or `network_proxy.denied_domains`.",
2679 },3002 },
2680 {3003 {
2681 key: "experimental_network.domains.<pattern>",3004 key: "network_proxy.domains.<pattern>",
2682 type: "allow | deny",3005 type: "allow | deny",
2683 description:3006 description:
2684 "Allow or deny sandboxed network access for the matching domain pattern. A deny rule wins when several patterns match.",3007 "Allow or deny sandboxed network access for the matching domain pattern. A deny rule wins when several patterns match.",
2685 },3008 },
2686 {3009 {
2687 key: "experimental_network.allowed_domains",3010 key: "network_proxy.review_domains",
3011 type: "array<string>",
3012 description:
3013 "Route matching hosts through network approval even if an allow rule matches. An explicit deny takes precedence. Approved requests still undergo DNS and private-address checks. Defaults to an empty list.",
3014 },
3015 {
3016 key: "network_proxy.allowed_domains",
2688 type: "array<string>",3017 type: "array<string>",
2689 description:3018 description:
2690 "Administrator allow rules for sandboxed-command networking while the managed network proxy is enabled. These rules do not apply to web search, apps, or MCP servers. Do not combine this with `experimental_network.domains`.",3019 "Administrator allow rules for sandboxed-command networking while the managed network proxy is enabled. These rules do not apply to web search, apps, or MCP servers. Do not combine this with `network_proxy.domains`.",
2691 },3020 },
2692 {3021 {
2693 key: "experimental_network.denied_domains",3022 key: "network_proxy.denied_domains",
2694 type: "array<string>",3023 type: "array<string>",
2695 description:3024 description:
2696 "List-shaped administrator deny rules for sandboxed networking. Do not combine this with `experimental_network.domains`.",3025 "List-shaped administrator deny rules for sandboxed networking. Do not combine this with `network_proxy.domains`.",
2697 },3026 },
2698 {3027 {
2699 key: "experimental_network.managed_allowed_domains_only",3028 key: "network_proxy.managed_allowed_domains_only",
2700 type: "boolean",3029 type: "boolean",
2701 description:3030 description:
2702 "When networking requirements are enabled and this is true, ordinary user configuration and per-domain approvals cannot expand the managed proxy allowlist. With no effective configured or inherited Allow entries, ordinary managed commands have no allowed destinations. A deny-only policy does not allow the rest of the internet. This does not cover every tool or approved full sandbox escalation.",3031 "When networking requirements are enabled and this is true, ordinary user configuration and per-domain approvals cannot expand the managed proxy allowlist. With no effective configured or inherited Allow entries, ordinary managed commands have no allowed destinations. A deny-only policy does not allow the rest of the internet. This does not cover every tool or approved full sandbox escalation.",
2703 },3032 },
2704 {3033 {
2705 key: "experimental_network.unix_sockets",3034 key: "network_proxy.unix_sockets",
2706 type: "map<string, allow | deny>",3035 type: "map<string, allow | deny>",
2707 description:3036 description:
2708 "Administrator-managed Unix socket allowlist for sandboxed networking on macOS. Paths must be absolute.",3037 "Administrator-managed Unix socket allowlist for sandboxed networking on macOS. Paths must be absolute.",
2709 },3038 },
2710 {3039 {
2711 key: "experimental_network.unix_sockets.<path>",3040 key: "network_proxy.unix_sockets.<path>",
2712 type: "allow | deny",3041 type: "allow | deny",
2713 description:3042 description:
2714 "On macOS, `allow` adds an absolute Unix socket path to the allowlist; `deny` leaves it out. A `deny` entry cannot block a socket when allow-all Unix sockets is enabled.",3043 "On macOS, `allow` adds an absolute Unix socket path to the allowlist; `deny` leaves it out. A `deny` entry cannot block a socket when allow-all Unix sockets is enabled.",
2715 },3044 },
2716 {3045 {
2717 key: "experimental_network.allow_local_binding",3046 key: "network_proxy.allow_local_binding",
2718 type: "boolean",3047 type: "boolean",
2719 description:3048 description:
2720 "Permit broader local/private-network access for sandboxed networking. On the supported Codex Cloud proxy path, an explicit false can prevent upstream-proxy access even if a domain is allowed. It defaults to true only if no applicable requirement, selected network profile, or proxy feature setting provides a value. Inherited false remains explicit. A supported higher-priority Cloud override can change it without broadening Global for Local or adding domain Allow entries. Verify executor support. Do not apply this Cloud default to Local.",3049 "Permit broader local/private-network access for sandboxed networking. On the supported Codex Cloud proxy path, an explicit false can prevent upstream-proxy access even if a domain is allowed. It defaults to true only if no applicable requirement, selected network profile, or proxy feature setting provides a value. Inherited false remains explicit. A supported higher-priority Cloud override can change it without broadening Global for Local or adding domain Allow entries. Verify executor support. Do not apply this Cloud default to Local.",
2741 key: "hooks.<Event>",3070 key: "hooks.<Event>",
2742 type: "array<table>",3071 type: "array<table>",
2743 description:3072 description:
2744 "Matcher groups for a hook event such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SessionEnd`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, or `Stop`.",3073 "Matcher groups for a hook event such as `PreModelRequest`, `PostModelRequest`, `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SessionEnd`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, or `Stop`.",
2745 },3074 },
2746 {3075 {
2747 key: "hooks.<Event>[].hooks",3076 key: "hooks.<Event>[].hooks",