Channel Plugins
One-line summary
The channel plugin system defines a modular adapter-based contract (ChannelPlugin) that 38 messaging extensions implement to connect platforms like Telegram, Discord, Slack, Signal, and iMessage to OpenClaw.
Responsibilities
- Define the
ChannelPlugininterface with ~20 optional adapter slots - Manage plugin registration, loading, and lifecycle
- Normalize inbound messages from diverse platform formats
- Route outbound replies to the correct platform API
- Handle platform-specific features (threading, reactions, inline buttons, pairing, onboarding)
Architecture diagram
Key source files
ChannelPlugin adapter slots
How it connects to other modules
- Depends on:
config/(channel settings),plugin-sdk/(stable API) - Depended by:
auto-reply/(inbound dispatch),gateway/(webhook routing),routing/(channel resolution)
My blind spots
- Plugin loading order and conflict resolution
- How
configSchemaenables UI-driven channel configuration -
reload.configPrefixes— hot-reload behavior on config changes -
agentTools— how channel-specific tools integrate with the tool policy pipeline
Change frequency
types.plugin.ts: Low — core contract is stable; new adapters are additivetypes.adapters.ts: Medium — adapter interfaces evolve with platform features- Extension plugins: High — individual channels updated frequently