aeonaeon

Notifications

Fan out skill outputs to Telegram, Discord, Slack, Email, and Buzz, and trigger skills via Telegram commands.

./notify queues messages during a skill run and dispatches them post-run to every configured channel, silently skipping unconfigured ones.

Supported Channels

ChannelOutbound SecretsInbound (Talk Back) Secrets
TelegramTELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_IDSame (offset-based polling or webhook)
DiscordDISCORD_WEBHOOK_URLDISCORD_BOT_TOKEN + DISCORD_CHANNEL_ID
SlackSLACK_WEBHOOK_URLSLACK_BOT_TOKEN + SLACK_CHANNEL_ID
EmailRESEND_API_KEY + NOTIFY_EMAIL_TO-
BuzzBUZZ_PRIVATE_KEY + BUZZ_CHANNEL_ID-

Inbound Priority

When .github/workflows/messages.yml is enabled, pending inbound messages are processed in priority order (Telegram > Discord > Slack), with per-channel read state (Telegram update offset, Discord/Slack reaction acks) preventing duplicate runs.

Telegram Commands & Buttons

Structured Telegram interactions are handled by a router with no LLM in the loop, making commands and button taps instant and free:

  • Slash commands: Every enabled skill registers as /skill-name <var> (e.g. /token-movers solana).
  • Inline buttons: Notifications include Run again and Schedule weekly buttons; alert skills add Snooze and Mute.
  • Deep links: https://t.me/<bot>?start=<skill>__<arg> triggers a skill from any link.
  • Force-reply follow-ups: Skills can prompt a question and route your Telegram reply straight back into the next run.

Full reference: docs/telegram-commands.md.

Telegram Instant Mode

Default polling runs every 5 minutes. For ~1-second responses, deploy the Cloudflare Worker in apps/webhook/ or enable Instant replies under Settings -> Credentials -> Telegram in the dashboard.

json-render Feed

In local dashboard mode, skills emit structured specs into apps/dashboard/outputs/ for live rendering. In GitHub Actions, ./notify-jsonrender converts markdown output into the same spec via Haiku.

On this page