托管配置用于控制 ChatGPT 桌面应用、Codex CLI 和 IDE 扩展中所涵盖功能的受支持本地运行时行为。不同客户端及版本支持的要求可能有所不同。托管配置不会授予 ChatGPT 工作空间访问权限、分配席位,也不会取代工作空间基于角色的访问控制 (RBAC)。有关工作空间功能的访问权限,请参阅角色与工作空间权限;有关本地运行时策略,请参阅本页。
企业管理员可以通过以下两种方式控制受支持的本地客户端行为:
- 要求:由管理员强制执行、用户无法覆盖的约束。
- 托管默认值:受支持的客户端启动时应用的初始值。用户仍可在运行期间更改设置;客户端会在下次启动时重新应用托管默认值。
管理员强制执行的要求(requirements.toml)
要求会约束安全敏感设置,包括审批策略、审批审查者、自动审查策略、沙盒模式、权限配置方案、网页搜索模式、托管钩子、用户可启用的 MCP 服务器,以及用户可添加、从中安装插件或刷新的用户自配插件市场来源。解析配置(例如来自 config.toml、配置方案文件或 CLI 配置覆盖项的配置)时,如果某个值与强制执行的规则冲突,本地客户端会回退到兼容值并通知用户。如果您配置了 mcp_servers 允许列表,只有当 MCP 服务器的名称和身份都与获准条目匹配时,客户端才会启用该服务器;否则会将其禁用。
要求还可以通过 requirements.toml 中的 [features] 表约束功能标志。请注意,功能并非都涉及安全,但企业可以根据需要固定其值。未指定的键不受约束。
对于 Codex 0.138.0 或更高版本,请优先使用权限配置方案,
并搭配 allowed_permission_profiles 和托管的 default_permissions。
仅在仍配置 sandbox_mode 的旧版部署中
使用 allowed_sandbox_modes。
有关确切的键列表,请参阅配置参考资料中的 requirements.toml 部分。
位置和优先级
每个受支持的本地客户端都会按优先级从低到高组合各项要求:
- 系统
requirements.toml(在 Unix 系统上为/etc/codex/requirements.toml, 包括 Linux 和 macOS; 在 Windows 上为%ProgramData%\OpenAI\Codex\requirements.toml)。 - 通过云端配置包下发的企业托管要求。
- 本地客户端重新解释为要求的旧版
managed_config.toml字段。 - 通过
com.openai.codex:requirements_toml_base64下发的 macOS 托管偏好设置(MDM)。
优先级较高的配置层会覆盖
优先级较低的配置层中的普通标量值和列表值。表按键合并,
而规则、钩子和文件系统限制等要求则根据具体字段采用不同的组合方式。请查阅
requirements.toml 参考资料
了解当前模式,不要假定所有字段
都以相同方式合并。
为了保持向后兼容,受支持的本地客户端会将旧版
approval_policy、approvals_reviewer 和 sandbox_mode 字段重新解释为要求。
此转换会在必要时添加兼容性选项;
如需明确指定允许列表,请使用 requirements.toml。
云端托管要求
当用户使用受支持套餐的 ChatGPT 账户登录时,受支持的本地客户端
可以接收与该工作空间关联的管理员强制要求。这是
与 requirements.toml 兼容的策略的下发渠道,不会授予
工作空间访问权限,也不会取代工作空间 RBAC。身份验证要求必须
在本地管理。
打开托管配置 以创建和分配云端托管要求。例如,以下策略会限制 审批和沙盒的可选项,并在受支持的 Shell 入口点 运行前请求确认:
allowed_approval_policies = ["on-request"]
allowed_sandbox_modes = ["read-only", "workspace-write"]
[rules]
prefix_rules = [
{ pattern = [{ any_of = ["bash", "sh", "zsh"] }], decision = "prompt", justification = "Require explicit approval for shell entry points" },
]
确认每个受管客户端版本都支持您选择的键,并在向整个组织分配策略之前,先在小范围用户中测试。请查阅配置参考资料了解当前模式,并通过管理界面了解当前的分配行为。
服务会选择适用于 当前登录身份的企业托管要求层。本地客户端会将这些层与 位置和优先级中所述的其他要求来源一起评估。 请使用当前的管理界面在工作空间端进行创建和 分配。不要依赖复制的群组匹配算法; 该行为由管理服务负责,可以独立于本地 要求格式进行更改。
有关受支持的键和示例,请参阅
requirements.toml 示例和
requirements.toml 参考资料。
本地客户端如何应用云端托管要求
当用户启动受支持的本地客户端并使用受支持套餐的 ChatGPT 账户登录时,客户端会先检查是否有有效且与身份匹配的缓存条目。如果没有有效条目,客户端会获取适用的配置包,必要时重试,并在成功后写入带签名的缓存条目。如果请求失败或超时,且没有可用的有效缓存,云端配置包加载会返回错误,而不会在缺少云端托管要求层的情况下静默启动。
完成缓存处理后,客户端会将云端要求与上述其他要求层组合。后台刷新可以更新缓存,供后续启动使用;它不会替换已加载到当前进程中的要求。
确认管理员和员工的使用体验
为每项托管策略指定负责人,记录应接收该策略的用户或群组,并注明设置各项文件系统、网络、审批或权限配置方案限制的业务原因。
扩大推出范围之前,请与一位有代表性的用户一起测试一个获准的工作流程和一个明确禁止的工作流程。在受支持的客户端中验证实际生效的设置,不要假定仅凭工作空间角色或群组就能强制执行本地限制。
在本地管理身份验证
在本地系统的 requirements.toml 或 macOS MDM 要求中设置 allowed_login_methods、allowed_chatgpt_workspaces、
cli_auth_credentials_store 和 chatgpt_base_url。
Codex 会忽略云端托管要求中的这四个字段。
本地身份验证要求会在凭据加载之前
以及 Codex 获取云端策略之前生效。
如需强制用户通过 ChatGPT 登录获准的工作空间,并将凭据存储在操作系统凭据存储中,请使用以下配置:
allowed_login_methods = ["chatgpt"]
allowed_chatgpt_workspaces = ["00000000-0000-0000-0000-000000000000"]
cli_auth_credentials_store = "keyring"
allowed_login_methods 接受 chatgpt、api 或两者。如果省略此设置,
则不限制登录方式。如果设置此列表,则必须包含至少一种方式。
api 允许 API 身份验证,包括 Amazon Bedrock。
工作空间限制也适用于
Codex 访问令牌。
用户配置的 forced_login_method 和 forced_chatgpt_workspace_id 必须
符合要求。用户选择的工作空间也必须
列在托管的工作空间允许列表中。如果没有匹配的工作空间,则无法使用 ChatGPT 登录。
在获准的情况下,API 身份验证仍然可用。如果没有可用的登录方式,
Codex 会拒绝启动。
有关凭据存储模式和服务 URL 配置,请参阅要求参考资料 。
requirements.toml 示例
此示例会阻止 --ask-for-approval never 和 --sandbox danger-full-access(包括 --yolo):
allowed_approval_policies = ["untrusted", "on-request"]
allowed_sandbox_modes = ["read-only", "workspace-write"]
禁用应用快照
如需为受管用户禁用应用快照,请设置顶层 allow_appshots 要求:
allow_appshots = false
在应用快照可用的情况下,allow_appshots = false 会将其禁用。如果您
省略该键,要求就不会约束应用快照,并会按常规方式
检查产品可用性。App Server 客户端
通过 configRequirements/read 读取实际生效的要求时,会通过
allowAppshots 收到相同的限制;如果省略 allowAppshots 或将其值设为 null,则不会禁用
应用快照。
禁用设备远程控制
如需为受管用户禁用设备远程控制,
请设置顶层 allow_remote_control 要求:
allow_remote_control = false
在支持设备远程控制的情况下,allow_remote_control = false
会将其禁用。如果您省略该键,要求就不会约束设备远程控制,
并会按常规方式检查产品可用性。此要求不会
禁用 SSH 远程连接。
控制可用的权限配置方案
使用 allowed_permission_profiles 控制用户可以选择哪些内置和自定义
权限配置方案。这是
allowed_sandbox_modes 在权限配置方案中的对应设置;请根据
用户选择权限的方式使用相应的允许列表。
权限配置方案允许列表需要 Codex 0.138.0 或更高版本。Codex 0.137.0 及
更早版本会忽略 allowed_permission_profiles 和托管的
default_permissions。
只有在所有受管客户端都运行支持此功能的版本后,才能使用以下权限配置方案示例。在全部客户端升级完成之前,不要部署托管的自定义配置方案。
如果设置了此表,它就是获准配置方案的完整列表。它允许
设为 true 的配置方案,并禁止省略或设为 false 的配置方案,包括
未来 Codex 版本中新增的内置配置方案。
允许标准配置方案
此策略允许只读访问和工作空间访问,但不允许完全访问权限:
default_permissions = ":workspace"
[allowed_permission_profiles]
":read-only" = true
":workspace" = true
# ":danger-full-access" is omitted, so it is denied.
添加遵循最小权限原则的托管默认值
管理员可以在同一要求来源中定义自定义配置方案。请使用
组织专属的配置方案名称,避免与用户
已加载配置中的名称冲突。自定义名称不能以 : 开头,也不能使用
保留名称 filesystem。
不要向运行 Codex 0.137.0 或更早版本的客户端部署托管的自定义配置方案。这些客户端能够识别配置方案表,但无法识别用于选择该配置方案的托管默认值。
例如:
default_permissions = "acme_review_only"
[allowed_permission_profiles]
":read-only" = true
":workspace" = true
acme_review_only = true
# ":danger-full-access" is intentionally omitted, so it is denied.
[permissions.acme_review_only]
description = "Review code without modifying the workspace."
extends = ":read-only"
仅允许企业定义的配置方案
如果用户只能选择管理员定义的配置方案,请省略所有内置配置方案:
default_permissions = "acme_workspace"
[allowed_permission_profiles]
acme_workspace = true
[permissions.acme_workspace]
description = "Workspace access with sensitive files denied."
extends = ":workspace"
[permissions.acme_workspace.filesystem]
glob_scan_max_depth = 3
[permissions.acme_workspace.filesystem.":workspace_roots"]
"**/*.env" = "deny"
即使用户无法直接选择内置的 :workspace 配置方案,
自定义配置方案仍可扩展 :workspace。
禁用其他来源允许的配置方案
权限允许列表按配置方案名称合并。由于云端要求的
优先级高于系统要求,云端要求可以使用 false
来禁用系统文件允许的配置方案。
云端要求:
default_permissions = ":read-only"
[allowed_permission_profiles]
":read-only" = true
":workspace" = false
系统要求:
[allowed_permission_profiles]
":read-only" = true
":workspace" = true # Not honored because cloud requirements set this to false.
请将 default_permissions 显式设为获准的配置方案。如果省略此设置,
本地运行时仅在 :workspace 和
:read-only 都被明确允许时,才默认使用 :workspace。如果
未设置 allowed_permission_profiles,托管要求就不会限制用户可选择的配置方案名称。
每个条目都必须指定一个内置配置方案,或一个在
已加载的配置或要求来源中定义的自定义配置方案。在托管要求中定义自定义配置方案,
即可集中控制其行为。
按主机覆盖沙盒要求
如果同一受管策略需要在不同主机上应用不同的
沙盒要求,请使用 [[remote_sandbox_config]]。例如,您可以为笔记本电脑保留更严格的
默认设置,同时允许在匹配的开发机或 CI 运行器上写入工作空间。
主机专属条目目前仅覆盖 allowed_sandbox_modes:
allowed_sandbox_modes = ["read-only"]
[[remote_sandbox_config]]
hostname_patterns = ["*.devbox.example.com", "runner-??.ci.example.com"]
allowed_sandbox_modes = ["read-only", "workspace-write"]
本地运行时会将每个 hostname_patterns 条目与
尽力解析得到的主机名进行比较。它会优先使用完全限定域名,
若无法获取,则回退到本地主机名。匹配不区分大小写;
* 匹配任意字符序列,? 匹配单个字符。
在同一要求来源内,以第一个匹配的 [[remote_sandbox_config]] 条目为准。
如果没有匹配的条目,本地运行时会保留顶层的
allowed_sandbox_modes。主机名匹配仅用于选择策略;
请勿将其视为设备身份已通过验证的凭据。
您也可以限制网页搜索模式:
allowed_web_search_modes = ["cached"] # "disabled" remains implicitly allowed
allowed_web_search_modes = [] 仅允许 "disabled"。
例如,即使在 danger-full-access 会话中,allowed_web_search_modes = ["cached"] 也会禁止实时网页搜索。
配置网络访问要求
[experimental_network] 是实验性功能,可能会发生变化。
在用户使用的本地客户端版本和操作系统上验证这些要求之前,
请勿在企业部署中大范围启用。Windows
支持仍然有限;除非您已在自己的环境中完成测试,
否则请避免向 Windows 用户应用此策略。
如果管理员需要集中定义网络访问要求,
请使用 requirements.toml 中的 [experimental_network]。这些要求
独立于用户的 features.network_proxy 开关:即使没有该功能标志,
它们也能配置沙盒网络,但在当前沙盒关闭网络时,
不会授予命令网络访问权限。请设置
experimental_network.enabled = true 以启用受管代理;
仅配置域名规则不会启用代理。
[experimental_network]
enabled = true
managed_allowed_domains_only = true
[experimental_network.domains]
"api.openai.com" = "allow"
"**.example.com" = "allow"
"blocked.example.com" = "deny"
"**.exfil.example.com" = "deny"
只有当您还在
[experimental_network.domains] 中定义了由管理员管理的 "allow" 条目,
并且希望仅允许这些规则生效时,才应使用 experimental_network.managed_allowed_domains_only = true。如果将其设为
true 却未配置受管允许规则,用户添加的域名允许规则将不再
生效。请勿将规范的 domains 映射与旧版
allowed_domains 或 denied_domains 列表混用。
*.example.com 仅匹配子域名。**.example.com 匹配根域名
及其子域名。匹配的拒绝规则优先于允许规则。
域名语法、本地或私有目标规则、拒绝优先于允许的行为, 以及 DNS 重绑定限制,均与 智能体审批与安全中介绍的沙盒网络行为相同。
代理会为沙盒内运行的本地命令路由网络流量。浏览器工具在访问源之前,也会检查受管网络拒绝规则和排他性允许列表;这是独立的策略检查,并非通过命令代理路由浏览器流量。该代理不会过滤网页搜索、应用和连接器、MCP 服务器、原生应用流量、Codex 服务请求或 Codex 云端流量。请针对各个使用界面和功能使用相应的控制项:
- 使用
allowed_web_search_modes限制网页搜索。 - 使用
features.apps = false禁用应用和连接器集成, 并在支持的客户端中使用features.plugins = false禁用插件。 - 使用受管
mcp_servers批准列表限制 MCP 服务器。 - 使用
browser_use、in_app_browser和computer_use等功能要求,限制浏览器和计算机使用能力。 - 在 Codex 云端的云端环境设置中配置其网络访问权限。
命令域名允许列表不能替代这些针对特定能力的控制项。
控制浏览器和计算机使用
使用 requirements.toml 中的 [browser_use] 和 [computer_use] 表,
对支持这些设置的桌面客户端施加限制。请在部署所用的客户端版本
和操作系统上验证该策略。配置允许规则并不会
安装插件、授予操作系统权限,或批准
仍需审查的操作。
对于浏览器访问,请配置源策略。源包含协议、
主机和可选端口,例如 https://example.com 或
https://*.example.com:8443。请勿包含路径、查询参数或片段。
与命令网络的域名规则不同,浏览器源规则会区分 HTTP 和 HTTPS,
并匹配端口。
此示例将浏览器访问限制在一个已批准的网站,并禁止在该网站上传文件或使用完整的 Chrome DevTools Protocol(CDP)访问权限:
[browser_use]
allow_history_access = false
allow_global_persistent_approval = false
[browser_use.default_origin_policy]
access = "deny"
[browser_use.origins."https://example.com"]
access = "allow"
uploads = "deny"
downloads = "allow"
full_cdp_access = "deny"
persistent_approval = false
access_approval_lifetime = "turn"
匹配的源规则按字段解析。匹配的拒绝规则优先;否则,匹配规则未指定的字段由默认源策略提供。本地配置可以增加限制,但不能放宽受管拒绝规则。网络拒绝规则和排他性受管网络允许列表仍然适用。
设置 browser_use.disable_auto_review = true 可禁用针对浏览器操作的
自动审批审查,或在源策略中设置 auto_review = "deny",
以针对该源限制自动审批审查。这些设置控制审批处理方式;
不会禁用模型安全监控。
对于原生应用,请设置默认访问策略并指定允许的应用。例如,以下 macOS 策略允许使用“计算器”,并禁止保存审批:
[computer_use]
default_app_access = "deny"
allow_persistent_approval = false
[computer_use.macos.bundle_ids]
"com.apple.calculator" = "allow"
Windows 策略可以通过
computer_use.windows.aumids 标识打包应用,或通过
computer_use.windows.exes 标识可执行文件。可执行文件规则必须包含 publisher_name、
product_name 和 access;binary_name 为可选项。请使用应用经过验证的
身份信息,而不是仅凭其显示名称。
请参阅配置参考资料 了解完整字段,并参阅锁定后使用限制 了解受管 macOS 设备的相关限制。
固定功能标志
您也可以为接收受管 requirements.toml 的用户
固定功能标志:
[features]
personality = true
unified_exec = false
# Disable surface-specific features when needed.
browser_use = false
browser_use_full_cdp_access = false
browser_use_external = false
in_app_browser = false
in_app_updates = false
computer_use = false
对于运行时功能,请使用 config.toml 的 [features] 表中的规范功能键。
本地运行时会调整已识别的功能,使其符合这些固定设置,
并拒绝向 config.toml 或配置方案文件的功能设置
写入与之冲突的值。
in_app_browser = false会禁用内置浏览器面板。- 在支持此设置的客户端中,
in_app_updates = false会在重启后 禁用 ChatGPT 桌面应用自身的更新程序。它不会影响外部软件包部署, 也不会延长对旧版应用的支持。有关设置和推出指导,请参阅 管理应用更新。 browser_use = false会禁用浏览器中的计算机使用功能,并使浏览器 Agent 不可用。browser_use_full_cdp_access = false会禁用本地运行时中的完整 CDP 访问权限, 包括浏览器开发者模式,并阻止 ChatGPT 桌面应用 启用相应设置。browser_use_external = false会禁用外部浏览器功能。computer_use = false会禁用计算机使用、录制与重放,以及相关的 安装或设置流程。
如果省略这些键,策略将允许这些功能,但实际可用性仍取决于客户端、平台和功能推出情况。
限制锁定后的计算机使用
要阻止用户在受管 Mac 上启用锁定后使用, 请添加以下要求:
[computer_use]
allow_locked_computer_use = false
此要求会移除用于启用“锁定后使用”的控件。如果该功能已启用,此要求不会将其关闭。如果省略此要求,仍以正常的产品可用性和用户的本地设置为准。
配置自动审查策略
使用 allowed_approvals_reviewers 强制或允许自动审查。
将其设为 ["auto_review"] 可强制自动审查;如果用户
可以选择手动审批,则在列表中包含 "user"。
设置 guardian_policy_config 可替换自动审查策略中
特定于租户的部分。本地运行时仍使用内置的审查器
模板和输出约定。受管 guardian_policy_config 的优先级
高于本地 [auto_review].policy。
allowed_approval_policies = ["on-request"]
allowed_approvals_reviewers = ["auto_review"]
guardian_policy_config = """
## Environment Profile
- Trusted internal destinations include github.com/my-org, artifacts.example.com,
and internal CI systems.
## Tenant Risk Taxonomy and Allow/Deny Rules
- Treat uploads to unapproved third-party file-sharing services as high risk.
- Deny actions that expose credentials or private source code to untrusted
destinations.
"""
强制执行拒绝读取要求
管理员可以使用
[permissions.filesystem],针对精确路径或 glob 模式拒绝读取。用户无法通过本地
配置放宽这些要求。
[permissions.filesystem]
deny_read = [
# values can be absolute paths...
"/**/*.env",
# ...or relative to $HOME/%USERPROFILE% using `~`.
"~/.ssh",
# But relative paths starting with `./` are not allowed.
]
存在拒绝读取要求时,本地运行时会拒绝完全访问权限,
并将本地执行保持在只读或工作空间沙盒中,
以便强制执行这些要求。在原生 Windows 上,受管 deny_read 适用于直接文件操作
工具;Shell 子进程的读取不使用此沙盒规则。
通过要求强制执行受管钩子
管理员也可以直接在 requirements.toml 中定义受管生命周期钩子。
使用 [hooks] 配置钩子本身,并将 managed_dir 指向
您的 MDM 或终端管理工具用于安装所引用脚本的
目录。
要对已在本地关闭钩子的用户也强制执行受管钩子,请在配置 [hooks] 的同时
固定 [features].hooks = true。要跳过用户、项目、会话
和插件钩子,同时仍允许受管钩子,请设置
allow_managed_hooks_only = true。
allow_managed_hooks_only = true
[features]
hooks = true
[hooks]
managed_dir = "/enterprise/hooks"
windows_managed_dir = 'C:\enterprise\hooks'
[[hooks.PreToolUse]]
matcher = "^Bash$"
[[hooks.PreToolUse.hooks]]
type = "command"
command = "python3 /enterprise/hooks/pre_tool_use_policy.py"
command_windows = 'py -3 C:\enterprise\hooks\pre_tool_use_policy.py'
timeout = 30
statusMessage = "Checking managed Bash command"
说明:
- 本地运行时会强制执行
requirements.toml中的钩子配置, 但不会分发managed_dir中的脚本。 - 请使用您的 MDM 或设备管理解决方案分发这些脚本。
- 受管钩子命令应使用绝对路径,引用所配置的受管目录下的脚本。
allow_managed_hooks_only = true会跳过来自用户、项目、会话和 插件的钩子,但仍会加载requirements.toml及其他 受管配置层中的钩子。
通过要求强制执行命令规则
管理员还可以在 requirements.toml 中
使用 [rules] 表强制执行限制性命令规则。这些规则会与常规 .rules 文件合并,
仍以最严格的判定结果为准。
与 .rules 不同,要求中的规则必须指定 decision,并且该值
必须是 "prompt" 或 "forbidden",不能是 "allow"。
[rules]
prefix_rules = [
{ pattern = [{ token = "rm" }], decision = "forbidden", justification = "Use git clean -fd instead." },
{ pattern = [{ token = "git" }, { any_of = ["push", "commit"] }], decision = "prompt", justification = "Require review before mutating history." },
]
要限制本地客户端可以启用哪些 MCP 服务器,请添加 mcp_servers
批准列表。对于 stdio 服务器,按 command 匹配;对于可流式传输的 HTTP
服务器,按 url 匹配:
[mcp_servers.docs]
identity = { command = "codex-mcp" }
[mcp_servers.remote]
identity = { url = "https://example.com/mcp" }
字符串形式的 identity.command 仅匹配所配置的 command。
它不会检查 args、cwd、env 或 env_vars。
要约束完整的 stdio 调用,请匹配可执行文件及每个位置参数:
[mcp_servers.internal.identity]
command = { executable = "/usr/local/bin/codex-mcp", args = [
{ match = "exact", value = "serve" },
{ match = "prefix", value = "--workspace=" },
] }
可执行文件、参数数量和参数顺序都必须匹配。参数和 URL
规则支持 exact、prefix 以及匹配完整值的 regex 匹配方式。结构化
命令规则仍不会检查 cwd、env 或 env_vars。插件捆绑的
MCP 服务器在
plugins.<plugin>.mcp_servers.<server> 下使用相同的身份结构。
如果 mcp_servers 存在但为空,本地客户端会禁用所有 MCP 服务器。
控制插件可用性
要在支持的本地客户端中关闭插件,请在 requirements.toml 中将 features.plugins 设置为
false:
features.plugins = false
用户使用 API 密钥登录 Codex 时,此设置同样适用。请参阅
features.plugins
参考资料,了解
支持的配置。
限制插件市场来源
要限制对用户配置的市场来源执行的操作,请设置
restrict_to_allowed_sources = true,并定义一条或多条来源规则:
[marketplaces]
restrict_to_allowed_sources = true
[marketplaces.allowed_sources.company_plugins]
source = "git"
url = "https://github.com/example/company-plugins.git"
ref = "main"
[marketplaces.allowed_sources.internal_git]
source = "host_pattern"
host_pattern = '^git\.example\.com$'
[marketplaces.allowed_sources.local_plugins]
source = "local"
path = "/opt/company/codex-plugins"
Git 规则会匹配规范化后的代码仓库 URL;如果指定了
ref,还会对其进行精确匹配。主机匹配模式是正则表达式,用于匹配转换为小写的 Git 主机名;
使用 ^ 和 $ 可匹配完整主机名。本地规则要求使用
规范化的绝对路径。请参阅 requirements.toml 参考资料,
了解完整的模式和合并行为。
对于用户配置的来源,这些要求会拒绝不匹配规则的市场添加、插件安装以及已配置 Git 市场的刷新操作。 由 Codex 托管的 OpenAI 市场在来源和保留名称均匹配时仍然可用。 这些要求不会在运行时筛选用户已配置的市场或其中的插件。
这些来源限制仅适用于支持插件市场操作的本地客户端:桌面应用中的 ChatGPT 和 Codex,以及 Codex CLI。 它们不会控制网页版或移动端 ChatGPT 中的插件使用,也不会为 IDE 扩展添加插件。
托管默认值(managed_config.toml)
托管默认值用于设置受支持的本地客户端启动时使用的配置。
启动时,这些默认值会覆盖用户本地的 config.toml 以及通过 CLI --config 指定的所有覆盖值。
用户仍可在当前运行期间更改这些设置,
默认值会在客户端下次启动时再次应用。
如果托管默认值、macOS MDM 配置方案或已保存的配置为使用 ChatGPT 登录的用户固定使用 gpt-5.4
或 gpt-5.4-mini,请在 2026 年 8 月 31 日之前更新。将 gpt-5.4 替换为 gpt-5.6-terra,并将 gpt-5.4-mini 替换为
gpt-5.6-luna。OpenAI API 以及使用您自己的 API 密钥进行身份验证的 Codex
不受影响。请参阅工作空间模型
可用性。
请确保托管默认值符合您的要求;本地运行时会拒绝不允许的值。
优先级与分层
本地运行时按以下顺序组合出最终生效的配置(上层覆盖下层):
- 托管偏好设置(macOS MDM;优先级最高)
managed_config.toml(系统文件/托管文件)config.toml(用户的基础配置)
CLI --config key=value 指定的覆盖值会应用于基础配置,但托管层会覆盖这些值。这意味着,即使您提供了本地标志,每次运行仍会从托管默认值开始。
云端托管要求影响的是要求层,而不是托管默认值。有关优先级,请参阅上文“管理员强制执行的要求”部分。
文件位置
- Linux/macOS(Unix):
/etc/codex/managed_config.toml - Windows/非 Unix 系统:
~/.codex/managed_config.toml
如果文件不存在,本地运行时会跳过托管层。
macOS 托管偏好设置(MDM)
在 macOS 上,管理员可以推送设备配置方案,在以下位置提供经过 base64 编码的 TOML 载荷:
- 偏好设置域:
com.openai.codex - 键:
config_toml_base64(托管默认值)requirements_toml_base64(要求)
本地运行时将这些“托管偏好设置”载荷解析为 TOML。
对于托管默认值(config_toml_base64),托管偏好设置的优先级最高。
对于要求(requirements_toml_base64),优先级遵循
上文所述的云端托管要求顺序。
要求侧的 [features] 表同样适用于 requirements_toml_base64;
其中也应使用规范的功能键。
MDM 设置工作流程
本地运行时支持标准 macOS MDM 载荷,因此您可以
使用 Jamf Pro、Fleet 或 Kandji 等工具分发设置。
简易部署流程如下:
- 编写托管载荷的 TOML 内容,并使用
base64进行编码(不换行)。 - 将该字符串填入您的 MDM 配置方案中
com.openai.codex域下的config_toml_base64(托管默认值)或requirements_toml_base64(要求)。 - 推送配置方案,然后请用户重启受支持的本地客户端,并确认启动配置摘要中显示了托管值。
- 撤销或更改策略时,请更新托管载荷;客户端会在下次启动时读取更新后的偏好设置。
避免在载荷中嵌入机密信息或频繁变化的动态值。与其他 MDM 设置一样,应将托管 TOML 纳入变更控制。
managed_config.toml 示例
# Set conservative defaults
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[sandbox_workspace_write]
network_access = false # keep network disabled unless explicitly allowed
[otel]
environment = "prod"
exporter = "otlp-http" # point at your collector
log_user_prompt = false # keep prompts redacted
# exporter details live under exporter tables; see Monitoring and telemetry above
建议的防护措施
- 对于大多数用户,建议使用
workspace-write并配合审批;仅在受控容器中使用完全访问权限。 - 请保持
network_access = false,除非您的安全审查允许访问工作流所需的收集器或域名。 - 使用托管配置固定 OTel 设置(导出器、环境),但请保持
log_user_prompt = false,除非您的策略明确允许存储提示内容。 - 定期审计本地
config.toml与托管策略之间的差异,以发现配置偏移;托管层应优先于本地标志和文件。