Codex Desktop: tool_search advertises read_thread but invocation fails with “No handler registered” until app restart

Open 💬 1 comment Opened Jul 29, 2026 by alexander-dreyzen
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of the Codex App are you using?

  • Codex/ChatGPT Desktop: 26.721.81911 (bundle build 5973)
  • 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_threads and read_thread at 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, or thread not loaded events during the incident.
  • A fresh turn in the affected task explicitly ran tool discovery again. Discovery succeeded, but read_thread still 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:

  1. Use a long-lived Desktop task that has previously used app-native thread tools and has crossed a context-compaction boundary.
  2. In a fresh turn, use tool discovery to resolve list_threads, read_thread, wait_threads, and send_message_to_thread.
  3. Immediately call the discovered read_thread tool for an available target.
  4. Observe No handler registered for tool: read_thread.
  5. From a different local task in the same Desktop process, call read_thread for the same target; it succeeds.
  6. Restart only Codex Desktop.
  7. 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.

View original on GitHub ↗

1 Comment

github-actions[bot] contributor · 29 days ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #35751
  • #35894

Powered by Codex Action