user_id.
Available interfaces
Two categories. Chat surfaces meet humans where they already are. Protocol surfaces are how other systems talk to your agent.Chat surfaces
Protocol surfaces
Setup
Each interface registers its own routes on the FastAPI app. Slack lands events at/slack/events. Telegram at /telegram/webhook. The agent=... parameter tells the interface which agent to dispatch incoming messages to.
Credentials at a glance
Per-interface setup pages have the full OAuth flows, scope lists, and webhook configuration. The summary:Sessions per surface
Every interface maps surface state to AgentOS sessions, so a conversation in Slack carries forward like any other session. The next reply in the same thread reuses the same session and history, no re-mentioning required.Resolving Slack user IDs
By default Slack hands you opaque user IDs likeU07ABCXYZ. Set resolve_user_identity=True to use the member’s email as user_id when Slack provides one:
users.info, uses the returned email as user_id, and adds the display name to run metadata. It falls back to the Slack user ID when no email is available. This option is off by default and adds a Slack API call per message.
One agent, many surfaces
A single agent can answer on every surface at once. Memory follows the user across surfaces, provided you can map their Slack ID to the sameuser_id the AG-UI client passes:
session_id, and interfaces pass surface context along with the run, like the Slack channel name.
Conditional registration
Don’t register interfaces you don’t have credentials for:Custom interfaces and one-off webhooks
The interface API is small. SubclassBaseInterface, return your routes from get_router, and dispatch incoming messages to the agent. See BaseInterface for the full surface.
For one-off webhooks (a CRM event, a GitHub action, a custom dashboard), don’t write an interface. Add a route directly to the FastAPI app: