VS Code Remote-SSH: Codex panel intermittently stalls after per-user TMPDIR IPC fix; logs show unsupported workspace_dependencies, unhandled thread-stream-state-changed, and outbound queue full

Open 💬 4 comments Opened May 8, 2026 by mario-garbelli
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of the VS Code extension are you using?

openai.chatgpt-26.506.21252-linux-x64

Which IDE are you using?

VS Code Remote-SSH

What platform is your computer?

Remote Linux shared multi-user host via VS Code Remote-SSH.

Sanitized environment:

  • Remote host: shared Linux server
  • User: non-root user, UID <uid>
  • VS Code Remote path: <remote-vscode-server-path>
  • Workspace: <workspace-root>
  • Test folder: <small-test-folder>
  • Private temp directory: <user-private-tmpdir>

Summary

The Codex VS Code extension intermittently enters a stalled/degraded state in VS Code Remote-SSH.

The earlier shared /tmp/codex-ipc issue appears to be mitigated: TMPDIR, TMP, and TEMP are now set to a user-private temp directory before the Remote-SSH extension host starts, and Codex creates its IPC socket under that directory.

However, the Codex panel can still become stuck with a permanent spinner/loading state. During the stall, the codex app-server process remains alive, IPC appears valid, and no repository/tool child processes are running. The logs instead show unsupported feature enablement, repeated unhandled broadcasts, queue overflow/backpressure, connector/logo fetch failures, and steering timeouts.

This looks like a residual Remote-SSH stability issue after IPC isolation is fixed, possibly involving protocol/capability mismatch, event-stream handling, or backpressure between the VS Code extension, extension host, and app-server.

What issue are you seeing?

Intermittently:

  • The Codex send button changes to a spinner/loading state and remains stuck.
  • A second request sometimes does not start.
  • extensionHost CPU usage rises significantly.
  • The codex app-server process remains alive.
  • Some turns appear to finish server-side but do not return complete trace/output to the VS Code UI.
  • Reloading/reconnecting VS Code Remote-SSH temporarily restores normal behavior, but the degraded state can return later.

Why this does not look like the original /tmp/codex-ipc issue anymore

This initially looked related to the global /tmp/codex-ipc issue on shared multi-user hosts.

I moved TMPDIR, TMP, and TEMP to a user-private directory before VS Code Remote-SSH starts the extension host.

Current process environment confirms:

TMPDIR=<user-private-tmpdir>
TMP=<user-private-tmpdir>
TEMP=<user-private-tmpdir>

Codex now creates IPC under:

<user-private-tmpdir>/codex-ipc/ipc-<uid>.sock

I verified that:

  • The socket exists.
  • The socket is owned by the correct user.
  • /proc/<codex-app-server-pid>/environ contains the user-private TMPDIR.
  • The codex app-server process remains alive during the stall.

Therefore, the original global /tmp/codex-ipc collision appears to be mitigated. The remaining failure seems to occur after IPC has been correctly scoped to a user-private temp directory.

Diagnostics during a stalled state

During a stalled state:

pstree shows: extensionHost -> codex app-server

The codex app-server process remains alive, but no child processes are observed, for example no:

git
bash
python
pytest
npm

This suggests that, at the time of the stall, the app-server is not actively executing repository/tool commands.

Current config / attempted mitigation

I attempted to reduce app/connector traffic with:

[apps._default]
enabled = false

Despite this, logs still show many plugin/app/connector-related events, including connector/logo fetches.

Key log evidence

Unsupported feature enablement
Features enabled enabledFeatures="..., workspace_dependencies, ..., apps, plugins, ..."
Request failed ... method=experimentalFeature/enablement/set ...
unsupported feature enablement `workspace_dependencies`: currently supported features are apps, memories, plugins, remote_control, tool_search, tool_suggest, tool_call_mcp_elicitation
Failed to sync experimental feature enablement

The extension appears to attempt enabling workspace_dependencies, but the app-server reports that this feature is unsupported.

Broadcast flood without handler
[IpcClient] Received broadcast but no handler is configured method=thread-stream-state-changed

I observed hundreds of occurrences of this message in a single Codex.log.

Queue overflow / overload
dropping overload response ... outbound queue is full
Server overloaded; retry later.
Connector/logo fetch errors despite apps mitigation attempt
Error fetching error={"code":-32001,"message":"Server overloaded; retry later."} url=/aip/connectors/.../logo?theme=light
Error fetching error="TypeError: fetch failed" url=/aip/connectors/.../logo?theme=dark

Connector/app metadata or logo fetches still appear in the logs even after attempting to disable apps by default.

403 fetch errors
Error fetching httpStatus=403 statusText=Forbidden url=https://chatgpt.com/ces/v1/rgstr?...

The full URL has been intentionally redacted.

Steering timeout / no active turn
mcp_request_timeout conversationId=... method=turn/steer timeoutMs=30000
Error submitting steering turn for conversation ...
Received app server error error={"code":-32600,"message":"no active turn to steer"}

The full conversation/request identifiers have been intentionally redacted.

Expected behavior

  • The extension and app-server should agree on supported feature flags, or unsupported feature enablement should fail once without destabilizing the session.
  • Repeated thread-stream-state-changed broadcasts should either have a handler or should not overwhelm the extension host.
  • Connector/app metadata or logo fetch failures should not affect chat responsiveness.
  • Queue overflow/backpressure should not leave the UI stuck in a permanent spinner/loading state.
  • Remote-SSH should remain stable once IPC is correctly scoped to a user-private TMPDIR.

Actual behavior

  • The extension attempts to enable unsupported workspace_dependencies.
  • Hundreds of unhandled thread-stream-state-changed broadcasts appear in Codex.log.
  • Connector/logo fetches continue despite an apps mitigation attempt.
  • Queue overflow / overload appears in logs.
  • Steering requests time out and later return no active turn to steer.
  • The VS Code UI can become stuck in a spinner/loading state.

Related issues

  • Remote-SSH global /tmp/codex-ipc collision:

https://github.com/openai/codex/issues/17765

  • Remote-SSH 403/backend/plugin instability leading to queue overflow:

https://github.com/openai/codex/issues/16341

  • Extension event storm / high CPU / unhandled thread-stream-state-changed:

https://github.com/openai/codex/issues/15397

  • Streaming UI stalls with repeated thread-stream-state-changed:

https://github.com/openai/codex/issues/13343

Additional note

I have not attached full logs here because they may contain local paths, hostnames, usernames, UIDs, request/conversation IDs, connector IDs, workspace-specific identifiers, or other environment-specific details.

I can provide a sanitized Codex.log if useful, with local paths, hostnames, usernames, UIDs, request/conversation IDs, connector IDs, workspace names, repository names, and other identifying values removed.

If helpful, I can also provide a redacted timeline from a single stalled session showing the order of:

  1. unsupported workspace_dependencies
  2. repeated thread-stream-state-changed
  3. connector/logo fetch failures
  4. outbound queue full / overload
  5. turn/steer timeout
  6. no active turn to steer

View original on GitHub ↗

3 Comments

github-actions[bot] contributor · 3 months ago

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

  • #20624
  • #20599
  • #20781
  • #20208
  • #20196

Powered by Codex Action

mario-garbelli · 3 months ago

Thanks for the duplicate check. I reviewed the suggested issues.

This is likely related to the same broader VS Code extension/app-server instability area, especially #20599 and #20781.

I am not sure it is an exact duplicate, because this case adds one specific detail: it happens in VS Code Remote-SSH after the known shared /tmp/codex-ipc issue has already been mitigated. TMPDIR, TMP, and TEMP are set to a user-private temp directory before the extension host starts, the Codex IPC socket is created there, it is owned by the correct user, and codex app-server remains alive.

The residual stall still occurs with IPC apparently valid, and the logs show the combined pattern:

  • unsupported workspace_dependencies
  • repeated thread-stream-state-changed
  • outbound queue is full
  • connector/logo fetch failures despite [apps._default] enabled = false
  • turn/steer timeout followed by no active turn to steer

If maintainers consider #20599 or #20781 the canonical tracking issue, I am happy to close this and move the Remote-SSH/private-TMPDIR-specific details there. Otherwise I would prefer to keep this open because it documents that the issue can persist even after the shared /tmp/codex-ipc problem is fixed.

mario-garbelli · 3 months ago

Additional clean reproduction with sanitized diagnostics.

After resetting the remote VS Code server state and killing stale user-owned extensionHost / codex app-server processes, I opened a fresh VS Code Remote-SSH window and confirmed a clean baseline.

VS Code Server was running under Remote-SSH, as shown by the --connection-token=<redacted> server argument.

server-main.js
└─ extensionHost
   └─ codex app-server

Only one Codex extension version was installed, and the active codex app-server was launched from that same version:

openai.chatgpt-26.506.31421-linux-x64

Codex IPC was correctly created under the user-private TMPDIR, not under global /tmp/codex-ipc.

After sending a small test prompt, the VS Code UI remained stuck in a reasoning / active-turn state and did not allow a second command to be submitted.

At the time of the stuck state, the process topology was still clean:

server-main.js
└─ extensionHost
   └─ codex app-server

There were no duplicate extension hosts involved in this reproduction.

However, the extensionHost CPU rose significantly. A per-thread top -H snapshot showed the main Node extensionHost thread at around 90% CPU, while the codex app-server threads were sleeping at the instant of sampling.

The stuck-state Codex.log showed:

thread-stream-state-changed: 7
outbound queue is full: 3
workspace_dependencies: 5
Server overloaded; retry later: 76
unsupported feature: 4

The outbound queue is full count appears to undercount the actual event volume because many repeated app-server transport warnings are embedded inside long cli: message="..." log lines.

Relevant log sequence:

Features enabled enabledFeatures="..., workspace_dependencies, ..., apps, plugins, ..."
unsupported feature enablement `workspace_dependencies`
Received broadcast but no handler is configured method=thread-stream-state-changed
dropping overload response for connection ConnectionId(0): outbound queue is full
Error fetching ... "Server overloaded; retry later." url=/aip/connectors/.../logo?theme=...

This clean reproduction suggests the stuck UI can happen even with:

  • one installed Codex extension version
  • one extensionHost
  • one codex app-server
  • correctly scoped user-private TMPDIR
  • valid Codex IPC socket

So the remaining issue appears more consistent with an event-stream / backpressure / active-turn state problem between the VS Code extension host and the Codex app-server, rather than an IPC socket collision or app-server crash.

I attached a ZIP with sanitized diagnostics, including:

  • clean baseline process snapshot
  • post-clean-reopen snapshot
  • stuck single-extensionHost process tree
  • per-thread top -H snapshot for extensionHost
  • per-thread top -H snapshot for codex app-server
  • current stuck-state log evidence
  • log counter comparison

codex-issue-diagnostics-sanitized.zip

Showing cached comments. Read the full discussion on GitHub ↗