Plasmate — браузерный движок на Rust, который режет токены AI-агентов на 94%
Plasmate — браузерный движок на Rust, который режет токены AI-агентов на 94%
Когда Claude Code или Cursor лезут в веб через Playwright или Puppeteer, происходит абсурдная штука. Chrome парсит страницу, рендерит DOM на 589 KB, и весь этот суп из <div class="container__inner">, рекламных скриптов, GDPR-баннеров и трекинговых пикселей улетает в LLM. Модель тратит 22 000 токенов, чтобы понять, что на главной Hacker News лежит 30 ссылок.
David Hurley устал смотреть, как его агенты задыхаются от HTML-мусора, и сделал Plasmate. Это браузер, который не отдаёт DOM. Он компилирует страницу в Semantic Object Model.
TL;DR: Plasmate — headless-браузер на Rust под Apache-2.0, который превращает HTML в структурированный JSON для LLM. На 1000 страниц в день уходит $5.69 токенов вместо $99 у Chrome. Подключается к Claude Code, Cursor, Windsurf через MCP в одну строку. v0.5, 21 звезда, проект одного человека.
Что такое Semantic Object Model
DOM показывает каждый тег. SOM показывает, что на странице важно агенту: что можно кликнуть, что можно ввести, что там написано. Всё остальное стрипается ещё на этапе компиляции.
Вот примерно как выглядит SOM-вывод плазматовского fetch_page:
{ "version": "0.1", "url": "https://example.com", "title": "Page Title", "meta": { "html_bytes": 589546, "som_bytes": 56625, "compression_ratio": 10.4 }, "regions": [ { "id": "r_navigation", "role": "Navigation", "elements": [ { "id": "[3]", "role": "link", "name": "About", "href": "/about" } ] }, { "id": "r_main", "role": "Main", "elements": [ { "id": "[12]", "role": "heading", "text": "Welcome" }, { "id": "[15]", "role": "input", "type": "email", "name": "Email" } ] } ] }
Кликабельные элементы пронумерованы. Агент не пишет CSS-селектор, он говорит click [15]. Никаких [backend_node_id]<input> соплей — агент видит структуру страницы вместо вёрстки.
Структурированные данные (JSON-LD, OpenGraph, Twitter Cards) Plasmate тоже вытаскивает в отдельный блок. То, что ты раньше парсил руками через regexp.
Цифры, которые трудно игнорировать
По бенчмарку Plasmate Labs на 98 реальных сайтах:
- 4-5 мс на страницу против 252 мс у Chrome headless и 23 мс у Lightpanda
- 28 MB памяти на 100 параллельных страниц против 20 GB у Chrome
- 94% экономии на токенах в среднем, медиана сжатия 9×, на тяжёлых SPA до 1544×
- $5.69 vs $99 за обработку 1000 страниц в день при ставках Claude Sonnet
Цифры от авторов, но методология опубликована и совпадает с протоколом Lightpanda — то есть проверяется одной командой ./run-benchmark.sh. Покрытие парсера тоже не приукрашено: 94 из 98 топовых сайтов работают, остальные четыре сломались на JS-тяжёлых SPA с кастомным рендерингом.
Бинарник плазматы — 45.8 MB. Chrome в комплекте с Puppeteer-кешем — 300-500 MB.
Установка и MCP за 30 секунд
Plasmate ставится из четырёх каналов одновременно:
# pip, cargo, npm или brew — на выбор pip install plasmate cargo install plasmate npm install -g plasmate brew tap plasmate-labs/plasmate && brew install plasmate # Проверка plasmate fetch https://example.com
Подключение к Claude Code в одну строку:
claude mcp add plasmate -- npx plasmate-mcp
После этого Claude получает 16 MCP-инструментов: fetch_page, extract_text, extract_links, open_page, navigate_to, click, type_text, select_option, scroll, toggle, clear, evaluate, close_page, get_cookies, set_cookies, clear_cookies. Хватает для агента, который сам логинится, листает выдачу и вытаскивает данные.
Для Cursor и Windsurf конфиг тот же:
{ "mcpServers": { "plasmate": { "command": "npx", "args": ["-y", "plasmate-mcp"] } } }
Совет из доков: на тяжёлых страницах добавляй selector="main", чтобы плазмата выкинула шапку и подвал ещё до того, как LLM их увидит.
Подводные камни
Технология сырая, и Hurley это не скрывает.
Скриншотов нет. Совсем. Если твой агент решает CAPTCHA по картинке, парсит визуальный layout или работает с canvas-элементами, Plasmate не подходит. Ставь Playwright MCP. SOM описывает только семантику, не пиксели.
Никаких кликов по координатам. Только по SOM-индексу элемента. Это удобно для агента, но если у тебя есть legacy-код с page.click({x: 540, y: 320}), переписывать всё.
Загрузка файлов не поддерживается. Action upload_file отсутствует. Для сценариев типа «загрузить PDF в форму» снова придётся брать Playwright.
Одна вкладка на сессию. Каждый PlasmateBrowser держит ровно один контекст. Multi-tab воркфлоу нужно собирать через несколько инстансов вручную.
Bus factor = 1. Plasmate Labs пока что состоит из одного человека (David Hurley, dbhurley.com/plasmate). 25 тысяч строк Rust, 230 тестов, 98.9% покрытия выглядят солидно. Но если автор завтра выгорит, проект встанет. На главном репо 21 звезда, на plasmate-mcp ноль на момент проверки. Ставить Plasmate в продакшн на критичный пайплайн прямо сейчас — авантюра.
Pre-1.0. Текущая версия v0.5.1 от 5 апреля. SOM Spec помечен как v1.0, AWP-протокол ещё в драфте. До GA можно ловить breaking changes между минорными релизами.
Альтернативы
- Lightpanda — самый близкий конкурент. Rust, headless, выдаёт сырой HTML. На 5× медленнее Plasmate (23 мс против 4-5 мс), нулевая экономия токенов. Главный косяк — лицензия AGPL-3.0: используешь в продукте, и весь твой стек обязан стать open source. Уже писал про него.
- Playwright MCP — Microsoft, MIT, использует настоящий Chrome. Зрелый, поддерживает скриншоты и file uploads, всё то, чего Plasmate не умеет. Платишь за это 252 мс на страницу и 20 GB памяти на 100 вкладок.
- Browser Use — Python-фреймворк поверх Playwright. Удобный API для агентов, но скорость и токены ровно как у Chrome. Кстати, у Plasmate есть готовая интеграция с Browser Use, которая просто заменяет Playwright-бэкенд на SOM.
- Browserbase — managed cloud-сервис от $49 в месяц. Сильный анти-бот стек, но это другой жанр: облако вместо локального бинарника.
Вердикт
Если у тебя AI-агент жуёт веб-страницы пачками и счёт за токены пугает — ставь Plasmate в тестовую среду уже сегодня. 94% экономии переводит проект из категории «не масштабируется» в «можем себе позволить».
Если агент рассчитывает на скриншоты, кликает по координатам или грузит файлы, Plasmate не для тебя. Оставайся на Playwright MCP.
Для продакшн-критичного workflow дождись v1.0 или хотя бы появления второго мейнтейнера. Технически проект сильный, но bus factor единицы остаётся главным риском, и 230 тестов это не лечат.
Как попробовать
- Поставь движок:
pip install plasmate(или cargo/npm/brew) - Подключи MCP к Claude Code:
claude mcp add plasmate -- npx plasmate-mcp - В чате попроси: «Используй plasmate_fetch и собери три топовые истории с news.ycombinator.com со ссылками»
- Сравни число потраченных токенов с тем же запросом через Playwright MCP — разница покажется в
/cost - Для Python-агента: гайд по research-агенту в 50 строк — реальный кейс, не марковский псевдокод
MCP Registry с автоустановкой, бенчмарки с воспроизводимыми скриптами, W3C Community Group по агентским браузерам, куда Hurley тащит SOM как открытый стандарт.