Codex Desktop: tool_search advertises read_thread but invocation fails with “No handler registered” until app restart
What version of the Codex App are you using?
- Codex/ChatGPT Desktop:
26.721.81911(bundle build5973) - Bundled CLI:
codex-cli 0.146.0-alpha.3.1
Platform
- macOS
26.5.2(25F84) - Apple Silicon (
arm64)
What issue are you seeing?
In a long-lived Codex Desktop task, immediately after a context-compaction boundary, deferred tool discovery successfully advertised the app-native thread tools, including read_thread. Invoking the discovered tool in the same turn then failed with:
No handler registered for tool: read_thread
This was task-scoped rather than a Remote Control or global app-server outage:
- A second local Codex task in the same Desktop process successfully called
list_threadsandread_threadat the same time. - That second task exact-read the same Remote Control target that the affected task could not read.
- Both Remote Control hosts were available.
- The Desktop log had zero
app_server_client_request_queue_rejected,thread_list_unavailable, orthread not loadedevents during the incident. - A fresh turn in the affected task explicitly ran tool discovery again. Discovery succeeded, but
read_threadstill failed as unregistered.
After restarting only Codex Desktop—without changing the task, Remote Control connections, target, or prompt—the same affected task repeated discovery and the exact read_thread call successfully within 13 seconds.
Steps to reproduce
The failure is intermittent but was reproduced and discriminated as follows:
- Use a long-lived Desktop task that has previously used app-native thread tools and has crossed a context-compaction boundary.
- In a fresh turn, use tool discovery to resolve
list_threads,read_thread,wait_threads, andsend_message_to_thread. - Immediately call the discovered
read_threadtool for an available target. - Observe
No handler registered for tool: read_thread. - From a different local task in the same Desktop process, call
read_threadfor the same target; it succeeds. - Restart only Codex Desktop.
- Return to the original affected task and repeat discovery plus the same read; it succeeds.
Expected behavior
If tool discovery advertises a tool for the current turn, its handler should be registered and callable in that same turn. Context compaction, task resume, or renderer rehydration should rebuild the per-task dynamic tool-handler registry consistently.
If a handler truly cannot be registered, discovery should fail or omit the tool rather than returning a callable-looking definition that deterministically produces No handler registered.
Impact
This blocks app-native multi-task coordination even though the underlying Remote Control connection and target are healthy. The only confirmed recovery is restarting the controlling Desktop app and starting a fresh invocation. It can also encourage unsafe fallback attempts to alternate transcript or transport surfaces when the correct target remains reachable from other tasks.
Additional information
- The failing fresh turn began with a recorded context-compaction item.
- No repository content, user prompts, full task UUIDs, credentials, or complete logs are included here.
- Exact task/session identifiers and a narrowly sanitized log window can be provided privately through Codex feedback if requested.
- This report intentionally excludes a separate app-server queue-saturation incident so the handler-registration boundary remains independently actionable.
Likely invariant: dynamic tool discovery and per-task handler registration should be atomic and should be rehydrated together after compaction/resume.
1 Comment
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action