Skip to content

[Feature]: scrollbar markers per message boundary for easier conversation navigation #37699

Description

@adofeg

Summary

Add visual markers to the TUI scrollbar at each message boundary so users can navigate long conversations quickly without scrolling through entire message bodies.

Problem

When conversations exceed ~50 messages, navigating back to a specific user input becomes painful:

  • Scrolling with PageUp/PageDown shows the message body but you have to read each one to find what you want.
  • No overview — the scrollbar is a single position indicator; it doesn't communicate how many turns exist or where they break.
  • Existing keybinds help (messages_next/messages_previous/messages_last_user in tui.json) but require the user to know the keybinds exist and press them repeatedly.

This is a common UX pattern in:

  • Code editors (minimap markers for search results, breakpoints, git diffs)
  • Chat apps (Slack, Discord: small avatars/dots on the scrollbar)
  • IDEs (IntelliJ: navigation bar showing file structure)

Proposed Behavior

Render a small visual marker on the scrollbar at each message boundary:

Marker style Meaning
Larger notch User input
Smaller notch Assistant message
Distinct color Tool call / error message

Visually something like:

│                          │
│ █                        │  <- message #1 (user)
│  █                       │  <- message #2 (assistant)
│   █                      │  <- message #3 (user)
│    █                     │  <- message #4 (assistant, has tool call)
│     █                    │  <- message #5 (user)
│                          │
│ █ ← you are here         │

Why a Plugin Can't Solve This

I tried. Built conversation-nav (https://gist...) that tracks user inputs to a JSON file and exposes /inputs + /jump N commands. This works as a workaround but:

  • The TUI renderer is not exposed via the plugin API (PluginInput has client, project, directory, $ — no tui/scrollbar/viewport).
  • Themes can change colors but the scrollbar widget itself is hardcoded in the TUI binary.
  • The JSON workaround requires reading a file + remembering keybinds + manual Ctrl+Up presses — still friction.

The feature needs to live in the TUI layer.

Acceptance Criteria

  • Visible marker on the right-edge scrollbar at each message boundary
  • Different visual treatment for user vs assistant messages
  • Works with the existing messages_next/messages_previous keybinds
  • No measurable perf impact in conversations with 200+ messages
  • Optional: configurable via tui.json (enable/disable, colors)

Alternatives Considered

  1. Plugin-based workaround (what I built) — works but doesn't solve the visual problem.
  2. Theme-only — can't distinguish messages by role in current theme schema.
  3. External sidebar — splits attention, breaks the single-pane UX.

Related

  • messages_next/messages_previous/messages_last_user keybinds in tui.json (already exist, currently bound to none)
  • scrollbar_toggle keybind (already exists, currently bound to none)

cc @anomalyco


Posted from opencode CLI via gh issue create.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions