Repository navigation
gpt-5.6 Responses Lite turns do not expose exec/code-mode tools in codex exec #31894
Description
Summary
codex exec with gpt-5.6-sol can report that shell/code-mode tools are unavailable, while the same prompt works with gpt-5.5.
The issue appears to be the Responses Lite request shape: for use_responses_lite=true models, Codex currently moves client tool schemas into an input[0] item of type additional_tools and omits top-level tools. In the live 5.6 path I tested, those additional_tools are not exposed as callable tools, so the model does not see the public code-mode exec tool.
Environment
- Codex CLI:
codex-cli 0.144.0 - OS: Ubuntu 26.04 x86_64
- Model that works:
gpt-5.5 - Model that fails:
gpt-5.6-sol
Reproduction
This works with gpt-5.5:
codex exec --model gpt-5.5 --json --ephemeral --skip-git-repo-check --sandbox read-only 'please run ls and tell me if it works'Observed: Codex emits a command execution item and runs /bin/bash -lc ls successfully.
This fails with gpt-5.6-sol:
codex exec --model gpt-5.6-sol --json --ephemeral --skip-git-repo-check --sandbox read-only 'please run ls and tell me if it works'Observed assistant message:
I can’t run `ls` because no shell execution tool is available in this session.
Request capture
Using a local Responses capture provider, the gpt-5.5 request includes top-level tools:
{
"model": "gpt-5.5",
"tool_names": [
"exec_command",
"write_stdin",
"list_mcp_resources",
"list_mcp_resource_templates",
"read_mcp_resource",
"update_plan",
"request_user_input",
"request_plugin_install",
"apply_patch",
"view_image",
"tool_search",
"web_search"
]
}The gpt-5.6-sol request has no top-level tools:
{
"model": "gpt-5.6-sol",
"tools": null,
"parallel_tool_calls": false
}But input[0] contains the code-mode tools as additional_tools:
{
"type": "additional_tools",
"role": "developer",
"tool_names": ["exec", "wait", "request_user_input", "collaboration"]
}The exec additional tool description includes nested tools.exec_command(...), but the live model does not appear to receive exec as callable.
Expected behavior
gpt-5.6-sol should be able to call the public code-mode exec tool, and from there call nested tools.exec_command(...), so simple shell prompts work as they do with gpt-5.5.
Suspected cause
codex-rs/core/src/client.rs has a Responses Lite branch in build_responses_request that inserts ResponseItem::AdditionalTools { tools, ... } into input, then sends tools: None at the top level.
If the live Responses Lite path does not promote additional_tools into callable tool declarations, then the model is left with no callable code-mode tools.
Candidate fix
Keep the existing additional_tools item for the Responses Lite input contract, but also send the same client-executed tool schemas in top-level tools.
I have a small patch ready that:
- clones the generated tool schemas into
additional_tools - preserves
tools: Some(tools)at the top level for Responses Lite turns - updates HTTP and websocket regression tests to assert both locations match
Related issues
These are related to the same 5.6 custom exec/code-mode tool path, but appear to describe crashes after an exec tool call is emitted rather than the model not seeing exec at all:
- macOS x86_64: Codex CLI 0.142.5 SIGTRAP on gpt-5.6-sol shell tool call #30861
- codex-cli 0.142.5 on macOS 26.5.1 Intel crashes when the server sends functions.exec. The crash occurs in V8 OS::SetPermissions with SIGTRAP. It reproduces with unified_exec, code_mode, and code_mode_only explicitly disabled. #31475
Activity
github-actions commentedon Jul 9, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
willsmanley-archive commentedon Jul 9, 2026
Patch branch is available here:
Attempting to create the PR via
gh pr create/API currently fails for this account with:pa-arth commentedon Jul 9, 2026
I dug into this and can confirm the root cause is exactly where you pointed, in
codex-rs/core/src/client.rs::build_responses_request:For
use_responses_litemodels the tool schemas are moved into theadditional_toolsinput item and the top-leveltoolsfield is set toNone. Non-lite turns (e.g.gpt-5.5) keepSome(tools), which matches the request captures in the issue:gpt-5.5sends top-level tools,gpt-5.6-solsends"tools": null. If the live Responses Lite path doesn't promoteadditional_toolsinto callable declarations, the model is left with no callable code-modeexectool — which is the symptom here.Minimal client-side change: clone the schemas into
additional_toolsand preserve them at the top level for lite turns:I also wrote a fail-before/pass-after regression next to
responses_lite_sets_all_turns_context_and_disables_parallel_tool_callsincore/tests/suite/client.rs, asserting a lite turn sends a non-empty top-leveltoolsarray and that it mirrors theadditional_toolsschemas. It fails onmain(top-leveltoolsis absent) and passes with the change.netwalkerai commentedon Jul 12, 2026
I reproduced this on Windows with Codex CLI 0.144.1.
Environment:
!work correctlygit,gh, the working directory, and GitHub authentication are all functionalA/B test in the same Codex session, directory, and permissions:
gpt-5.6-solmax: reports that no integrated shell tool is exposedgpt-5.6-terraxhigh: reports that no integrated shell tool is exposedgpt-5.5medium: successfully executesgit status --shortwith exit code 0Prompt used:
This suggests that the issue also affects GPT-5.6 Terra, not only Sol, and persists in the current stable CLI 0.144.1.
The manual
!git status --shortpath works, confirming that the local shell and executable environment are healthy; only model-initiated tool execution is unavailable.F111111shhh commentedon Jul 13, 2026
I can reproduce the same Responses Lite capability boundary for native web search on Windows Codex Desktop with a custom Responses provider.
Environment:
26.707.8168.00.144.0-alpha.4gpt-5.6-solControl cases with the same provider:
gpt-5.5exposed a hostedweb_searchtool and native search worked.gpt-5.6-solused the Responses Lite /additional_toolsshape and exposed no usable native web-search tool to the conversation./v1/responsesendpoint with an explicit hostedweb_searchtool succeeds.That separates basic model/provider support from the Codex client-side tool-routing path.
The
rust-v0.144.0source snapshot is consistent with the behavior: Responses Lite omits hosted Responses tools in the tool plan, while standaloneweb.runis separately gated by provider/auth conditions and calls analpha/searchendpoint rather than ordinary/v1/responses. A custom provider that supports explicit hosted web search over/v1/responsestherefore may still have no route that Codex exposes for a Lite turn.I published a privacy-safe, synthetic evidence bundle with the source links, reproduction matrix, and an optional direct probe here:
https://github.com/F111111shhh/codex-web-search-routing-evidence
It may be useful to treat this as another manifestation of the same Lite tool-declaration boundary. A documented provider capability requirement, a clear diagnostic, or a supported fallback to hosted
web_searchwould prevent the capability from silently disappearing. No credentials, endpoint details, raw logs, or conversation content are included in the repository.Fix two bugs blocking Codex agentic coding — tool calls now execute
Complete the /v1/models schema — it unlocks Desktop agentic coding
fix(harness-codex): set default model back to `gpt-5.5` due to upstre…
ch9ddar commentedon Aug 13, 2026
Additional controlled A/B evidence from Codex CLI
0.147.0supports this report.Environment held constant across three separately authorized, one-shot runs:
CODEX_HOMEcodex exec --json --ephemeralnever, sandboxdanger-full-access, reasoning efforthighOnly the model changed:
gpt-5.6-lunagpt-5.6-solgpt-5.5For Luna and Sol, the whole-fixture filesystem digest was unchanged and no
command_executionitem was observed, despite a schema-valid success response claiming the operation and verification had completed. GPT-5.5 executed the command and produced exactly the one allowed regular file with the expected bytes under the same deterministic verifier.The Sol run also passed a no-model effective-config and exact prompt-input preflight bound to the final launch digest; GPT-5.5 passed the corresponding exact bundled-model and launch-bundle preflight. Raw JSONL, stderr, final prose, thread IDs, checkout names, network addresses, and credential material were deliberately not retained.
This A/B does not prove the upstream cause, but it makes a prompt, host, authentication, sandbox, or verifier explanation materially less likely. It is consistent with the version-bound catalog/request-shape distinction described here: the 5.6 variants use
tool_mode: "code_mode_only"anduse_responses_lite: true, whereas GPT-5.5 usestool_mode: nullanduse_responses_lite: false.StErMi commentedon Aug 27, 2026
any update on the matter?
paniuncle commentedon Sep 3, 2026
any update on the matter?
8i8 commentedon Sep 16, 2026
Possible workaround: increase
node_replstartup timeout when using a local Ollama modelI am using Codex through Xcode with a local Ollama model (
qwen3.5:122b-a10b) on macOS.I was experiencing intermittent failures where the model request would fail almost immediately with:
The logs showed that the bundled
node_replandcua_replMCP servers were being started at the beginning of the thread:The request could then fail before either MCP server had reported that it was ready.
I initially suspected that the JavaScript/Computer Use integration itself was incompatible with the local model. Disabling
node_repl, however, caused the model request to fail immediately, so I left it enabled.The default configuration contained:
I changed this to:
After doing this, the next request took longer to initialise, but subsequently completed normally. In particular, a request involving a large source-context file, which had previously produced broken output, completed coherently.
This suggests that, at least in this environment, the 120-second MCP startup timeout may be too short for the
node_repl/ Computer Use environment to initialise reliably.There may also be an authentication or Computer Use initialisation step involved, which can produce longer delays.
Environment
0.154.0-alpha.6.2qwen3.5:122b-a10bnode_repl,cua_replImportant qualification
This is currently an empirical workaround rather than a confirmed explanation of the underlying failure. I have not yet established exactly what
node_replis waiting for during startup, nor whether theadditional_toolserror is directly caused by the timeout.However, increasing the timeout from 120 to 360 seconds changed the behaviour from repeated immediate/broken requests to a request that waited for initialisation and then completed successfully.
It may therefore be worth trying a larger
startup_timeout_secbefore disablingnode_replwhen investigating similar local-model/Xcode failures.skk-sec commentedon Oct 9, 2026
Title: Related diagnostic evidence: codex exec 0.154.0 completes without observed command execution
We observe a related symptom through a custom MCP wrapper launching Codex CLI on Linux. The installed CLI reports 0.154.0; binary provenance and the model actually selected for the affected turn have not been independently attested.
The wrapper launches exec with JSON output, approval never, read-only sandbox, ephemeral mode and a fixed repository workspace. No model override is supplied. The child environment contains only HOME, CODEX_HOME, PATH, LANG and NO_COLOR.
Two separately authorized read-only attempts ended without the required reader result. In the instrumented second attempt, the process exited 0 and completed, but no command_execution start/completion/failure item was observed. Its final text stated TOOL_UNAVAILABLE; this is model text, not a native capability error. No successful execution is inferred.
The runtime and project binding were checked separately. The configured environments.toml was absent. No sandbox broadening or model/provider switch was attempted. These observations do not attest effective features, model tool mode, provider request shape or actual tool registration.
At the release-tag source commit 6b9826e, core/src/client.rs::build_responses_request still places tool schemas in AdditionalTools and clears top-level tools for use_responses_lite. This is consistent with the branch discussed in #31894, but we do not yet know whether our failed turn used it.
Could maintainers advise:
No private repository names, hostnames, paths, task/thread IDs, credentials, raw logs or source contents are attached. This is related evidence, not a confirmed duplicate or a deterministic minimal reproducer.