Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.agno.com/llms.txt

Use this file to discover all available pages before exploring further.

Interfaces plug your agent into Slack, Telegram, WhatsApp, and browser clients.
from agno.os import AgentOS
from agno.os.interfaces.slack import Slack
from agno.os.interfaces.telegram import Telegram

agent_os = AgentOS(
    agents=[agent],
    db=db,
    interfaces=[
        Slack(agent=agent, token="xoxb-...", signing_secret="..."),
        Telegram(agent=agent, token="bot-token"),
    ],
)

Available surfaces

InterfaceUse case
SlackTeam chat, DMs, channel mentions, thread sessions
TelegramPersonal assistants, mobile chat
WhatsAppCustomer support, mobile chat
AG-UIBrowser clients consuming SSE streams
A2AOther agents calling yours over a standard protocol

Sessions carry across surfaces

Each interface maps surface state onto AgentOS sessions, so a conversation continues without the user re-mentioning the bot.
Interfacesession_iduser_id
SlackThread timestampSlack user ID
TelegramChat IDTelegram user ID
WhatsAppPhone numberPhone number
AG-UIBrowser sessionJWT subject
Map a user’s Slack ID to the same user_id your browser widget passes and memory follows them between surfaces. The agent only ever sees a user_id, a session_id, and a message. It does not know which surface a request came from.

One agent, every surface

agent_os = AgentOS(
    agents=[support_agent],
    db=db,
    interfaces=[
        Slack(agent=support_agent, token=..., signing_secret=...),
        Telegram(agent=support_agent, token=...),
        Whatsapp(agent=support_agent, token=..., verify_token=...),
        AGUI(agent=support_agent),
    ],
)

Conditional registration

Register only the interfaces you have credentials for, so a dev run without secrets does not crash.
interfaces = []

if SLACK_TOKEN and SLACK_SIGNING_SECRET:
    interfaces.append(Slack(agent=agent, token=SLACK_TOKEN, signing_secret=SLACK_SIGNING_SECRET))

if TELEGRAM_TOKEN:
    interfaces.append(Telegram(agent=agent, token=TELEGRAM_TOKEN))

agent_os = AgentOS(agents=[agent], db=db, interfaces=interfaces)

Resolving Slack names

Slack hands you opaque IDs like U07ABCXYZ. Set resolve_user_identity=True on the Slack interface and it resolves IDs to names before the agent sees them. Off by default because it costs an extra Slack API call per message.

One-off webhooks

For a one-off integration, a custom FastAPI route that calls the agent is enough. See Serve as an API.

Next steps

TaskGuide
Keep memory coherent per userSessions and memory

Developer Resources