[Windows Desktop][GPT-5.6 Sol] Turn stays running indefinitely after a successful tool result with no post-tool continuation
What version of the Codex App are you using?
Codex / ChatGPT Desktop package 26.707.3748.0.
Which model and reasoning effort were you using?
- Model:
gpt-5.6-sol - Reasoning effort:
ultra/ Extra High
What platform is your computer?
- Windows 11 build
26200.8655x64 (the Windows registry reports the localized product name as Windows 10 Home China, display version 25H2) - Codex Desktop, local Windows workspace
What issue are you seeing?
On a long-running Codex Desktop thread, a local tool call completes successfully and its result is recorded, but the turn does not continue to the next model step. The Desktop UI continues to show the task as running indefinitely. There is no subsequent assistant reasoning event, tool call, progress update, completion event, or visible error. The turn resumes only after the user manually aborts it and sends another message.
This is not a slow or hung shell command. In the most recent occurrence, the tool completed a 22-test suite successfully in about one second. The tool result was persisted at 2026-07-13 11:07:35 CST, and there were no further task events until manual abort at 12:24:07 CST, a silent interval of about 76 minutes 32 seconds.
The same thread has shown five prolonged occurrences after switching to GPT-5.6 Sol:
| Occurrence | Silent interval after the last successful tool result |
|---|---:|
| 2026-07-10 #1 | about 87m 58s |
| 2026-07-10 #2 | about 32m 28s |
| 2026-07-10 #3 | about 72m 49s |
| 2026-07-11 | about 30m 46s |
| 2026-07-13 | about 76m 32s |
In all five cases, there was no automatic timeout or recovery before the user aborted the turn.
Regression timing
The affected thread originally used GPT-5.5. Its recorded model context switched to gpt-5.6-sol with ultra reasoning on 2026-07-10. All five prolonged post-tool stalls occurred after that switch. This is a strong correlation, although it does not prove whether the root cause is the model service, the Desktop app, or the model/app orchestration boundary.
Steps to reproduce
The issue is intermittent rather than a deterministic minimal reproduction, but the observed pattern is:
- Open a large, long-running local thread in Codex Desktop on Windows.
- Use GPT-5.6 Sol with Extra High/Ultra reasoning.
- Ask Codex to perform a multi-step task involving local tools.
- Let a tool call finish successfully and return its result.
- The UI continues to show the turn as running, but no next model/tool event is emitted.
- Wait: the turn remains in this state for tens of minutes with no timeout or error.
- Manually abort the turn and send a follow-up message; the thread becomes responsive again.
Large tool output appears to increase the likelihood. A later occurrence happened after a command completed in 1.3 seconds but returned a large, truncated JSON-derived output. However, smaller successful test output also triggered the problem, so large output is not required.
Expected behavior
After a tool returns successfully, Codex should promptly schedule the next model step and continue the task.
If continuation cannot be scheduled or the model request does not return, the app should:
- surface a clear error;
- apply a bounded timeout;
- retry safely; or
- offer a recovery action such as retry, checkpoint, or continue in a fresh thread.
It should not remain in an indefinite running state with no events.
Actual behavior
- Tool execution finishes successfully.
- The tool result is present in the local rollout record.
- No subsequent assistant or tool event is recorded.
- The UI remains in the running state.
- No active report-rendering/test process remains in the background.
- Only manual abort ends the stuck turn.
Diagnostic identifiers
- Thread ID:
019e9d19-aea0-7633-bd71-3274bdf7450e - Latest affected turn:
019f5961-2952-7dd1-a002-c23051669ac5 - Latest tool result timestamp:
2026-07-13 11:07:35 CST - Manual abort timestamp:
2026-07-13 12:24:07 CST - Context usage near the latest occurrence:
285,957 / 353,400(about 81%) - Automatic context compactions in this thread:
19
For the latest occurrence, automatic compaction happened only after the manual abort, so compaction was not the immediate trigger. The very large and repeatedly compacted thread may still be a contributing factor.
The local logs also repeatedly contain this warning around GPT-5.6 activity:
codex_protocol::openai_models: Model personality requested but model_messages is missing, falling back to base instructions. model=gpt-5.6-sol personality=friendly
I am including this only as a potentially relevant signal, not claiming it is the root cause.
Related issues
- #28231: successful command execution followed by an interrupted Codex CLI conversation.
- #20754: Codex Desktop remains in thinking/running state after work has completed.
- #24287: Codex Desktop active-turn and trace state can become frozen or detached.
This report differs from a purely visual spinner problem because the persisted rollout contains the successful tool result but no subsequent assistant/tool event. Local inspection could not determine whether the Desktop app failed to send the continuation request or whether the service-side continuation request remained pending.
Privacy note
No project content, API keys, credentials, or raw session logs are attached. The identifiers and timing information above are provided so OpenAI can locate the affected telemetry internally.
9 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I am experiencing what appears to be the same issue on the Codex Windows Desktop app.
In my case:
rg -nrepository search.Get-Process rg -ErrorAction SilentlyContinuereturned no process, confirming thatrg.exehad already exited.logs_2.sqliteandlogs_2.sqlite-waldid not grow while the task appeared stuck.This strongly resembles a missing post-tool continuation rather than a slow or hung local command.
Environment:
I have additional evidence from 2026-07-13 and 2026-07-14. The issue is no longer limited to the original long thread; I observed the same pattern across multiple Codex Desktop windows/threads and at least two local workspaces on Windows.
Current affected Codex Desktop package:
26.707.62119.I inspected local rollout JSONL records from 15 rollout files under
sessions/2026/07/13andsessions/2026/07/14. There were 28 event gaps longer than 15 minutes. Some of those were ordinary idle periods after completed tasks, but several were clean post-tool stalls ending only when I manually aborted the turn.Clean samples, all times in CST:
| Time | Thread / turn | Last effective event before stall | Tool result | Silent interval until manual abort |
|---|---|---|---|---:|
| 2026-07-13 11:08:13 -> 12:29:24 | thread
019f5942-5546-7a60-ae2b-b9164bc13bcf, turn019f5961-ce9d-7b70-b56c-bcfa7a9bd0be|custom_tool_call_output| command completed in 0.2s, output{}| 81.2m || 2026-07-13 11:13:23 -> 12:24:45 | thread
019f5942-5546-7a60-ae2b-b9164bc13bcf, turn019f595e-9978-76f0-a2f1-32af8be0b3ab|custom_tool_call_output| command completed in 0.1s, output{}| 71.4m || 2026-07-14 10:16:23 -> 10:35:03 | thread
019f5e47-420d-7021-a6d8-0f115e34474e, turn019f5e67-8d5a-7360-bdfe-7f8b3bae9b19|custom_tool_call_output| command completed in 0.8s with a large/truncated skill-read output | 18.7m || 2026-07-14 12:09:52 -> 12:39:37 | thread
019f5e47-420d-7021-a6d8-0f115e34474e, turn019f5ec8-73e8-7932-a7b2-8a93e7385738|custom_tool_call_output| command completed in 0.5s and returned a PowerShell parser error | 29.7m || 2026-07-14 12:50:00 -> 13:07:24 | thread
019f5e47-420d-7021-a6d8-0f115e34474e, turn019f5eef-4e26-7d32-abb7-866fb0e7bb71|custom_tool_call_output| cleanup + smoke-check completed in 2.3s and returned validation JSON | 17.4m |The 2026-07-14 12:50 sample is especially clean. The final tool output included:
After that tool result, there was no assistant continuation, no next tool call, no final response, and no visible timeout/error until manual abort.
Additional observations:
gpt-5.6-sol; local app logs showcodex.turn.reasoning_effort=xhighfor the related activity.{}, after a short validation result, after a shell parser error, and after larger truncated output.This makes the likely failure boundary look like post-tool continuation scheduling or post-tool response handling, rather than shell/tool execution itself.
Suggested mitigations:
I am still not attaching raw logs or project content for privacy reasons, but the thread/turn identifiers above should be enough to locate the relevant telemetry internally.
+1 😢
Additional Windows Desktop occurrence with a more specific
exec/ nested-tool timing signal (originally reported as #33036):26.707.9981.010.0.26200execcell awaited a nested localshell_commandconfigured withtimeout_ms: 10000.0.2s.3,806.8s.Script running with cell ID <redacted>.wait(cell_id=..., yield_time_ms=1000)reported the cell as already completed.Sanitized timeline:
This supports the same user-visible failure described here: a successful local tool result does not produce a bounded post-tool continuation, error, or recovery path. It also suggests investigating the boundary between nested-tool completion, code-mode cell closure/yield, and turn-runner notification delivery.
No private paths, project content, account identifiers, or raw session logs are included.
Additional matching occurrence from the current Windows Desktop package, with a transport-level distinction:
26.707.9981.010.0.26200gpt-5.6-sol, Extra High0.9s, and the outer exec cell reported completion.AppServerConnectionremained established overstdio; there was no app-server disconnect/reconnect or connection error during the stall.ResizeObserver loop completed with undelivered notifications, but I do not know whether that warning is causal.This occurrence therefore does not look like a hung shell process or a local app-server transport disconnect. It is consistent with a failure or indefinite wait after tool completion at the post-tool continuation / turn-runner boundary.
No project names, local paths, transcript content, account identifiers, proxy details, or raw logs are included.
same but with cli +
New A/B reproduction on Windows 26.803.5235.0: nested tool completes, outer turn remains active
I reproduced the same post-tool continuation stall on the current Windows Desktop package, with a useful same-operation comparison and renderer timing.
Environment
OpenAI.Codex 26.803.5235.00.147.0-alpha.6.5gpt-5.6-solxhighStalled occurrence
The operation was a short, read-only PowerShell fetch of the official Codex troubleshooting page, awaited by a code-mode
execcell.Sanitized persisted timeline:
Between the persisted tool output and the interrupt, the rollout contained no subsequent:
agent_reasoningtask_completeThe app-server remained responsive. At interruption time, Desktop logged:
turn/interrupt: 11 msthread/list: 1 msThe primary renderer logged 71 instances of:
during the 90-second silent interval. The UI simultaneously showed an outer “Running” tool card while the nested command card already showed successful completion.
Same-operation successful comparison
In the next turn, I ran the equivalent official-document fetch again:
That successful interval had 17 ResizeObserver errors rather than 71. This does not prove the ResizeObserver loop is causal, but it provides a correlated renderer signal and confirms the tool type/URL itself is not deterministically hanging.
Diagnostic boundary
This sample still cannot distinguish:
Useful telemetry would record, after
custom_tool_call_output:Immediate repeat with a minimized command
I reproduced the same boundary again with this short read-only command:
In this occurrence:
The same command has also completed and resumed normally in another occurrence, so it is a useful intermittent trigger, not evidence that
Invoke-WebRequest, the URL, or the network request is itself the root cause. The more precise failure boundary remains: inner command completes → tool result is returned → post-tool continuation does not arrive promptly → outer tool card remains Running.All thread IDs, turn IDs, paths, prompts, command output, account data, raw logs, and screenshots are intentionally omitted.
Additional reproductions — fresh-session, medium-reasoning, and 15.5h stall
Adding three independent reproductions that match this issue's signature closely: a tool call returns and its result is persisted, but the turn never proceeds to the next model step. No visible error, timeout event, or exception is emitted; the turn remains active until it is manually interrupted and a new message is sent.
26.803.81509, Windows 10, modelgpt-5.6-sol,model_reasoning_effort = medium,wire_api = responses, custom provider.turn_aborted,reason=interrupted) and send a new message. The thread then resumes normally.---
Case C — 15.5-hour stall with no auto-recovery (2026-08-12)
019ff559-870a-79d1-a702-d0a3738b022d019ff579-6577-7d32-9525-ad740b3437e8exectool calls. After anexecresult was returned and persisted, the turn stopped making progress and did not recover until manually interrupted the following day.Event chain (timestamps UTC):
| Time (UTC) | Event |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| 10:16:41 | Turn started (
started_at=1786529801) || 10:31:21.913 |
custom_tool_call_output(exec) →"Script completed, Wall time …"+token_count|| 10:31:34.071 |
agent_reasoning|| 10:31:34.414 |
custom_tool_callexec|| 10:31:40.201 |
custom_tool_call_output→"Script failed, Wall time 5.x seconds"+token_count|| 10:32:44.695 |
custom_tool_callexec+patch_apply_end|| 10:32:44.858 |
custom_tool_call_output→"Script completed"+token_count|| 10:33:05.455 |
custom_tool_call_output(exec) →"Script running with cell ID 66, Wall time 11.0 seconds"|| 10:33:05.459 |
event_msgtoken_count|| — | Silence for 55,664,453 ms (≈15 h 28 min). No
agent_reasoning, noreasoning, no follow-up tool call, no visible error, and no timeout event. || 2026-08-13 01:44:25.923 |
turn_aborted,reason=interrupted,duration_ms=55664453— manual interrupt |The
exectool returned a valid tool result andtoken_countwas emitted, but the agent never scheduled any follow-up action for more than 15 hours — no additional reasoning, no wait/poll of the returned cell, no subsequent tool call, and no completion/error event.Regardless of the underlying cell state, the turn itself stopped making progress and did not self-recover.
---
Case A — Stall after a
wait_agentresult (2026-08-13)019ffa76-d3e0-7711-a413-982c92e2b08ewait_agenttwice. Both waits returned normally with timeout results. After the secondfunction_call_outputwas persisted, the parent turn never continued.Event chain (timestamps UTC, from the rollout JSONL):
| Time (UTC) | Event |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 10:50:18.742 |
function_callspawn_agent|| 10:50:26.756 |
function_callwait_agent,arguments={"timeout_ms":20000}|| 10:50:46.772 |
function_call_output→{"message":"Wait timed out.","timed_out":true}|| 10:50:53.130 |
function_callwait_agent,arguments={"timeout_ms":30000}|| 10:51:23.151 |
function_call_output→{"message":"Wait timed out.","timed_out":true}|| 10:51:23.159 |
event_msgtoken_count|| — | No further events. No
agent_reasoning, noreasoning, no next tool call, notask_complete, and noturn_aborted. The rollout file ends here. |The parent received a normal
function_call_outputfromwait_agent, but no post-tool continuation was emitted afterward.---
Case B — Stall after a plain
execresult on the first message of a fresh session (2026-08-17)01a00ea9-9d8e-7643-9753-f0cbaa2a681201a00ea9-a9f7-7493-afb4-cb6a8e104732exectool, which completed successfully in approximately 0.9 seconds. The turn then stalled immediately afterward.Event chain (timestamps UTC, from the rollout JSONL):
| Time (UTC) | Event |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| 07:39:55.410 |
session_meta/task_started— turn begins || 07:39:56.443 |
user_message— first message of this session || 07:40:01.146 |
agent_reasoning|| 07:40:02.179 |
agent_message|| 07:40:03.055 |
custom_tool_callexec|| 07:40:04.022 |
custom_tool_call_output→"Script completed\nWall time 0.9 seconds"|| 07:40:04.022 |
event_msgtoken_count|| — | Silence for 1,120,804 ms (≈18 min 41 s). No
agent_reasoning, noreasoning, no next tool call, no visible error, and no timeout event. || 07:58:36.072 |
turn_aborted,reason=interrupted,duration_ms=1120804— manual interrupt |After the interrupt, sending a new
"redo"message resumed the thread normally.This occurrence is notable because the stall happened on the first user message of a fresh session. Therefore, a very large context window or many previous auto-compactions are not required to reproduce the issue, although they may still affect the probability of occurrence.
Recurrence after recovery
Approximately 22 minutes after the interrupt-and-resume recovery, the same thread stalled again.
The later turn produced the same signature:
execreturned"Script completed, Wall time 10.2 seconds";event_msgtoken_countwas emitted at08:49:07.480Z;This indicates that interrupt + resume recovers the currently stuck turn, but does not prevent the failure from recurring later in the same thread.
---
Shared signature
Across these reproductions:
function_call_outputorcustom_tool_call_output.token_countevent is emitted.agent_reasoning;reasoning;task_complete;---
What I could rule out
function_call_output/custom_tool_call_outputfollowed bytoken_count, this strongly indicates that the post-tool continuation request was never dispatched to the provider, rather than a request being sent and then hanging mid-stream.wait_agent(function_call_output) and a normal shellexec(custom_tool_call_output).---
Reproduction / detection hint
The issue is intermittent, but the cleanest local signal is:
In my reproductions, waiting did not cause the turn to recover, including one occurrence lasting approximately 15.5 hours.
At present, the only reliable recovery I have found is:
"继续";Happy to provide additional sanitized rollout JSONL excerpts or timestamps if useful.