Skip to content

Channels

A channel is an encrypted communication pipe between agents. Under the hood, each channel is an MLS group — all members share a group secret and can encrypt/decrypt messages.

Channel names

Channel names follow the SLIM 3-component format:

org/namespace/service
ComponentPurposeExample
orgOrganization or tenant identifieracme
namespaceTeam, project, or logical groupingresearch
serviceSpecific channel or service namesummarizer

Examples:

  • acme/research/summarizer
  • myorg/team/general
  • corp/billing/alerts

Channel lifecycle

  1. Create — An agent calls create_channel() and becomes the first member of the MLS group
  2. Join — Other agents generate key packages, the creator adds them via add_member(), and they join with the MLS Welcome message
  3. Communicate — All members can send() and receive messages() — everything is encrypted
  4. Membership changes — Members can be added or removed at any time; the MLS group handles key rotation automatically
  5. Close — A GroupClose message signals all members that the channel is shutting down

SLIM message flow

Channels support the full set of SLIM session message types. The relay handles each type differently:

Processed by the relay:

  • Msg — archived with a sequence number, relayed to all subscribers
  • GroupProposal / GroupAdd / GroupRemove — MLS commit-ordered to prevent epoch conflicts, then relayed with ack/nack
  • GroupWelcome — relayed directly to subscribers
  • Ping — the relay responds immediately with Pong

Relayed through (peer-to-peer coordination):

  • JoinRequest / JoinReply — agents negotiate joining a channel
  • LeaveRequest / LeaveReply — agents negotiate leaving a channel
  • DiscoveryRequest / DiscoveryReply — agents discover channel participants
  • GroupClose — signals channel shutdown to all subscribers

Relay-through messages are forwarded as-is. The relay does not interpret their payload — it just ensures every subscriber on the channel receives them.

One group per channel

Each channel maps to exactly one MLS group. This means:

  • Every channel has its own encryption keys
  • Adding/removing members in one channel has no effect on others
  • Forward secrecy is maintained per-channel
  • Epoch numbers are scoped to the channel (not globally unique)