Native Codex plugin support lets a Codex-mode OpenClaw agent use Codex app-server’s own app and plugin capabilities inside the same Codex thread that handles the OpenClaw turn. OpenClaw does not translate Codex plugins into syntheticDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
codex_plugin_*
OpenClaw dynamic tools. Plugin calls stay in the native Codex transcript, and
Codex app-server owns the app-backed MCP execution.
Use this page after the base Codex harness is working.
Requirements
- The selected OpenClaw agent runtime must be the native Codex harness.
plugins.entries.codex.enabledmust be true.plugins.entries.codex.config.codexPlugins.enabledmust be true.- V1 supports only
openai-curatedplugins that migration observed as source-installed in the source Codex home. - The target Codex app-server must be able to see the expected marketplace, plugin, and app inventory.
codexPlugins has no effect on PI runs, normal OpenAI provider runs, ACP
conversation bindings, or other harnesses because those paths do not create
Codex app-server threads with native apps config.
Quickstart
Preview migration from the source Codex home:codexPlugins entries for eligible plugins and calls
Codex app-server plugin/install for selected plugins. A typical migrated
config looks like this:
codexPlugins, use /new, /reset, or restart the gateway so
future Codex harness sessions start with the updated app set.
How native plugin setup works
The integration has three separate states:- Installed: Codex has the local plugin bundle in the target app-server runtime.
- Enabled: OpenClaw config is willing to make the plugin available to Codex harness turns.
- Accessible: Codex app-server confirms the plugin’s app entries are available for the active account and can be mapped to the migrated plugin identity.
V1 support boundary
V1 is intentionally narrow:- Only
openai-curatedplugins that were already installed in the source Codex app-server inventory are migration-eligible. - Migration writes explicit plugin identities with
marketplaceNameandpluginName; it does not write localmarketplacePathcache paths. codexPlugins.enabledis the global enablement switch.- There is no
plugins["*"]wildcard and no config key that grants arbitrary install authority. - Unsupported marketplaces, cached plugin bundles, hooks, and Codex config files are preserved in the migration report for manual review.
App inventory and ownership
OpenClaw reads Codex app inventory through app-serverapp/list, caches it for
one hour, and refreshes stale or missing entries asynchronously.
A plugin app is exposed only when OpenClaw can map it back to the migrated
plugin through stable ownership:
- exact app id from plugin detail
- known MCP server name
- unique stable metadata
Thread app config
OpenClaw injects a restrictiveconfig.apps patch for the Codex thread:
_default is disabled and only apps owned by enabled migrated plugins are
enabled.
OpenClaw sets app-level destructive_enabled from the effective global or
per-plugin allow_destructive_actions policy and lets Codex enforce
destructive tool metadata from its native app tool annotations. The _default
app config is disabled with open_world_enabled: false. Enabled plugin apps
are emitted with open_world_enabled: true; OpenClaw does not expose a separate
plugin open-world policy knob and does not maintain per-plugin destructive
tool-name deny lists.
Tool approval mode is prompted by default for plugin apps because OpenClaw does
not have an interactive app-elicitation UI in this same-thread path.
Destructive action policy
Destructive plugin elicitations fail closed by default:- Global
allow_destructive_actionsdefaults tofalse. - Per-plugin
allow_destructive_actionsoverrides the global policy for that plugin. - When policy is
false, OpenClaw returns a deterministic decline. - When policy is
true, OpenClaw auto-accepts only safe schemas it can map to an approval response, such as a boolean approve field. - Missing plugin identity, ambiguous ownership, a missing turn id, a wrong turn id, or an unsafe elicitation schema declines instead of prompting.
Troubleshooting
auth_required: migration installed the plugin, but one of its apps still
needs authentication. The explicit plugin entry is written disabled until you
reauthorize and enable it.
marketplace_missing or plugin_missing: the target Codex app-server
cannot see the expected openai-curated marketplace or plugin. Rerun migration
against the target runtime or inspect Codex app-server plugin status.
app_inventory_missing or app_inventory_stale: app readiness came from an
empty or stale cache. OpenClaw schedules an async refresh and excludes plugin
apps until ownership and readiness are known.
app_ownership_ambiguous: app inventory only matched by display name, so
the app is not exposed to the Codex thread.
Config changed but the agent cannot see the plugin: use /new, /reset, or
restart the gateway. Existing Codex thread bindings keep the app config they
started with until OpenClaw establishes a new harness session or replaces a
stale binding.
Destructive action is declined: check the global and per-plugin
allow_destructive_actions values. Even when policy is true, unsafe elicitation
schemas and ambiguous plugin identity still fail closed.