mirror of
https://github.com/moltbot/moltbot.git
synced 2026-05-11 21:10:55 +00:00
* docs: reorganize codex harness docs * docs: address codex harness review findings * docs: move codex references to reference nav * docs: add codex topic configuration section
189 lines
7.1 KiB
Markdown
189 lines
7.1 KiB
Markdown
---
|
|
summary: "Configure migrated native Codex plugins for Codex-mode OpenClaw agents"
|
|
title: "Native Codex plugins"
|
|
read_when:
|
|
- You want Codex-mode OpenClaw agents to use native Codex plugins
|
|
- You are migrating source-installed openai-curated Codex plugins
|
|
- You are troubleshooting codexPlugins, app inventory, destructive actions, or plugin app diagnostics
|
|
---
|
|
|
|
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 synthetic `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](/plugins/codex-harness) is working.
|
|
|
|
## Requirements
|
|
|
|
- The selected OpenClaw agent runtime must be the native Codex harness.
|
|
- `plugins.entries.codex.enabled` must be true.
|
|
- `plugins.entries.codex.config.codexPlugins.enabled` must be true.
|
|
- V1 supports only `openai-curated` plugins 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:
|
|
|
|
```bash
|
|
openclaw migrate codex --dry-run
|
|
```
|
|
|
|
Apply the migration when the plan looks right:
|
|
|
|
```bash
|
|
openclaw migrate apply codex --yes
|
|
```
|
|
|
|
Migration writes explicit `codexPlugins` entries for eligible plugins and calls
|
|
Codex app-server `plugin/install` for selected plugins. A typical migrated
|
|
config looks like this:
|
|
|
|
```json5
|
|
{
|
|
plugins: {
|
|
entries: {
|
|
codex: {
|
|
enabled: true,
|
|
config: {
|
|
codexPlugins: {
|
|
enabled: true,
|
|
allow_destructive_actions: false,
|
|
plugins: {
|
|
"google-calendar": {
|
|
enabled: true,
|
|
marketplaceName: "openai-curated",
|
|
pluginName: "google-calendar",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
After changing `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.
|
|
|
|
Migration is the durable install/eligibility step. Runtime app inventory is the
|
|
accessibility check. Codex harness session setup then computes a restrictive
|
|
thread app config for the enabled and accessible plugin apps.
|
|
|
|
Thread app config is computed when OpenClaw establishes a Codex harness session
|
|
or replaces a stale Codex thread binding. It is not recomputed on every turn.
|
|
|
|
## V1 support boundary
|
|
|
|
V1 is intentionally narrow:
|
|
|
|
- Only `openai-curated` plugins that were already installed in the source Codex
|
|
app-server inventory are migration-eligible.
|
|
- Migration writes explicit plugin identities with `marketplaceName` and
|
|
`pluginName`; it does not write local `marketplacePath` cache paths.
|
|
- `codexPlugins.enabled` is 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-server `app/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
|
|
|
|
Display-name-only or ambiguous ownership is excluded until the next inventory
|
|
refresh proves ownership.
|
|
|
|
## Thread app config
|
|
|
|
OpenClaw injects a restrictive `config.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_actions` defaults to `false`.
|
|
- Per-plugin `allow_destructive_actions` overrides 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.
|
|
|
|
## Related
|
|
|
|
- [Codex harness](/plugins/codex-harness)
|
|
- [Codex harness reference](/plugins/codex-harness-reference)
|
|
- [Codex harness runtime](/plugins/codex-harness-runtime)
|
|
- [Configuration reference](/gateway/configuration-reference#codex-harness-plugin-config)
|
|
- [Migrate CLI](/cli/migrate)
|