Sticky user messages

Open 💬 0 comments Opened May 14, 2026 by LukasFB

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:

  1. Codex tracks the latest N user messages, where N is user-configurable: 1 or 2.
  2. A tracked user message becomes sticky only after its original bubble has scrolled above the transcript viewport.
  3. 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
  1. Sticky messages preserve normal chat order, matching the transcript order.
  2. Each sticky bubble is clamped to the configured max line count.
  3. Clicking a sticky bubble scrolls back to the original user message in the transcript.
  4. If the original user message becomes visible again, its sticky copy disappears.
  5. 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_

View original on GitHub ↗