NAVIGATION
ELOWEN DOCUMENTATION Reference on GitHub ↗

Last updated: 28 July 2026

Channels

Channels

Channels let you talk to the same Elowen agent from Discord, Telegram, Microsoft Teams, or WhatsApp. They are platform plugins that adapt inbound messages into the same brain-turn pipeline the Web UI and CLI use — one runtime, one memory, one policy behind every surface.

A sender must be mapped to an Elowen role policy before the bot answers. Unmapped senders are silently ignored. This is deny-by-default: nobody gets agent access until you grant it.

Pick your channel

  • Discord — a bot in your server, role-mapped per Discord role.
  • Telegram — a long-polling bot you message directly or in groups.
  • Microsoft Teams — a webhook bot for your org, identity-mapped via Entra.
  • WhatsApp — a paired account for direct and group chats.

Shared behavior

All channels share these traits:

  • Reactions — 👀 while thinking; ✅/❌ when done on Discord and WhatsApp, 👍/👎 on Telegram (its reaction emoji set is limited). Toggle with reactions.
  • Runtime footer — a small "model · context %" line under the final reply (toggle with runtimeFooter)
  • Reasoning — stream extended-thinking output into the progress bubble (toggle with showReasoning, off by default)
  • AskUserQuestion — when the agent needs a decision, it posts a prompt and waits for a reply (button click on Discord, inline-keyboard tap on Telegram, Adaptive Card tap on Teams, numbered reply on WhatsApp). askTimeoutMs controls how long it stays open.
  • Language — service messages (/new, /model, placeholders) in en, cs or sk, selectable from a dropdown in the plugin settings.
  • /context — bind the current channel/chat to one of your existing conversations from any surface (CLI, Web UI, another channel). The command opens a paginated picker of your own conversations (Discord and Teams use native select menus with prev/next buttons; Telegram uses inline-keyboard pages; WhatsApp uses a numbered text menu you reply to). Picking one moves the channel's session onto that conversation's history, so you can continue a CLI or Web chat right from your phone. Operator-gated (admin role policies only); ownership is re-verified server-side.

How conversations work in channels

Channels are shared spaces, so the agent handles them differently from a private CLI or Web UI session. These rules apply on every platform.

Who is talking

Every message in a shared channel arrives prefixed with the sender's display name, so the agent always knows who said what. It follows multi-user etiquette: it addresses you by name, keeps each sender's requests separate, and never mixes one person's context into another person's answer.

Linked identity

When a platform account is linked to an Elowen account, that person is treated as themselves: their own project policy, tool permissions, and personal memory apply, bypassing the channel's role policy. Unlinked senders get no memory recall at all — in a shared space the agent never leaks one person's remembered facts into replies visible to everyone.

/context moves, not copies

Binding a conversation into a channel with /context replaces the channel's session: the channel adopts that conversation's full history and the old channel session is archived. Nothing is duplicated — the conversation itself moves. This works across surfaces, so a conversation started in the CLI can continue in Discord or on your phone. See Slash Commands for the full command reference.

Steering mid-turn

If you send another message while the agent is still working on yours, it folds into the running turn as additional input — you can steer, correct, or add detail without waiting. A message from a different sender does not interrupt; it queues and gets its own turn.

Idle rollover

When a channel stays quiet past the idle cutoff (30 minutes by default), the next message starts a fresh session. The previous conversation is not lost — it stays browsable in your conversation list and can be pulled back with /context.

Delivery details

  • The platform shows a typing indicator while the agent works, so the channel can see it is busy.
  • Long answers are split at the platform's message-length limit without breaking fenced code blocks or tables mid-block.
  • When you reply to or quote a message, the quoted content arrives with yours as context, so the agent sees what you are referring to.
  • Generated images are uploaded as real platform attachments, not links.

Questions in channels

When the agent needs a decision, its question renders as numbered options in the channel. An Other option (or free-text reply where the platform supports it) captures a custom answer. Only the person the question was addressed to — or an admin — can answer; replies from anyone else are ignored for that question.

Security model

  • Sender identity is resolved before any turn runs. No mapping = no access.
  • Each policy can restrict tools, models, and project scope independently.
  • Provider credentials stay on the daemon; they are never exposed to the chat platform.
  • The same RBAC, approval gates, and autonomy levels apply regardless of which surface the message arrives on.

Next: Discord