# 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.
An agent lists the channels it answers on; see [Agents](../agents/overview.md) for how channels attach to an agent (and how a [peer group](./peer-groups.md) lets agents on a shared channel address each other).
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.
The default ZeroClaw build includes a lean channel bundle: ACP, webhook, email, Telegram, Discord, and filesystem. These cover local/editor sessions, gateway ingress, and common first-run external messaging without compiling every bundled platform integration. Standard distribution artifacts add Git, Matrix, Lark, and WhatsApp Web; the Android artifact omits WhatsApp Web for target compatibility. For source installs that need the historical broad channel set, run `install.sh --source --preset full`, build with `--features channels-full`, or use individual `channel-*` features for selective builds:
#### sh
```sh
./install.sh --source --preset full
cargo build --features channels-full
cargo build --no-default-features --features "agent-runtime,gateway,channel-slack"
```
## 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.
| Channel | Feature flag | Dedicated guide |
|---|---|---|
| Matrix | `channel-matrix` | [Matrix](./matrix.md) |
| Telegram | `channel-telegram` | [Telegram](./telegram.md) |
| Discord | `channel-discord` | [Discord](./discord.md) |
| Slack | `channel-slack` | [Slack](./slack.md) |
| Mattermost | `channel-mattermost` | [Mattermost](./mattermost.md) |
| LINE | `channel-line` | [LINE](./line.md) |
| Nextcloud Talk | `channel-nextcloud` | [Nextcloud Talk](./nextcloud-talk.md) |
| Signal | `channel-signal` | [Signal](./signal.md) |
| Twitch | `channel-twitch` | No dedicated guide |
| WhatsApp Cloud API | `channel-whatsapp-cloud` | [WhatsApp](./whatsapp.md) |
| WhatsApp Web | `whatsapp-web` | [WhatsApp](./whatsapp.md) |
| iMessage, WeChat personal iLink Bot, DingTalk, Lark, QQ, IRC, Mochat, Notion | per channel | [Other chat platforms](./chat-others.md) |
### Social & broadcast
One-to-many or public-feed integrations.
| Channel | Feature flag | Protocol / service |
|---|---|---|
| Bluesky | `channel-bluesky` | AT Protocol |
| Nostr | `channel-nostr` | NIP-01 relays |
| Twitter / X | `channel-twitter` | API v2 |
| Reddit | `channel-reddit` | JSON API |
See [Social channels](./social.md).
### Developer platforms
| Channel | Feature flag | Protocol / service |
|---|---|---|
| Git | `channel-git` | Git forge behind a provider seam (GitHub, Gitea, Forgejo); REST polling of issues, PRs, CI runs & releases with per-event routing |
See [Git](./git.md).
### Email
| Channel | Feature flag | Notes |
|---|---|---|
| IMAP / SMTP | `channel-email` | Classic poll-based inbox |
| Gmail Push | `channel-email` | Google Pub/Sub push notifications: real-time, no polling |
See [Email](./email.md).
### Voice & telephony
| Channel | Feature flag | Service |
|---|---|---|
| ClawdTalk | `channel-clawdtalk` | Telnyx SIP real-time voice |
| Voice Call | `channel-voice-call` | Twilio / Telnyx / Plivo |
| Voice Wake | `voice-wake` | Local wake-word detection |
| TTS | always compiled with channel support | Outbound speech synthesis (OpenAI, ElevenLabs, Google Cloud, Edge, Piper) |
See [Voice & telephony](./voice.md).
### Webhooks & programmatic
| Channel | Feature flag | Shape |
|---|---|---|
| Webhook | `channel-webhook` | Inbound HTTP → agent |
| CLI | always on | Local stdin/stdout |
| Gateway REST/WS | `gateway` (enabled by default) | HTTP + WebSocket |
| ACP (Agent Client Protocol) | `channel-acp-server` | JSON-RPC 2.0 over stdio: editor/IDE sessions |
See [Webhooks](./webhook.md) and [ACP](./acp.md).
### Event sources
Input-only transports that feed events into the agent loop or the SOP engine. They have no outbound reply; each one is also a [SOP fan-in](../sop/fan-in/overview.md).
| Channel | Feature flag | Shape |
|---|---|---|
| MQTT | `channel-mqtt` | Broker messages → agent or SOP |
| AMQP | `channel-amqp` | Broker deliveries → agent or SOP |
| Filesystem | `channel-filesystem` | Path changes → agent or SOP |
See [MQTT](./mqtt.md), [AMQP](./amqp.md), and [Filesystem](./filesystem.md).
## Configuration
Modern channel instances are configured under `[channels..]`, with `default` as the common first alias. Set them through any config surface:
{{#config-where channels}}
Secrets (bot tokens, API keys, passwords) are stored encrypted; set them through the gateway, zerocode, or `zeroclaw config set` (masked), never in plaintext. The `channels` entry on an agent binds a channel alias to that agent. Field names differ per channel; `zeroclaw config schema` is the authoritative list. Fields that recur across many channels:
| Key | What it does |
|---|---|
| `enabled` | On/off without removing the section |
| `mention_only` | Ignore messages that don't @-mention the bot (chat platforms) |
| `proxy_url` | Per-channel proxy (http/https/socks5/socks5h); overrides global `[proxy]` |
| `excluded_tools` | Tools withheld from the model when answering on this channel |
| `draft_update_interval_ms` | Streaming edit cadence (default 500 ms) |
| `approval_timeout_secs` | Seconds to wait for operator approval on `always_ask` tools before auto-denying |
Inbound senders are gated through [peer groups](./peer-groups.md), not a per-channel field.
## Streaming capability
Channels declare what kind of streaming they support: see [Providers → Streaming](../providers/streaming.md) 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.