dots
每个 AI 智能体都由一个模型和一个浏览器组成。
模型用一个参数就能随时更换,而浏览器才是网站真正看到的东西。
Windows(PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"
uvx --from git+https://github.com/feder-cr/dots dots --openrouter-key sk-or-...
Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uvx --from git+https://github.com/feder-cr/dots dots --openrouter-key sk-or-...
然后打开 http://127.0.0.1:8765。左侧是对话,右侧是实时运行的浏览器。
一切都取决于浏览器
当网页智能体任务失败时,问题很少出在模型本身。页面没加载出来、触发了人机验证、登录已过期、点击没有生效——这一切都发生在浏览器里,在模型开始思考之前。
所以 dots 正是围绕浏览器构建的:
- 真实的 Firefox 引擎,用 C++ 打了补丁。 指纹在引擎内部决定,而不是靠页面可以检查出来的 JavaScript 覆盖伪装。
- 每个 seed 对应一个身份。 屏幕、字体、GPU、时区和语言彼此一致,
--seed能在每次运行时还原同一个人。 - 页面找不到任何破绽。 没有 WebDriver 标志,没有 DevTools 协议,页面中也没有自动化全局变量。
- 像人一样的双手。 指针会移动到要点击的目标,按键逐个敲下,页面收到的每一个事件都是可信事件。
- 会记住状态的浏览器。
--profile-dir可以在多次运行之间保留登录状态和 cookies。 - 连接来源即身份。 使用
--proxy时,时区和语言会随出口节点而变。
模型可以是 OpenRouter 上的任意模型,用 --model 即可切换。
可以让它做什么
打开
<粘贴网址>。单程,米兰飞里斯本,经济舱,一名成人。逐个查询下个月 12 日至 16 日的每一天,读出每天最低票价。如果某天没有票,就直说。不要瞎猜数字。
在你自己的助手中使用同一个浏览器
Claude Code、Codex、Gemini CLI 或任何 MCP 客户端:
invisible_playwright_mcp 可以把这个浏览器作为服务器提供给它们。dots 是它的界面,dots --help 列出了所有选项。
与 OpenAI 无关。采用 MIT 许可证。