Files
openclaw/extensions/codex/openclaw.plugin.json
Kevin Lin a1ac559ed7 feat(codex): enable native plugin app support (#78733)
* feat(codex): add native plugin config schema

* feat(codex): add native plugin inventory activation

* feat(codex): configure native plugin apps for threads

* feat(codex): enforce plugin elicitation policy

* feat(codex): migrate native plugins

* docs(codex): document native plugin support

* fix(codex): harden plugin migration refresh

* fix(codex): satisfy plugin activation lint

* fix: stabilize codex plugin app config

* fix: address codex plugin review feedback

* fix: key codex plugin app cache by websocket credentials

* fix: keep codex plugin app fingerprints stable

* fix: refresh codex plugin cache test fixtures

* fix: refresh plugin app readiness after activation

* fix: support remote codex plugin activation

* fix: recover plugin app bindings after cache refresh

* fix: force codex app refresh after plugin activation

* fix: recover partial codex plugin app bindings

* fix: sync codex plugin selection config

* fix: keep codex plugin activation fail closed

* fix: align codex plugin protocol types with main

* fix: refresh partial codex plugin app bindings

* fix: key codex app cache by env api key

* fix: skip failed codex plugin migration config

* test: update codex prompt snapshots

* fix: fail closed on missing codex app inventory entries

* fix(codex): enforce native plugin policy gates

* fix(codex): normalize native plugin policy types

* fix(codex): fail closed on plugin refresh errors

* fix(codex): use native plugin destructive policy

* fix(codex): key plugin cache by api-key profiles

* fix(codex): drop unshipped plugin fingerprint compat

* fix(codex): let native app policy gate plugin tools

* fix(codex): allow open-world plugin app tools

* fix(codex): revalidate native plugin app bindings

* fix(codex): preserve plugin binding on recheck failure

* docs(codex): clarify plugin harness scope

* fix(codex): return activation report state exhaustively

* test(codex): refresh prompt snapshots after rebase

* fix(codex): match namespaced plugin ids
2026-05-07 17:20:28 -07:00

376 lines
12 KiB
JSON

{
"id": "codex",
"name": "Codex",
"description": "Codex app-server harness and Codex-managed GPT model catalog.",
"providers": ["codex"],
"contracts": {
"mediaUnderstandingProviders": ["codex"],
"migrationProviders": ["codex"]
},
"mediaUnderstandingProviderMetadata": {
"codex": {
"capabilities": ["image"],
"defaultModels": {
"image": "gpt-5.5"
}
}
},
"providerDiscoveryEntry": "./provider-discovery.ts",
"syntheticAuthRefs": ["codex"],
"nonSecretAuthMarkers": ["codex-app-server"],
"activation": {
"onStartup": false,
"onAgentHarnesses": ["codex"]
},
"commandAliases": [
{
"name": "codex",
"kind": "runtime-slash",
"cliCommand": "plugins"
}
],
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"codexDynamicToolsProfile": {
"type": "string",
"enum": ["native-first", "openclaw-compat"],
"default": "native-first"
},
"codexDynamicToolsLoading": {
"type": "string",
"enum": ["searchable", "direct"],
"default": "searchable"
},
"codexDynamicToolsExclude": {
"type": "array",
"items": { "type": "string" },
"default": []
},
"discovery": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": { "type": "boolean" },
"timeoutMs": {
"type": "number",
"minimum": 1,
"default": 2500
}
}
},
"computerUse": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {
"type": "boolean",
"default": false
},
"autoInstall": {
"type": "boolean",
"default": false
},
"marketplaceDiscoveryTimeoutMs": {
"type": "number",
"minimum": 1,
"default": 60000
},
"marketplaceSource": {
"type": "string"
},
"marketplacePath": {
"type": "string"
},
"marketplaceName": {
"type": "string"
},
"pluginName": {
"type": "string",
"default": "computer-use"
},
"mcpServerName": {
"type": "string",
"default": "computer-use"
}
}
},
"codexPlugins": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {
"type": "boolean",
"default": false
},
"allow_destructive_actions": {
"type": "boolean",
"default": false
},
"plugins": {
"type": "object",
"additionalProperties": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {
"type": "boolean"
},
"marketplaceName": {
"type": "string",
"enum": ["openai-curated"]
},
"pluginName": {
"type": "string"
},
"allow_destructive_actions": {
"type": "boolean"
}
}
}
}
}
},
"appServer": {
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"type": "string",
"enum": ["yolo", "guardian"],
"default": "yolo"
},
"transport": {
"type": "string",
"enum": ["stdio", "websocket"],
"default": "stdio"
},
"command": { "type": "string" },
"args": {
"oneOf": [
{
"type": "array",
"items": { "type": "string" }
},
{ "type": "string" }
]
},
"url": { "type": "string" },
"authToken": { "type": "string" },
"headers": {
"type": "object",
"additionalProperties": { "type": "string" }
},
"clearEnv": {
"type": "array",
"items": { "type": "string" }
},
"requestTimeoutMs": {
"type": "number",
"minimum": 1,
"default": 60000
},
"turnCompletionIdleTimeoutMs": {
"type": "number",
"minimum": 1,
"default": 60000
},
"approvalPolicy": {
"type": "string",
"enum": ["never", "on-request", "on-failure", "untrusted"]
},
"sandbox": {
"type": "string",
"enum": ["read-only", "workspace-write", "danger-full-access"]
},
"approvalsReviewer": {
"type": "string",
"enum": ["user", "auto_review", "guardian_subagent"]
},
"serviceTier": { "type": ["string", "null"], "enum": ["fast", "flex", null] },
"defaultWorkspaceDir": {
"type": "string"
}
}
}
}
},
"uiHints": {
"codexDynamicToolsProfile": {
"label": "Dynamic Tools Profile",
"help": "Select which OpenClaw dynamic tools are exposed to Codex app-server. native-first omits tools Codex already owns.",
"advanced": true
},
"codexDynamicToolsLoading": {
"label": "Dynamic Tools Loading",
"help": "Use searchable to defer OpenClaw dynamic tools behind Codex tool search, or direct to expose them in the initial context.",
"advanced": true
},
"codexDynamicToolsExclude": {
"label": "Dynamic Tool Excludes",
"help": "Additional OpenClaw dynamic tool names to omit from Codex app-server turns.",
"advanced": true
},
"discovery": {
"label": "Model Discovery",
"help": "Plugin-owned controls for discovering Codex app-server models."
},
"discovery.enabled": {
"label": "Enable Discovery",
"help": "When false, OpenClaw keeps the Codex harness available but uses the bundled fallback model list."
},
"discovery.timeoutMs": {
"label": "Discovery Timeout",
"help": "Maximum time to wait for Codex app-server model discovery before falling back to the bundled model list.",
"advanced": true
},
"computerUse": {
"label": "Computer Use",
"help": "Controls Codex app-server setup for the Computer Use plugin.",
"advanced": true
},
"computerUse.enabled": {
"label": "Enable Computer Use",
"help": "When true, Codex-mode turns require the configured Computer Use MCP server to be available.",
"advanced": true
},
"computerUse.autoInstall": {
"label": "Auto Install",
"help": "Install the configured Computer Use plugin when Codex-mode turns start.",
"advanced": true
},
"computerUse.marketplaceDiscoveryTimeoutMs": {
"label": "Marketplace Discovery Timeout",
"help": "Maximum time to wait for Codex app-server to finish loading marketplaces during Computer Use install.",
"advanced": true
},
"computerUse.marketplaceSource": {
"label": "Marketplace Source",
"help": "Optional Codex marketplace source to add before installing Computer Use.",
"advanced": true
},
"computerUse.marketplacePath": {
"label": "Marketplace Path",
"help": "Optional local Codex marketplace file path containing the Computer Use plugin.",
"advanced": true
},
"computerUse.marketplaceName": {
"label": "Marketplace Name",
"help": "Optional registered Codex marketplace name containing the Computer Use plugin.",
"advanced": true
},
"computerUse.pluginName": {
"label": "Plugin Name",
"help": "Codex marketplace plugin name for Computer Use.",
"advanced": true
},
"computerUse.mcpServerName": {
"label": "MCP Server Name",
"help": "MCP server name exposed by the Computer Use plugin.",
"advanced": true
},
"codexPlugins": {
"label": "Native Codex Plugins",
"help": "Controls native Codex plugin availability for Codex harness turns.",
"advanced": true
},
"codexPlugins.enabled": {
"label": "Enable Native Plugins",
"help": "Expose explicit migrated Codex plugin entries to Codex harness turns.",
"advanced": true
},
"codexPlugins.allow_destructive_actions": {
"label": "Allow Destructive Plugin Actions",
"help": "Default policy for plugin app write or destructive action elicitations. Defaults to false.",
"advanced": true
},
"codexPlugins.plugins": {
"label": "Migrated Plugin Entries",
"help": "Explicit migration-authored plugin entries. The wildcard key * is not supported.",
"advanced": true
},
"appServer": {
"label": "App Server",
"help": "Runtime controls for connecting to Codex app-server.",
"advanced": true
},
"appServer.mode": {
"label": "Execution Mode",
"help": "Use yolo for unchained local execution or guardian for Codex guardian-reviewed approvals.",
"advanced": true
},
"appServer.transport": {
"label": "Transport",
"help": "Use stdio to spawn Codex locally, or websocket to connect to an already-running app-server.",
"advanced": true
},
"appServer.command": {
"label": "Command",
"help": "Executable used for stdio transport. Leave unset to use OpenClaw's managed Codex binary.",
"advanced": true
},
"appServer.args": {
"label": "Arguments",
"help": "Arguments used for stdio transport. Defaults to app-server --listen stdio://.",
"advanced": true
},
"appServer.url": {
"label": "WebSocket URL",
"help": "Codex app-server WebSocket URL when transport is websocket.",
"advanced": true
},
"appServer.authToken": {
"label": "Auth Token",
"help": "Bearer token sent to the WebSocket app-server.",
"sensitive": true,
"advanced": true
},
"appServer.headers": {
"label": "Headers",
"help": "Additional headers sent to the WebSocket app-server.",
"advanced": true
},
"appServer.clearEnv": {
"label": "Clear Environment",
"help": "Environment variable names removed from the spawned stdio app-server process after overrides are applied.",
"advanced": true
},
"appServer.requestTimeoutMs": {
"label": "Request Timeout",
"help": "Maximum time to wait for Codex app-server control-plane requests.",
"advanced": true
},
"appServer.turnCompletionIdleTimeoutMs": {
"label": "Turn Completion Idle Timeout",
"help": "Maximum quiet time after a turn-scoped Codex app-server request before OpenClaw interrupts the turn while waiting for turn/completed.",
"advanced": true
},
"appServer.approvalPolicy": {
"label": "Approval Policy",
"help": "Codex native approval policy sent to thread start, resume, and turns.",
"advanced": true
},
"appServer.sandbox": {
"label": "Sandbox",
"help": "Codex native sandbox mode sent to thread start and resume.",
"advanced": true
},
"appServer.approvalsReviewer": {
"label": "Approvals Reviewer",
"help": "Use user approvals or Codex auto_review for native app-server approvals. guardian_subagent remains accepted for compatibility.",
"advanced": true
},
"appServer.serviceTier": {
"label": "Service Tier",
"help": "Optional Codex app-server service tier. Use fast, flex, or null.",
"advanced": true
},
"appServer.defaultWorkspaceDir": {
"label": "Default Workspace",
"help": "Workspace used by /codex bind when --cwd is omitted.",
"advanced": true
}
}
}