Each adapter is a standalone daemon that speaks the channel protocol. They run as separate containers in the compose stack. All Go adapters share chanlib/ for HTTP + auth primitives.
| Adapter | Language | Platform | JID prefix |
|---|---|---|---|
teled | Go | Telegram Bot API | telegram: |
discd | Go | Discord Gateway | discord: |
mastd | Go | Mastodon | mastodon: |
bskyd | Go | Bluesky | bluesky: |
reditd | Go | reddit: | |
emaid | Go | Email (IMAP/SMTP) | email: |
whapd | TypeScript | whatsapp: |
Auth: TELEGRAM_BOT_TOKEN env var. Uses Telegram Bot API long polling (getUpdates with offset tracking).
JID format: telegram:<chat_id>. Groups use negative chat IDs (e.g. telegram:-100123456789). Private chats use positive user IDs.
Notable behaviors:
send_file via Telegram sendDocument APIsendChatAction when router calls /typingAuth: DISCORD_BOT_TOKEN env var. Uses Discord Gateway websocket connection with automatic reconnect and session resume.
JID format: discord:<channel_id>. DMs use the DM channel ID, not the user ID.
Notable behaviors:
MESSAGE_CONTENT for reading message text in serversAuth: MASTODON_ACCESS_TOKEN and MASTODON_SERVER (e.g. https://mastodon.social). Uses the Mastodon streaming API websocket for real-time notifications.
JID format: mastodon:<account_id>@<server>.
Notable behaviors:
in_reply_to_id when replyTo is providedAuth: BSKY_HANDLE and BSKY_APP_PASSWORD. Connects to the AT Protocol firehose and filters for mentions of the configured account.
JID format: bluesky:<did>. DIDs are stable identifiers even if the handle changes.
Notable behaviors:
app.bsky.feed.postAuth: OAuth2 script-type app credentials (REDDIT_CLIENT_ID, REDDIT_CLIENT_SECRET, REDDIT_USERNAME, REDDIT_PASSWORD). Polls inbox and optionally monitors subreddits.
JID format: reddit:<username> for DMs, reddit:r/<subreddit> for subreddit monitoring.
Notable behaviors:
Auth: EMAIL_IMAP_HOST, EMAIL_IMAP_PORT, EMAIL_SMTP_HOST, EMAIL_SMTP_PORT, EMAIL_USERNAME, EMAIL_PASSWORD. IMAP uses TLS; SMTP uses STARTTLS.
JID format: email:<from_address>.
Notable behaviors:
email_threads table: maps Message-ID / In-Reply-To headers to JIDsIn-Reply-To and References headers for correct threading in mail clientsgroups/<folder>/media/ and the agent receives the file pathLanguage: TypeScript. Uses the Baileys multidevice library.
Auth: Phone-number pairing. On first run, start with --pair <phone_number>; the library generates a pairing code to enter in the WhatsApp mobile app. Session credentials are persisted to disk and reused on subsequent starts.
JID format: whatsapp:<phone_number>@s.whatsapp.net for individuals, whatsapp:<group_id>@g.us for WhatsApp groups.
Notable behaviors:
sendMessage with document type