OpenDots:CopilotKit 官方开源的持久化 AI 同事,每人自带一台电脑
OpenDots:CopilotKit 官方开源的持久化 AI 同事,每人自带一台电脑
CopilotKit 最近出手很密。9 月中旬刚放出个人 Agent 模板 OpenMuse,9 月 29 日又上线了 OpenDots——一个把"AI 同事"具体化的开源模板:每个 Dot 是一个常驻的 AI 同事,有名字、有角色、有自己的电脑,能在网页、实时通话和 Slack 之间无缝流转。
项目地址:https://github.com/CopilotKit/OpenDots
数据说话:9 月 29 日创建仓库,两周多拿下 5070+ Star、712+ Fork,一度冲到 Trendshift 当日 TypeScript 排行榜第 2,最近一次提交就在 10 月 12 日。MIT 协议,TypeScript 写的,clone 下来就是一个能跑的自托管模板——不是概念 demo,是官方在持续迭代的代码库。
它想解决什么问题
现在大多数 Agent 产品是"你开一个聊天窗口,问一句、答一句,关掉就忘"。OpenDots 的想法反过来:Agent 应该是常驻的同事,而不是用完即走的对话框。
README 里那句 slogan 说得很直白——"Your always-on AI coworkers that move between text, calls, and Slack"。翻译过来就是:你有一群 7×24 在线的 AI 同事,早上在 Slack 里 @ 它派活,开会时切到实时语音接着聊,平时它自己在后台浏览网页、写文档、整理笔记,全部工作过程你都能看、能接管、能审批。
和 OpenMuse 一样,OpenDots 的定位是模板而非托管产品:应用你自己跑,基础设施你自己配,代码随便改。官方明确说了 "A template, not a hosted product"。区别在于,OpenMuse 偏向个人助理,OpenDots 偏向多同事协作 + 多入口(Web / 通话 / Slack)。
核心概念:Dot、Space 与电脑
OpenDots 把抽象拆成了几个很具体的物件:
| 概念 | 是什么 |
|---|---|
| Dot | 一个 AI 同事。有名字、角色、指令和允许使用的工具,可以配多个 |
| Space | 工作文档的家。可搜索库、grid/list 视图、嵌套子页、可视化编辑器 |
| Dot computer | 每个 Dot 专属的电脑。持久化浏览器 profile + 工作区文件,可停可启 |
| Connection | 挂载到某个 Dot 的 MCP 工具,比如邮件、日历、GitHub |
| Review card | 人在回路审批卡片。暂停会话,等你点 Approve 才继续 |
Spaces 是文档层。页面存在本地 workspace 数据库里,每个页面、每个专家都有独立的会话(走 CopilotKit Threads)。写文档可以直接手写,也可以把一段对话存成页面,或者让某个专家去创建和修改。自动保存会报告进度,保存失败会保留草稿,还有修订检查防止旧版本覆盖新内容——这些都是"当文档工具用"必须抠的细节。
Specialist Dots 是角色层。"研究员"负责调研一个主题,"写作者"负责把发现变成草稿。你可以查看它们的工作过程,控制它们能做什么。每个 Dot 的工具权限是单独设的,研究员不该有发邮件的权限,这个边界要能划清。
Dot computers 是执行层,也是这个项目最有意思的地方。每个 Dot 可以有自己的电脑,底层复用了同门项目 OpenBot 的容器监督器和 computer service。它的浏览器 profile 和工作区文件跨 stop/start 持久化,Computer 面板里能看到浏览器控制、人工接管、文件、终端输出和活动记录。凭据留在服务器上,每个 Dot 派生出各自不同的 computer 凭据。
三个值得展开的设计
1. 保存前先审批(Review before saving)
可以让 Dot 在保存前先把草稿给你看。这时会话会被一张 CopilotKit 人在回路卡片暂停,只有 Approve & save 或 Decline 两个选择。批准后才在授权的 Space 里创建页面并返回链接;用同一份草稿重试能找回那个页面,草稿改过了就得重新审批。
这个设计解决的是"AI 静默写坏文档"的经典问题——内容生成和内容落地被拆开,中间插一道人闸。
2. 连接器分级授权(Connections)
任何 MCP server 都能挂给某个 Dot。这里有个很克制的设计:只读工具直接跑,其它工具一律暂停,弹一张 Approve & run 卡片等你确认。而且每个工具可以按 Dot 单独开关。
换句话说,让 Agent"看"(读邮件、读日历、读 GitHub)不需要审批,让 Agent"动"(发邮件、改日历)每次都拦一下。这个分级策略比"全放行"或"全审批"都更贴近真实使用。
3. 文字与通话同一条会话(Text and calls)
连续会话顶部常驻 Dot 的头像和状态,工作更新、来源链接、通话回执都进 timeline。通话功能把实时语音和一个独立的 compute agent 配对——也就是说,你一边和它说话,它一边在后台干活的活,两边共享同一套对话上下文和工具权限。
通话界面有实时计时、双向字幕、麦克风/扬声器静音,还能最小化成小窗回到聊天。语音需要单独配置 provider。
至于 Slack,OpenDots 通过托管 Slack 连接(Channels SDK)让你在 Slack 里 @ 一个 Dot,然后在 thread 里继续对话。接入遵循同门的 OpenTag,带 workspace/user 白名单,只允许指派的专家。
架构拆解
OpenDots 的技术栈是 CopilotKit 自家的一整套组合拳:AG-UI 负责把流式消息、工具调用和 agent 状态在前后端之间搬运,TanStack AI 负责模型流式与服务端工具执行,CopilotKit React SDK + runtime 提供前端组件和运行时,Intelligence 做持久化 Threads,Channels SDK 接 Slack。页面、元数据和后台任务状态,与对话历史是分开存的。
flowchart TB Web["Web app: pages, Spaces, Dots, chat"] -->|AG-UI| Runtime[CopilotKit runtime] Slack[Slack] <--> Managed[Managed channel connection] Managed <--> Channels[Channels SDK] Channels --> Agents[Specialist compute agents] Runtime --> Agents Agents --> AI[TanStack AI] AI --> Provider[OpenAI-compatible model provider] Runtime <--> Intelligence["Intelligence / Threads"] Channels <--> Intelligence Web <--> Speech[Realtime speech] Speech --> Bridge[Compute bridge] Bridge --> Agents Agents --> Controls[Tool permissions] Controls --> Computer[Isolated browser / workspace] Agents --> Jobs[Background work] Runtime --> Metadata[(Pages, Spaces, Dots, work metadata)]
几个技术点值得留意:
- 协议:全程 AG-UI,这也是 CopilotKit 主推的 Agent-UI 交互协议,OpenDots 和 OpenMuse 一样是它的官方示范
- 存储分层:页面、元数据、thread bindings 走本地 SQLite,会话历史走配置的 Intelligence——没有独立的 SQLite 会话存储,这点在选型时要搞清楚
- 模型:任何 OpenAI 兼容的 provider 都能接,配
OPENAI_API_KEY和OPENAI_MODEL - 代码参考:OpenMuse 和 OpenBot 是持久化工作、agent 电脑和执行控制的现成参考,OpenDots 可以直接改造
快速上手
要求 Node.js 24 和 npm:
git clone https://github.com/CopilotKit/OpenDots.git
cd OpenDots
npm ci
cp .env.example .env
npm run dev打开 http://127.0.0.1:5173。不接任何服务也能先玩:建 Space、写页面、配置 Dot 都行。要开始聊天,就得连一个 Intelligence project 和一个模型:
npx copilotkit@latest login
npx copilotkit@latest project selectproject select 会把 project key 写进 .env 的 CPK_INTELLIGENCE_API_KEY。选托管 Intelligence 的话,会话会存到 CopilotKit 云;想要本地,就按文档起 Docker 版 Intelligence。然后补上 OPENAI_API_KEY 和 OPENAI_MODEL,重启 npm run dev 即可。
⚠️ 官方特别提醒:不要在 OpenDots 目录里跑 copilotkit onboard。这个模板自带 CopilotKit 集成,onboarding 会再塞一套通用的进去,反而冲突。
数据与隐私
这类项目最容易踩的坑是数据去向,OpenDots 在 README 里讲得比较实在:
- 会话持久化在配置的 Intelligence 里。托管方案会把消息、工具调用、运行事件发到 CopilotKit 云;本地评估方案则留在你自己机器上。OpenDots 本身不存会话。
- 模型 provider 会收到对话上下文,包括授权的页面内容和工具结果。注意:本地 Intelligence ≠ 本地模型,应用模型和 Automatic Learning 模型要分开配。
- 公网研究会把查询和 URL 发给 Parallel(默认开启),可用
WEB_SEARCH_PROVIDER=disabled关掉。 - 遥测会单独收集使用元数据,用
COPILOTKIT_TELEMETRY_DISABLED=true或DO_NOT_TRACK=1可以退出。
注意事项
- Alpha 阶段,官方明说适合自托管和二次开发,别直接当生产工具
- 单用户起点:没有共享编辑、邀请、文件上传、交互式页面嵌入
- Schedules 是"可重复指令",不是完整的目标/事件触发系统
- 多 Dot 群聊和自动委派还在路上——目前 Specialist Dots 各自独立,角色和会话是分开的
- 验证状态要看清:live Intelligence、模型响应和 page-context 聊天在 2026-09-29 验证过;OpenBot 浏览、建文件、shell、持久化本地验证过;实时语音和通话控件在 2026-09-30 本地验证过。Slack 和语音委派计算还需要接入服务后验证
总结
OpenDots 的价值不在"又一个 Agent 平台",而在于它把**"AI 同事"这个模糊概念落成了一套可以照着抄的工程实现**:
- 常驻同事怎么设计——每个 Dot 一个角色 + 一台电脑 + 独立权限
- 多入口怎么打通——Web、实时通话、Slack 共享同一份会话上下文
- 人在回路怎么插——保存前审批、非只读工具逐次放行
- 执行隔离怎么做——凭据留服务器、每 Dot 派生独立凭据、未配服务不在宿主执行命令
想自建"AI 同事团队"的团队可以直接 fork 改造;想学 Agent 应用架构的工程师,把 Computer 面板的权限模型和 Connections 的审批流源码读一遍,收获不会小。它和同门的 OpenMuse、OpenBot 一起,基本把 CopilotKit 对"生产级 Agent 应用长什么样"的答案摊开了。
📦 项目地址: https://github.com/CopilotKit/OpenDots ⭐ Stars: 5k+(上线两周) 🔗 语言: TypeScript 📄 许可证: MIT
作者: itech001 来源: 公众号:AI人工智能时代 网站: https://www.theaiera.cn/ 每日分享最前沿的AI新闻资讯和技术研究。