CopilotKit Open Sources Channels SDK: An MIT Licensed Library That Runs Any AG-UI Agent Inside Slack And Microsoft Teams
MarkTechPost Asif Razzaq
CopilotKit released Channels, an MIT-licensed SDK that runs your agent inside Slack or Teams. No rewrite — any AG-UI agent just plugs in, renders native UI.
Based on reporting by MarkTechPost, Asif Razzaq — read the original for the full story.
Summary, retelling and take written by AI under human oversight; images are AI-generated illustrations. How we work · Report an error
CopilotKit isn't asking anyone to build a new agent. That's the whole pitch behind Channels, a freshly open-sourced SDK that takes an agent you already have — model, tools, business logic and all — and gives it a door into Slack and Microsoft Teams. Discord and Google Chat are named as next up, with Telegram and WhatsApp adapters also listed as upcoming in the package. The idea is narrow on purpose: stop rebuilding the same agent for every chat surface it needs to live in.
Getting it running is two npm installs, @copilotkit/channels and @copilotkit/runtime. The actual wiring happens through AG-UI, the agent-user interaction protocol CopilotKit already maintains, so anything that speaks it can plug straight in — LangGraph, CrewAI, Mastra, Pydantic AI, Google ADK, or a plain HTTP agent someone hand-rolled. Your orchestration layer doesn't move. Channels just gives it a mailbox.
What's important is what a channel deliberately isn't: a second agent, or a webhook dumping raw text into a chat window. You write a message once as JSX, it gets lowered into a serializable intermediate form, and the adapter renders it as Block Kit in Slack or Adaptive Cards in Teams. When someone messages your app, CopilotKit Intelligence catches the platform event and hands it to your Channels process, which runs the agent over AG-UI, fires any tools, and sends the rendered result back through Intelligence into the conversation. Everything platform-specific — credentials, ingress, reconnects, health checks — sits on the Intelligence side. Your side owns the agent, the long-running listener, application state and logs.
The runtime contract is stricter than it looks. There's no channel.start() — the runtime activates the channel when the listener spins up, and calling channels.ready() with a timeout makes a bad config fail loudly at boot instead of quietly later. channels.status() gives you something to gate on, channels.stop() handles shutdown, and the whole thing runs through Node, Hono or Express listeners. Registering named JSX components matters more than it sounds: without it, a button someone clicks on a message posted before a restart just comes back as an expired action.
Inside a channel, the agent can do more than answer questions in a thread. It can render actual interface elements when the moment calls for it, pause for a human to approve before doing anything risky, call tools to file an issue or book a meeting, and carry a persisted transcript across platforms. OpenTag's setup is the clearest example given: every Linear and Notion write gets intercepted before the MCP request fires, and a confirm_write step has to clear before anything actually mutates. Reads keep flowing without interruption.
Right now @copilotkit/channels sits at version 0.5.0 on npm under MIT. Slack is generally available as a managed provider, while Teams is early access and still carries a gating note in the shipped types. Running any of it requires Node.js 22 or newer, an ESM project, and a process that stays alive — serverless deployments won't hold the connection open.
My take — AI-written commentary, not fact-checked reporting
The approval-gate pattern around Linear and Notion writes is the smartest part of this release — pausing on anything destructive while letting reads flow freely is exactly the kind of default agent frameworks should ship with, not bolt on later. The catch nobody should skip past is that every channel, managed or self-hosted, needs a CopilotKit Intelligence API key to function, which means the
Read more about this at: MarkTechPost