dots — открытый веб-агент с браузером, который не блокируют

· 1 мин чтения
browser-automation ai-agents open-source python mcp
📂 Исходный код на GitHub

Открытый веб-агент с собственным браузером на движке Firefox. Диалог и браузер в одном локальном окне, модель выбирается через OpenRouter, есть режим работы через MCP-сервер. Лицензия MIT.

dots — открытый веб-агент с браузером, который не блокируют

dots — это открытый AI-агент для работы с сайтами, у которого есть собственный браузер. Вы пишете задачу обычным языком, а агент сам открывает страницы, заполняет формы и кликает. Браузер и диалог показываются в одном локальном окне: слева переписка, справа браузер, и всё это сразу, без ожидания.

Главная мысль автор проекта звучит так: любой AI-агент — это модель плюс браузер. Модель меняется одним флагом, а вот браузер — это то, что видит сайт. Именно браузер чаще всего и ломает работу агента.

Репозиторий написан на Python, распространяется под лицензией MIT и уже собрал около тысячи звёзд. При этом проект совсем молодой: первый коммит и последняя отправка в репозиторий — 29 сентября 2026 года, а всего коммитов четыре. Об этом стоит помнить, когда вы решаете, можно ли сразу класть его в рабочие задачи.

Почему всё упирается в браузер

Когда веб-агент не справляется с задачей, причина обычно не в модели. Страница просто не загрузилась. Или сайт показал проверку, что вы робот. Или истёк срок входа в аккаунт. Или клик просто не попал в кнопку. Всё это происходит в браузере — до того, как модель вообще начинает думать.

Поэтому dots построен вокруг одного настоящего браузера, а не вокруг набора скриптов. Ниже перечислено то, что заявляет автор. Сравнительных тестов со сторонними конкурентами в репозитории нет.

  • Настоящий движок Firefox, пропатченный на C++. Отпечаток браузера (набор признаков, по которому сайт узнаёт программу посетителя) выбирается внутри движка, а не рисуется поверх скриптом на JavaScript, который страница может проверить.
  • Одна личность на каждое значение --seed. Разрешение экрана, шрифты, видеокарта, часовой пояс и язык согласованы между собой. Один и тот же seed даёт того же самого «человека» при каждом запуске.
  • Странице нечего находить. Нет флага WebDriver, нет протокола DevTools, в странице нет глобальных переменных, которые оставляет автоматизация.
  • Руки живого человека. Указатель мыши реально движется к элементу, по которому кликают, а клавиши нажимаются по одной. Поэтому все события, которые получает страница, выглядят доверенными.
  • Браузер помнит. Флаг --profile-dir сохраняет логины и cookies между запусками.
  • Выход определяет, кто вы. С флагом --proxy часовой пояс и язык подстраиваются под адрес, с которого выходите.

Установка и запуск

Проект не нужно ставить вручную. Он запускается одной командой через uvx, а нужные зависимости подтягиваются сами. На 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-...

На 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-...

После запуска откройте http://127.0.0.1:8765. Страница откроется локально. Наружу уходят только запросы к модели и к тем сайтам, куда вы просите агента сходить.

Нужен ключ OpenRouter. Это значит, что модель выбирается не локально, а через облачный шлюз OpenRouter. Моделей там много, конкретную выбирает флаг --model. Подключить свою локальную модель нельзя — проект для этого не предназначен.

Как выглядит задача

Формулировка задачи обычная, на человеческом языке. Пример из README — поиск авиабилетов:

Go to <paste the URL>. One way, Milan to Lisbon, economy, one adult. Check every date from the 12th to the 16th of next month and read the cheapest fare for each day. If a date has no availability, say so. Do not guess a number.

Обратите внимание на последнюю фразу. Автор прямо просит агента не выдумывать цифры, а сказать, если данных нет. Это простая и полезная привычка: чем строже вы формулируете «не придумывай», тем меньше шансов получить от агента правдоподобную выдумку.

Тот же браузер в вашем ассистенте

Если запускать отдельное окно не нужно, тот же браузер можно отдать вашему ассистенту как MCP-сервер. Он называется invisible_playwright_mcp и работает с Claude Code, Codex, Gemini CLI и любым другим клиентом, который умеет говорить с MCP.

Отдельно стоит понять, как устроен проект. dots — не самостоятельный агент. В коде программы прямо написано, что она запускает подкоманду ui из пакета invisible-playwright-mcp и больше ничего своего не делает. То есть dots — это просто удобное имя и короткий запуск для того же пакета. Пакет закреплён в зависимостях точной версией 0.70.2, без автоматического обновления: автор обновляет версию вручную и прогоняет тесты.

Что внутри репозитория

Код очень маленький. Всё содержимое — файл конфигурации pyproject.toml, лицензия, README, тесты и три файла в src/dots/. Основной из них — cli.py, там около двадцати строк.

Посмотреть состав проекта можно по ссылкам:

  • pyproject.toml — зависимости, требуемая версия Python и список ключевых слов проекта
  • cli.py — точка входа, она же вся программа
  • LICENSE — текст лицензии MIT

Нужен Python 3.11 или новее. Поддерживаются Windows и Linux. Тесты написаны на pytest и разделены на две группы: unit — чистая логика, без сети и браузера; integration — реальный запуск команды в отдельном процессе, тоже без сети и браузера.

Релизов на PyPI у проекта нет, и это сделано намеренно: автор пишет, что имя dots на PyPI уже занято другим проектом. Поэтому запуск всегда идёт через uvx --from git+..., а не через pip install dots. Все ключи командной строки видны в dots --help.

Кому это пригодится

Проект имеет смысл, если вам нужно, чтобы агент ходил по сайтам, где обычная автоматизация ловится: собирать данные с защитой от роботов, проверять цены, заполнять формы под аккаунтом, в который вы уже вошли. Флаги --profile-dir и --proxy решают ровно эти задачи — сохранить вход и зайти с нужного адреса.

Чего ожидать не стоит. Это не инструмент для написания кода. И не конструктор, из которого собирают агентов. Это тонкая обёртка над другим пакетом с очень короткой историей коммитов. Перед использованием в рабочих задачах стоит прочитать исходники пакета invisible-playwright-mcp и проверить, что его лицензия и условия вам подходят.

Проект не связан с OpenAI — это написано в README прямым текстом. Сходство названия случайное.

Источник: https://github.com/feder-cr/dots