Back to Zeroclaw

Channels — Overview

docs/book/src/channels/overview.md

0.7.44.2 KB
Original Source

Channels — Overview

A channel is a messaging surface the agent talks through. One ZeroClaw instance can bind multiple channels simultaneously — the same agent can answer in Discord, Telegram, email, and over the REST gateway without you running separate processes.

Channels are implementations of the Channel trait in zeroclaw-api. Each one is feature-gated at compile time, so a minimal build only includes the channels you want.

Categories

Chat platforms

Real-time messaging where the agent can hold a conversation, get notified of new messages via push or long-poll, and reply as a bot user.

ChannelFeature flagDedicated guide
Matrixchannel-matrixMatrix
Mattermostchannel-mattermostMattermost
LINEchannel-lineLINE
Nextcloud Talkchannel-nextcloud-talkNextcloud Talk
Discord, Slack, Telegram, Signal, iMessage, WeCom, DingTalk, Lark, QQ, IRC, Mochat, Notionper channelOther chat platforms

Social & broadcast

One-to-many or public-feed integrations.

ChannelFeature flagProtocol / service
Blueskychannel-blueskyAT Protocol
Nostrchannel-nostrNIP-01 relays
Twitter / Xchannel-twitterAPI v2
Redditchannel-redditJSON API

See Social channels.

Email

ChannelFeature flagNotes
IMAP / SMTPchannel-emailClassic poll-based inbox
Gmail Pushchannel-gmail-pushGoogle Pub/Sub push notifications — real-time, no polling

See Email.

Voice & telephony

ChannelFeature flagService
ClawdTalkchannel-clawdtalkTelnyx SIP real-time voice
Voice Callchannel-voice-callTwilio / Telnyx / Plivo
Voice Wakechannel-voice-wakeLocal wake-word detection
TTSchannel-ttsOutbound speech synthesis (OpenAI, ElevenLabs, Google Cloud, Edge, Piper)

See Voice & telephony.

Webhooks & programmatic

ChannelFeature flagShape
Webhook(always on with gateway)Inbound HTTP → agent
CLIalways onLocal stdin/stdout
Gateway REST/WSalways onHTTP + WebSocket
ACP (Agent Client Protocol)(always on with runtime)JSON-RPC 2.0 over stdio — editor/IDE sessions

See Webhooks and ACP.

Configuration

Every channel is configured under [channels.<name>]:

toml
[channels.discord]
enabled = true
bot_token = "..."
allowed_users = ["123456789012345678"]
reply_to_mentions_only = false

Channel-specific options live under the same block. Common keys across channels:

KeyWhat it does
enabledOn/off without removing the section
allowed_usersWhitelist — empty means allow all
allowed_destinationsRestrict which rooms/channels/threads the bot answers in
reply_to_mentions_onlyIgnore messages that don't @-mention the bot
providerOverride default model for this channel
draft_update_interval_msStreaming edit cadence (default 500 ms)

Pairing

Most channels require pairing — a one-time handshake that binds an incoming message source to the agent's policy. The onboarding wizard handles pairing for channels you configure during zeroclaw onboard; use zeroclaw channel add and zeroclaw channel bind-telegram (for Telegram specifically) to pair additional identities post-onboard. Without pairing, the channel rejects everything.

The rationale: an agent with a public Telegram bot token and no pairing is a publicly-accessible shell. Pairing is the gate.

Streaming capability

Channels declare what kind of streaming they support — see Providers → Streaming for the capability matrix and what supports_draft_updates / supports_multi_message_streaming mean.

Adding a channel

Implementing a new channel means adding a file to crates/zeroclaw-channels/src/ that implements the Channel trait. The canonical reference is any existing channel of similar shape — discord.rs for push-based, email_channel.rs for polling, webhook.rs for HTTP-driven.