Channels
Every platform your agents speak through. One architecture, one API, one admin UI.
Unified Channel Architecture
Every channel in Animus follows the same pattern: authenticate → receive → dispatch → respond. The ChannelManager owns all connector runtimes, routes inbound messages to agent sessions, and sends auto-replies back through the originating channel.
Each channel binds to a specific agent via agent_id in its config. Sessions are scoped per-channel and per-conversation — a Telegram user and an IRC user talking to the same agent get independent session histories.
Inbound event (platform-specific)
→ ChannelManager receives
→ Session lookup (channel + conversation)
→ Agent execution (LLM + tools + memory)
→ Auto-reply sent via originating channel
OR tool output (file, web, diary, Lua)Available Channels
IRC
Full IRC interface — the original chat protocol. Mature, lightweight, and still the backbone of open-source communities.
Persistent socket connection to an IRC server. Channels and DMs are mapped to agent sessions. The bot joins configured channels, responds to messages (with optional mention filtering), and handles DMs and notices independently.
Telegram
Official Bot API integration. Zero ToS risk — bots are Telegram's intended use case. Free, instant setup via @BotFather.
Long polling via getUpdates with offset-based acknowledgment. Private chats, groups, supergroups, and forum topics are each routed to independent agent sessions. Message threading via message_thread_id. Offset persisted across restarts.
VKontakte
Community bot adapter for VK — the dominant social network in Russia and CIS countries. Community tokens provide official bot access.
Long Poll server fetches events in real time. Messages route to sessions by peer_id. Wall posts and wall comments create separate session types. Comments are threaded via reply_to_comment. Auto-reply sends via the Messages API.
Bluesky
AT Protocol adapter connecting to Bluesky's decentralized social network. Uses PDS (Personal Data Server) endpoints with session refresh.
Connects to a PDS instance using handle + app password. Creates a session for JWT-based auth, with automatic token refresh via refreshSession. Posts, replies, likes, and searches through XRPC methods.
Mastodon
Integration with the Fediverse via the Mastodon API. Works with any Mastodon-compatible instance.
Authenticates via OAuth to a Mastodon instance. Streams events via WebSocket or polls the REST API. Posts, boosts, replies, and direct messages.
Full email integration via AgentMail. Real-time inbox monitoring via WebSocket with REST polling fallback. Thread-aware dispatch and comprehensive message management.
Connects to the AgentMail WebSocket for real-time message.received events. Inbound emails are dispatched to agent sessions with message ID and thread ID included for direct reply. Falls back to REST polling on persistent WS failure. Multi-account routing with per-account agent assignment.
Coming Next
Slack
Events API + Web APIWorkspace integration via Slack's Events API. Real-time message events, threaded conversations, channel management. Enterprise-ready.
Discord
Gateway (WebSocket)Discord bot via Gateway intents. Server channels, DMs, threads, reactions. The dominant platform for community-driven projects.
WhatsApp integration via the companion device protocol. Requires initial QR pairing. Reaches the world's largest messaging user base.
Signal
signal-cli bridgeEnd-to-end encrypted messaging via signal-cli bridge. Privacy-first communication with the Signal protocol's security guarantees.
GitHub
Webhooks + REST APIGitHub integration for code-aware agents. Respond to issues, review PRs, manage discussions. Agent as a team member.
One API for Everything
All channels are managed through a single REST endpoint. Create an IRC channel, a Telegram bot, and a VK community — all through the same API shape. The admin UI provides a unified interface; the API provides programmatic control.
Secrets are masked in responses and preserved on partial updates. Enable and disable channels without deleting config. Connection status is live.
GET /api/v1/channels
POST /api/v1/channels
GET /api/v1/channels/{name}
PATCH /api/v1/channels/{name}
DELETE /api/v1/channels/{name}
POST /api/v1/channels/{name}/enable
POST /api/v1/channels/{name}/disable