openai / openai/codex

Regression: headless SSH tasks lose thread messaging and delegation tools after Desktop update

Open
#42,973 8 comments 3 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app bug mcp remote subagent
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

What version of the Codex App are you using (From “About Codex” dialog)?

26.901.31953 (build 7868); remote Codex CLI/app-server 0.153.4

What subscription do you have?

ChatGPT Pro 5x

What platform is your computer?

Desktop client: macOS. Remote execution host: headless Linux HPC node connected through SSH, running Codex CLI/app-server without the Codex desktop app.

What issue are you seeing?

Headless SSH tasks have lost send_message_to_thread, create_thread, fork_thread, and handoff_thread from their live tool catalog. list_threads still works. This workflow worked approximately one week ago and stopped working after a recent Codex update; I do not have the exact last working build.

Tasks on other computers that run the Codex app still have thread messaging when I connect to them. The affected case is specifically the headless SSH host.

Impact: Remote SSH threads cannot communicate or coordinate with each other. A remote thread acting as a coordinator cannot message another remote thread, and remote threads cannot exchange instructions, progress updates, or completion reports through send_message_to_thread. This affects coordination entirely among remote threads, as well as callbacks from remote workers to a local coordinator.

Using a local coordinator to wait or poll for completion only partially works around this: it does not restore direct remote-to-remote communication or allow remote threads to coordinate independently.

The operations are absent, rather than failing with a tool-call error. A fresh task reproduces this.

What steps can reproduce the bug?

Feedback ID: 01a070ce-3f7b-7181-8b37-7dd2bf6eaab7

  1. Connect Codex Desktop to a headless Linux host over SSH running Codex CLI/app-server 0.153.4.
  2. Open two tasks on the remote SSH host.
  3. Ask one remote task to message the other using send_message_to_thread, for example to coordinate work or share a status update.
  4. Observe that send_message_to_thread is absent from the calling remote task’s live tool catalog. The other remote task also lacks it, so neither can initiate messaging to the other.
  5. list_threads remains available, while create_thread, fork_thread, and handoff_thread are also absent.
  6. Compare with a local Desktop task, where these operations are exposed.
What is the expected behavior?

Headless SSH tasks should retain cross-task messaging and delegation support, as they did approximately one week ago. Remote threads should be able to call send_message_to_thread to coordinate directly with other remote threads, exchange instructions and status, and report completion or requests for attention to either a remote or local coordinator.

Please restore support through the SSH integration, or provide a supported codex_app MCP bridge for headless hosts.

Additional information

Read-only diagnosis of the installed Desktop bundle found a concrete exclusion path:

  • In webview/assets/app-initial-caa927532ffb.js, pPi.readInputs() assigns usesDesktopMcp = ik(hostId).
  • ik() requires the host to match the renderer host_config.id and have kind === "local"; its fallback checks hostId === "local". The SSH host does not qualify.
  • Local tasks use the codex_app MCP server and supply tool names through mcp_servers.codex_app.enabled_tools.
  • The alternative dynamic-tool path calls OOt(), whose AOt exclusion set contains automation_update, create_thread, send_message_to_thread, fork_thread, and handoff_thread.
  • GSa() also rejects these operations at execution time through the dynamic route with: "This app tool is no longer available through dynamic tools. Use the codex_app MCP server. If that server is unavailable on this host, task delegation is unavailable."

Initialization evidence (UTC, 2026-09-05):

  • SSH initialization succeeded; the affected thread/start completed without error at 08:54:28.233.
  • Remote list_threads reached the dynamic-tool execution path at 08:55:31.220.
  • No singular codex_app startup entry was found for the affected SSH task. The plural codex_apps server became ready at 08:54:28.841; it is a different server.
  • A comparison local task had singular codex_app ready at 09:02:40.877 and exposes all four operations.

This explains the current missing set, but we have not compared the bundle against the last working version, so the exact introducing update is unconfirmed. No configuration or installed files were modified during diagnosis. Credentials and raw logs are omitted.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with webview/assets/app-initial-caa927532ffb.js, especially pPi.readInputs(), ik(), OOt(), and GSa(). Compare codex_app initialization and the live tool catalog for local Desktop and SSH tasks, then reproduce the listed two-task workflow; done means the SSH catalog exposes messaging and delegation operations without using the unavailable dynamic path.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, rust
Domain
devtools, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.