Channels

PocketPaw connects to multiple messaging platforms through channel adapters. Each adapter translates between the platform’s native protocol and PocketPaw’s internal message bus.

Supported Channels

Running Channels

Web Dashboard (Default)

The web dashboard is the default mode. Simply run:

Terminal window
pocketpaw

The dashboard auto-starts all configured channel adapters on startup. You can manage channels from the Channels modal in the sidebar.

Headless Mode

Run specific channels without the web dashboard:

Terminal window
# Single channel
pocketpaw --telegram
pocketpaw --discord
pocketpaw --slack
# Multiple channels
pocketpaw --discord --slack --whatsapp
# All channel flags
pocketpaw --telegram --discord --slack --whatsapp --signal --matrix --teams --gchat

Channel Management API

The web dashboard exposes REST endpoints for channel management:

EndpointMethodDescription
/api/channels/statusGETGet status of all channels
/api/channels/savePOSTSave channel configuration
/api/channels/togglePOSTStart or stop a channel

Streaming Behavior

Each channel handles streaming differently based on platform limitations:

ChannelStreaming Method
Web DashboardReal-time WebSocket chunks
TelegramEdit-in-place (message updates)
DiscordEdit-in-place (1.5s rate limit)
SlackThread message updates
WhatsAppAccumulate + send on completion
SignalAccumulate + send on completion
MatrixEdit-in-place (m.replace)
TeamsAccumulate + send on completion
Google ChatAccumulate + send on completion

Channel-Specific Session Keys

Each channel generates unique session keys to maintain separate conversations:

  • Telegram: {chat_id} or {chat_id}:topic:{topic_id}
  • Discord: {channel_id} or dm:{user_id}
  • Slack: {channel_id}:{thread_ts}
  • WhatsApp: {phone_number}
  • Signal: {phone_number}
  • Matrix: {room_id}
  • Teams: {conversation_id}
  • Google Chat: {space_name}

Access Control

Each channel supports allow-listing to restrict who can interact with your agent:

Terminal window
# Telegram
export POCKETCLAW_ALLOWED_TELEGRAM_IDS="123456,789012"
# Discord
export POCKETCLAW_DISCORD_ALLOWED_GUILD_IDS="111,222"
export POCKETCLAW_DISCORD_ALLOWED_USER_IDS="333,444"
# Slack
export POCKETCLAW_SLACK_ALLOWED_CHANNEL_IDS="C01,C02"
# WhatsApp
export POCKETCLAW_WHATSAPP_ALLOWED_PHONE_NUMBERS="+1234567890"