Docs Discussions — live chat on entities

Discussions — live chat on your test entities

Discussions are live chat threads attached to the things you work on: a test case, a test run report, a mock, a task in the tracker, a test plan or a wiki page. Instead of jumping between the entity and an external messenger, you open its discussion right where you are, mention a teammate or the AI agent, and keep working — replies arrive live on any page of Mockarty.

Discussions also cover direct messages between teammates and one-to-one calls.

Enabling discussions

Discussions are off by default. To turn them on:

  1. Click your user menu → Settings → Features tab.
  2. Enable Discussions (beta).

The toggle is personal — it changes only what you see. When it is off, nothing related to discussions appears in the interface.

Opening a discussion

There are several ways in — all of them lead to the same floating panel (the dock):

  • The floating chat button. Hover the round chat button (bottom-right corner): a selector wheel fans out around it — the AI assistant, Discussions, the agent tasks window, and your pinned quick-access menus. Clicking an item selects it (its icon moves onto the main button) and opens it right away; clicking the main button then toggles that window open and closed, like a dock. The agent tasks list opens as its own floating window you can drag anywhere. All floating windows (chat, tasks, discussions) share one window manager: grab any window’s header to move it, click a window to bring it to front, and every window remembers its position and size. The discussions dock also has a “dock to the right” button (like the chat’s) that pins it to the right edge as a side panel. When both the chat and discussions are docked, they merge into one side column with tabs — switch with a click, or press the split toggle to stack both panels with a draggable divider between them (IDE-style). The column width, the chosen mode and the split ratio are all remembered. When something has unread activity, a small counter sits on the edge of the main button pointing toward that item, so you notice it without hovering. The “+” slot lets you pin up to three sidebar menus for one-click access — each pin takes on its menu’s icon; hover a pin and press the small “−” to remove it.
  • “Discuss what I’m looking at”. In the dock header, the pin button opens the discussion of the entity on the current page — for example, the test case you have open.
  • The Discussion chip on comment panels. Entity pages that have comments show a small Discussion button above them — it jumps from static comments to the live thread.
  • A mention notification. When someone @-mentions you, the bell notification’s link opens the thread directly — on whatever page you are.

The first message creates the thread; there is nothing to set up.

What you can do in a thread

  • Write messages — plain text with clickable links. Enter sends, Shift+Enter adds a line break.
  • Mention teammates — type @ and pick a person from the autocomplete. Mentioned users get a bell notification with a link to the thread and are subscribed to it.
  • Mention the AI agent — type @agent (or @mockarty), or use the quick shortcut $$ at the start of a message (for example $$ summarize this thread). The agent receives your message together with the context of the entity the thread is attached to, does the work with its tools and posts the answer back into the thread.
  • Improve a message with AI — the ✨ button rewrites your draft: polish, fix spelling, make it shorter or more formal. One tap applies it, with an instant Undo.
  • Quick commands — type / at the start of a message for one-tap actions: /meet (start a video meeting and copy the link), /call (join the voice room), /summary (summarize the discussion), /invite (copy a link), /ai (ask the agent).
  • Link an entity — type # followed by a kind (for example #mock, #plan, #collection, #board, #wiki) and a few letters of its name; pick from the list to drop a clickable link into your message.
  • React with emoji, edit and delete your own messages (deleted messages leave a “message deleted” stub).
  • Emoji & stickers — the 🙂 button opens a built-in emoji picker (works offline). A message of just 1–3 emoji renders large, like a sticker. The Stickers tab keeps your team’s packs: upload PNG/GIF files into a pack, rename a pack with the pencil beside its name, and right-click (or long-press on a phone) a sticker to delete it. The counter next to a pack name shows how many stickers it holds; deleting one removes it from the pack and from messages that already use it.
  • Attach images and files — the paper-clip button, drag & drop, or paste a screenshot from the clipboard.
  • Send later — type the message, then press the clock button (or Ctrl+Shift+Enter) and pick In an hour, Tomorrow, 9:00, Monday, 9:00 or any time up to a year ahead. A bar above the input shows how many of your messages wait in this conversation; View lists them with a Cancel button each. At the chosen time the message is posted as you — if by then you can no longer post there (for example you left the channel), it is not sent and you get a notice with the reason. Scheduled messages carry text only; send files right away.
  • Record a voice message — the microphone button; stop & send or cancel. When a transcription component is installed (see AI Components), a text transcript appears under the voice message automatically.
  • Speak a message aloud — the Speak aloud action on a text message reads it with your browser’s voice. When a voice-synthesis component is installed, the same action can post a shared voice reply into the thread that everyone can play.
  • Record a video note — the camera button records a short round video (up to 60 seconds) with a live preview.
  • Media, files and links — ⋯ → Media, files and links shows everything the conversation has shared, newest first, on three tabs: photos and videos, other files, and links from messages. Click an item to open it, or Show in chat to jump to the message it came from.
  • Search — the search box above the thread list filters threads by name and finds messages by text across your discussions.

Unread counters appear on the thread list, and a red dot on the floating button tells you something is waiting even while you browse other pages.

You can see when someone is typing, recording a voice or video message, or sending a file. The indicator appears under the conversation and in the thread list until the message arrives. It also works in meeting chats for teammates and guests who joined by link.

Closing a discussion

Use Close discussion in the discussion menu when the conversation is finished. Its history remains readable. While it is closed, you cannot send, edit or delete messages, add reactions or shared pins, or schedule new messages. A message scheduled earlier is not sent if the discussion is still closed when its send time arrives. Choose Reopen discussion to resume the conversation.

If you requested a summary, the outcome is saved in the closed discussion. An AI failure does not undo the closure: instead of an empty result, you can see why the summary was unavailable. Participants’ messages are preserved.

You can still mark history as read, change your notification preference, pin the thread for yourself, remove a shared pin and cancel your pending scheduled messages. Archived discussions also refuse message writes.

Scheduled messages

Scheduled messages are checked again at their send time. A temporary service or storage failure leaves the message pending for another delivery attempt. If the discussion is closed or you no longer have permission to post, it is not sent. You can cancel a pending message. A committed message is not posted again by a repeated delivery check.

Direct messages

The person icon in the dock header starts a direct message: search for a teammate and write. DMs notify the recipient through the bell like mentions do.

Channels: picture, description and info panel

A channel (a room you create with New room or New meeting) has its own picture and description, so rooms are easy to tell apart in the list. Click the channel’s picture in the header — or the ⓘ button next to its name — to open the Channel info panel:

  • Picture. Upload an image (PNG, JPEG, GIF or WebP) or pick an emoji. Without one, the channel shows the first letter of its name on a coloured circle.
  • Name and description. Rename the channel with the pencil, and write what the channel is for. Ctrl+Enter saves the description.
  • Members. Everyone in the channel with their role — the owner and admins are marked. From here you can Add people.
  • Leave channel. Takes you out of the channel; to come back, someone has to add you again.

Changes appear for every member at once, without reloading.

Roles and moderation in channels

Every channel has an owner (whoever created it), optional admins, and members.

  • The owner makes members admins (and takes the rights back), and can Transfer ownership to another member — the former owner stays on as an admin. The owner cannot leave the channel without handing it over first.
  • Admins can remove a member, Ban someone (they are removed and cannot come back by an invite link, by being added or by an @-mention until an admin unbans them), unban people from the Banned list, and delete anyone’s message in the channel. Only the owner can remove another admin; nobody can remove the owner.
  • Permissions (admins only, in the info panel) decide who may post, add people, pin messages and change the name, picture and description — all members, or admins only. Set Who can post to Admins only to make an announcement channel: members read it, and see a note instead of the message box.

Every moderation action — a role change, a transfer, a removal, a ban, a message deleted by an admin, a change of permissions — is recorded in the audit log under the person who did it.

Open channels. When a channel’s How people join is set to Anyone in the namespace, it appears under Channels in the messenger’s quick actions: everyone in the namespace can search the list and join with one click, without an invite. A banned person cannot join this way either.

Slow mode. An admin can set Slow mode — one post per 10 seconds up to 1 hour in the channel’s permissions. Members then post at most once per that interval; a message sent too early is refused with how long to wait. Admins are not limited.

Anyone who may add people to a channel can share an invite link instead of adding people one by one. In the Channel info panel, open Invite links → Create link and choose:

  • Name — optional, so you recognise the link later (for example, Partners);
  • How many people — no limit, or 1, 5, 10 or 100 people;
  • Expires — never, or in 1 hour, 1 day, 7 days or 30 days;
  • An admin approves each person — the link does not let people straight in; it sends an admin a request instead.

Copy the link right away — it is shown only once. Someone who opens it sees the channel’s picture, name, description and how many people are in it, and joins with one click (Join channel, or Ask to join when approval is needed). Only people of the channel’s namespace can join; a banned person cannot come back through a link.

The Invite links list shows every link with how many times it was used, its limit and expiry. Revoke stops a link at once — the link’s author or any admin can revoke it. A link that has expired, run out or been revoked tells the person to ask for a new one; someone already in the channel who opens an old link simply lands in the channel.

When the channel’s How people join permission is Invite link needs admin approval, every link works as an approval link. Admins get a notice when someone asks to join and decide in Requests to join (Approve or Decline); the person is told the outcome at once. An approved person counts as one use of the link they came through.

Channel webhooks and slash commands

Posting into a channel from outside. A channel admin opens Channel info → Incoming webhooks, types the name the posts should appear under (for example CI) and clicks Create webhook. Copy the URL right away — it is shown only once. Anything that can make an HTTP request can now post into the channel:

curl -X POST -H 'Content-Type: application/json' \
  -d '{"text":"Build #42 is green"}' \
  https://mockarty.example.com/api/v1/chat-hooks/<token>

The text appears in the channel as a message from a bot with that name. The body is Slack-compatible, so tools that already send Slack incoming webhooks work unchanged. Each webhook accepts a few posts a second; beyond that it answers 429 and the sender should retry a moment later. Revoke stops a webhook at once; the list shows when each one last posted.

Slash commands. A channel admin can connect a command to your own service: Channel info → Slash commands → Add command, enter the command (for example deploy), the URL it is sent to, an optional description and the name its answers appear under. Anyone in the channel then picks it from the / menu and sends, for example, /deploy staging. Mockarty POSTs the command to your URL as JSON — command, text (what follows the command), who sent it, the channel and the message — and whatever your service answers ({"text": "…"} or plain text) is posted into the channel by the command’s bot. Each call carries the header X-Mockarty-Command-Token; compare it with the token shown when the command was added to be sure the call comes from your Mockarty. If your service does not answer, the sender alone sees why. The built-in commands (/meet, /call, /summary, /invite, /guestlink, /ai) cannot be replaced.

Receiving a channel’s messages elsewhere. In Settings → Callbacks, add an event webhook and pick the Messenger events: new message, member joined and member left. Every message in the namespace’s channels, meetings and entity discussions is then sent to your URL — the text, the author, the channel and a link back. Direct messages are never sent.

One-to-one calls

Inside a direct message, the phone button starts a call. The other side sees an incoming-call bar with Accept / Decline; a declined or unanswered call leaves a “missed call” entry in the DM. Audio and video travel directly between the two browsers — the Mockarty server only helps the browsers find each other, so calls do not load the server.

Calls require that both browsers can reach each other over the network (the same office network or VPN is the typical setup) and that the browser has microphone access.

A one-to-one call behaves like a phone call: when either side hangs up, it ends for both — the other person sees “The other party ended the call” and is not left alone in an open line.

When peers cannot reach each other directly (strict NAT between offices), the administrator can enable the built-in relay on the Mockarty server: set MOCKARTY_CHAT_TURN=on and MOCKARTY_CHAT_TURN_SECRET=<random secret> (optionally MOCKARTY_CHAT_TURN_LISTEN, default UDP :3478, and MOCKARTY_CHAT_TURN_PUBLIC_HOST for the externally visible address). Calls then relay through the server with time-limited credentials; nothing external is required — it works air-gapped.

Large meetings can switch to forwarding through the server: set MOCKARTY_CHAT_SFU=on, and a room that reaches MOCKARTY_CHAT_SFU_THRESHOLD participants (default 8) moves from direct browser-to-browser connections to one connection per participant to the server. In a cluster the whole meeting is forwarded by one node, whichever nodes its participants’ browsers reach; the nodes find each other through MOCKARTY_CLUSTER_ADVERTISE_HOST (see the Administration Guide).

Scheduling a meeting

Besides instant calls, a meeting can be planned for later: the Schedule a meeting action in the dock opens a form with the title, date and time, and a participants picker (search teammates, add them as chips). Every participant gets a notification with the join link and a calendar invite (.ics) — by email and in their connected messengers, with “join” and “add to calendar” buttons where the messenger supports them. Scheduled meetings can be listed and cancelled from the same panel.

Video meetings and voice rooms

Every channel and entity discussion has a voice room: the “Join voice” button in the dock connects you, and everyone can see who is in the room and who is speaking. The expand button opens a full-screen video meeting — a grid of participant tiles with camera video, screen sharing on a large stage, chat on the right and a control bar at the bottom (microphone, camera, screen, recording, leave). Meetings work from a phone too — all you need is a browser.

A room holds up to 10 participants. Audio and video flow directly between browsers; as the room grows, video quality adapts automatically so the meeting stays smooth.

During a call you can react with a floating emoji and raise your hand — everyone sees the hand indicator on your tile until you lower it. A voice equalizer and a highlight ring mark whoever is speaking.

Two things happen automatically so a call stays pleasant:

  • Feedback protection. If a second device in the same room closes an audio loop (a laptop next to a phone) and the line starts to howl, your microphone is muted with a message explaining why. Put on headphones or mute the other device, then unmute. Hanging up on one of your devices leaves only that device: you leave the room when your last device hangs up (in a direct message, that is when the call ends for the other side). Each of your devices keeps its own audio and video in the call, and the others see you once, with your devices listed in your tile — whether the call connects people directly or through the server (MOCKARTY_CHAT_SFU).
  • Framing. A participant’s video keeps its natural proportions: a phone held upright, or a 4:3 webcam, is shown whole inside the card instead of being cropped to a band of the face.

Meeting controls and moderation

The first person to join a meeting is its host. The host — and anyone they promote — can moderate the call from each participant’s tile:

  • Ask to mute — sends a mute request; the participant’s microphone is turned off.
  • Make co-host / revoke co-host — share moderation with a trusted teammate.
  • Remove from call — drop a participant from the meeting.
  • Lock the room — while locked, guests joining by link wait in a lobby and the host admits or declines each one from a small panel; your signed-in teammates still enter directly. Unlocking lets everyone with the link back in.

Host controls are cooperative and never touch anyone’s device beyond the call — a mute request turns off the microphone in the meeting, nothing more.

Webinar mode

For a talk to a large audience a host turns on ⋯ → Webinar mode. From then on only the hosts and the people they invite to speak can use the microphone, the camera and screen sharing; everyone else is an attendee and watches. On large calls (the server-forwarded mode) this is enforced by the server — an attendee’s sound and video do not reach anyone even from a modified client.

  • Raise your hand — an attendee presses ✋. The hosts see a bar above the video with everyone who raised a hand, oldest first: Invite to speak gives that person the floor (their microphone button appears), Lower clears the hand.
  • Back to the audience — in a participant’s menu a host can take the floor back; that person’s microphone, camera and screen sharing turn off.
  • Questions — the ? button opens the question list. Anyone in the webinar (guests too) can ask a question and support others’ questions with ▲; the most supported open questions come first. A host marks a question Answered or hides it; an author can hide their own question. Each person can have up to 5 unanswered questions at a time.

When the last person leaves, webinar mode ends and the next meeting in the same conversation starts as a regular call. The questions are kept.

Floating panel while you present

When you start sharing your screen, a small floating panel appears on top of
every window and application — like in desktop meeting apps. It shows that the
share is live and carries two buttons: stop sharing and mute/unmute the
microphone
, so you can end the demo or go quiet without hunting for the
Mockarty tab. The panel closes itself the moment sharing ends. It requires a
Chromium-based browser (Chrome, Edge); in other browsers the browser’s own
stop-sharing bar is used instead.

Laser pointer on a shared screen

While someone is presenting their screen, every viewer on the full call page
gets a laser pointer button. Turn it on and move your mouse over the shared
screen — the presenter (and everyone else watching) sees your glowing dot with
your name next to it, exactly where you point. Several people can point at
once: each gets their own colour. The dot fades out a moment after you stop
moving, so the shared screen never stays cluttered.

Whiteboard in a meeting

The board button opens a shared whiteboard for the meeting — a live canvas everyone in the call edits together in real time, ideal for sketching a flow or diagramming an API while you talk. Each meeting keeps its own board, so reopening it later brings back what you drew. Boards are part of the boards feature; if your plan doesn’t include it, the button explains that.

Ask the AI agent during a call

In the meeting chat, an authorized member can summon the AI agent with @mockarty or the $$ shortcut — it works on your request and posts the answer into the chat for everyone to see, without leaving the call.

When speech is enabled the agent’s reply is played into the call itself, so everyone hears it rather than only the person who asked. While it speaks, a tile for the agent appears in the participant grid with the speaking highlight, and disappears when it stops — otherwise the room would carry a voice with nobody to attribute it to.

The link button on the meeting screen creates a temporary invite link (valid for 24 hours by default). Anyone with the link can join the meeting from a browser without a Mockarty account: a guest enters a name and lands in the room — with microphone, camera, screen sharing and the meeting chat. A signed-in user opening the same link joins as themselves.

A guest sees only this meeting and its chat — no other Mockarty data is reachable. A link can be revoked at any time through the thread’s invite API; a revoked link immediately stops admitting new participants. A discussion can have at most 20 active links.

For a clustered install, set MOCKARTY_CHAT_GUEST_KEY (a secret of 16+ bytes) so guest sessions work across all nodes; on a single node the variable is optional.

Meeting recording and transcription

A team member can record the meeting — every participant sees the red REC indicator. When stopped, the recording is posted into the discussion as a voice message, and, when a transcription component is installed (see AI Components), a text transcript and an AI digest (decisions, questions, action items) follow automatically — see also AI features.

Notifications

  • An @-mention or a DM creates a bell notification with a deep-link into the thread.
  • Per-thread notification level (all / mentions only / mute) is set from the bell button in the dock header of the selected thread (and via the thread API). Mentions — the default — bell you on mentions and replies; All turns the thread into a followed one: ordinary messages in channels and entity discussions also reach your bell, until you switch back; Mute silences the thread, and muted threads don’t count toward the unread badge.
  • Mention notifications can also reach your team messengers if notification channels (Slack, Telegram, email) are configured — see Integrations.

Access control

A discussion inherits the access rules of its entity: if you can see the test case, you can join its discussion. Threads of private tracker projects are visible only to the project’s members. Direct messages and channels are visible only to their participants. Inside a channel, what each member may do follows the channel’s roles and permissions (see Roles and moderation in channels).

Live chat delivery follows the server’s current Space membership. Once a person’s removal is reflected on the server, they stop receiving new messages, notification previews, typing indicators and room updates, including in tabs they already have open. Meeting guests admitted by an invite link retain the access that link grants to that meeting.

For automation and AI agents

The same discussions are reachable programmatically via the built-in MCP server tools: chat_thread_resolve (address a thread by entity), chat_read, chat_send, chat_my_threads, chat_call_invite_create (a video-call invite link), chat_channel_info (a channel’s profile, your role and the members), chat_channel_update (picture, description, permissions) and chat_channel_moderate (promote, demote, remove, ban, unban, transfer ownership), chat_channel_invite (create, list and revoke invite links), chat_channel_join (preview a channel by its link and join) and chat_channel_join_requests (approve or decline requests to join), chat_channel_webhook (create, list and revoke a channel’s incoming webhooks), chat_channel_command (register, list and revoke a channel’s slash commands), chat_channel_directory (find and join open channels), chat_message_schedule (send a message later, list and cancel your scheduled messages), chat_thread_media (the media, files and links a conversation has shared), chat_room_webinar (run a room as a webinar: speakers, raised hands and questions) — so a CI pipeline or an external agent can post results straight into the discussion of the entity it worked on. See AI Features.