OpenTag 深度解析:开源版「Slack 里的 Claude」——CopilotKit 的多平台 Agent 框架
OpenTag 深度解析:开源版「Slack 里的 Claude」
2026 年 6 月 26 日,CopilotKit 在 GitHub 上发布了 OpenTag。三天后 299 Star、38 Fork、MIT 许可证。它的定位非常直白:
An open-source alternative to Claude in Slack.
翻译过来就是:你自己跑一个 AI Agent 在 Slack 里——它读线程、回答问题、调用你的工具、在对话中渲染富文本结果。开源、自托管、自带模型、自接工具。没有按席位定价,没有厂商锁定。
OpenTag 是什么
OpenTag 不是一个独立产品——它是 CopilotKit 生态中的一个参考实现。它展示了如何用 @copilotkit/bot SDK 在 30 分钟内搭出一个多平台 AI Agent。
核心能力:
- 在 Slack 线程中被 @提及后自动响应
- 读取整个线程上下文,理解对话
- 调用 Linear 查询/创建 Issue,调用 Notion 搜索/创建文档
- 在对话中渲染图表(Chart.js)、流程图(Mermaid)、表格
- 人机协作审批:任何写操作(创建 Issue、写文档)都需要人工点击确认
- 同一套代码跑在 Slack、Discord、Telegram、WhatsApp 上
架构:三个进程,一套代码
OpenTag 的架构极其精简——三个进程,全部 TypeScript:
Slack / Discord / Telegram / WhatsApp ──@mention──▶ bot (app/) ──AG-UI──▶ runtime (runtime.ts)
│ BuiltInAgent (LLM)
├── Linear MCP (hosted)
└── Notion MCP (sidecar)
| 进程 | 文件 | 职责 |
|---|---|---|
| Bot | app/index.ts |
多平台适配器、工具注册、渲染组件、审批门控 |
| Agent | runtime.ts |
LLM 后端,一个 BuiltInAgent,通过 AG-UI 协议暴露 |
| Notion MCP | 独立 sidecar | 官方 @notionhq/notion-mcp-server 的 Streamable-HTTP 包装 |
关键设计决策:
- Agent 后端只有几十行 TypeScript。没有 Python,没有 LangGraph,没有 A2UI 中间件。就是一个
CopilotSseRuntime+BuiltInAgent。 - Bot 和 Agent 通过 AG-UI 协议通信。AG-UI 是 CopilotKit 的 Agent-UI 协议,定义了 Agent 如何向前端暴露工具、状态和流式输出。
- MCP 连接是容错的。每个 MCP 服务器有 8 秒连接超时,连接失败不会中断整个 turn——Agent 用剩余可用的工具继续工作。
多平台适配:一套 app/ 代码跑四个平台
这是 OpenTag 最优雅的设计。createBot 接受一个平台适配器数组,每个适配器只在对应密钥存在时才激活:
const adapters: PlatformAdapter[] = [];
if (have("SLACK_BOT_TOKEN", "SLACK_APP_TOKEN")) {
adapters.push(slack({ botToken, appToken, ... }));
}
if (have("DISCORD_BOT_TOKEN", "DISCORD_APP_ID")) {
adapters.push(discord({ botToken, appId, ... }));
}
if (have("TELEGRAM_BOT_TOKEN")) {
adapters.push(telegram({ token, ... }));
}
if (have("WHATSAPP_ACCESS_TOKEN", ...)) {
adapters.push(whatsapp({ ... }));
}
每个适配器贡献自己的内置工具(如 lookup_slack_user)和上下文(标记和格式化指南),只在对应平台激活时才注入——模型不会拿到其他平台的约定。
所有其他代码——工具、组件、审批门控、渲染——是平台无关的,四个平台共享。
Generative UI:在聊天里渲染图表和表格
OpenTag 不只是返回文本。它能在 Slack 消息中直接渲染:
- 图表:
render_chart工具接收 Chart.js 配置对象,用 Playwright 在本地无头浏览器中渲染为 PNG - 流程图:
render_diagram工具接收 Mermaid 源码,渲染为图片 - 表格:
render_table工具渲染 Slack 原生表格 - Issue 卡片:
issue_card组件渲染 Linear Issue 的富文本卡片 - Notion 页面卡片:Notion 页面以结构化卡片展示
关键安全设计:图表渲染在本地无头浏览器中进行——数据不会发送到任何渲染服务。
人机协作审批:写操作必须确认
OpenTag 实现了一个阻塞式的 confirm_write 门控:
Agent 决定创建 Linear Issue
│
▼
调用 confirm_write 工具
│
▼
Slack 消息中出现 [Create] [Cancel] 按钮
│
▼
用户点击 Create → Agent 执行写操作
用户点击 Cancel → 操作取消
这个设计的意义在于:Agent 可以提议,但写操作的最终决定权在人。这是生产级 Agent 系统的关键安全模式。
斜杠命令
OpenTag 注册了四个应用级斜杠命令:
| 命令 | 功能 |
|---|---|
/agent <text> |
免 @提及的入口,直接用文本运行 Agent |
/triage [note] |
总结对话并提议要提交的 Issue |
/preview <title> |
私下预览 Agent 将要提交的 Issue(仅自己可见) |
/file-issue |
打开结构化 Issue 表单模态框 |
与 Claude in Slack 的对比
| 维度 | OpenTag | Claude in Slack |
|---|---|---|
| 开源 | ✅ MIT | ❌ 闭源 |
| 自托管 | ✅ 完全自托管 | ❌ Anthropic 云端 |
| 模型选择 | ✅ 自带模型(OpenAI/Anthropic/Google) | ❌ 仅 Claude |
| 工具集成 | ✅ Linear + Notion + 自定义 MCP | ❌ 有限 |
| 多平台 | ✅ Slack/Discord/Telegram/WhatsApp | ❌ 仅 Slack |
| Generative UI | ✅ 图表/流程图/表格/卡片 | ❌ 仅文本 |
| 人机协作审批 | ✅ 内置 confirm_write | ❌ 无 |
| 定价 | 免费(自托管成本) | 按席位付费 |
| 运维负担 | 需要自己部署和维护 | 零运维 |
多维度评分
| 维度 | 评分 | 说明 |
|---|---|---|
| 架构设计 | 9/10 | 多平台适配器模式优雅,AG-UI 协议解耦清晰,MCP 容错设计成熟 |
| 代码质量 | 8/10 | 代码量极少(几十行 runtime + 几百行 app),类型安全,有单元测试 |
| 创新性 | 7/10 | Generative UI + 人机协作审批是亮点,但整体模式不新 |
| 实用性 | 8/10 | 开箱即用的 Linear/Notion 集成,多平台支持,真实可部署 |
| 可扩展性 | 9/10 | 复制 app/ 目录即可创建新 Bot,MCP 工具可任意扩展 |
| 成熟度 | 6/10 | 部分 bot SDK 包尚未发布到 npm,需从 monorepo 运行 |
总评:8/10。OpenTag 是目前开源 Slack Agent 中最完整、最优雅的实现。它不是学术 demo——它有真实的多平台支持、Generative UI、人机协作审批、MCP 工具集成。如果你需要一个能在 Slack 里干活的 AI Agent,OpenTag 是目前最好的开源起点。
局限与风险
- npm 包未就绪:
@copilotkit/bot-telegram、-whatsapp、-store-redis尚未发布到 npm,目前必须从 CopilotKit monorepo 运行。 - 依赖 CopilotKit 生态:OpenTag 深度绑定 CopilotKit 的 SDK 和 AG-UI 协议。如果 CopilotKit 转向或停维,迁移成本高。
- 无持久化默认配置:默认使用内存存储,重启后审批状态丢失。需要额外配置 Redis。
- Slack 限制:Slack 的 Block Kit 对富文本渲染有限制,复杂 UI 可能被截断。
结论
OpenTag 是 CopilotKit 生态的一块重要拼图。它证明了:一个生产级的 Slack Agent 不需要 Python、不需要 LangGraph、不需要微服务架构——几十行 TypeScript 就够了。
它的真正价值不在于代码本身(代码量极少),而在于它展示的架构模式:
- 多平台适配器模式:一套业务逻辑,多个平台适配器,按密钥存在与否自动激活
- AG-UI 协议解耦:Bot 和 Agent 通过标准协议通信,可独立部署和扩展
- MCP 工具集成:Linear 和 Notion 通过 MCP 接入,工具发现和调用完全标准化
- 人机协作审批:写操作必须经过人工确认——这是生产级 Agent 的安全基线
我们的建议:如果你需要在 Slack/Discord 中部署 AI Agent,直接从 OpenTag 开始。复制 app/ 目录,修改 runtime.ts 中的系统提示词,接入你自己的 MCP 工具——30 分钟内你就能有一个跑在自己基础设施上的多平台 Agent。