gpt-5.6 Responses Lite turns do not expose exec/code-mode tools in codex exec
已打开 08:45PM - 09 Jul 26 UTC
bug
exec
CLI
tool-calls
## Summary
`codex exec` with `gpt-5.6-sol` can report that shell/code-mode tool…s 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`:
```bash
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`:
```bash
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:
```text
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:
```json
{
"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:
```json
{
"model": "gpt-5.6-sol",
"tools": null,
"parallel_tool_calls": false
}
```
But `input[0]` contains the code-mode tools as `additional_tools`:
```json
{
"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:
- #30861
- #31475