App-server TUI does not fully reflect external live turns on shared thread

Resolved 💬 2 comments Opened Mar 20, 2026 by qoli Closed Mar 28, 2026

Summary

In 0.116.0, codex_tui_app_server does not fully reflect external live turn state when multiple app-server TUI clients are attached to the same thread.id.

The shared conversation context is correct, but an active TUI can fail to visibly refresh user/assistant live progress for turns that originated from another client.

Repro

  1. Start one app-server-backed TUI client.
  2. Start a second app-server-backed TUI client and resume the same thread.id.
  3. Send a turn from client A.
  4. Observe client B while the turn is running and after completion.

Expected

Client B should visibly reflect the same live turn state:

  • external user turn appears immediately
  • assistant streaming / plan updates appear live
  • completion state is reflected without waiting for a local interaction

Actual

Conversation continuity is shared, but the active TUI may not fully redraw or refresh external turn state in real time.
In practice, the missing content can still show up later in the thread context, but the live UI state is incomplete.

Notes

I validated this locally on 0.116.0 and prepared a minimal reference patch in my fork:

That patch only touches codex-rs/tui_app_server and focuses on live refresh behavior for external turns.

I understand code contributions are invitation-only now, so I’m filing this as a bug report with analysis and a reference patch rather than assuming an unsolicited PR would be accepted.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗