allowBots. When that path is enabled, pair loop protection prevents two bot identities from replying to each other indefinitely.
The guard is enforced by the core inbound reply runner. Each supporting channel maps its inbound event into generic facts: account or scope, conversation id, sender bot id, and receiver bot id. Core tracks the participant pair in both directions (A to B and B to A count as the same pair), applies a sliding-window budget, and suppresses the pair during a cooldown after the budget is exceeded.
Defaults
Pair loop protection is active whenever a channel lets bot-authored messages reach dispatch. Built-in defaults:
The guard does not affect human-authored messages, single-bot deployments, self-message filtering, or bot replies that stay under the budget.
Configure shared defaults
Setchannels.defaults.botLoopProtection once to give every supporting channel the same baseline. Channels may also expose narrower overrides; Feishu intentionally uses only this shared baseline.
enabled: false only when your channel policy intentionally allows bot-to-bot conversations without automatic suppression.
Override per channel, account, or room
Supporting channels layer their own config over the shared default, key by key. Precedence, narrowest first:channels.<channel>.<room-or-space>.botLoopProtection, when the channel supports per-conversation overrideschannels.<channel>.accounts.<account>.botLoopProtection, when the channel supports accountschannels.<channel>.botLoopProtection, when the channel supports top-level defaultschannels.defaults.botLoopProtection- built-in defaults
Channel support
- Discord: native
author.botfacts, keyed by Discord account, channel, and bot pair. - Feishu: native
sender_type=botfacts for admitted bot-authored group messages, keyed by Feishu account, chat, and bot pair. Feishu uses onlychannels.defaults.botLoopProtection. - Google Chat: native
sender.type=BOTfacts for accepted bot-authored messages, keyed by account, space, and bot pair. - Matrix: configured Matrix bot accounts, keyed by Matrix account, room, and configured bot pair.
- Slack: native
bot_idfacts for accepted bot-authored messages, keyed by Slack account, channel, and bot pair.