Codex Desktop terminal panel does not render on macOS 26.5.1 (M1 Max, arm64)
Resolved 💬 5 comments Opened Jun 14, 2026 by DougCrossDesign Closed Jul 26, 2026
💡 Likely answer: A maintainer (github-actions[bot], contributor)
responded on this thread — see the highlighted reply below.
Summary
The terminal panel does not render in Codex Desktop on macOS 26.5.1. The main UI loads normally, but the terminal panel never appears when selected.
Environment
- macOS 26.5.1 (25F80)
- Apple M1 Max
- Codex Desktop 26.609.41114
- arm64 build (confirmed via binary inspection)
Steps to reproduce
- Launch Codex Desktop
- Open or create a workspace
- Click the Terminal button/panel control
Expected behavior
A terminal panel opens within the workspace and is available for interactive command execution.
Actual behavior
No terminal panel is displayed. The application remains responsive, but the terminal never renders or initializes.
Troubleshooting performed
- Full uninstall and reinstall of Codex Desktop
- Removed all Application Support, caches, logs, preferences, helper services, and browser integration files
- Confirmed clean state before reinstall
- Verified arm64 binary via:
file "/Volumes/Codex Installer/Codex.app/Contents/MacOS/Codex"
- Reset macOS permissions
- Tested GPU-related launch flags (no improvement)
Additional observations
- Codex CLI works normally
- Codex Web works normally
- Issue is reproducible after complete clean install
- Appears isolated to Desktop UI terminal panel initialization
Possibly related issues
- #26950
- #26184
5 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Thanks — I believe this may be related but not identical.
My issue is reproducible on macOS:
Behavior differs slightly:
This may indicate a cross-platform terminal panel initialization issue rather than a platform-specific regression.
Reproduced on a substantially newer build; the issue persists.
Environment
26.707.51957(bundle build5175)0.144.0-alpha.426.5(build25F5058e)arm64zshReproduction
Diagnostic evidence
``
text
``No app terminal session is attached to this thread yet.
zshPTY starts successfully in the same working directory and reaches a normal prompt.pwdresolves correctly.terminal,pty, orshellreturned no launch/attachment error.This rules out a missing directory, broken
zsh, or a general inability to allocate a PTY. The failure is in the Desktop UI/session attachment path.Relationship to other reports
read_thread_terminalcannot resolve because temporary and permanent thread ownership IDs diverge.This reproduction matches #28141 at the UI level, while the backend symptom matches #31417. That combination suggests the panel-rendering failures and agent-side lookup failures may share a terminal-session ownership/attachment defect.
Working root-cause hypothesis
The terminal panel appears to depend on an attached terminal-session record. For a newly created or resumed thread, one of these transitions may be missing or racy:
client-new-thread:...owner to the permanent thread ID;read_thread_terminal;If step 2 or 3 fails, the UI may immediately collapse or render nothing because it sees no terminal model, while
read_thread_terminalindependently returns “no session attached.” The absence of an explicit log/error makes the state look like a harmless empty terminal rather than an attachment failure.Suggested fix
read_thread_terminalresolve through the same canonical thread-ID function.terminal_create_started,pty_created,terminal_registered,owner_rebound,panel_rendered, andterminal_attach_failed.read_thread_terminalreturns it.The most useful invariant would be: if the UI exposes an enabled terminal toggle for a local thread, toggling it must result in either an attached terminal session or a visible error state—never a silent no-op/auto-collapse.
I traced this further against both the public
openai/codexsource and the shipped Desktop bundle. The failure is in the closed Desktop renderer, not the public app-server PTY implementation.Exact findings
The Desktop terminal target resolver currently behaves like this (pseudocode preserving the shipped control flow):
That produces two distinct bugs:
client-local-thread. The resolver returnsnull, so the toggle path exits before creating a terminal tab or dispatchingterminal-create. This precisely explains the silent no-op and the absence of terminal/PTY errors in unified logs.clientThreadId, butread_thread_terminalfirst queries the terminal store with the permanent thread ID. The store therefore reports “No app terminal session is attached” even when a client-keyed session exists.The same renderer already maintains both directions of the alias relationship when a client-created thread materializes:
So this does not require a new protocol or PTY migration.
Recommended minimal fix
1. Enable terminals for client-local routes
Handle
client-local-threadexactly like the pre-materialized local route:This ensures the toggle creates a tab and the terminal store dispatches
terminal-create.2. Resolve snapshots through the existing alias map
Keep live terminal sessions keyed by
clientThreadIdso they survive the client-local → permanent-local route transition. Inread_thread_terminal, resolve in this order:Apply the same fallback inside the host-side
thread-terminal-snapshothandler so renderer and host recovery paths agree.3. Do not rekey or restart the PTY
Rekeying creates avoidable races with terminal listeners, pending writes, tab IDs, and active-session selection. Alias-aware lookup is smaller and preserves existing sessions through route materialization.
Regression tests
client-local-thread: toggle terminal → tab remains open andterminal-createis dispatched.read_thread_terminalusing the permanent thread ID → sentinel is returned through alias lookup.Why I did not open a PR
The public repository’s
command/execimplementation already has integration coverage for PTY creation, input, streaming output, resize, and teardown. Its session key is intentionally connection + client-supplied process ID and it has no Desktop route/thread-owner concept. The relevant Desktop symbols (client-local-thread,terminal-create, andread_thread_terminal) are absent from the public repository, so a public backend PR would not fix this end-to-end.I could not rerun the existing Rust PTY test locally because this machine lacks the repository-required Rust/
justtoolchain, but the source-level ownership boundary is unambiguous: the failing route resolver and snapshot alias lookup are both in the shipped Desktop renderer.Recently downloaded and installed Version 26.721.41059, released Jul 24, 2026. The terminal window is now firing successfully.