[macOS Desktop 26.820.60940] code-mode tasks omit send_message_to_thread while read tools remain
What version of the Codex App are you using?
- ChatGPT / Codex Desktop:
26.820.60940(build7119) - Bundled CLI:
codex-cli 0.150.0-alpha.8 - Prior working CLI/session comparison:
0.149.0-alpha.4.1
What platform is your computer?
- macOS
26.5.2(build25F84) - Apple Silicon /
arm64
What issue are you seeing?
After the update to Desktop 26.820.60940 / CLI 0.150.0-alpha.8, code-mode Codex tasks no longer receive the complete first-party thread-management tool family.
The read side remains available and works:
list_threadsread_threadwait_threads- title/archive/pin helpers
But the effectful task tools are omitted from the callable tool catalog, including:
send_message_to_threadcreate_threadfork_threadhandoff_threadautomation_update
The immediate blocker is send_message_to_thread. In two independently bootstrapped Codex tasks, including a worker and coordinator on the same physical host, the exact result was:
typeof tools.codex_app__send_message_to_thread === "undefined"
TypeError: tools.codex_app__send_message_to_thread is not a function
The destination task was uniquely resolved through the correct remote-ssh-discovered:<host>.local projection. Exact destination readback proved that no message input was created, so this is a missing callable-tool problem rather than target discovery, host routing, or an uncertain delivery result.
A retained session from the same environment on CLI 0.149.0-alpha.4.1 successfully called:
await tools.codex_app__send_message_to_thread({
threadId,
hostId,
prompt,
});
The installed 26.820.60940 bundle still contains the send_message_to_thread tool definition, but the updated app code explicitly filters a sensitive-tool set containing automation_update, create_thread, send_message_to_thread, fork_thread, and handoff_thread from code-mode/deferred catalogs unless separately enabled. There is no user-authored mcp_servers.codex_app entry in config.toml.
This leaves app guidance and installed workflows referring to a native task-send capability that the model cannot call.
What steps can reproduce the bug?
- Run Codex Desktop
26.820.60940with bundled CLI0.150.0-alpha.8on macOS. - Open a code-mode task with an authenticated ChatGPT account.
- Ask the task to coordinate an existing Codex task.
- Confirm
list_threads,read_thread, andwait_threadsare callable. - Resolve an exact existing destination using
remote-ssh-discovered:<host>.local. - Attempt one user-authorized
send_message_to_thread. - Observe that the tool is absent from the callable catalog / is not a function.
- Repeat in another independently bootstrapped task; the same omission occurs.
What is the expected behavior?
When a user explicitly requests inter-task communication, Codex Desktop should expose the same native app-owned send_message_to_thread capability that worked in 0.149.
At minimum:
- the app instructions and callable tool catalog must agree;
- an explicitly user-authorized send should not require editing
config.toml; - the read and write halves of the thread-management family should not be silently split;
- if the capability is intentionally unavailable, the app should provide a clear structured diagnostic rather than leaving installed workflows to discover a missing function at runtime.
Impact
This breaks established multi-task coordination that requires a visible, source-accounted native send, including discussion, convergence, and handoff workflows. Raw App Server calls or manual/fallback transports are not equivalent because they do not create the same source event and can violate exactly-once/no-resend guarantees.
Unaffected read-only and helper-backed operations continue to work, which makes the regression particularly confusing.
Additional information
No config.toml change was made. The issue reproduces with the correct host projection and in two independent tasks.
Related but not duplicate:
- #29223 — broader reports of fresh sessions losing the thread-management surface
- #26907 — remote-started threads missing thread tools
- #40793 — same Desktop/CLI build exposes these tools on Windows but prompts on every call
This report is narrower: on macOS build 26.820.60940, read/list/wait remain callable while send_message_to_thread and the other effectful task tools are omitted entirely.
1 Comment
I inspected the Desktop 26.820.60940 app bundle and found a client-side filtering path that appears to explain the exact read/write split.
The bundle defines a filter that removes:
from both top-level dynamic tools and the codex_app namespace.
During thread-start parameter construction, this filter is applied when the source/current task host is not classified as local. The local-host path instead enables the app-owned codex_app tool names through configuration.
This would explain why read-only tools remain available while the five effectful tools disappear on a remote-SSH host projection. The relevant distinction appears to be the source task's host classification, not the destination thread's resolved host.
The public CLI repository also introduced per-surface MCP exposure controls in commit 51c9ed6 (#36781), which is present in the Desktop-bundled 0.150.0-alpha.8 but not in 0.144.6.