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:
Summary
codex execwithgpt-5.6-solcan report that shell/code-mode tools are unavailable, while the same prompt works withgpt-5.5.The issue appears to be the Responses Lite request shape: for
use_responses_lite=truemodels, Codex currently moves client tool schemas into aninput[0]item of typeadditional_toolsand omits top-leveltools. In the live 5.6 path I tested, thoseadditional_toolsare not exposed as callable tools, so the model does not see the public code-modeexectool.Environment
codex-cli 0.144.0gpt-5.5gpt-5.6-solReproduction
This works with
gpt-5.5:Observed: Codex emits a command execution item and runs
/bin/bash -lc lssuccessfully.This fails with
gpt-5.6-sol:Observed assistant message:
Request capture
Using a local Responses capture provider, the
gpt-5.5request 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-solrequest has no top-level tools:{ "model": "gpt-5.6-sol", "tools": null, "parallel_tool_calls": false }But
input[0]contains the code-mode tools asadditional_tools:{ "type": "additional_tools", "role": "developer", "tool_names": ["exec", "wait", "request_user_input", "collaboration"] }The
execadditional tool description includes nestedtools.exec_command(...), but the live model does not appear to receiveexecas callable.Expected behavior
gpt-5.6-solshould be able to call the public code-modeexectool, and from there call nestedtools.exec_command(...), so simple shell prompts work as they do withgpt-5.5.Suspected cause
codex-rs/core/src/client.rshas a Responses Lite branch inbuild_responses_requestthat insertsResponseItem::AdditionalTools { tools, ... }intoinput, then sendstools: Noneat the top level.If the live Responses Lite path does not promote
additional_toolsinto callable tool declarations, then the model is left with no callable code-mode tools.Candidate fix
Keep the existing
additional_toolsitem for the Responses Lite input contract, but also send the same client-executed tool schemas in top-leveltools.I have a small patch ready that:
additional_toolstools: Some(tools)at the top level for Responses Lite turnsRelated issues
These are related to the same 5.6 custom
exec/code-mode tool path, but appear to describe crashes after anexectool call is emitted rather than the model not seeingexecat all: