app-server stream stalls after starting custom tool call with empty input
What version of Codex is running?
0.144.1
What platform is your computer?
Linux 6.17 arm64
What steps can reproduce the bug?
The failure is intermittent, observed through codex app-server --listen stdio:// using ChatGPT OAuth and gpt-5.6-sol with custom tools.
A typical affected turn:
- Start an app-server turn with a custom
exectool available. - Allow several reasoning/tool cycles to complete normally.
- After a completed reasoning item, the Responses stream starts the next custom tool call but stops before emitting its input.
The Codex structured log ends with:
Output item item=CustomToolCall {
id: Some("<redacted>"),
status: Some("in_progress"),
call_id: "<redacted>",
name: "exec",
namespace: None,
input: ""
}
No tool-input delta, output_item_done, app-server item/completed, or terminal turn/completed follows. No HTTP/SSE/auth/socket WARN or ERROR is logged. The connection remains open until the embedding client aborts it after its idle timeout.
The custom tool is never dispatched, so this is not a hanging command or missing tool result.
What is the expected behavior?
The stream should either:
- finish the custom-tool input and complete the item;
- emit a terminal Responses/app-server error; or
- detect/reconnect an idle partial stream without leaving the turn silently open.
What do you see instead?
Codex remains indefinitely between response.output_item.added for the custom tool call and its first/remaining input delta. The app-server never emits turn/completed, and the embedding client eventually reports a completion-idle timeout.
Observed locally:
- 11 completion-idle timeouts across multiple agents/workloads since July 10.
- Four deeply inspected failures show a partial custom-tool-call signature.
- Three failures ended exactly at
CustomToolCall(status=in_progress, input=""). - Successful turns occur between failures, so authentication, model access, and the app-server process are generally healthy.
Controlled follow-up:
- 0.143.0 cannot test GPT-5.6 because the backend returns
The 'gpt-5.6-sol' model requires a newer version of Codex(same for Terra/Luna). - 0.144.1 completed 8/8 controlled turns containing 10 separate custom exec calls each (80/80 tool calls), confirming the problem is intermittent.
Additional information
The embedding client is OpenClaw 2026.6.11 over stdio. Its timeout projection reported zero active items because the partial custom-tool start had not reached an app-server completed-item notification. Codex's own logs_2.sqlite is what exposed the in-progress item.
The first observed failures began after installing Codex 0.144.1, but this is correlation rather than a confirmed regression boundary because GPT-5.6 is rejected by 0.143.0.
A useful diagnostic improvement would be logging Responses stream lifecycle events/deltas and explicit close/error reasons around partial custom-tool items.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗