Collapse and coalesce repetitive heartbeat updates instead of adding full chat turns

Open 💬 0 comments Opened Jul 23, 2026 by tristan-nextcz

What variant of Codex are you using?

Codex App (desktop), with recurring heartbeat/automation updates delivered into an active project thread.

What feature would you like to see?

Repeated heartbeat or automation results should not each become a full-width chat turn. Please group them into a collapsed status surface, such as an Automation activity side panel or a compact expandable row in the thread.

Proposed interaction:

  • Present the current unique status once.
  • Coalesce consecutive identical updates and show a ticker/badge such as 42 identical updates.
  • Show the first update time, latest update time, and next scheduled run.
  • Keep the group collapsed by default; expanding it reveals the timestamped audit trail.
  • When the status, decision, or message changes, create a new visible status item and draw attention to the delta.
  • Let users choose a thread-level display mode: Inline, Collapsed, or Side panel.
  • Do not increase the main-thread unread count or scroll length for an unchanged repeated update.

A reasonable grouping key would be:

automation_id + decision + normalized message

Consecutive events with the same key increment the count. A changed key closes the prior run and starts a new status group. The raw events should remain available for audit/export even when the UI coalesces them.

Why this matters

A heartbeat running every two hours can produce dozens of identical messages over several days. Those messages bury the actual human/agent conversation, make search and scrolling harder, and add no new information. The important status should remain visible without repeating the same transcript block.

Suggested notification behavior

  • DONT_NOTIFY: record only in the collapsed activity stream.
  • First NOTIFY for a unique status: show once in the main thread and in the activity stream.
  • Repeated identical NOTIFY: increment the ticker without adding another full chat turn.
  • Changed or escalated NOTIFY: surface immediately as a new compact thread event.

Acceptance criteria

  • Fifty identical heartbeat events render as one collapsed status item with an x50 ticker, first/latest timestamps, and no fifty-message increase in thread length.
  • Expanding the item reveals all original timestamps and payloads.
  • A changed heartbeat message or decision appears immediately as a separate status item.
  • A one-off important notification remains clearly visible in the main conversation.
  • Group counts and event history survive app restart, thread resume, and device sync.
  • Grouped updates remain searchable and accessible by keyboard and screen reader.
  • Coalescing changes presentation only; it does not alter automation execution or delivery semantics.

Additional information

This is especially valuable for long-lived planning threads where the heartbeat is intentionally persistent but usually unchanged. The ideal result is a quiet operational ticker: the latest meaningful information appears once, while repetition is represented by a count rather than transcript volume.

View original on GitHub ↗