codex_plugin_* OpenClaw 动态工具。
请在基础 Codex 运行框架 已经可用之后再使用本页。
要求
- 代理运行时必须是原生 Codex harness。
plugins.entries.codex.enabled必须为true。plugins.entries.codex.config.codexPlugins.enabled必须为true。- Codex app-server 必须准确报告稳定版本
0.147.0。官方插件附带@openai/codex0.147.0;自定义、远程和 macOS 桌面所有的二进制文件 必须使用完全相同的版本。 - 目标 Codex app-server 必须能够看到预期的市场、插件和 应用清单。
- 迁移仅支持在源 Codex home 中观察到的、从源安装的
openai-curated插件。Codex 会以openai-api-curatedwire 名称向 API-key 和 Bedrock 账户提供相同的目录; OpenClaw 将这两个名称视为同一个精选目录,因此已配置的openai-curated插件可以从任一名称解析。 - 原生运行时还支持 Codex 已经可用的其他市场,例如
openai-bundled、openai-primary-runtime、workspace-directory,以及当前仓库中的市场清单。 在所有者或operator.admin明确安装或启用其市场限定身份之前,插件仍然不可用。
codexPlugins 对 OpenClaw-provider 运行、ACP 会话
绑定或其他运行环境没有影响,因为这些路径从不会使用原生 apps 配置
创建 Codex app-server 线程。
OpenAI 侧的 Codex 账户、应用可用性以及工作区应用/插件控制
来自已登录的 Codex 账户。有关 OpenAI 账户和管理员模型,请参见
将 Codex 与你的 ChatGPT 计划一起使用。
快速开始
从源 Codex home 预览迁移:--verify-plugin-apps,使迁移读取源已安装应用
快照和应用元数据,并要求每个所属应用在规划原生激活之前都必须存在、已启用
且可访问:
codexPlugins 条目,并为选定的插件调用 Codex app-server 的 plugin/install。迁移后的配置如下所示:
openai-curated。若要查找 Codex 已经可以看到的其他插件,请列出可用的市场目录,并安装准确的市场限定身份:
.agents/plugins/marketplace.json 发现仓库市场。在列出或安装其插件之前,
所有者不需要将该市场添加到 OpenClaw 配置中。官方 bundled、primary-runtime、精选、
工作区、共享和个人市场取决于已登录的 Codex 账户以及上游功能或管理员策略。
当 Codex 要求显式配置或允许市场来源时,这些要求仍然适用;OpenClaw 不会绕过它们。
安装会写入类似以下内容的明确配置条目:
plugin/install 之前检查经过身份验证的所有者或管理员。Codex 仍会继续执行市场来源、
工作区管理员、账户和连接器身份验证策略。需要 Codex 安装中间页的远程插件,或不会报告是否需要该中间页的远程插件,
必须先在 Codex 中安装;之后重新运行 OpenClaw 安装命令,以授权已经安装的插件。
当响应缺少准确的市场、插件身份、详细信息身份或应用就绪证据时,OpenClaw 会继续隐藏应用。
如果连接器需要额外登录,请先完成授权,然后再期待插件工具变得可用。
在 codexPlugins 变更后,新的 Codex 会话会自动获取更新后的
app 集。运行 /new 或 /reset 以刷新当前
会话。插件启用/禁用变更不需要重启 gateway。
定时自动化
当经过身份验证的所有者从 Codex 轮次创建自动化时,OpenClaw 会捕获该 Codex 线程中可调用的应用 ID 和审批上限。存储的权限绑定到创建者准备好的 Codex 配置文件和 账户。定时运行会将该上限与当前的 Codex 策略及应用可用性取交集。它们绝不会获得新的应用 ID,也不会获得更宽泛的破坏性操作、 开放世界操作或审批上限。对于已经捕获的应用中后来添加的工具,只有在存储的上限和当前策略均允许时才能运行。 定时应用调用是无人值守的。只有在任务创建时和运行时都明确允许的操作,才能在没有提示的情况下继续执行。仍然需要审批或信息收集的操作会被拒绝。账户发生变化、 运行时发生变化、应用被撤销、策略变得更严格或可用清单不可用时,会在应用执行前停止,并报告如何恢复访问权限或重新授权自动化。 模型回退无法将此权限转移到其他运行时或账户。 在捕获应用权限之前创建的任务可以保留其普通的 OpenClaw 工具上限并继续执行非应用工作,但无法自动恢复 Codex 应用访问权限。只有从新的、经过身份验证的所有者轮次中,重新创建或重新授权需要应用访问权限的任务。请参阅 自动化。 普通编辑会保留已捕获的应用权限。在没有新的、经过身份验证的 Codex 权限捕获的情况下,显式替换任务的toolsAllow 上限会清除此权限;下一次运行会报告应用访问权限需要重新授权。
从新的、经过身份验证的所有者轮次进行更新,则可以为更新后的任务捕获并存储新的应用上限。
从聊天中管理插件
/codex plugins 会检查或更改你运行 Codex harness 的同一聊天中已配置的原生 Codex 插件:
/codex plugins 是 /codex plugins list 的别名。该列表会显示每个已配置插件的键、开关状态、Codex 插件名称,以及来自 plugins.entries.codex.config.codexPlugins.plugins 的市场来源。
available 会使用绑定的工作区读取 Codex 的市场目录,因此可以发现仓库本地插件,而无需启用它们。所有者范围的
codex_plugins 模型工具也是只读的:它可以推荐准确的安装命令,但不能安装、启用或添加市场。
install、enable 和 disable 要求所有者或具有
operator.admin 作用域的网关客户端。OpenClaw 保留的 /codex 命令会在代理调用之前分派,因此模型生成的推荐不算安装批准。
对于 Codex 尚未安装的插件,install 会调用 Codex app-server,并且只有在安装成功后才记录明确的插件策略。
如果 Codex 确认插件已经安装并启用,同一个命令会记录其授权,而不会再次安装。
enable 和 disable 会更改 OpenClaw 的持久化策略;限定身份和现有配置键均可接受。
安装或启用已配置的插件也会开启全局
codexPlugins.enabled 开关,但不会启用 allow_all_plugins。如果插件报告
auth_required,请在 Codex 中授权该应用,然后再开始新的对话。除非插件被禁用,或者上游账户或工作区撤销访问权限,
否则授权会对后续对话持续生效。
只安装你信任的插件。Codex 插件可以贡献 skills、应用、MCP 服务器和 hooks。
某些 hooks 可以参与权限决策,因此显式安装表示信任所选插件的代码;它不是安全审查,也不是隔离边界。
原生插件设置如何工作
集成跟踪三种状态:
对于
openai-curated 插件,迁移是持久化安装/资格判定
步骤:
- 在规划期间,OpenClaw 读取源 Codex 的
plugin/read详情,并 检查源 Codex app-server 账户。codex_subscription_required表示account/read已明确识别出 API 密钥或其他 非 ChatGPT 账户;账户缺失并不能证明没有订阅。 - 默认情况下,迁移会跳过源应用清单调用:通过账户门槛的、基于应用的源
插件会在不验证源应用可访问性的情况下完成规划。账户缺失或
account/read失败时,迁移会以codex_account_unavailable跳过这些插件。 - 使用
--verify-plugin-apps时,迁移会获取最新的源app/installed快照,通过app/read获取经过身份验证的元数据,并要求每个 所有者应用在源 Codex 账户中均已存在、启用且可访问,之后才会规划原生激活。 如果account/read缺失或失败,严格验证仍可通过源 app-server 配置的 bearer 或 header 身份验证来证明访问权限。已明确识别出的 非 ChatGPT 账户仍然不符合资格。
plugin/installed 快照和 plugin/read 详情来确定准确的市场限定身份和应用所有权。普通线程设置期间的仅安装检查是只读的;
已禁用或未批准插件中的应用仍然会被拒绝。所有者发起的安装是明确的变更路径。所有权缺失或存在歧义时会安全失败,而不是授予账户范围的访问权限。
运行时应用清单是已迁移的精选插件和手动配置的工作区插件的目标会话可访问性检查。Codex
harness 会话设置会基于已启用且可访问的插件应用计算一个受限的线程应用配置;它不会在每一轮都重新计算,因此
/codex plugins enable/disable 只会影响
新的 Codex 对话。使用 /new 或 /reset 来让当前对话
获取该变更。
支持边界
- 只有已经安装在源 Codex app-server 应用清单中的
openai-curated插件才符合迁移条件。 - 运行时支持来自 Codex 发现的官方、工作区、个人、共享和仓库本地市场中的明确批准插件。缺少 市场、插件、所有权详情或应用就绪证据时,不会公开任何插件应用。
- 被明确识别为非 ChatGPT 的源账户无法通过订阅门槛。默认情况下,缺失或无法读取的源账户不可用。
--verify-plugin-apps则可以通过经过身份验证的源应用清单建立访问权限,包括使用 bearer 或 header 身份验证的 app-server。 无法访问、已禁用或缺失的源应用,以及应用清单刷新失败,仍会被跳过并列为手动处理项。无法读取的插件详情会在应用清单门槛之前被跳过。 - 迁移会写入明确的插件身份(
marketplaceName和pluginName);不会写入本地marketplacePath缓存路径。 codexPlugins.enabled是唯一的全局启用开关;不存在plugins["*"]通配符或授予任意安装权限的配置键。- 迁移不会自动导入非精选市场、缓存的插件 bundle、hooks 或 Codex 配置文件。使用
/codex plugins available和所有者发起的/codex plugins install <plugin>@<marketplace>命令, 选择加入其他已发现的插件。 - OpenClaw 不会在此流程中添加新的 Git 或本地市场来源。 其他来源必须已经在 Codex 中配置,或能够从绑定的仓库中发现。
应用清单与所有权
OpenClaw 首先读取并缓存一个作用域限定于目标 Codex app-server 和已配置工作区的plugin/installed 快照。该快照涵盖该作用域中可见市场的插件,包括已禁用的插件
身份;失败或不完整的快照绝不会被缓存。plugin/read 仅限于建立所有权所需的准确已配置插件详情。
显式发现会以对话工作区为参数查询 plugin/list,以查找仓库市场。
常规设置保留现有的精选恢复行为;其他市场的安装需要所有者或管理员发起的明确命令。
OpenClaw 通过 app/installed 读取已安装的应用运行时状态,并以每批最多 100 个应用 ID 的方式,通过 app/read 获取规范的应用元数据。首次读取会强制刷新冷启动的已安装运行时快照。当安装了多个已配置的精选插件时,OpenClaw 会将它们的缓存失效合并为一次应用清单刷新。普通的缓存读取不会因每个新线程而强制刷新连接器。OpenClaw 会将合并后的清单在内存中缓存一小时,并异步刷新过期或缺失的条目。该缓存仅限当前进程;重启 CLI 或网关会将其清除。
缺失的清单方法、身份验证错误、传输失败和连接器刷新失败都会采取安全失败策略。
迁移和运行时使用不同的缓存键:
- 源迁移验证使用源 Codex home 和启动选项。它仅在使用
--verify-plugin-apps时运行,并会为该规划运行强制刷新源运行时快照和元数据读取。 - 目标运行时设置在构建和验证线程应用配置时,使用目标代理的 Codex app-server 身份。
精选插件激活会使该目标缓存键失效,然后在
plugin/install后强制刷新。显式市场安装会刷新相同的目标运行时状态, 之后后续对话才能使用该插件。
已连接的账户应用
由所有者运营的代理可以选择接入其 Codex 账户中已连接的每个应用,而无需匹配的插件包:allow_all_plugins: true 会在建立新的原生 Codex 线程时读取已安装的应用快照和已认证的元数据。它只会接纳账户可访问的应用。Codex 还必须确认每个被接纳的应用都已为该线程启用且可调用。OpenClaw 不会全局安装、认证或启用应用。现有线程会保留其已持久化的应用集合;使用 /new、/reset 或重启网关来获取新连接或已撤销的应用。
显式禁用的已配置插件始终会覆盖账户范围的应用访问权限。由于 Codex app/read 不会提供已禁用工作区插件的显示名称,OpenClaw 会使用其 plugin/installed 快照,并仅读取该确切已配置插件的详细信息,以保留其所拥有的应用 ID。此项范围狭窄的只读检查不会发现无关的市场应用、激活该插件或授予其应用权限。如果无法确认已禁用插件的所有权,账户范围的应用选择将默认拒绝。
账户应用会继承全局的 codexPlugins.allow_destructive_actions 值,该值可接受 true、false、"auto" 或 "ask"。针对重叠应用 id 的显式按插件策略会覆盖全局策略。清单获取失败时会关闭失败,而不是回退到不受限制的默认值。
线程应用配置
OpenClaw 会为 Codex 线程注入一个受限的config.apps 补丁:
_default 被禁用,且只有由已启用的已配置插件拥有的应用,或
被 allow_all_plugins 允许访问的账户应用,才会被启用。
应用可以已安装并完成身份验证,但在 _default 被禁用时,仍可能无法在账户级快照中调用。OpenClaw 仅临时接纳所有权已得到证明且符合策略要求的应用,创建受限线程,然后使用生成的线程 ID 和
forceRefresh: false 再次读取一次 app/installed。在继续处理当前轮次之前,Codex 必须确认每个已接纳的应用在该线程的有效应用、托管、工作区和工具策略下均已启用且可调用。如果该证明失败,临时线程将永远不会被绑定或使用。OpenClaw 会删除失败的持久临时线程,取消订阅失败的临时线程;如果无法确认安全清理,则会停用应用服务器连接。
每个应用的 destructive_enabled 来自有效的全局或插件级
allow_destructive_actions 策略;true、"auto" 和 "ask"
都会将 destructive_enabled: true,而 false 会将其设为 false。Codex 仍会根据其原生应用工具注解强制执行破坏性工具元数据。
_default 通过 open_world_enabled: false 被禁用;已启用的插件应用会获得 open_world_enabled: true。OpenClaw 不提供单独的插件级开放世界策略开关,也不维护按插件划分的破坏性工具名称拒绝列表。
工具批准模式对已接纳的应用默认设为自动,因此非破坏性
读取工具可以在不触发同一线程批准提示的情况下运行。破坏性工具仍然
由各自应用的 destructive_enabled 策略控制。
破坏性操作策略
对已配置的 Codex 插件,默认允许破坏性插件请求;而不安全的 schema 和所有权不明确的情况则会关闭处理:- 全局
allow_destructive_actions默认值为true。 - 每个插件的
allow_destructive_actions会覆盖该插件的全局策略。 false:OpenClaw 返回确定性的拒绝。true:OpenClaw 仅对其能映射为批准响应的安全 schema 自动接受,例如布尔类型的 approve 字段。"auto":OpenClaw 将破坏性插件操作暴露给 Codex,然后在返回 Codex 批准响应之前,把可证明具有所有权的 MCP 批准请求转换为 OpenClaw 插件批准。"ask":OpenClaw 使用与"auto"相同的 Codex 写入/破坏性操作门控,在线程开始前清除该应用的持久化 Codex 按工具批准覆盖,并且只提供一次性的批准或拒绝,因此持久化批准不会抑制后续的写操作提示。对于每个采用"ask"的已接入应用,OpenClaw 会为该应用选择 Codex 的 human approvals 审核者,从而让 Codex 将其批准请求发送给 OpenClaw;其他应用以及非应用线程批准则保留其已配置的审核者和策略。- 缺少插件身份、所有权不明确、turn id 缺失或不匹配,或者不安全的 elicitation schema 都会直接拒绝,而不是提示用户。
故障排查
**工作区插件已安装但不可见:**确认工作区
plugin/installed 快照报告准确的已配置 ID 已安装且已启用,然后确认
app/installed 返回同一个 Codex 账户所拥有的每个应用,并且 app/read 返回其元数据。仅由账户范围默认设置禁用的应用,
可以在 OpenClaw 启动并验证其明确配置的线程后变得可调用。已撤销的身份验证、缺失的元数据、已禁用的工作区插件以及 Codex
托管或工作区限制仍会阻止访问。请在开始新线程前重新授权或修复这些上游条件。如果你在网关缓存应用清单后更改了该状态,请等待一小时缓存刷新或重启网关,然后使用 /new 或
/reset。OpenClaw 不会代表所有者对插件应用进行身份验证。
对于 plugin_detail_unavailable,请验证准确的已安装市场和插件身份能够选择匹配的
plugin/read 结果。当该选择器或所有权详情不可用时,OpenClaw 会继续隐藏
已拥有的应用。对于 plugin_activation_failed,请检查市场、应用授权和安装后刷新诊断。
明确批准的插件必须已安装、已启用并完成身份验证,其应用才会出现在一个线程中。
**配置已更改但代理无法看到插件:**运行 /codex plugins list 以确认已配置状态,然后执行 /new 或 /reset。现有的
Codex 线程绑定会保留其启动时的应用配置,直到 OpenClaw 建立新的运行时会话或替换过时的绑定。
**拒绝了破坏性操作:**检查全局和每个插件的
allow_destructive_actions 值。即使设置为 true、"auto" 或 "ask",
不安全的引导提取模式和不明确的插件身份仍会默认失败。