voice mode thread disappears after inactivity timeout

Open 💬 2 comments Opened Jul 24, 2026 by gr777dt

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

26.721.31836 (build 5828)

What subscription do you have?

pro

What platform is your computer?

mac

What issue are you seeing?

when you use the new voice feature on codex desktop, if it times out due to inactivity, the thread disappears

also, why cant we choose how long the inactivity timeout is? would be good for it to stay up there to let me know when my longer threads are done, not just timeout after 2 minutes

What steps can reproduce the bug?

use the new codex voice mode
minimize codex and use the browser
mute the small icon, and let it time out

What is the expected behavior?

_No response_

Additional information

_No response_

View original on GitHub ↗

2 Comments

bbingz · 1 month ago

Analysis (community)

Thanks for tracking this — attempting a residual-focused analysis aligned with docs/contributing.md (invitation-only: analysis in-thread, no unsolicited PR).

  • Issue under review: #35103 — voice mode thread disappears after inactivity timeout
  • Theme / radar cluster: Voice mode failure / session blank (voice)
  • Reporter posture: static + local evidence where available; not claiming a maintainer invite.

Observed (from issue + public residual signal)

What version of the Codex App are you using (From “About Codex” dialog)? 26.721.31836 (build 5828) ### What subscription do you have? pro ### What platform is your computer? mac ### What issue are you seeing? when you use the new voice feature on codex desktop, if it times out due to inactivity, the thread disappears also, why cant we choose how long the inactivity timeout is? would be good for it to stay up there to let me know when my longer threads are done, not just timeout after 2 minut

Root-cause hypothesis

Multi-symptom cluster (404, orb flash, hang, false rate-limit, blank session) suggests endpoint/routing or client capability mismatch rather than pure UX. GH analysis density is low vs social heat.

High-level fix outline (not a PR)

  • Reproduce with version matrix + HAR if possible (desktop vs mobile).
  • Treat as product bug report with expected/actual table; much surface may be closed service.
  • Prefer one structured issue/analysis rather than five symptom forks.

Related thin trackers

#35103 and adjacent voice issues; avoid duplicate megathreads.

Questions for maintainers

  1. Is the intended long-term policy documented for this area (especially sandbox gitdir / log TRACE defaults)?
  2. Preferred residual anchor issue if several open threads describe the same mechanism?
  3. If the high-level outline above is roughly aligned, would an invited PR with failing-first tests be welcome later — or is an internal fix preferred?

Happy to refine with more measurements or code pointers. No unsolicited PR from me.

bbingz · 1 month ago

Analysis (community)

Residual analysis for #35103 (voice mode thread disappears after inactivity timeout) — invitation-only. Radar cluster “Voice multi-symptom” has high social density but low structured OSS analysis. No unsolicited PR.

Deterministic evidence (code surface on 5dd992acd3)

This residual is primarily product/UX lifecycle, but the client surface is concrete:

  • Feature flag: codex-rs/features/src/lib.rs — experimental realtime voice (realtime_conversation / “Enable experimental realtime voice conversation mode in the TUI”, ≈L250, key ≈L1357).
  • TUI notification fan-in for realtime sessions in codex-rs/tui/src/app/app_server_event_targets.rs:
  • ThreadRealtimeStarted / ThreadRealtimeItemAdded / ThreadRealtimeTranscriptDelta / ThreadRealtimeTranscriptDone
  • ThreadRealtimeOutputAudioDelta / ThreadRealtimeSdp / ThreadRealtimeError / ThreadRealtimeClosed
  • codex-rs/tui/src/app/thread_events.rs notes that raw response items and realtime audio can carry large payloads and must be handled carefully on replay (≈L141–L153).
  • Chat widget protocol also matches realtime notification variants (codex-rs/tui/src/chatwidget/protocol.rs ≈L220–L225).

Runtime / social residual: multi-author reports of timeout → vanished thread, false rate-limit, orb hang; GH analysis density on #35103 was thin relative to X heat — high leverage for a structured residual note.

Root-cause hypothesis

Inactivity timeout tears down realtime/thread state without a recoverable rehydrate path. Client may surface generic capability/rate-limit errors after Voice integration changes, masking the real ThreadRealtimeError / closed reason. Large audio payload paths increase the chance of partial state if teardown races with transcript deltas.

High-level fix outline (not a PR)

  1. Preserve or clearly rehydrate voice thread after idle timeout (or show an explicit “session expired — restart voice” recovery affordance).
  2. Map ThreadRealtimeError / closed reasons to accurate UI copy (no false rate-limit).
  3. Repro matrix: Desktop/macOS/Windows × build × network × idle N minutes.
  4. Fail-first client tests: simulate timeout → expect recoverable UI state or deterministic error banner.

Questions for maintainers

  1. Is Voice thread lifetime owned client-side, app-server, or service-side?
  2. Preferred single residual issue for the multi-symptom Voice cluster (#35103 vs siblings)?
  3. If client recovery is in-scope, would an invited PR for timeout UX + tests be welcome?

No unsolicited PR from me.