codex_app.set_thread_title is exposed but refuses remote threads
What happened?
In a Codex Desktop remote thread, the thread-management tool codex_app.set_thread_title is discoverable, but calling it for the current thread fails at runtime with:
Codex thread tools are only supported for local threads.
This is confusing because the current remote thread is visible in the Codex Desktop sidebar, and the agent can discover the rename tool plus a current thread id. A skill or agent trying to keep conversation titles tidy sees an apparently valid tool, calls it, then gets a runtime refusal.
Steps to reproduce
- Open a Codex Desktop thread that runs in a remote environment.
- From that thread, ask the agent/skill to rename the current conversation.
- Discover thread tools via tool search;
codex_app.set_thread_titleis returned. - Call
codex_app.set_thread_titlewith the current thread id and a new title. - Observe the runtime error above.
Expected behavior
Either:
- support renaming Desktop-visible remote-backed threads through
codex_app.set_thread_title, or - do not expose the rename tool to remote threads where it cannot work, or
- expose a clear capability/status signal so skills can skip the call and report a suggested title instead.
Actual behavior
The tool is discoverable and looks applicable, but refuses execution because the thread is not local.
Why this matters
This makes thread-title automation brittle in Codex Desktop remote threads. It also nudges skill authors toward unsafe fallback ideas such as editing local session index files directly, which is not a reliable or supported way to update Desktop thread metadata.
Related issues
These appear related to the same local/remote/Desktop thread metadata boundary, though they do not describe this exact error:
- #25092
- #24749
- #21079
- #24282
Environment
- Product: Codex Desktop
- Thread type: remote-backed Desktop thread
- Tool:
codex_app.set_thread_title - Error:
Codex thread tools are only supported for local threads.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗