A channel is how you talk to your assistant. Your assistant is the same everywhere — same personality, same memories, same skills. The only thing that changes is where you're talking to it and what the channel can do.
The flagship experience. A native macOS menu bar app with full capabilities:
Every tool, every skill, every feature is available here. If a capability exists, the desktop app supports it.
A command-line interface for interacting with your assistant from the terminal. Uses the same SSE streaming connection as the desktop app — meaning it's a full interactive interface, not just a dumb pipe.
Permission approval prompts work natively in the CLI, and all sandbox-based skills are available. Useful for scripting, automation, or if you prefer working in a terminal.
Connect a Telegram bot to your assistant and message it from anywhere. Setup takes a few minutes:
From there, you can chat with your assistant in Telegram like any other contact. It supports text, images, documents, and interactive inline buttons for approvals. When your assistant needs permission to do something, it sends an inline keyboard you can tap.
Telegram is also one of the channels your assistant can use to reach you — notifications, follow-ups, and alerts can all land in your Telegram chat.
Connect your assistant to Slack workspaces via Socket Mode. It can:
Slack has a unique feature: per-channel permission profiles. You can configure which tool categories are allowed in which Slack channels, block specific tools, and set trust level overrides. For example, an engineering channel might allow coding and terminal tools, while a general channel restricts them to restricted trust.
Notifications are delivered to Slack, and invite code redemption is supported for onboarding new contacts via Slack.
Email works in two distinct modes: managing your email and giving the assistant its own inbox.
Connect your Gmail account via Google OAuth and your assistant becomes a full email manager. This is what happens when you say “check my email” or “clean up my inbox” — it defaults to your Gmail, not the assistant's own address.
Gmail is also a platform in the unified messaging system — your assistant can read, search, and send across Gmail, Telegram, and other connected platforms through a single interface.
Your assistant can also have its own email address. This is behind a feature flag (email-channel) and uses a provider-agnostic architecture — currently backed by AgentMail.
Outbound notification delivery is not currently enabled on the assistant's email. Conversations use the continue_existing_conversation strategy, meaning replies stay in the same thread.
Your assistant can make and receive phone calls via Twilio.
Phone is the most constrained channel. Notifications cannot be delivered to it, invite code redemption is not supported, and conversations are not_deliverable — meaning the assistant can't initiate a message to a phone number outside of an active call. Setup requires a Twilio account and a provisioned phone number.
Internally, the system distinguishes between channels and interfaces.
Channels are the six communication transports: vellum, telegram, slack, email, and phone. Every message has a channel.
Interfaces are more specific — they include the channels plus the native client apps: macos and cli. A message on the vellum channel might come from the macOS app or the CLI — the interface tells the system which one.
The distinction matters for capabilities. The macOS and CLI interfaces are interactive — they have an SSE client capable of displaying native permission prompts. Channel interfaces (Telegram, Slack, etc.) route approvals through the guardian system instead.
Not every channel can do everything. Here's what to expect:
| Capability | Desktop | CLI | Telegram | Slack | Phone | |
|---|---|---|---|---|---|---|
| Chat | Yes | Yes | Yes | Yes | Yes | Voice |
| Computer use | Yes | — | — | — | — | — |
| Host file/shell access | Yes | — | — | — | — | — |
| Screen watch | Yes | — | — | — | — | — |
| Voice input | Yes | — | — | — | — | Yes |
| Approvals | Native prompt | Native prompt | Inline buttons | Interactive buttons | Plain text | — |
| Rich content | Full UI | Text | Markdown + media | Block Kit | HTML | Voice only |
| Notifications | Yes | Yes | Yes | Yes | — | — |
| Invite codes | — | — | Yes | Yes | Yes | — |
| Skills | All | All | All | All (with channel permissions) | All | Limited |
Your assistant adapts its output to what the channel supports. If it would normally show you an interactive card, it'll send plain text on Telegram or speak it on a phone call instead.
Your assistant's identity, personality, and memory are channel-independent. A conversation that starts on your desktop can be followed up on Telegram. A fact you share over a phone call is remembered in Slack.
What ties it together is the guardian system. You verify your identity on each channel once — through a challenge-response flow — and from then on, your assistant knows it's you, regardless of where the message comes from. A single contact can be linked across multiple channels (your Telegram account, your Slack handle, your phone number, your email address), and the assistant treats them as one person.
All channel configuration happens through your assistant. You can say things like:
Your assistant walks you through the setup conversationally — providing API keys, authorizing OAuth, configuring webhooks — rather than through a separate settings panel. Each channel has its own setup skill that handles the end-to-end flow.
Some channels require external service accounts (Twilio for phone, BotFather for Telegram). Your assistant will guide you through creating those when needed.