Feature request: opt-in per-message timestamps in TUI rendering

Resolved 💬 2 comments Opened Jun 25, 2026 by jaypaulb Closed Jun 28, 2026

What

Add an opt-in setting that renders a timestamp alongside the bullet for each assistant (and ideally user) message in the TUI.

Example rendering:

● [Thu 10:14]  Filing the issue, saving the memory, and starting the prefix now.
●  [Thu 10:14]  Bash...

Why

Long sessions accumulate dozens of message turns. Scrolling back through them today gives you no temporal anchor — the only time visible is "now" via statusLine. Concrete situations where this bites:

  • Async work coordination: dispatching background agents / cron jobs / scheduled workflows, then scrolling back to correlate what was running when something fired.
  • Debugging: "this commit happened, did that turn predate it?" requires checking the git commit timestamp against guessed memory of conversation order.
  • Multi-day sessions: with /clear workflows, sessions can span hours or days. No way to see when an old message landed without exiting the TUI and inspecting the transcript JSONL on disk.
  • Cron correlation: many users (myself included) run scheduled tasks that emit events into the same agent inbox. Knowing whether \"that\" message landed at 09:00:01 (cron) or 09:14 (manual) materially changes the interpretation.

Current state

Checked Claude Code v2.1.187:

  • claude --help: no --timestamp / --show-time flag
  • ~/.claude/settings.json keys: only statusLine, theme, hooks, model and permissions configs surfaced. No messageHeader or similar.
  • statusLine shows current time at the bottom of the terminal but is not per-message.

The workaround today is for the assistant to prefix its response text with the timestamp manually (which costs one Bash \date\ call per turn and pollutes the message body). Native rendering would put the timestamp at the position cleanly.

Proposed API

Opt-in via ~/.claude/settings.json. Something like:

{
  \"messageHeader\": {
    \"showTimestamp\": true,
    \"format\": \"[%a %H:%M]\",
    \"timezone\": \"local\",
    \"appliesTo\": [\"assistant\", \"user\"]
  }
}

Where format uses standard strftime tokens and appliesTo lets you opt different message kinds in / out (some users might only want assistant timestamps, not user echo).

Or, simpler: a CLI flag --show-timestamps for one-off sessions and a single showMessageTimestamps: true settings key for persistence.

Acceptance criteria

  • Opt-in, off by default (preserves current rendering)
  • Configurable format (strftime)
  • Configurable timezone (local / UTC / specific zone)
  • Renders for assistant messages at minimum; ideally user messages too
  • Survives \/clear\ and \/compact\ (timestamp is generation time, not display time)

Happy to test a build / give feedback on a PR.

View original on GitHub ↗

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