App — Comms
Unified communications — channels, threads, email — in one inbox.
Unified communications — channels, threads, email — in one inbox.
| Field | Value |
|---|---|
| Status | GA |
| Owner | @aphaiboon |
| Sidekick-accessible | Read + write |
What it is
Section titled “What it is”Comms is CMMD’s answer to “I run on Slack + Gmail + Linear comments and they don’t talk to each other.” One inbox for:
- Channels — Slack-style topic channels
- Threads — long-lived focused conversations (cross-app — see App — Sidekick → Threads)
- Email — Gmail / Outlook integration via Composio (App — Marketplace)
Why one app, not three
Section titled “Why one app, not three”The same problem (a customer’s question, a support escalation, a product decision) often spans email + Slack + an internal thread. Treating them as one inbox lets the Sidekick:
- See full context across all surfaces
- Suggest the right reply (in the right tool)
- Auto-link related items (to Tasks / Projects / Calendar / Brain)
- Flag missed responses
Surfaces
Section titled “Surfaces”- Comms sidebar — channels list (left), inbox feed (middle), detail (right) — uses
WorkspacePagewrapper per Page Layout Wrappers - Inline composer — TipTap-based, supports
@mention, slash commands, and Sidekick drafts - Email threads — rendered with full HTML support, attachments via universal file viewer
Permissions / hardening
Section titled “Permissions / hardening”Channels can be private (invited members) or public (workspace-wide). Thread chat permissions have specific hardening. Cross-org leakage is the dominant risk class — enforce via Repository Pattern (ADR-0002).
Sidekick integration
Section titled “Sidekick integration”| Capability | How |
|---|---|
| Summarize a thread | summarize_thread tool |
| Draft a message | draft_message tool — places draft in composer |
| Send a message | send_message tool — requires user confirmation for external |
| Find a message | find_message tool — semantic + keyword |
| Attach a person | @person context tag (see App — CRM) |
External sends (email out, Slack DM out) ALWAYS require user confirmation per the explicit-permission rule.
Data model
Section titled “Data model”| Table | Purpose |
|---|---|
comms_channels | Channel rows |
comms_messages | Message rows |
comms_thread_members | Thread membership (load-bearing — see FM-032) |
comms_email_messages | Inbound/outbound email |
comms_attachments | Attachment metadata + S3 URLs |
Analytics events
Section titled “Analytics events”comms_message_sentcomms_channel_createdcomms_thread_message_sentcomms_email_receivedcomms_message_search
Known anti-patterns
Section titled “Known anti-patterns”- Don’t toast on “message sent” — the message appearing in the feed is the confirmation
- Don’t auto-reply to emails based on email content alone (security)
- Don’t paginate forward when a query returns truncated results — re-call with smaller limit
Related incidents
Section titled “Related incidents”- FM-032 — thread_members column mismatch (exemplar postmortem)
Related
Section titled “Related”- App — Sidekick — Threads live here; Sidekick reads/writes Comms
- App — Calendar — calendar↔comms interaction
- App — CRM —
@personcontext tag pulls CRM data into Comms - App — Marketplace — email integration via Composio
- Sidekick Routing Pipeline — how Comms context reaches the Sidekick