OpenTag 具体展示了审批模式。每个 Linear 和 Notion 的变更都会在 MCP 请求运行前在代码中被拦截。拦截器会触发 confirm_write,并且只有在获得批准后才继续执行。读取和渲染不会暂停。
感谢 Copilotkit 团队为本文提供的思想领导力和资源。本文由 Copilotkit 赞助。
Asif Razzaq 是 Marktechpost Media Inc. 的首席执行官。作为一位有远见的企业家和工程师,Asif 致力于利用人工智能的潜力造福社会。他的最新努力是推出人工智能媒体平台 Marktechpost,该平台以深入报道机器学习和深度学习新闻而著称,内容既技术上可靠,又易于广泛受众理解。该平台每月浏览量超过 200 万次,显示了其受众的广泛欢迎。
[免费指南] 保障 AI 代理、MCP 服务器及 LLM 应用安全:https://pxllnk.co/lxn88m
CopilotKit:https://www.copilotkit.ai/ has just released the Channels SDK:https://github.com/CopilotKit/ChannelsSDK. It is an open source library that puts an existing agent inside a messaging platform. The core assumption is focused and verifiable. You already have an agent. It already has a model, tools and business logic. Channels gives it a place to work with people, without a rewrite per platform.
It runs on Slack and Microsoft Teams as early access surfaces. Discord and Google Chat are named as planned.
The connection to your agent is AG-UI:https://github.com/ag-ui-protocol/ag-ui, the agent-user interaction protocol CopilotKit maintains. Anything that speaks AG-UI works. That includes LangGraph, CrewAI, Mastra, Pydantic AI, Google ADK, and a plain HTTP agent you wrote yourself. Your model and orchestration layer stay where they are.
The distinction that matters is what a channel is not . It is not a second agent. It is a transport along with a rendering target. You write a message once, and the adapter lowers it into each platform’s native format. That means Block Kit in Slack and Adaptive Cards in Teams. Not a text blob pushed through a webhook.
Yes. The SDK is published, MIT licensed, and has a documented runtime contract.
Here is the single path for every turn:
The split of responsibility follows from that. You run your agent, model credentials, tools and business logic. You run the long-running Channels listener, plus application state, deployment and logs. Intelligence manages the Slack and Teams platform credentials. It also owns platform ingress, credentialed delivery, runtime registration, health and reconnects.
Rendering is worth one more sentence. Messages are authored as JSX and lowered to a serializable intermediate representation. The adapter translates that into the platform's native format, and interactive handlers are bound through an action store.
The lifecycle is the part worth understanding. There is no channel.start(). The runtime owns activation.
Creating the listener starts the channel connection. Awaiting channels.ready() makes a broken configuration fail startup loudly instead of silently. channels.status() returns an overall state you can gate on, and channels.stop() tears the channel down for graceful shutdown.
The runtime exposes listeners for Node, Hono and Express through the @copilotkit/runtime/v2/* subpaths.
createChannel takes more than a name and an agent. The shipped options include tools, context, components, commands, store, sanitizeAgentEvents, showToolStatus and replyContinuation. Registering named JSX components is what lets a channel re-render and re-fire handlers after a restart. Without registration, a click on a message posted before the restart degrades to an expired action.
The feature set targets work that happens in a thread, not chat for its own sake.
OpenTag demonstrates the approval pattern concretely. Every Linear and Notion mutation is intercepted in code before the MCP request runs. The interceptor emits a confirm_write and proceeds only after approval. Reads and rendering do not pause.
Thanks to the Copilotkit team for the thought leadership / resources for this article. This article is sponsored by Copilokit.
Asif Razzaq is the CEO of Marktechpost Media Inc.. As a visionary entrepreneur and engineer, Asif is committed to harnessing the potential of Artificial Intelligence for social good. His most recent endeavor is the launch of an Artificial Intelligence Media Platform, Marktechpost, which stands out for its in-depth coverage of machine learning and deep learning news that is both technically sound and easily understandable by a wide audience. The platform boasts of over 2 million monthly views, illustrating its popularity among audiences.