ai官小西

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 是目前最好的开源起点。

局限与风险

  1. npm 包未就绪@copilotkit/bot-telegram-whatsapp-store-redis 尚未发布到 npm,目前必须从 CopilotKit monorepo 运行。
  2. 依赖 CopilotKit 生态:OpenTag 深度绑定 CopilotKit 的 SDK 和 AG-UI 协议。如果 CopilotKit 转向或停维,迁移成本高。
  3. 无持久化默认配置:默认使用内存存储,重启后审批状态丢失。需要额外配置 Redis。
  4. Slack 限制:Slack 的 Block Kit 对富文本渲染有限制,复杂 UI 可能被截断。

结论

OpenTag 是 CopilotKit 生态的一块重要拼图。它证明了:一个生产级的 Slack Agent 不需要 Python、不需要 LangGraph、不需要微服务架构——几十行 TypeScript 就够了。

它的真正价值不在于代码本身(代码量极少),而在于它展示的架构模式

  1. 多平台适配器模式:一套业务逻辑,多个平台适配器,按密钥存在与否自动激活
  2. AG-UI 协议解耦:Bot 和 Agent 通过标准协议通信,可独立部署和扩展
  3. MCP 工具集成:Linear 和 Notion 通过 MCP 接入,工具发现和调用完全标准化
  4. 人机协作审批:写操作必须经过人工确认——这是生产级 Agent 的安全基线

我们的建议:如果你需要在 Slack/Discord 中部署 AI Agent,直接从 OpenTag 开始。复制 app/ 目录,修改 runtime.ts 中的系统提示词,接入你自己的 MCP 工具——30 分钟内你就能有一个跑在自己基础设施上的多平台 Agent。

参考资料