Where the unread SMS texts start (the "N new messages" divider)
When you open an SMS conversation that has texts you have not read, Omniscio draws a small accent marker on an accent line — "3 new messages" — right above the first text you have not read yet, so a long thread tells you at a glance where you left off. It is the same marker Team Chat uses.
What it is
What it does
Open an SMS conversation that has texts you have not read and Omniscio draws a short accent line with a small accent-tinted pill centered on it, reading "3 new messages" (the number is however many are unread). It sits immediately above the first text you have not read, so a long thread — a bank sending verification codes, a group that has been going all day — tells you at a glance where you left off instead of leaving you to guess.
It is the same marker Team Chat has drawn for a long time, deliberately: "where I left off" reads identically in both places.
What the number counts
Only texts they sent you. Your own messages never count as new, and neither does a text you have already read — the number is exactly how many incoming texts arrived since you last read that conversation.
Where to find it
- In an SMS conversation — the thread you get by tapping a text in the Inbox, or picking a conversation from the SMS list.
- It shows on desktop and on the phone/web view, in light and dark themes.
How it behaves
When it appears
- When you open a conversation that has unread texts.
- It stays in place while you read that conversation — it does not vanish the moment the thread opens, which is exactly the moment it becomes useful.
When it does NOT appear
- The conversation has nothing unread. Opening a thread you are already caught up on shows no marker.
- The unread texts are further back than the loaded part of the thread. Omniscio loads the newest messages first; if the unread run starts before that, no marker is drawn rather than one that would claim the oldest loaded text is new. Tap Load earlier messages and open the thread again to bring them into view.
- You marked the thread read from the Inbox row without opening it. The marker is tied to opening a conversation, so dismissing a row never plants one on a thread you never looked at.
- A spam-filtered conversation. Those do not carry unread state.
After you have read it
Move to another conversation and come back, and the marker is gone — that thread is read. An unread SMS you read on your phone is the one case Omniscio cannot see: it learns about that only when you next reply or mark the thread read here, exactly as with the unread dot.
No setting
There is nothing to switch on. It is a display marker, and it is on for every SMS conversation — the same as Team Chat's.
For agents
Where it lives in code
- The rule —
src/renderer/src/features/sms/sms-unread-anchor.ts,computeSmsUnreadAnchorId(messages, unreadCount): the id of the message the marker sits above, ornull. Pure and unit-tested on its own. - The count —
unreadAnchoron the SMS store (src/renderer/src/stores/sms-store.ts):{ phoneNumber, count }, snapshotted inselectConversationfrom the conversation'sunreadCount. It is a snapshot because opening a thread marks it read, which zeroes that counter — a live-derived marker would erase itself on the open that made it worth showing. Cleared on account switch. - The marker — the memoized
UnreadDividerinsideSmsViewer.tsx, rendered just after the day separator for the anchored message. Test idsms-unread-divider. - Deep end — the thread UI contract
(
.claude/memory/contracts/sms-chat-ui-contract.md, invariantunread-divider-anchor) and the inbox-attention contract (sms-inbox-attention-contract.md), which owns whatunread_countmeans and when it is cleared.
Related
- Team Chat, which has the same marker:
src/renderer/src/features/team-chat/TeamChatDividers.tsxandsrc/shared/team-chat/message-dividers.ts. - SMS via CLI · Send & receive pictures in SMS · Set up SMS integration
Last verified 2026-09-29