Problem
The TUI already has /timestamps to show the time under each user message ("footer" mode). When scanning a long conversation it's useful to see when each message was sent at a glance, but the footer style takes a full line per message and doesn't align across rows.
Proposal
Extend /timestamps to cycle three modes instead of two:
hide (current default) — nothing shown
footer — current "show" behavior, time on a line below each user message
gutter — fixed 5-char HH:MM column to the left of each user message, 24-hour. Click the gutter to open a small popup with the full local datetime + relative ("3m ago")
Add an optional tui.json key timestamps_mode ("hide" | "footer" | "gutter", default "hide") that seeds the default for new users. The slash command still cycles at runtime; the config key just sets the starting mode. Existing users keep their current toggle — the kv-stored legacy "show" value is normalized to "footer" at read time.
Scope of v1:
- User messages only. Assistant messages already render a separate footer line (
▣ Mode · model · duration) and aren't part of the existing /timestamps behavior.
- Mouse-only popup. Keyboard support (
t on a selected message) needs a new selectedMessageID signal — happy to do it in a follow-up PR.
- Gutter width is hardcoded to 6 cells (
HH:MM + space). No dynamic measurement, keeps alignment stable.
Why this design
Three alternatives I considered:
- A (this proposal): one cycle, three modes. Single mental model. One slash command. Config seeds default.
- B: independent toggles (
/timestamps for footer, /timestamp-gutter for gutter). Both can be on at once, which duplicates the timestamp visually.
- C: replace footer with gutter behind the same toggle. Cleaner visually but breaks current users' UX without a way back.
I'm asking before opening the PR because CONTRIBUTING.md:13 + :251-253 require design approval for UI changes. Happy to take this in a different direction if you'd prefer B or C — or drop it.
Draft PR
I have a working branch with implementation, docs, and unit tests (11 new tests, all green, typecheck clean). Will open as a draft once there's directional sign-off, or close this issue if it's a no.
Problem
The TUI already has
/timestampsto show the time under each user message ("footer" mode). When scanning a long conversation it's useful to see when each message was sent at a glance, but the footer style takes a full line per message and doesn't align across rows.Proposal
Extend
/timestampsto cycle three modes instead of two:hide(current default) — nothing shownfooter— current "show" behavior, time on a line below each user messagegutter— fixed 5-charHH:MMcolumn to the left of each user message, 24-hour. Click the gutter to open a small popup with the full local datetime + relative ("3m ago")Add an optional
tui.jsonkeytimestamps_mode("hide" | "footer" | "gutter", default"hide") that seeds the default for new users. The slash command still cycles at runtime; the config key just sets the starting mode. Existing users keep their current toggle — the kv-stored legacy"show"value is normalized to"footer"at read time.Scope of v1:
▣ Mode · model · duration) and aren't part of the existing/timestampsbehavior.ton a selected message) needs a newselectedMessageIDsignal — happy to do it in a follow-up PR.HH:MM+ space). No dynamic measurement, keeps alignment stable.Why this design
Three alternatives I considered:
/timestampsfor footer,/timestamp-gutterfor gutter). Both can be on at once, which duplicates the timestamp visually.I'm asking before opening the PR because CONTRIBUTING.md:13 + :251-253 require design approval for UI changes. Happy to take this in a different direction if you'd prefer B or C — or drop it.
Draft PR
I have a working branch with implementation, docs, and unit tests (11 new tests, all green, typecheck clean). Will open as a draft once there's directional sign-off, or close this issue if it's a no.