- Дата публикации
Rotunda: браузер для AI-агентов, который притворяется вашим обычным Firefox
Что нового
Rotunda — это отдельный браузер, который изначально спроектировали не для людей, а для AI-агентов. Его ключевая идея: агент управляет браузером так, как это делает человек — с печатью, движением мыши и реальными DOM-операциями, а не через стандартный Chrome DevTools Protocol (CDP), который сайты давно научились распознавать.
Главные новшества:
- Специализированный браузер для агентов: Rotunda — форк Firefox с патчами для автоматизации и «очеловечивания» действий.
- Глубокая интеграция с Playwright: можно просто заменить стандартный запуск браузера на
NewBrowserиNewContextиз Rotunda и получить привычный API с другим «движком» под капотом. - CLI-режим для агентов: управление браузером напрямую из терминала через
uvx rotunda agent ...без необходимости сразу подключать Python-библиотеку. - Симулированная печать и курсор: текст вводится через путь, похожий на человеческий, а курсор двигается с «твиннингом», а не телепортацией.
- Фокус не на подмене отпечатка браузера, а на отсутствии автоматизационных следов: Rotunda не пытается полностью подделать fingerprint, а передаёт реальное окружение хоста с небольшими «неточностями».
- Отдельная архитектура профилей и демона: сессии и индексы ресурсов хранятся в
~/.rotunda, а CLI-команды могут подключаться к уже запущенным профилям.
Цифровых бенчмарков по скорости загрузки страниц, расходу памяти или стоимости использования авторы не приводят. Упор — на снижение количества капч и блокировок по сравнению с управлением Chrome через Playwright/CDP.
Как это работает
Браузерная часть
Rotunda использует Firefox с патчами, вдохновлёнными проектом camoufox и работой daijro:
- Управление идёт не через CDP, а через Juggler — отдельный протокол Firefox, изолированный от контекста страницы.
- Это усложняет жизнь скриптам, которые пытаются найти следы автоматизации по состоянию
window,navigatorи другим объектам.
Браузер не пытается «идеально притворяться» другим устройством. Он передаёт:
- реальные данные о GPU и аудиодрайверах;
- реальные особенности хоста на уровне сетевого стека (TCP handshake использует настоящий Firefox-протокол);
- при этом может «лукавить» в менее критичных деталях: список доступных шрифтов, расширения, размер экрана и т.п.
Идея: для сайта нормально видеть десяток одинаковых MacBook с M1 одновременно. Но ненормально — увидеть Linux, который заявляет, что он macOS.
Человеческое поведение вместо грубого автомата
Rotunda делает ставку не на полную подмену fingerprint, а на отсутствие явных автоматизационных паттернов:
- Курсор не прыгает по экрану, а движется по траектории, похожей на движение мыши.
- Клавиатура генерирует ввод с ошибками и исправлениями, если включена «гуманизация».
- Операции с DOM идут через собственный путь ввода текста и событий мыши, а не прямую «телепортацию» значений.
Интеграция с Playwright
Rotunda предоставляет обёртки для Playwright:
from playwright.sync_api import sync_playwright
from rotunda import NewBrowser, NewContext
with sync_playwright() as playwright:
browser = NewBrowser(playwright, headless=False)
context = NewContext(browser)
page = context.new_page()
page.goto("https://pierce.dev", wait_until="domcontentloaded")
first_article_text = page.locator("main article article").first.inner_text()
print(first_article_text)
browser.close()
Разработчик меняет только запуск браузера и создание контекста. Вся остальная логика на Playwright остаётся прежней.
Агентский CLI и демон
Rotunda может работать без интеграции в кодовую базу — через uvx и встроенный CLI для агентов. Вся служебная информация хранится в ~/.rotunda:
- профили браузера;
- сессии демона;
- короткие индексы ресурсов и страниц.
Архитектура включает:
- демон профиля, который держит сессию браузера живой;
- ресурсный индекс, чтобы агенты могли ссылаться на страницы и элементы через индексы/ссылки, а не вручную искать селекторы;
- модель одиночного процесса, которая не даёт поднять конфликтующие инстансы под одним профилем.
Установка
Rotunda используют через uv (инструмент для управления Python-проектами и запуском CLI).
Встраивание в Python-проект
Установка библиотеки и браузера:
uv add rotunda
uv run rotunda fetch
Команда rotunda fetch синхронизирует список доступных сборок браузера и ставит последний билд для активного канала.
После этого можно использовать Rotunda с Playwright (пример выше).
Запуск агента из CLI
Если вы хотите сначала поиграться с браузером без изменения кода, можно использовать uvx:
- Установить активную сборку браузера и создать профиль:
uvx rotunda fetch
uvx rotunda agent new-profile --name agent-demo
- Создать контекст браузера по имени профиля и перейти на сайт:
uvx rotunda agent new-context agent-demo
uvx rotunda agent navigate 3 https://pierce.dev
Число 3 — пример индекса страницы. Вы будете использовать тот индекс, который напечатает ваша команда.
- Описать страницу и получить ссылки на элементы:
uvx rotunda agent describe 3
Команда вернёт структурированное описание DOM с «refs» — идентификаторами элементов, которые можно использовать в следующих командах.
- Действия с элементами (после описания индекс страницы можно не передавать):
uvx rotunda agent click <ref>
uvx rotunda agent hover <ref>
uvx rotunda agent info <select-ref>
uvx rotunda agent select <select-ref> "option-value"
uvx rotunda agent fill <input-ref> "replacement text"
uvx rotunda agent type <input-ref> "additional text"
uvx rotunda agent press <input-ref> Enter
uvx rotunda agent scroll down
uvx rotunda agent check <checkbox-ref>
infoпечатает атрибуты, состояние, границы и варианты select.selectпо умолчанию выбирает поvalue, можно переключиться на--by labelили--by index.fillполностью заменяет содержимое поля.typeдописывает текст в текущей позиции курсора.- Оба варианта ввода используют «очеловеченный» путь ввода текста.
После каждого действия CLI сообщает, обновилась ли страница полностью или изменения локальные. Для небольших изменений выводится компактный + / - дифф по элементам. Для полного состояния можно снова вызвать describe.
Расширенные команды агента
Для задач, которые не сводятся к заполнению форм, есть дополнительные команды:
uvx rotunda agent pages
uvx rotunda agent screenshot 3 --full-page
uvx rotunda agent wait 3 --for text "Done"
uvx rotunda agent back 3
uvx rotunda agent forward 3
uvx rotunda agent reload 3
uvx rotunda agent extract 3 --format markdown
uvx rotunda agent upload <file-input-ref> ./document.pdf
uvx rotunda agent downloads
uvx rotunda agent save-download <download-ref> ./download.bin
uvx rotunda agent dialog 3 accept
uvx rotunda agent close-page 3
Кратко по возможностям:
-
screenshotможет сохранить:- только видимую область;
- всю страницу (
--full-page); - конкретный элемент (
--element <ref>). Если путь не указан, скриншот сохраняется в системный temp-каталог с случайным именем PNG, а CLI выводит абсолютный путь.
-
waitумеет ждать:- состояния загрузки;
- совпадения URL с паттерном;
- появления текста;
- селектора;
- фиксированного таймаута.
-
extractвозвращает содержимое страницы в виде:- текста;
- HTML;
- markdown;
- ссылок;
- метаданных форм.
-
dialogнастраивает, как обрабатывать следующий диалог на странице. Диалоги без настройки закрываются и логируются, чтобы браузер не зависал.
Когда работа с профилем закончена, демон лучше остановить:
uvx rotunda agent stop 1
Число 1 — пример индекса демона.
Как это работает с антиботами и отпечатками
Почему классические «stealth-плагины» ломаются
Разработчики Rotunda подробно описывают, почему типичные плагины для «стелс-режима» в Chrome плохо живут под прицелом современных антибот-систем:
-
Перегрузка JavaScript-свойств.
- Плагины меняют
navigator,window,pluginsи другие объекты. - Такие функции перестают быть «native» для движка JS.
- Фингерпринтеры проверяют, нативная ли реализация. Если нет — это аномалия.
- Плагины меняют
-
Патчинг Chromium на уровне исходников.
- Часть решений форкает Chromium и меняет поведение уже в движке.
- JS-слой это не видит, но сайты начинают использовать боковые каналы: canvas, аудиодрайверы, особенности GPU.
- Аномалии по этим каналам снова выдают автоматизацию.
-
Статистический подход к отпечаткам.
- Фингерпринтинг перестал быть набором ручных хаков.
- Сайты собирают огромные массивы данных и ищут статистические отклонения.
- Им достаточно одной «невозможной» комбинации параметров, чтобы признать браузер ботом.
Авторы Rotunda считают, что честно обмануть статистический фингерпринт невозможно: нужно идеально симулировать каждый драйвер GPU, каждую особенность платформы и все API браузера.
Подход Rotunda
Rotunda выбирает другую стратегию:
- не пытаться полностью подделать отпечаток;
- выглядеть как реальный браузер на вашей машине;
- убрать сигнатуры автоматизации, связанные с CDP, Playwright и неприродным поведением мыши и клавиатуры;
- слегка «приукрасить» второстепенные параметры окружения.
В результате:
- для массового краулинга публичных сайтов это не лучший инструмент;
- для делегирования задач локальным агентам на вашей машине — это как команда стажёров, которые сидят в вашей сети и ходят по сайтам от вашего имени.
Что это значит для вас
Кому Rotunda действительно пригодится
-
Разработчики AI-агентов.
- Если вы строите ассистентов на базе GPT-4, Claude 3, Llama 3 или других крупных моделей и хотите дать им доступ к реальному браузеру, Rotunda закрывает сразу несколько проблем:
- меньше капч и блокировок по сравнению с прямым управлением Chrome через CDP;
- удобный CLI и Python-API для интеграции в пайплайны;
- возможность симулировать человеческие действия без компьютерного зрения.
- Если вы строите ассистентов на базе GPT-4, Claude 3, Llama 3 или других крупных моделей и хотите дать им доступ к реальному браузеру, Rotunda закрывает сразу несколько проблем:
-
Инженеры, которые автоматизируют личные/внутренние задачи.
- Заполнение сложных форм на корпоративных порталах.
- Навигация по кабинетам поставщиков, банков, госуслуг.
- Задачи, где сайт явно не рад ботам и активно борется с автоматизацией.
-
Исследователи веб-интерфейсов для LLM.
- Можно экспериментировать с тем, как LLM взаимодействуют с реальным DOM, а не только с текстовыми снапшотами.
- CLI-режим позволяет быстро прототипировать сценарии без тяжёлой инфраструктуры.
Где Rotunda не подойдёт
-
Массовый краулинг и скрейпинг.
- Авторы прямо говорят: Rotunda плохо подходит для обхода огромного числа публичных страниц.
- Для этого лучше использовать специализированные сервисы: Browserbase, Kernel, ScrapingBee и т.п.
-
Облачные сценарии с компьютерным зрением.
- Если вы строите решение, которое рендерит страницу в облаке и даёт модели только скриншоты, Rotunda не решит ключевую проблему — утечку признаков хоста и использование стандартных stealth-плагинов.
-
Сценарии, где важно строгое соответствие корпоративным политикам браузера.
- Rotunda — модифицированный Firefox, который специально меняет часть параметров окружения.
- Для строго регламентированных сред (финансовые организации, госструктуры) это может быть критично.
Региональные ограничения и доступность
Разработчики не указывают геоблокировки по регионам. Rotunda — это инструмент, который вы запускаете локально, поэтому основное ограничение — доступ к GitHub и возможности установки Python-инструментов uv/uvx.
Если в вашей сети заблокирован GitHub или внешние репозитории, может понадобиться VPN или зеркала. Сам браузер не завязан на конкретный регион, но сайты, с которыми вы работаете, могут применять геоблокировки и анализ репутации IP.
Что делать, если вас всё равно заблокировали
Даже с «прозрачным» подходом Rotunda не обещает полное отсутствие блокировок. Рекомендации разработчиков:
-
Откройте тот же сайт в обычном Chrome или Firefox.
- Если там тоже появляются капчи и отказы во входе, проблема, вероятнее всего, в репутации IP или сетевых настройках.
-
Если обычный браузер работает нормально, а Rotunda — нет, включите режим отладки отпечатка:
export ROTUNDA_DEBUG_DUMP_DIR=/tmp/rotunda-fingerprint-debug
export ROTUNDA_DEBUG_DUMP=manifest,network,console,vm,returns
export ROTUNDA_VM_ACCESS_SAMPLE_RATE=10
python your_repro_script.py
zip -r rotunda-fingerprint-debug.zip "$ROTUNDA_DEBUG_DUMP_DIR"
Этот режим:
- логирует обращения сайта к JS-движку;
- сохраняет возвращаемые значения;
- пишет консольный вывод;
- фиксирует сетевые запросы страницы.
Пакет rotunda-fingerprint-debug.zip можно приложить к GitHub Issue вместе с URL сайта, ожиданиями и фактическим поведением. В архив входят тела запросов и ответов, поэтому перед отправкой их нужно проверить. Переменную ROTUNDA_DEBUG_DUMP_RAW=1 разработчики просят включать только по их запросу.
Место на рынке
По отношению к Playwright + Chrome/CDP
-
Отпечаток и детект автоматизации:
- Chrome под управлением Playwright через CDP сайты давно умеют вычислять: частые капчи, странные отказы во входе, незаметные изменения поведения.
- Rotunda уходит от CDP и использует Firefox Juggler, плюс имитирует человеческие действия.
-
Прозрачность окружения:
- CDP-управляемый Chrome часто используют со stealth-плагинами, которые меняют JS-свойства и ломают статистику отпечатков.
- Rotunda передаёт реальное окружение хоста и слегка искажает второстепенные параметры.
Числовых сравнений по количеству капч или проценту успешных сессий авторы не приводят, но весь продукт строится вокруг идеи: «меньше блокировок, чем у CDP+stealth-плагинов».
По отношению к camoufox и другим «stealth Firefox»
-
Rotunda опирается на патчи daijro и camoufox, но меняет приоритеты:
- camoufox концентрируется на стелс-режиме и сокрытии автоматизации;
- Rotunda делает упор на удобную автоматизацию для агентов с Playwright и CLI, плюс на симуляцию человеческого поведения.
-
Оба проекта используют Firefox и Juggler, но Rotunda строит вокруг этого полноценную экосистему для AI-агентов: профили, демон, CLI, отладку отпечатка.
По отношению к облачным краулерам (Browserbase, Kernel, ScrapingBee)
-
Тип задач:
- Browserbase, Kernel, ScrapingBee лучше подходят для массового скрейпинга и автоматизации в облаке.
- Rotunda — для локальных агентов, которые действуют от имени пользователя на его машине.
-
Масштаб:
- Облачные решения оптимизированы под тысячи и миллионы страниц.
- Rotunda — под ограниченное количество сессий, ближе к «цифровым стажёрам», чем к краулеру.
Числа по стоимости и производительности у Rotunda и конкурентов в описании нет, поэтому сравнение идёт по архитектуре и типичным сценариям.
FAQ: почему не компьютерное зрение
Разработчики Rotunda прямо отвечают на популярный вопрос: «Почему не управлять обычным Chrome через скриншоты и компьютерное зрение?»
Основные аргументы против CV-подхода:
-
Скорость и контекст.
- Обработка скриншотов медленная.
- Скриншоты занимают большой объём в контекстном окне LLM.
- Модель не видит содержимое за пределами вьюпорта.
-
Доступ к DOM.
- Намного удобнее получить DOM и превратить его в компактное представление для LLM.
- Но как только вы берёте DOM напрямую, вы снова упираетесь в проблему CDP и детекта автоматизации.
-
Утечки окружения в облаке.
- Облачные VM часто используют стандартные stealth-плагины.
- Эти плагины легко детектируются, и в итоге вы снова попадаете в чёрный список.
-
Сложность кликов и форм.
- Компьютерному зрению сложно надёжно обрабатывать сложные интерфейсы.
- Есть реальные кейсы, когда Claude не может выбрать элемент из выпадающего списка, потому что прямое сопоставление кликов по картинке с DOM даёт сбои.
Rotunda пытается обойти эти проблемы: даёт доступ к DOM, но не через CDP, и симулирует человеческое поведение вместо грубых кликов по координатам.
Как поучаствовать в разработке
Проект открыт для внешних вкладов:
- в Issues на GitHub есть задачи, которые подходят для старта;
- автор приглашает писать ему в X и подписываться на рассылку, если вы хотите обсуждать агенты и помогать развитию Rotunda.
Если вы строите свои агентские стеки или экспериментируете с LLM в браузере, Rotunda — хороший кандидат, чтобы протестировать его на реальных задачах и, возможно, внести патчи под свои сценарии.