Threading
How CommSync collapses SMS and email from the same person into a single, unified conversation.
CommSync's core promise is simple: one thread per person, regardless of channel. When someone texts you and emails you, you read both in one place, reply from the same composer, and see the whole history together. This page explains how CommSync forms threads, what happens with group emails and forwarded messages, and how CommSync renders each message type.
How CommSync forms a thread
A Thread is a conversation timeline. Every inbound or outbound message belongs to exactly one thread. CommSync shares threads across your whole organization — there is no per-user copy of a message.
When a new message arrives, CommSync resolves which thread it belongs to, with two signals:
- For email: RFC 5322 chain headers (
In-Reply-To,References,Message-ID). Replies stay in the thread they reference. - For SMS: the pair of phone numbers (yours and theirs). Each distinct pair gets its own thread.
Because a contact can own both an email Identity and a phone Identity, a single thread can hold both channel types. Once you merge or attach the two identities under one contact, all future messages from either channel land in one conversation.
Unifying channels
SMS and email messages share a thread only after you link the two identities under one contact. You can attach, merge, or promote them from the contact panel. CommSync never links them for you. See Merging identities for how that works.
Group email threads
CommSync removes your own address first. If two or more participants remain, CommSync treats the message as a group thread rather than a 1:1 conversation. This mirrors how SMS group chats work.
Group threads have their own identity, separate from any individual's 1:1 thread:
- A reply-all that adds a new participant to an active 1:1 chain forks into a new group thread.
- A private reply-back from that group routes to the 1:1 thread, not the group thread.
- CommSync keys each group thread by its set of participants.
The 1:1 thread keeps its history intact when a reply-all forks a new group thread off it. The same set of participants always lands in the same group thread, even across unrelated email chains.
In the thread list, group threads show stacked avatars and a subtitle listing participants ("Alice, Bob & 3 others"). When you click a contact's name, it takes you to their 1:1 thread, not the group.
Why the separation matters
Without this split, a reply-all can shadow a contact's individual conversation, and that makes their 1:1 messages unreachable. CommSync prevents this: it treats groups as their own canonical surface.
Group threads also change which line a reply goes out from. On a 1:1 thread, the reply uses the line the conversation already used. On a group thread, that line often belongs to a teammate. CommSync then uses your own default line for outbound messages instead. See sending messages.
Forwarded emails and AI thread titles
When someone forwards you an email, the immediate sender is not always the person the conversation is really about. For example, say your colleague Priya forwards a Shopify order confirmation to you. CommSync parses forwarded-message metadata from standard headers (Resent-From, X-Forwarded-*) and common mail-client body blocks (Apple Mail, Gmail, Outlook).
When CommSync detects a forwarded origin, it can generate a descriptive AI title for the thread, such as:
"Shopify receipt forwarded by Priya"
Thread titles follow a priority order. From most to least authoritative:
| Source | When it applies |
|---|---|
| Manual title | You have renamed the thread manually. Sticky — never overridden by AI. |
| AI title | CommSync generated a context-aware title with enough confidence. |
| Forwarded sender | The parsed originator's display name from headers that mark the message as forwarded. |
| Subject | The email subject line as written by the sender. |
Settings → AI → Thread title gates AI titles. If the feature is off,
or if you renamed the thread manually, CommSync leaves the title alone.
How each channel renders
CommSync renders each message type differently to preserve the native reading experience:
SMS messages render as plain text bubbles — no HTML, no formatting. What the sender typed is what you read. Delivery status (sent, delivered, failed) appears beneath each bubble. Links in the text are clickable, and most of them get a preview card — see below.
Links and preview cards
A link in a text message is clickable. CommSync finds three shapes: a full http:// or https:// address, a host that starts with www., and an email address.
A bare domain with no scheme stays plain text on purpose. To catch it, CommSync would have to treat every word with a dot in it as a link. That turns Node.js and the end of a sentence into links too.
Under the bubble, CommSync shows a preview card for the link: the site name, the page title, a short description, and the page image. CommSync reads those from the page's own OpenGraph tags, the same tags a chat app uses. The first person to open the message pays for the lookup. CommSync caches the result, so everyone after them sees the card at once.
Some links never get a card. Think of a password reset, a magic sign-in link, a one-click unsubscribe, or a one-time code. Each one works for exactly one use. A card lookup opens the page, and that can spend the one use. Your click afterwards would then fail. CommSync finds these links from the address and from the words around them, and skips the lookup. The link still works — it only shows no card.
CommSync keeps no picture from a preview. The card holds the address of the image. Your browser loads the picture from the site that published it, the same way every other link preview works.
Thread titles at a glance
Even without AI enabled, CommSync chooses thread titles intelligently:
- 1:1 SMS or email: the contact's saved name, or the email address local-part if no contact exists yet.
- Group email: participant names ("Alice, Bob & 2 others"), or a topical subject when one is present.
- Forwarded email: the original sender's display name, upgraded to an AI-generated title when the feature is on.
You can always rename a thread manually. A manually set name is sticky — it survives future syncs, AI title checks, and contact merges.
Sender names on routed mail
Most email addresses belong to one person, so CommSync remembers the name that address sends under and shows it everywhere.
Some addresses do not work that way. One site mailer sends notices for many
customer sites. A catch-all alias collects mail written to a dozen different
addresses. A shared mailbox such as design@ or support@ carries mail from
everybody. On those addresses, one remembered name is wrong for almost every
message that arrives.
CommSync watches for that. The first time such an address arrives under a second name, CommSync stops treating any single name as the name of that address. Each message then shows the name it came with, and the thread falls back to its subject line. Nothing is lost — you simply stop seeing one customer under another customer's name.
A name you set yourself always wins. If you attached the address to a contact, or renamed the contact, CommSync leaves your name alone.
How to share a link to a conversation
Every conversation has a stable URL you can paste in Slack, a ticket, or an email to a teammate. Whoever follows the link lands directly in that thread — no searching, no "which customer was that again?".
Copy the link
Right-click a conversation in the list and choose Copy, then Copy link. To
point at one specific message, right-click the message bubble instead and
choose Copy message link — the thread opens scrolled to that message,
briefly highlighted.
Send it to a teammate
Anyone in your organization with access to the conversation's line can open it. If they have signed out, CommSync takes them through login and lands them in the thread afterwards.
Links do not bypass permissions. Access follows the same rules as the rest of the inbox:
- Owners and admins can open any conversation in the workspace.
- Members can open conversations on lines an admin has granted them access to (see Roles & permissions).
- A member without access to the line sees a notice that names the line.
- A link from a different workspace simply reports "conversation not found".
That notice tells the member exactly what to ask an admin for — never the conversation's content.
Personal state stays personal
When you open a shared link, that never changes anyone else's view. Your read state, archive status, and labels on the thread are yours alone. The link only takes your teammate to their own view of the same conversation.
Real-time updates
The thread list refreshes every 10 seconds to catch anything that arrived while you were away. When you have a thread open, new messages and status changes appear instantly without a page refresh.