pub struct ChannelsConfig {Show 35 fields
pub cli: bool,
pub telegram: Option<TelegramConfig>,
pub discord: Option<DiscordConfig>,
pub discord_history: Option<DiscordHistoryConfig>,
pub slack: Option<SlackConfig>,
pub mattermost: Option<MattermostConfig>,
pub webhook: Option<WebhookConfig>,
pub imessage: Option<IMessageConfig>,
pub matrix: Option<MatrixConfig>,
pub signal: Option<SignalConfig>,
pub whatsapp: Option<WhatsAppConfig>,
pub linq: Option<LinqConfig>,
pub wati: Option<WatiConfig>,
pub nextcloud_talk: Option<NextcloudTalkConfig>,
pub email: Option<EmailConfig>,
pub gmail_push: Option<GmailPushConfig>,
pub irc: Option<IrcConfig>,
pub lark: Option<LarkConfig>,
pub feishu: Option<FeishuConfig>,
pub dingtalk: Option<DingTalkConfig>,
pub wecom: Option<WeComConfig>,
pub qq: Option<QQConfig>,
pub twitter: Option<TwitterConfig>,
pub mochat: Option<MochatConfig>,
pub clawdtalk: Option<ClawdTalkConfig>,
pub reddit: Option<RedditConfig>,
pub bluesky: Option<BlueskyConfig>,
pub voice_call: Option<VoiceCallConfig>,
pub message_timeout_secs: u64,
pub ack_reactions: bool,
pub show_tool_calls: bool,
pub session_persistence: bool,
pub session_backend: String,
pub session_ttl_hours: u32,
pub debounce_ms: u64,
}Expand description
Top-level channel configurations ([channels_config] section).
Each channel sub-section (e.g. telegram, discord) is optional;
setting it to Some(...) enables that channel.
Fields§
§cli: boolEnable the CLI interactive channel. Default: true.
telegram: Option<TelegramConfig>Telegram bot channel configuration.
discord: Option<DiscordConfig>Discord bot channel configuration.
discord_history: Option<DiscordHistoryConfig>Discord history channel — logs ALL messages and forwards @mentions to agent.
slack: Option<SlackConfig>Slack bot channel configuration.
mattermost: Option<MattermostConfig>Mattermost bot channel configuration.
webhook: Option<WebhookConfig>Webhook channel configuration.
imessage: Option<IMessageConfig>iMessage channel configuration (macOS only).
matrix: Option<MatrixConfig>Matrix channel configuration.
signal: Option<SignalConfig>Signal channel configuration.
whatsapp: Option<WhatsAppConfig>WhatsApp channel configuration (Cloud API or Web mode).
linq: Option<LinqConfig>Linq Partner API channel configuration.
wati: Option<WatiConfig>WATI WhatsApp Business API channel configuration.
nextcloud_talk: Option<NextcloudTalkConfig>Nextcloud Talk bot channel configuration.
email: Option<EmailConfig>Email channel configuration.
gmail_push: Option<GmailPushConfig>Gmail Pub/Sub push notification channel configuration.
irc: Option<IrcConfig>IRC channel configuration.
lark: Option<LarkConfig>Lark channel configuration.
feishu: Option<FeishuConfig>Feishu channel configuration.
dingtalk: Option<DingTalkConfig>DingTalk channel configuration.
wecom: Option<WeComConfig>WeCom (WeChat Enterprise) Bot Webhook channel configuration.
qq: Option<QQConfig>QQ Official Bot channel configuration.
twitter: Option<TwitterConfig>X/Twitter channel configuration.
mochat: Option<MochatConfig>Mochat customer service channel configuration.
clawdtalk: Option<ClawdTalkConfig>ClawdTalk voice channel configuration.
reddit: Option<RedditConfig>Reddit channel configuration (OAuth2 bot).
bluesky: Option<BlueskyConfig>Bluesky channel configuration (AT Protocol).
voice_call: Option<VoiceCallConfig>Voice call channel configuration (Twilio/Telnyx/Plivo).
message_timeout_secs: u64Base timeout in seconds for processing a single channel message (LLM + tools). Runtime uses this as a per-turn budget that scales with tool-loop depth (up to 4x, capped) so one slow/retried model call does not consume the entire conversation budget. Default: 300s for on-device LLMs (Ollama) which are slower than cloud APIs.
ack_reactions: boolWhether to add acknowledgement reactions (👀 on receipt, ✅/⚠️ on
completion) to incoming channel messages. Default: true.
show_tool_calls: boolWhether to send tool-call notification messages (e.g. 🔧 web_search_tool: …)
to channel users. When false, tool calls are still logged server-side but
not forwarded as individual channel messages. Default: false.
session_persistence: boolPersist channel conversation history to JSONL files so sessions survive
daemon restarts. Files are stored in {workspace}/sessions/. Default: true.
session_backend: StringSession persistence backend: "jsonl" (legacy) or "sqlite" (new default).
SQLite provides FTS5 search, metadata tracking, and TTL cleanup.
session_ttl_hours: u32Auto-archive stale sessions older than this many hours. 0 disables. Default: 0.
debounce_ms: u64Inbound message debounce window in milliseconds. When a sender fires
multiple messages within this window, they are accumulated and dispatched
as a single concatenated message. 0 disables debouncing. Default: 0.
Implementations§
Source§impl ChannelsConfig
impl ChannelsConfig
Sourcepub fn channels_except_webhook(&self) -> Vec<(Box<dyn ConfigHandle>, bool)>
pub fn channels_except_webhook(&self) -> Vec<(Box<dyn ConfigHandle>, bool)>
get channels’ metadata and .is_some(), except webhook
pub fn channels(&self) -> Vec<(Box<dyn ConfigHandle>, bool)>
Trait Implementations§
Source§impl Clone for ChannelsConfig
impl Clone for ChannelsConfig
Source§fn clone(&self) -> ChannelsConfig
fn clone(&self) -> ChannelsConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ChannelsConfig
impl Debug for ChannelsConfig
Source§impl Default for ChannelsConfig
impl Default for ChannelsConfig
Source§impl<'de> Deserialize<'de> for ChannelsConfig
impl<'de> Deserialize<'de> for ChannelsConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for ChannelsConfig
impl JsonSchema for ChannelsConfig
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreAuto Trait Implementations§
impl Freeze for ChannelsConfig
impl RefUnwindSafe for ChannelsConfig
impl Send for ChannelsConfig
impl Sync for ChannelsConfig
impl Unpin for ChannelsConfig
impl UnsafeUnpin for ChannelsConfig
impl UnwindSafe for ChannelsConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more