Sticky user messages
What variant of Codex are you using?
App
What feature would you like to see?
Keep latest user messages sticky while reading long Codex Desktop responses
What variant of Codex are you using?
Codex Desktop app
What feature would you like to see?
I would like an optional Codex Desktop preference that keeps the most recent user message(s) visible while reading long assistant responses.
The feature would make the latest 1 or 2 user messages sticky near the top of the transcript, but only after their original message bubbles have scrolled out of the current transcript viewport.
This should be a user preference rather than permanent chat chrome. For example:
- Sticky user messages: Off / 1 / 2
- Max sticky lines: 1 / 2 / 3
Why this helps
In long Codex sessions, the user’s latest request often scrolls out of view while the assistant is still producing or explaining a long answer.
That makes it harder to keep track of the exact constraints the answer is supposed to satisfy, especially when switching between multiple sessions. The current workaround is to scroll back up, remember the message, or rely on context from memory. A small sticky user-message affordance would keep the active intent visible without requiring the user to leave their current reading position.
Proposed behavior
When enabled:
- Codex tracks the latest N user messages, where N is user-configurable: 1 or 2.
- A tracked user message becomes sticky only after its original bubble has scrolled above the transcript viewport.
- Each tracked message activates independently:
- if only the older selected message is out of view, only that message is sticky
- when the newer selected message also leaves the viewport, it joins the sticky stack
- Sticky messages preserve normal chat order, matching the transcript order.
- Each sticky bubble is clamped to the configured max line count.
- Clicking a sticky bubble scrolls back to the original user message in the transcript.
- If the original user message becomes visible again, its sticky copy disappears.
- When disabled, the transcript behaves exactly as it does today.
Important detail: trigger should be viewport-based
The sticky state should not be triggered by “the user scrolled a little.”
It should be based on whether the original source user message is visible inside the transcript viewport. If the original bubble is still visible, showing a sticky copy would duplicate content and add noise.
Demo / mockup
I made a quick mockup video showing the proposed behavior:
https://screen.studio/share/6Exe8Rn8
Additional information
_No response_