Docs / Key Concepts / Channels

Channels

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.

Desktop App

The flagship experience. A native macOS menu bar app with full capabilities:

  • Chat — type messages, see responses, interact with cards, tables, and other UI surfaces
  • Computer use — your assistant can see your screen and control your Mac directly
  • Voice input — hold your activation key and speak, or enable wake word detection
  • Document editor — long-form writing with your assistant as collaborator
  • App viewer — interactive apps your assistant builds render right in the window
  • Screen watch — your assistant can observe what you're doing and offer context-aware help
  • Host file & shell access — your assistant can read files and run commands on your machine

Every tool, every skill, every feature is available here. If a capability exists, the desktop app supports it.

CLI

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.

Telegram

Connect a Telegram bot to your assistant and message it from anywhere. Setup takes a few minutes:

  1. Create a bot via BotFather
  2. Give your assistant the bot token
  3. Your assistant registers the webhook automatically

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.

Slack

Connect your assistant to Slack workspaces via Socket Mode. It can:

  • Respond to @mentions in channels
  • Hold threaded conversations
  • Send rich messages with Block Kit formatting
  • Handle approvals via interactive buttons
  • Send ephemeral messages (visible only to you) for sensitive prompts

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

Email works in two distinct modes: managing your email and giving the assistant its own inbox.

Your email (Gmail)

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.

  • Read, search, and triage your inbox
  • Draft and send emails on your behalf (draft-first workflow — nothing sends without your approval)
  • Archive, label, trash, and organize messages
  • Unsubscribe from mailing lists
  • Bulk declutter with sender digest scanning
  • Create inbox filters for automation
  • Manage attachments, forwarding, and follow-up tracking
  • Vacation auto-responder

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.

Assistant's own email (AgentMail)

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.

  • Receive and process inbound emails to the assistant's address
  • Draft, approve, and send outbound emails as the assistant
  • Thread-aware conversations
  • Custom domain setup with DNS verification
  • Invite code redemption for onboarding contacts

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.

Phone Calls

Your assistant can make and receive phone calls via Twilio.

  • Inbound calls — callers reach your assistant's phone number, and it answers with real-time voice conversation powered by ElevenLabs text-to-speech
  • Outbound calls — your assistant can call people on your behalf (for example, during guardian verification)
  • Transcripts — call recordings are transcribed and stored as conversation history

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.

Channels vs. interfaces

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.

What works where

Not every channel can do everything. Here's what to expect:

CapabilityDesktopCLITelegramSlackEmailPhone
ChatYesYesYesYesYesVoice
Computer useYes
Host file/shell accessYes
Screen watchYes
Voice inputYesYes
ApprovalsNative promptNative promptInline buttonsInteractive buttonsPlain text
Rich contentFull UITextMarkdown + mediaBlock KitHTMLVoice only
NotificationsYesYesYesYes
Invite codesYesYesYes
SkillsAllAllAllAll (with channel permissions)AllLimited

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.

Same assistant, everywhere

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.

Setting up channels

All channel configuration happens through your assistant. You can say things like:

  • “Set up Telegram”
  • “Connect to Slack”
  • “Set up voice”
  • “Provision a phone number”

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.