Regression in 0.146.0: gpt-4o-mini sends unsupported reasoning.effort=none

Open 💬 0 comments Opened Aug 3, 2026 by mori173

What version of Codex CLI is running?

codex-cli 0.146.0

What subscription do you have?

API key

Which model were you using?

gpt-4o-mini

What platform is your computer?

Microsoft Windows NT 10.0.26200.0 x64

What terminal emulator and version are you using (if applicable)?

PowerShell

Codex doctor report

{
  "schemaVersion": 1,
  "codexVersion": "0.146.0",
  "installation": "npm",
  "platform": "windows-x86_64",
  "wireApi": "responses",
  "provider": "custom OpenAI-compatible provider"
}

The full doctor report was not included because it contains local filesystem paths and a private network URL.

What issue are you seeing?

Codex CLI 0.146.0 sends reasoning.effort: "none" when using the non-reasoning model gpt-4o-mini.

The request fails with:

{
  "error": {
    "message": "Unsupported parameter: 'reasoning.effort' is not supported with this model.",
    "type": "invalid_request_error",
    "param": "reasoning.effort",
    "code": "unsupported_parameter"
  }
}

The same model, Responses API provider, and configuration worked correctly with Codex CLI 0.144.6 and produced a normal response without reasoning.

The observed request used an OpenAI-compatible Responses API gateway. No credentials, gateway addresses, private network information, thread IDs, or full rollout logs are included in this report.

What steps can reproduce the bug?

  1. Install Codex CLI 0.146.0.
  2. Configure Codex with:
model = "gpt-4o-mini"
model_reasoning_effort = "none"
  1. Run:
codex exec "just say 1"
  1. The request fails with HTTP 400 because reasoning.effort is unsupported.

With Codex CLI 0.144.6, the same setup succeeds.

What is the expected behavior?

For models that do not support reasoning, Codex should omit the entire reasoning parameter instead of sending:

{
  "reasoning": {
    "effort": "none"
  }
}

Additional information

This appears to be a regression of #837:

https://github.com/openai/codex/issues/837

In 0.144.6, build_reasoning() returned None when the model did not support reasoning summaries.

In 0.146.0, build_reasoning() always returns a Reasoning object and the request always sets:

reasoning: Some(reasoning)

It also unconditionally includes:

["reasoning.encrypted_content"]

Source comparison:

https://github.com/openai/codex/blob/rust-v0.144.6/codex-rs/core/src/client.rs

https://github.com/openai/codex/blob/rust-v0.146.0/codex-rs/core/src/client.rs

View original on GitHub ↗