Aleph
Concepts

Group Chat

The panel group-chat window: a three-panel team chat surface with attribution bubbles, sidebar history, and @-mention auto-complete.

Group chat is the panel surface where a team of agents converses in one shared, durable thread. It turns a team from "able to run" into "good to use, easy to revisit": speakers are visually distinct, history is resumable from the sidebar, and @-mentions are discoverable instead of hand-typed.

Design Philosophy

  1. Identity-first — every message is attributed to a speaker by emoji avatar + display name, not buried in metadata.
  2. Resumable — a team chat enters the sidebar history like a single-agent chat; you return to it any time.
  3. Discoverable mentions — typing @ opens a roster palette, so you never silently lose a misspelled @<id>.

The Three-Panel Window

Opening a team enters the group-chat window, which is laid out in three panels:

┌──────────────┬─────────────────────────────────┬──────────────────┐
│   Roster     │        Message Flow             │   Workspace      │
│  (left)      │        (middle)                 │   (right)        │
├──────────────┼─────────────────────────────────┼──────────────────┤
│ 👑 leader    │  🦊 Fox                          │  [Artifacts]     │
│  ● online    │   ┌──────────────────────────┐  │  [Tasks/Kanban]  │
│ 🦉 Owl       │   │ message text             │  │                  │
│  ● working   │   └──────────────────────────┘  │  ┌────────────┐  │
│ 🐢 Turtle    │   │ merged follow-up message │  │  │ artifact   │  │
│  ○ idle      │   └──────────────────────────┘  │  │ task card  │  │
│              │  🦉 Owl                          │  │ ...        │  │
│              │   ┌──────────────────────────┐  │  └────────────┘  │
│              │   │ message text             │  │   (collapsible)  │
│              │   └──────────────────────────┘  │                  │
└──────────────┴─────────────────────────────────┴──────────────────┘

Left — Roster

The team roster, with a leader badge on the team leader and a status dot per member (online / working / idle). This is the live membership of the team for this thread.

Middle — Message Flow (attribution bubbles)

The conversation, rendered as attribution bubbles in a classic-IM layout:

  • Each incoming message shows an avatar (the agent's emoji, falling back to a name-initial monogram) outside the bubble, the display name above the bubble, and plain text inside the bubble.
  • The avatar's background is a stable color derived from hash(agent_id) — so a member keeps the same color regardless of roster order or membership changes.
  • Consecutive same-agent messages merge: when a message has the same agent_id as the one above it, the avatar and name are hidden (the bubble is indented under the first), so a run of replies reads as one block.
  • Your own messages stay right-aligned with no avatar or name.

Avatar color is keyed on agent_id, not roster index — adding or removing a member never re-colors anyone else.

Right — Workspace

A collapsible workspace with two tabs:

  • Artifacts — deliverables produced during the conversation.
  • Tasks / Kanban — the team's coordination tasks as a board.

The chat sidebar gains a Group Chats section above the single-agent chats, sharing one scroll list:

  • Each row shows a member-preview avatar cluster (the team's members, colored via hash(agent_id)) and a last-message snippet as the subtitle.
  • The section is collapsible; if the selected agent is in no teams, it hides entirely.
  • Clicking a row re-enters the team: it loads the roster, replays the chat history into the message flow, and subscribes to live team events. The sidebar row is the durable entry point — you come back by clicking the list.

@-Mentions

Typing @ in the composer (while in a team) opens a roster auto-complete palette:

  • Each entry renders the member's avatar + display name + a grey id, plus an @all special entry.
  • Filtering matches name or id, case-insensitively, against the text typed after @.
  • Selecting an entry inserts the canonical @<id> (or @all). Inside bubbles the literal @<id> token is kept and lightly highlighted — it is not rewritten to a name, so there is no ambiguity between same-named agents.

Mentions are resolved against the roster's agent_id; a token that doesn't match a member is simply not delivered.


Auto-Naming

A team created without a name (blank-named team) is auto-named by the LLM on its first message, so it shows a meaningful title in the Group Chats history instead of a placeholder.


RPC Layers

Group chat sits on two distinct RPC layers — keep them separate:

Team work-thread

The durable, per-team group-chat thread. Its history powers the attribution-bubble replay when you re-enter a team from the sidebar.

MethodPurpose
teams.chat.sendSend a message into the team's group-chat thread (fans out to members).
teams.chat.threadThe team's work-thread (tasks / deliverables view).
teams.chat.historyReplay the durable chat bubbles for a team, oldest-first.

agents.teams returns each team's summary augmented with a small members_preview (for the avatar cluster) and last_message (for the row subtitle), so the sidebar avoids an N+1 of per-team lookups.

Group-chat session primitive

The lower-level session primitive that drives a live multi-agent conversation:

MethodPurpose
group_chat.startBegin a group-chat session.
group_chat.continueAdvance the session with the next turn.
group_chat.endEnd the session.
group_chat.historyRead the session's message history.
group_chat.listList active / known sessions.
group_chat.mentionResolve / route an @-mention within the session.

See Also

  • Teams — leader, Team Strata planning, and Coord Tasks
  • Agent Runtime — how individual agents work
  • Arena — multi-agent collaboration workspace

On this page