app-server stream stalls after starting custom tool call with empty input

Open 💬 2 comments Opened Jul 12, 2026 by mcinteerhouse-ops

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:

  1. Start an app-server turn with a custom exec tool available.
  2. Allow several reasoning/tool cycles to complete normally.
  3. 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.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗