Skip to content

[Bug]: openai-codex/gpt-5.5 and openai-codex/gpt-5.4 no longer advertise xhigh thinking level in v2026.4.23 (regression from 4.22, contradicts source + docs) #71269

@aaajiao

Description

@aaajiao

Summary

On openai-codex/gpt-5.5 (and openai-codex/gpt-5.4), the xhigh thinking level is not advertised by /think and typed directives like /think xhigh get remapped to high with the message:

Thinking level set to high (xhigh not supported for openai-codex/gpt-5.5).

This contradicts both the upstream source code and the published documentation, and is a regression from v2026.4.22 (where xhigh was correctly available for openai-codex/gpt-5.4*gpt-5.5 did not exist in that version).

Why this is a regression, not "expected behavior"

Source code says xhigh should be supported

extensions/openai/openai-codex-provider.ts at tag v2026.4.23, lines 103-112:

const OPENAI_CODEX_XHIGH_MODEL_IDS = [
  OPENAI_CODEX_GPT_55_MODEL_ID,       // "gpt-5.5"
  OPENAI_CODEX_GPT_55_PRO_MODEL_ID,   // "gpt-5.5-pro"
  OPENAI_CODEX_GPT_54_MODEL_ID,       // "gpt-5.4"
  OPENAI_CODEX_GPT_54_PRO_MODEL_ID,   // "gpt-5.4-pro"
  OPENAI_CODEX_GPT_54_MINI_MODEL_ID,  // "gpt-5.4-mini"
  OPENAI_CODEX_GPT_53_MODEL_ID,       // "gpt-5.3"
  "gpt-5.2-codex",
  "gpt-5.1-codex",
] as const;

And at lines 474-478, the provider's resolveThinkingProfile unconditionally adds xhigh when the modelId matches any entry in this list:

resolveThinkingProfile: ({ modelId }) => ({
  levels: [
    { id: "off" }, { id: "minimal" }, { id: "low" },
    { id: "medium" }, { id: "high" },
    ...(matchesExactOrPrefix(modelId, OPENAI_CODEX_XHIGH_MODEL_IDS)
      ? [{ id: "xhigh" as const }]
      : []),
  ],
}),

Documentation says xhigh should be supported

From docs.openclaw.ai/tools/thinking:

xhigh → "ultrathink+" (GPT-5.2+ and Codex models, plus Anthropic Claude Opus 4.7 effort)

openai-codex/gpt-5.4 and openai-codex/gpt-5.5 are both (a) GPT-5.2+ generation and (b) served via Codex OAuth, so they match both phrasings.

v2026.4.22 advertised xhigh for openai-codex/gpt-5.4*

User was on v2026.4.22 immediately before upgrading, and /think for openai-codex/gpt-5.4 listed xhigh as an option. After upgrading to v2026.4.23, /think for the same model no longer lists xhigh. v2026.4.22's XHIGH list (same file, same path) was:

const OPENAI_CODEX_XHIGH_MODEL_IDS = [
  OPENAI_CODEX_GPT_54_MODEL_ID,
  OPENAI_CODEX_GPT_54_PRO_MODEL_ID,
  OPENAI_CODEX_GPT_54_MINI_MODEL_ID,
  OPENAI_CODEX_GPT_53_MODEL_ID,
  OPENAI_CODEX_GPT_53_SPARK_MODEL_ID,
  "gpt-5.2-codex",
] as const;

So the list expanded in v4.23 (added 5.5 + 5.5-pro on top of existing 5.4 family), but in practice none of the entries produce xhigh in the live profile query.

Reproduction

Environment:

  • OpenClaw 2026.4.23 (a979721), Linux VM, Node v24.14.0, npm 11.9.0
  • Primary agent model: openai-codex/gpt-5.5 via Codex OAuth profile
  • openclaw plugins list shows the openai plugin as loaded
  • Chat via primary model works normally (so the provider is fully functional for chat)

Steps:

  1. Set agents.defaults.model.primary to openai-codex/gpt-5.5 (also reproduces with openai-codex/gpt-5.4).
  2. Restart the gateway.
  3. Send /think to the agent (via Telegram, CLI, or any other channel).
  4. Observe the Options: line.

Actual

Current thinking level: high. Options: off, minimal, low, medium, high.

(no xhigh listed)

Typing /think xhigh replies:

Thinking level set to high (xhigh not supported for openai-codex/gpt-5.5).

Expected

Current thinking level: high. Options: off, minimal, low, medium, high, xhigh.

(per OPENAI_CODEX_XHIGH_MODEL_IDS containing gpt-5.5 and gpt-5.4*)

Attempted local workaround: did not help

We added reasoning: true to each openai-codex entry in models.providers.openai-codex.models[] in case the catalog merge was masking a capability flag the profile resolver needed:

"models": {
  "providers": {
    "openai-codex": {
      "baseUrl": "https://chatgpt.com/backend-api",
      "models": [
        { "id": "gpt-5.5",      "name": "GPT-5.5",      "contextWindow": 1000000, "maxTokens": 128000, "reasoning": true },
        { "id": "gpt-5.4",      "name": "GPT-5.4",      "contextWindow": 1050000, "maxTokens": 128000, "reasoning": true },
        { "id": "gpt-5.4-mini", "name": "GPT-5.4 Mini", "contextWindow": 272000,  "maxTokens": 64000,  "reasoning": true }
      ]
    }
  }
}

Synced to the VM, restarted the gateway: /think still does not list xhigh. So the regression is independent of catalog capability flags.

Root-cause hypothesis

The source chain for /think options eventually calls, in src/plugins/provider-thinking.ts:

export function resolveProviderThinkingProfile(params) {
  return resolveActiveThinkingProvider(params.provider)?.resolveThinkingProfile?.(params.context);
}

Given that the source-level resolveThinkingProfile on the openai-codex provider plugin cleanly appends xhigh for matching modelIds, the most likely failure mode is that resolveActiveThinkingProvider("openai-codex") returns undefined at runtime — i.e. the openai-codex provider plugin is never entered into the thinking registry (globalThis[Symbol.for("openclaw.pluginRegistryState")].activeRegistry.providers), even though the overall openai plugin status is loaded and the provider is fully functional for auth, catalog, and chat.

This would be consistent with a registration ordering or wiring regression introduced somewhere between v4.22 (where the full openai-codex/* thinking profile including xhigh worked end-to-end) and v4.23 (where it silently degrades to the base levels).

Suggested upstream investigation

  1. Verify at gateway startup that both openai and openai-codex provider plugin entries appear in activeRegistry.providers — i.e. add a startup log line (debug-level is fine) naming each registered thinking provider id.
  2. If only openai is present but openai-codex is missing, trace the registerProvider(buildOpenAICodexProviderPlugin()) call in extensions/openai/index.ts and ensure it is wired through to the thinking registry the same way registerProvider(buildOpenAIProvider()) is.
  3. A QA scenario similar to qa/scenarios/models/thinking-slash-model-remap.md but covering openai-codex/gpt-5.5 and openai-codex/gpt-5.4 (not just openai/gpt-5.5) would catch this class of regression.

Related

Environment

  • OpenClaw: 2026.4.23 (a979721)
  • Node: v24.14.0 (NodeSource setup_24.x, apt-held)
  • npm: 11.9.0
  • OS: Ubuntu 24.04.3 LTS, aarch64 (Linux VM on macOS host)
  • Install path: /usr/lib/node_modules/openclaw (via sudo npm install -g openclaw@2026.4.23)
  • Run mode: user-level systemd --user unit (openclaw-gateway.service)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions