开源项目
开源项目

开源 Dots 三天 2400 星:浏览器归它管

feder-cr/dots 深拆(2026-10-02 GitHub API 快照):2,416★、421 forks、MIT、Python,2026-09-29 创建——OpenAI 闭源 Dots 发布次日就冲出的开源同位素。核心论点「模型一参可换,浏览器才是网站看到的东西」:真 Firefox 引擎打 C++ 补丁、指纹在引擎内部决定而非页面 JS 涂层(页面无法用 JS 检出);一个 seed 一个身份(屏幕/字体/GPU/时区/语言互相一致、可复现);页面无可检物(无 WebDriver 标志、无 DevTools 协议、无自动化全局变量);指针先移动再点击、逐键受信事件;--profile-dir 跨次保留登录与 Cookie;--proxy 出口即时区语言跟身份走。模型走 OpenRouter 任意模型、--model 一键换;伴侣仓 invisible_playwright_mcp 把同一浏览器以 MCP server 形式接给 Claude Code/Codex/Gemini CLI。README 明确「与 OpenAI 无关、MIT 许可」。附合规边界:遵守目标网站服务条款与当地法规,不用于欺诈/抢票/批量注册。

发布于 2026年10月2日9 分钟阅读
<!-- open-dots-browser-agent-resource | open-source | 开源 Dots 三天 2400 星:浏览器归它管 -->

OpenAI 在 2026 年 9 月 29 日的 DevDay 上发布常驻 Agent Dots的时候,很多人的第一反应是「又是一个绑定订阅档位的托管服务」。官方口径里,Dots 是「能力极强、始终在线的 Agent」,可用性放在 Pro 与 Business Premium(符合条件市场),Enterprise 与 Edu 得工作区管理员手动开 beta。而就在同一天,一个叫 feder-cr/dots 的开源仓库悄悄建了起来——GitHub API 显示它的创建时间是 2026-09-29T23:06 UTC,离 DevDay 结束没几个小时。到本文写作采用的 2026-10-02 GitHub API 快照,这个仓库已经有 2,416 颗 star 和 421 个 fork,许可证 MIT,主语言 Python。官方闭源发布隔天,开源版三天冲到 2400 星,这个速度本身就是本条新闻最硬的部分。

先说清楚一件事:这两个 Dots 没有任何血缘关系。仓库 README 末尾有一句明确的声明,原文是「Not affiliated with OpenAI. MIT licensed.」——与 OpenAI 无亲属关系,MIT 许可。重名更像是蹭上了热度窗口期,但对用户来说这反而是个便利:想知道 OpenAI 那只常驻 Agent 大概是什么形态,官方版要订阅门槛,开源版三条命令就能跑起来,模型自己挑。

核心论点:模型可以换,浏览器才是网站看到的

这个仓库的 README 开篇只有一句话,但值得整段抄下来:每个 AI agent 都是模型加浏览器,模型可以用一个参数换掉,浏览器才是网站看到的东西。这句话是整个项目的地基,也是它和市面上大多数「套壳 Playwright」方案分道扬镳的地方。

拆开看这个论点。网页 agent 失败的时候,原因很少出在模型上——页面没加载出来、弹了人机验证、登录过期、点击没落到位置上,这些全部发生在浏览器里,发生在模型开始思考之前。也就是说,一个网页 agent 的成败上限,往往不是它背后模型有多聪明决定的,而是它脚下那台浏览器有多像真人用的浏览器决定的。模型决定 agent 想什么,浏览器决定 agent 能不能被网站当成一个正常人。把一个网页 agent 拆成三层看会更清楚:最上面是模型,负责理解和规划;中间是浏览器,负责把规划落到真实的页面上;最底下是任务本身,比如把一趟机票的每个日期都核一遍。三层里模型层的进步最快,各家旗舰隔几个月就换代;中间那层却长期停在「能跑通」的工程水平上,绝大多数失败都折在这里。开源 dots 把宝押在了中间层上:自带一只浏览器,而且是一只「不会被挡住的」。

引擎级指纹和 JS 涂层,是两种东西

这是全文最值得展开的一段,也是这个项目技术上最有意思的地方。README 对第一卖点的原文表述是:真 Firefox 引擎,C++ 补丁级修改,指纹在引擎内部决定,不是页面 JavaScript 涂上去的,页面无法用 JS 检出涂层。

这两句话的信息密度很高,值得翻译成大白话。目前主流自动化浏览器的反检测方案,绝大多数是在页面层做文章:Playwright 或者 Selenium 驱动的浏览器,启动时带一堆自动化标志,社区的做法是用 JS 注入把这些标志盖掉——重写 navigator 对象、伪造 WebGL 渲染信息、修补 canvas 指纹。这类方案有个结构性的软肋:涂层终究是涂在页面执行环境里的,页面自己跑一段检测 JS,就能去摸这层涂料的接缝。检测方和反检测方在同一个沙箱里斗法,谁都能摸到对方,这是一场没有终点的军备竞赛。

引擎级修改走的是另一条路。dots 直接改 Firefox 的 C++ 源码,指纹相关的数值——屏幕、字体、GPU、时区、语言——在引擎内部就已经是一套互相咬合的配置,等页面的 JS 拿到这些信息的时候,它们本来就是「引擎报出来的事实」,而不是一层可以被翻开的贴纸。打个比方:JS 涂层是给一个人戴面具,引擎级修改是整形,面具可以被摘下来验,整形之后的脸本身就是真的。这就是「页面无法用 JS 检出涂层」的准确含义——不是涂层做得更逼真了,而是根本不存在涂层这个东西。

配套的还有几条,README 原文列得很清楚。页面上没有任何可检的东西:无 WebDriver 标志、无 DevTools 协议、无自动化全局变量——检测脚本常摸的那几个位置,这里干脆是空的。输入行为也做了拟人化:指针先移动到目标再点击,键盘逐键敲入,页面收到的每一个事件都是受信任事件。受信任事件这个词是浏览器安全模型里的正式概念,由操作系统输入栈产生的事件才叫受信任,脚本合成的事件天然带着 isTrusted 为 false 的标签——dots 让页面收到的全是前者。

一个 seed 一个身份,一个 profile 一段记忆

指纹一致只是及格线,真正的难点是身份的连续性。dots 的做法是一个 seed 一个身份:给一个 --seed 参数,屏幕分辨率、字体列表、GPU 型号、时区、语言这几样互相一致,而且每次用同一个 seed 跑,出来的都是同一个「人」。这一点比听起来重要:真实用户的设备指纹是稳定的,今天访问和明天访问是同一台电脑;如果 agent 每次跑都是一套全新随机指纹,对风控系统来说反而像一台天天换外壳的机器——过于干净本身就是异常。

记忆靠 --profile-dir。跨次运行保留登录状态和 Cookie,也就是说这个浏览器是有历史的:第一次登录过的网站,第二次跑不用重新登录。配合代理使用时,README 的说法是「出口即身份」:挂上 --proxy 之后,时区和语言跟着出口走。IP 在柏林,时区就是柏林,语言偏好也对得上,不会出现 IP 在欧洲而浏览器时区写着东八区这种一眼假的组合。

模型随便换:OpenRouter 上任意一个

模型层的设计非常薄。README 原文一句话:模型是 OpenRouter 上的任意模型,--model 一个参数就换掉。启动时带 --openrouter-key,之后想用哪家就用哪家,token 费用走自己的 OpenRouter 账户。这个设计跟仓库的核心论点是自洽的——既然「模型可以用一个参数换掉」,那就没必要把用户锁死在任何一家的 API 上。对用户来说这也有实际好处:浏览器层的能力是本地跑的,模型层只是大脑,大脑可以随时换供应商,身体不用动。顺带说一句,OpenRouter 这层抽象还有个隐性价值:任务难度不同,可以用不同的模型跑不同的任务——复杂的多步规划用旗舰模型,简单的信息摘取换个便宜模型,同一只浏览器照常工作。这对成本敏感的自动化任务是实打实的省钱空间,毕竟比价这种任务要打开的页面是以十计的,模型开销大不一样。

伴侣仓:把这只浏览器借给你的 CLI Agent

dots 自己是一个带界面的完整 agent——启动之后打开 http://127.0.0.1:8765,左边是对话,右边是实时浏览器。但它还有另一个用法:同一个组织下的 invisible_playwright_mcp 仓库,把这只浏览器以 MCP server 的形式开放出来,README 原文点名 Claude Code、Codex、Gemini CLI 或任何 MCP 客户端都能接。两个仓的关系,README 写得很直白:dots 是它的界面。这个分工有点意思——你有了一个强 CLI 编码 agent,但它的浏览器环节一直是最弱的一环,现在可以把浏览器环节整个换成 dots 的引擎,编码 agent 继续当大脑,浏览器归这只开源引擎管。

许可证、边界,和几句冷静话

许可证没有悬念:GitHub API 的 license 字段是 MIT(2026-10-02 快照),README 末尾再次确认 MIT licensed,同时明确与 OpenAI 无亲属关系。MIT 意味着商用、修改、再分发都没有额外约束,企业拿去改造成内部工具没有许可证障碍。

但有一段话必须放在这里说清楚。dots 这类反检测浏览器的技术原理可以公开讨论,引擎级指纹、seed 身份一致性这些都是 README 原文写着的公开信息,理解它们对做 web 自动化、做风控、做爬虫合规的人都有价值。可是「不会被挡住」这个描述不构成使用上的许可。用任何自动化工具访问第三方网站,都要遵守目标网站的服务条款和当地法律法规;不该用它做欺诈、抢票、黄牛、批量注册这类事,只应该自动化自己有权访问的账户和自己的业务。技术上是「检测方更难发现你」,法律和契约层面是另一套裁判标准,两者不要混为一谈。这是对项目本身负责,也是对读者负责——把「不被封」当成无前提的承诺去模仿,代价最后会落在使用者自己头上。

三天 2400 星的热度说明需求是真实存在的:网页 agent 的瓶颈确实在浏览器层,大家用脚投票。这个仓库接下来要证明的是热度之外的工程持续性——引擎级修改意味着要长期跟进 Firefox 上游版本,这不是一次性发力的活。想看它实际跑起来的命令级教程,等站内 SOP 篇;想理解网页 agent 这波浪潮的来龙去脉,站内计算机操作 Agent 时代与计算机操作 Agent 横评有更完整的图景,浏览器自动化沙箱与隔离机制则可以看Agent 沙箱隔离横评。自托管路线的另一个参照系是 OpenClaw,它的 Gateway 加多入口思路与 dots 的单浏览器思路正好是两个方向,见站内OpenClaw 开源篇。

回到标题那个问题。三天 2400 星的开源 Dots:你想让它先跑哪个网站任务?机票比价这种逐日核对的苦活是个好起点——README 给的示例任务就是让 agent 去查米兰到里斯本的单程经济舱,把下个月 12 到 16 日每一天的最低价都核出来,没票就说没票,不许编数字。这个任务示范的正是浏览器层能力的价值:难点不在模型会不会算,在浏览器能不能把每一页都稳稳打开、稳稳读出来。

常见问题

Q1: 开源 dots 和 OpenAI 官方的 Dots 是什么关系? A1: 没有关系。README 末尾明确写着「Not affiliated with OpenAI. MIT licensed.」,与 OpenAI 无亲属关系。官方 Dots 是 DevDay 2026 发布的常驻 Agent,绑定 Pro 与 Business Premium 订阅(官方口径,符合条件市场);开源 dots 是第三方独立项目,自托管运行,两者重名但代码与归属毫无关联。

Q2: 它的反检测原理和 Playwright 加反检测插件的方案差在哪? A2: 本质区别在层次。插件方案是 JS 涂层:页面执行环境里注入脚本盖掉自动化标志,页面跑检测代码就可能摸到涂层的接缝。dots 是直接补丁 Firefox 的 C++ 引擎,指纹在引擎内部决定,页面 JS 拿到的是引擎报出的事实,没有涂层可检。README 原文的表述是「指纹在引擎内部决定,不是页面 JS 涂层(页面无法用 JS 检出涂层)」。

Q3: 用什么模型,要花多少钱? A3: 模型是 OpenRouter 上的任意模型,--model 一个参数切换,启动时需要 --openrouter-key,token 费用走用户自己的 OpenRouter 账户。仓库本身 MIT 许可免费,费用结构是软件免费加模型自付。

Q4: 能把它接给 Claude Code、Codex 这类 CLI agent 用吗? A4: 可以。同组织的 invisible_playwright_mcp 仓库把这只浏览器以 MCP server 形式提供,README 原文点名 Claude Code、Codex、Gemini CLI 或任何 MCP 客户端均可接入,dots 本身是这个 MCP 服务器的界面,dots --help 可列出全部参数。

Q5: 用它做自动化有什么必须注意的边界? A5: 遵守目标网站的服务条款与当地法律法规,不用于欺诈、抢票、黄牛、批量注册,只自动化自己有权访问的账户与自有业务。「不会被挡住」是技术描述,不是使用许可,也请不要把它当成无前提的承诺。技术中立,责任在使用者。

本文由 AI 辅助生成,经人工审核编辑。最后更新:2026-10-02

常见问题

开源 dots 和 OpenAI 官方的 Dots 是什么关系?
没有关系。README 末尾明确写着「Not affiliated with OpenAI. MIT licensed.」,与 OpenAI 无亲属关系。官方 Dots 是 DevDay 2026 发布的常驻 Agent,绑定 Pro 与 Business Premium 订阅(官方口径,符合条件市场);开源 dots 是第三方独立项目,自托管运行,两者重名但代码与归属毫无关联。
它的反检测原理和 Playwright 加反检测插件的方案差在哪?
本质区别在层次。插件方案是 JS 涂层:页面执行环境里注入脚本盖掉自动化标志,页面跑检测代码就可能摸到涂层的接缝。dots 是直接补丁 Firefox 的 C++ 引擎,指纹在引擎内部决定,页面 JS 拿到的是引擎报出的事实,没有涂层可检。README 原文的表述是「指纹在引擎内部决定,不是页面 JS 涂层(页面无法用 JS 检出涂层)」。
用什么模型,要花多少钱?
模型是 OpenRouter 上的任意模型,--model 一个参数切换,启动时需要 --openrouter-key,token 费用走用户自己的 OpenRouter 账户。仓库本身 MIT 许可免费,费用结构是软件免费加模型自付。
能把它接给 Claude Code、Codex 这类 CLI agent 用吗?
可以。同组织的 invisible_playwright_mcp 仓库把这只浏览器以 MCP server 形式提供,README 原文点名 Claude Code、Codex、Gemini CLI 或任何 MCP 客户端均可接入,dots 本身是这个 MCP 服务器的界面,dots --help 可列出全部参数。
用它做自动化有什么必须注意的边界?
遵守目标网站的服务条款与当地法律法规,不用于欺诈、抢票、黄牛、批量注册,只自动化自己有权访问的账户与自有业务。「不会被挡住」是技术描述,不是使用许可,也请不要把它当成无前提的承诺。技术中立,责任在使用者。

相关文章

开源项目

终端里的开源对手:MiniMax 摊开 mcode 底牌

MiniMax 把终端编码代理 mcode 开源:仓库 MiniMax-AI/minimax-code(1,443 星、159 fork、TypeScript、MIT、2026-06-01 创建、最近 push 2026-09-20,截至 2026-09-20 GitHub API),官方口径是"用出色的 harness 设计持续释放模型能力"。核心判断:编码代理的战场已从模型转到 harness,权限、沙箱与可审计性才是企业敢不敢用的门槛。三种入口(交互 TUI、无头 mcode exec、ACP),BYOK 打通 OpenAI 与 Anthropic 兼容接口,支持 MCP、skills、并行子代理与 AGENTS.md;厂商自报 FrontierHarness 76.7% 通过率、中位耗时 4 分 33 秒。冷思考:1,443 星仍是早期,插件生态深度待验证,但对受监管行业"可审计"往往比多几分通过率更值钱。

2026年9月20日8 分钟阅读
开源项目

DeepSeek Harness 开源:万物皆插件的 Agent 框架

DeepSeek 官方开源 Agent 编排框架 DeepSeek Harness(命令行 dsh),GitHub MIT、TypeScript,基于 Cordis 运行时,以「万物皆插件」架构模块化拼装 AI 流水线。仓库 2026-08-13 创建,上线约三周 Star 突破 20 万;当前 0.1.3-alpha、开发者预览,官方声明会有破坏性变更、须先读 SAFETY.md。一键 `npx @deepseek-ai/dsh web` 启动 Web UI(http://127.0.0.1:3080)。

2026年9月5日10 分钟阅读
开源项目

410 TFlops 只算 95 分:DeepSeek 昇腾算子栈全拆

DeepSeek 昇腾算子栈四仓逐项拆解(2026-10-01 GitHub API 快照):TileKernels 1883 星 MIT(TileLang DSL 数十个算子:MoE 路由、FP8/FP4 量化、Engram 门控、流形超连接,09-30 新增昇腾后端,鸣谢华为技术支持);DeepGEMM-Ascend 418 星 MIT(API 完全兼容主仓,Ascend 950 首发,CANN 9.20 + torch_npu + Python 3.10+,昇腾 scaling factor 打包格式与英伟达不同);DeepEP-Ascend 190 星(EPBuffer V2.5 兼容、验证栈 950DT + CANN 9.2.0 + torch_npu 2.13.0rc1,截至快照根目录无 LICENSE 文件,商用合规待观察);FlashMLA 13015 星 MIT(昇腾稀疏注意力 prefill 410 TFlops / 95% 峰值、decoding 360 TFlops / 83%,B200 侧对照 1460/950 TFlops,融合 kernel 仅 CUDA)。与英伟达侧对应仓(DeepGEMM 7907 星、DeepEP 10231 星)一一对照;许可证一律以仓库 LICENSE 原文为最终口径。

2026年10月1日9 分钟阅读