Source of truth:
crates/config/src/lib.rs(tui.notify,external_notify)crates/tui/src/input.rs(/notifycommand handling)crates/core/src/notify.rscrates/core/src/agent/mod.rs(teammate idle mailbox notifications)
There are three distinct notification channels:
- TUI local notifications (
[tui.notify]) - External webhook-style notifications (
[external_notify]) - Internal team mailbox idle notifications
[tui.notify]:
bell(defaulttrue)desktop(defaultfalse)min_duration_ms(default5000)
TUI slash support:
/notify/notify bell on|off/notify desktop on|off/notify duration <ms>
Config keys:
external_notify.webhook_urlexternal_notify.telegram_bot_tokenexternal_notify.telegram_chat_idexternal_notify.discord_webhook_urlexternal_notify.slack_webhook_url
Core notify module (crates/core/src/notify.rs) includes sender implementations for:
- generic webhook JSON payload
- Telegram bot API
- Discord webhook
- Slack webhook
When a non-lead teammate completes a turn, agent runtime can send an idle notification message to the team lead inbox (MessageType::IdleNotification).
This is team mailbox signaling, not desktop/webhook notification.
- enable
desktopnotifications only for long-running tasks - tune
min_duration_msto avoid noisy short-turn alerts - store webhook credentials in private config or environment, not in repository files
- for team workflows, monitor inbox with
read_inboxand/teams-config