Messenger
/messages · version 3.13 · 2026-10-06
Capabilities
Messenger (/messages, title KTX Messenger) is people — Direct (plus KTX Bot) and Groups. Threads live on your account. It is not Talk, not Workspace Chat, not Forum, and not a Helpdesk ticket. Business Omni “Messenger” is Meta, not this inbox.
Direct messages — read state, mentions, previews, delete a message or a thread
Groups — team, community, and class layouts with channels
A tray — reply without leaving the page you are on
What is Messenger?
Route: /messages. The switcher says Messenger. The in-page title is KTX Messenger. There is no /messenger URL.
Messenger is the inbox for people, groups, and a pinned assistant row (KTX Bot). Threads live on your account. Starter tier and up. Helpdesk and Messages are not on the OS dock — open them from the module switcher, the OS Messages menu, a profile, or a deep link.
How you get here
The two tabs
There is no third product tab. Channels live inside a group. Empty Direct: Select a conversation. Empty Groups: Select a group, then Select a channel.
Direct — talking to a person
Start a DM by typing @handle, from a profile, from the OS menu, or from ?thread=. List sections: Assistant (KTX Bot), then All Messages. Empty: No human DMs yet — type @handle above to start.
You can delete a conversation or delete your own messages. Mentions, formatting, and emoji work. The green dot is not live presence. There is no typing indicator.
Files in a DM: the composer in the main inbox hides the paperclip. Group channels can attach. DMs do not have threaded replies — Reply is a group-channel feature.
KTX Bot — the assistant inside Messenger
Pinned row: KTX Bot / Kontext Assistant. Same assistant path as Talk, in this inbox. It is not a second Talk tab and not a person.
If OS Intelligence is off: Turn on Kontext Assistant first. Composer: Message Kontext AIOS…. Slash commands: /ktx. Push on / Push off is for bot replies, not human DMs.
Voice, the visor, and Today live in Talk on My Kontext (/os). Use Talk when you want that shell. Use KTX Bot when you are already in Messenger.
Groups and channels
Four skins when you Create Group: Team (you created it), Business (auto when a Business solution is built — channels general, support, leads), Community (auto when you create a community), Class (auto when you create a University program — enroll adds the learner). Standalone University courses do not auto-create a group. Chat for a course uses the program’s group when the learner is enrolled. Owner menu: Edit group, Create channel, Invite people, Delete group. Members: Leave group. Invite by @handle with role Member / Moderator / Admin. Business groups draw a fake Slack rail (Home, DMs, Activity, Files). Those labels do not navigate. Do not send someone to “Messenger → Activity.”
Inside a group
Composer: Message... (use @ to mention) · Send. Attachments work here. Reply opens a Thread panel (Reply in thread...).
Reactions (👍 ❤️ 😂 🎉 🤔 👀) show in the UI. Toggles are this browser only today — they are not a saved group reaction list.
Group unread is this device (localStorage) until server unread exists. Human DMs and KTX Bot unread are real on your account. The inbox polls about every 30 seconds when the tab is visible — there is no live socket for human DMs.
What Messenger is not
Talk (/os) — Kontext, voice, Today. Same brain as KTX Bot; different shell.
Workspace Chat — write an app on a project.
Forum (/forum) — public threads. Helpdesk (/helpdesk) — a private ticket. Documentation (/documentation) — the Help book Talk looks up. Kontext Docs (/docs) — make a document.
OS Mail — email folders. Business Omni “Messenger” is Meta (WhatsApp / Instagram / Facebook) — not this inbox.
If someone said “message me,” they mean this inbox or a profile Message button — not Talk, not Forum.
Not yet
Messenger (/messages, title KTX Messenger) — Direct (people + pinned KTX Bot) and Groups (Team / Business / Community / Class). Thread data lives on your account. Open from the module switcher, OS Messages menu, profiles, or Open in Messenger from Communities/Business/University when linked. This is not Talk, not Forum, not Helpdesk, and not Business Omni (Meta) “Messenger.”
DM v2 — read state, @mentions, link previews, delete message/thread
Groups — Team, Community, Class layouts with channels and threads
Tray — minimize, pop out, reply without leaving your current module
User journeys
MSG-01. Open the Messenger inbox
Path: /messages
You do:
- Sign in with a user that has a public handle.
- Navigate directly to
/messagesfrom the address bar or a bookmark. - Wait for the inbox shell to finish loading (skeleton placeholders, not a bare error).
- Confirm the conversation list or empty state appears without a crash.
Result: Messenger loads as the primary inbox surface with strip, sidebar, and main pane ready for DMs and groups.
MSG-02. Reach Messenger from the module header
Path: Any module → header Messages link → /messages
You do:
- Open any Kontext module (Workspace, Communities, OS, etc.).
- Click Messages in the module header navigation.
- Confirm the URL changes to
/messages. - Verify your existing conversations and groups appear in the sidebar.
Result: Header navigation lands on the same inbox as a direct /messages visit.
MSG-03. Start a DM from a profile
Path: Profile page → Message button → /messages?thread=<principal>
You do:
- Open another member’s profile (handle card, directory, or search result).
- Click Message on their profile.
- Confirm Messenger opens with that user’s DM thread selected.
- Type a greeting and send.
Result: A one-to-one thread opens with the target user; the message appears optimistically then confirms on the user canister.
MSG-04. Open a chat from the OS menu bar
Path: Kontext OS → menu-bar Messenger dropdown
You do:
- Open Kontext OS (
/os) or any surface with the OS menu bar visible. - Click the Messenger icon in the menu bar to open the dropdown.
- Search for a member by @handle in the quick-search field.
- Select a recent thread or search result to open the chat.
Result: The chosen DM opens in the dropdown tray or full Messenger, without hunting through the full inbox first.
MSG-05. Use the Messenger tray popup
Path: OS menu bar → Messenger dropdown → tray controls
You do:
- Open a DM from the OS Messenger dropdown so the popup tray appears.
- Minimize the tray and confirm it collapses to a compact chip or icon.
- Maximize or expand it again to resume the conversation.
- Choose full-screen (or open in Messenger) to continue at
/messages.
Result: Popup chat supports minimize, restore, and full inbox handoff; opening a thread marks it read in the tray.
MSG-06. Deep-link into a DM thread
Path: /messages?thread=<principal>
You do:
- Copy or construct a link with
?thread=and the other user’s principal (or use View Message from a notification). - Paste the link in the browser and press Enter while signed in.
- Confirm the correct DM thread is selected in the sidebar and main pane.
- Scroll to the latest messages and verify read state updates.
Result: Deep links open the intended one-to-one thread; unread count clears after you view it.
MSG-07. Deep-link into a group channel
Path: /messages?group=<groupId>
You do:
- Obtain a group link with
?group=<groupId>(from an integration, invite, or copied URL). - Open the link while signed in as a group member.
- Confirm the group appears in the strip and the default or linked channel loads.
- Verify channel unread badge clears after the channel opens.
Result: Group deep links land on the correct group and channel without manual navigation.
MSG-08. Browse DMs with unread badges
Path: /messages → conversation list
You do:
- Have the second test user send you a DM while you are on another page.
- Open
/messagesand locate the thread in the conversation list. - Confirm the row shows the sender’s handle, last message preview, timestamp, and an unread badge.
- Open the thread and confirm the badge and header DM count drop to zero.
Result: Unread state reflects inbound DMs in the list and global header badge; opening the thread marks messages read.
MSG-09. Send and receive a text DM
Path: /messages → select thread → compose bar
You do:
- Open an existing DM or start one via sidebar @handle search.
- Type a short text message in the compose field at the bottom.
- Press Enter or click Send; watch the message appear immediately (optimistic UI).
- Refresh or have the other user confirm the message persisted on their side.
Result: Text sends successfully; data lives on the user canister thread-owner model, not a platform body buffer.
MSG-10. Mention someone in a DM compose
Path: /messages → DM thread → compose with @
You do:
- Open a DM thread (or a group channel where mentions apply).
- Type
@followed by part of a handle in the compose field. - Pick a handle from the autocomplete dropdown.
- Send the message and confirm the mention renders correctly in the thread.
Result: @mention autocomplete works in compose; the sent message displays the referenced handle.
MSG-11. Share a link with preview
Path: /messages → thread → paste URL → send
You do:
- Open a DM thread with another user.
- Paste a public HTTPS URL into the compose field.
- Send the message.
- Confirm a link preview card (title, snippet, or thumbnail) renders for you and the recipient.
Result: Rich link previews appear inline for sent and received URL messages.
MSG-12. Delete a message or whole DM thread
Path: /messages → thread → message actions / thread menu
You do:
- Open a DM where you sent at least one message.
- Use the message action menu to delete one of your own messages; confirm it disappears.
- Open the thread overflow menu and choose delete conversation (or equivalent).
- Confirm the thread is removed from your conversation list.
Result: You can remove individual messages you own and delete entire DM threads from your inbox.
MSG-13. Start a new DM from sidebar search
Path: /messages → sidebar → new message / @handle search
You do:
- On
/messages, focus the sidebar search or New message control. - Type a valid @handle for a user you have not messaged before.
- Select them from results to create or open the thread.
- Send an introductory message.
Result: A new DM thread appears in the conversation list and opens in the main pane.
MSG-14. Open a DM from a notification
Path: Notification center → View Message → /messages?thread=<principal>
You do:
- While signed in on another page, receive a DM notification from the second test user.
- Open the notification panel and click View Message.
- Confirm Messenger opens to the correct thread via deep link.
- Reply from the opened thread.
Result: Notification handoff lands on the right DM; header unread badge stays in sync after you read and reply.
MSG-15. Create a Team group
Path: /messages → group strip → Create Team
You do:
- Open
/messagesand locate the group strip (Teams, Communities, etc.). - Click Create Team (or equivalent create-group control).
- Enter a name, optional description, and icon; save.
- Confirm the new Team appears in the strip and sidebar with a default channel.
Result: A Team group is created with Discord-style layout and at least one channel ready for messaging.
MSG-16. Edit group details
Path: /messages → select group → group settings
You do:
- Open a group you own from the strip or sidebar.
- Open group settings (gear or edit control).
- Change the name, description, and icon; save.
- Return to the channel list and confirm updated branding appears in the strip and header.
Result: Group metadata updates everywhere the group is shown.
MSG-17. Delete or leave a group
Path: /messages → group settings → delete / leave
You do:
- As group owner, open group settings and choose Delete group; confirm the prompt.
- Verify the group disappears from your strip and sidebar.
- With a non-owner test account, join another group and choose Leave group.
- Confirm the group no longer appears for the member who left.
Result: Owners can remove a group entirely; members can leave without deleting it for others.
MSG-18. Discover and join a public group
Path: /messages → discover / search groups → Join
You do:
- Open
/messagesand use Discover or group search in the sidebar. - Search for a public group by name or keyword.
- Preview the group card and click Join.
- Confirm the group appears in your strip with accessible public channels.
Result: Public group discovery and join flows add the group to your Messenger without an owner invite.
MSG-19. Create a channel with visibility
Path: /messages → group → Create channel
You do:
- Open a group you admin or own.
- Click Create channel and enter a channel name (e.g.
#announcements). - Set visibility to Public, MemberOnly, or AdminOnly as appropriate.
- Save and confirm the channel appears in the sidebar for authorized members only.
Result: New channels respect visibility rules—unauthorized members do not see MemberOnly or AdminOnly channels.
MSG-20. Manage channels and categories
Path: /messages → group → channel list → settings
You do:
- Open a Community or Class group that supports categories.
- Create a channel category, assign existing channels to it, and collapse the category.
- As owner/admin, rename, reorder, or delete a non-default channel.
- Confirm layout updates in the Discord-style sidebar.
Result: Channel CRUD and category organization work for Community/Class groups; Class type is not mislabeled as Business.
MSG-21. Invite members and change roles
Path: /messages → group → members panel
You do:
- Open a group you own and open the Members panel.
- Invite a user by @handle; confirm they appear after accepting or auto-join.
- Change a member’s role (e.g. member → moderator) as owner.
- Kick a member and confirm they lose access to channels.
Result: Membership invite, role changes, and removal behave according to owner permissions.
MSG-22. Send a message in a group channel
Path: /messages → group → #general (or default channel)
You do:
- Open a group and select #general or the default channel.
- Type a message in the channel compose bar and send.
- Confirm your avatar, @handle, and timestamp appear on the sent bubble.
- Have another member post; wait for polling (~30s) or refresh to see their message appear.
Result: Group channel messaging works with sender metadata; new messages from others arrive without a full page reload.
MSG-23. Reply in a channel thread
Path: /messages → group channel → message → Reply in thread
You do:
- Open a group channel with at least one existing message.
- Click Reply in thread (or thread icon) on a message to open the thread panel.
- Type a reply and send.
- Close and reopen the thread panel to confirm replies persist and display in order.
Result: Thread replies stay attached to the parent message in a side panel without cluttering the main channel feed.
MSG-24. Format, search, and moderate group messages
Path: /messages → group channel → toolbar / search / mod actions
You do:
- In a group channel, use the formatting toolbar to send bold, italic,
code, and an emoji. - Open channel search, enter a keyword, and confirm matching messages filter in view.
- As a moderator, delete another member’s message via the mod action menu.
- In a read-only channel (
canSendMessagesfalse), confirm a permission denied banner blocks compose.
Result: Rich compose tools, in-channel search, moderator delete, and send-permission gating all behave as expected.
MSG-25. Open a community group from Communities
Path: Communities module → community detail → Open in Messenger → /messages?group=<linkedGroupId>
You do:
- Join or create a published community that has a
linkedGroupId. - Open the community detail page as a member.
- Click Open in Messenger.
- Post a welcome message in the linked group’s default channel.
Result: Community membership handoff opens the correct Messenger group without manual group lookup.
MSG-26. Use Messenger from Business and University integrations
Path: Business solution / University program → linked group → /messages?group=<linkedGroupId>
You do:
- Build or open a business solution that auto-creates a messenger group on build; note the linked group in the product UI.
- Open
/messages, find the business group (Slack-style layout), and send a status message in a channel. - Enroll in a University program with
linkedGroupIdand click Open in Messenger from the program page. - Confirm the university group opens and you can read/post per channel permissions.
Result: Business and University surfaces link to the correct Messenger groups created or configured at build/enrollment time.
MSG-27. Create a partner signee messenger group
Path: Partner dashboard → messenger group for signees → /messages?group=<groupId>
You do:
- Sign in as a partner with dashboard access.
- Open the partner flow to create a messenger group for signees (or equivalent control).
- Complete creation and follow the link into
/messages?group=.... - Invite or confirm signees can see the group and post in allowed channels.
Result: Partner-created groups appear in Messenger for signees and partners with appropriate access.
MSG-28. Manage personal storage for Messenger
Path: Profile settings → Personal space → storage tab
You do:
- Open your profile settings and navigate to Personal space → Storage.
- Confirm the storage dashboard and quota load without errors.
- Upload a small file to the
profilebucket and verify it appears in the file list. - Upload another file to the
messengerbucket for chat attachments.
Result: Personal storage buckets are visible and usable; quota and file lists reflect uploads immediately.
MSG-29. Attach a file from personal storage
Path: Profile storage → /messages → group/DM compose → paperclip
You do:
- Upload a test file to the
messengerbucket in profile storage (see MSG-28). - Open a DM or group channel at
/messages. - Click the paperclip (attachment) control in compose and select the stored file—or upload fresh from disk.
- Send the message and have the recipient open the attachment.
Result: Attachments upload from compose, render inline in the thread, and remain accessible to the recipient.
MSG-30. React to and pin a group message
Path: /messages → group channel → message actions
You do:
- Open a group channel with several messages visible.
- Add an emoji reaction to a message; confirm the reaction count appears.
- Click the same reaction again to remove it.
- Pin an important message and confirm it appears in the channel header pin strip; unpin to clear.
Result: Reactions toggle on group messages; pinned messages surface in the channel header for quick reference.
MSG-31. Navigate desktop Messenger layout
Path: /messages (desktop viewport)
You do:
- Open
/messageson a wide desktop browser window. - Confirm the three-column layout: group strip, conversation/channel sidebar, and main message pane.
- Switch between a Business group (Slack-style) and a Community/Team/Class group (Discord-style).
- Observe skeleton loaders during fetch and empty states when you have no DMs or channels.
Result: Desktop layout matches group type conventions with polished loading and empty states—not bare “Loading…” text.
MSG-32. Use Messenger on mobile
Path: /messages (mobile viewport or PWA)
You do:
- Open
/messageson a phone or narrow browser window. - Confirm the conversation list fills the screen first (single-column drill-down).
- Tap a DM or group channel to open the thread view full screen.
- Tap Back to return to the list; open
?thread=or?group=deep links and repeat the drill-down.
Result: Mobile Messenger uses list ↔ thread navigation with a back control; deep links still resolve to the correct conversation.
MSG-33. Text your Kontext Assistant from Messenger (KTX Bot)
Path: /messages?os=assistant (mobile PWA or Kontext Messenger)
You do:
- Open
/messageson a phone (or/messages?os=assistantdeep link / push tap). - Open KTX Bot — Kontext Assistant pinned at top of Messenger (or Bot tab).
- Send "What's on today?" or
/ktx brief— receive a brief-style reply within ~60s. - Send an ecosystem query (e.g. "How many leads this week?" or
/ktx leads) — KESA-routed answer after module disambiguation if needed (BOT-08–09). - Send "@Sales follow up with the hot lead" or
/ktx ask Sales …— addressed employee path (BOT-16). - Send an action request requiring approval — confirm Approve / Cancel; nothing executes until Approve (BOT-06).
- Type
/ktx commands— autocomplete lists comprehensive slash commands (BOT-25). - Lock the phone; confirm push on reply, approval needed, or job milestone (BOT-05–07, BOT-12).
Result: Owner can control and route the full ecosystem from Messenger (agents, workflows, employees, KESA) without opening /os; ask-first trust holds for writes.
How it works
Route /messages. Direct messages, groups, and KTX Bot — Kontext Assistant pinned in Messenger when Assistant is on. This is live, not a planned feature. It is not Collaborations rooms and not OS Talk (Talk is where you reach Kontext on My Kontext).
Benefits
- Text the assistant from a phone without opening
/os. - Keep human DMs and groups separate from the Bot thread.
Who it's for
Primary: owners who want chat plus the assistant in one inbox. Not: people looking for OS Talk (that is Kontext on My Kontext).