Skip to main content
Version: Next

Overview

Agent Kernel provides various built in integrations to connect your AI agents with external platforms and services. These integrations allow you to deploy your agents in real-world environments and interact with users through different channels.

Execution Hooks​

Agent Kernel provides powerful execution hooks that let you customize agent behavior at runtime.

Observability & Monitoring​

  • Langfuse - Open-source LLM engineering platform for tracing, evaluating, and monitoring AI applications. See Traceability and Observability for detailed setup and usage.
  • OpenLLMetry (Traceloop) - OpenTelemetry-based observability for LLM applications with support for multiple backends including Traceloop, Datadog, New Relic, and Honeycomb. See Traceability and Observability for detailed setup and usage.
  • AWS CloudWatch - OpenTelemetry traces exported to AWS X-Ray and searchable in CloudWatch Transaction Search. See Traceability and Observability for detailed setup and usage.

Realtime voice​

  • LiveKit - Connect OpenAI Agents SDK and Google ADK agents to LiveKit WebRTC rooms with execution.mode: realtime. A stateful LiveKitEdgeGateway, hosted by GatewayRunner, receives user audio and text and delivers the model's streamed voice and transcript back to the room.

Social media​

These are built on REST APIs and you can install custom integrations as well.

Built-in​

The following built-in integrations are available.

  • Slack - Deploy agents as Slack bots that can respond to mentions and direct messages in Slack workspaces
  • WhatsApp - Deploy agents as WhatsApp bots
  • Messenger - Deploy agents as FB Messenger bots
  • Instagram - Deploy agents as Instagram DM bots
  • Telegram - Deploy agents as Telegram bots
  • Gmail - Deploy agents as Gmail bots that automatically read and reply to emails
  • Microsoft Teams - Deploy agents as Microsoft Teams bots via Azure Bot Framework, supporting 1:1 chats, group chats, and channels
  • AG-UI - Serve agents over the AG-UI protocol to a custom frontend: streamed events for the answer, reasoning and tool calls, plus a shared state object the UI and the agent both read and write. Unlike the entries above this is not a hosted chat platform — it is a protocol your own UI speaks

How a messaging integration works​

Every messaging integration is an adapter pair with the execution queue between them, so the agent never runs inside the webhook turn: a slow model call can no longer exceed the platform's delivery timeout and make it redeliver the message.

  • The inbound adapter verifies the delivery, normalizes it (resolving the session and the platform's own message id at the edge), stores any attachments, and enqueues.
  • The agent runner executes it, knowing nothing about the platform.
  • The outbound adapter delivers the reply through the platform's API.

Mount an integration with IOHandler.run(...), which starts the queue topology alongside the webhook routes. RESTAPI.run([...]) builds a bare API with no runner behind it, so it rejects an integration handler rather than silently accepting messages nothing will answer.

On AWS Lambda, wrap the same handler in a LambdaWebhookHost and register its handle with Lambda.register in the request-handler Lambda; the serverless agent runner and response handler carry the reply back to the platform. See Messaging integrations on AWS Lambda for the Terraform routes, the authorizer bypass and the REST-modes-only limit.

Bring your own delivery for any platform by pointing its outbound_adapter setting at a dotted path to your own OutboundAdapter subclass; bring your own parsing by passing your own InboundAdapter subclass to the handler.

Custom​

For REST API based 'custom integrations' you can implement RESTRequestHandler and pass it to the IOHandler.run(handlers=[...]) method alongside the messaging handlers.

from fastapi import APIRouter
from agentkernel.api import RESTRequestHandler
from agentkernel.integration.adapter import WebhookRESTRequestHandler
from agentkernel.pipeline import IOHandler
from agentkernel.slack import SlackInboundAdapter

class CustomHandler(RESTRequestHandler):
def get_router(self) -> APIRouter:
"""
- GET /health: Health check
- GET /api/v1/agents: List available agents
"""
router = APIRouter()

@router.get("/health")
def health():
return {"status": "ok"}

@router.get("/api/v1/agents")
def list_agents():
return {"agents": list(Runtime.instance().agents().keys())}

@router.get("/rag_agent")
def handle_rag(req: Request):
return self._handler(req)

def _handler(req):
# Do a vector search and return something

if __name__ == "__main__":
# Can pass multiple handlers
IOHandler.run(handlers=[WebhookRESTRequestHandler(SlackInboundAdapter()), CustomHandler()])

Ready to Ship Your
First Agent?

Free, open-source, Apache 2.0. No licensing costs, no vendor lock-in. Join hundreds of developers building production AI agents with Agent Kernel.

Agent Kernel
Ask Agent Kernel