Автономный AI-агент · настоящий Chromium · ноль селекторов
EagleEye
EagleEye рулит настоящим Chromium через Playwright. Читает страницы как accessibility-дерево, думает LLM-ом и действует через крошечный набор инструментов — никаких скриптов под сайт, никаких хрупких XPath, никаких ручных сценариев.
Что внутри
Маленький ReAct-цикл, настоящий браузер и аккуратная обвязка.
Фазы 1–5 уже в проде: скелет, полный набор инструментов, компрессия контекста, scratchpad, рефлексия после действий, детектор повторов, Docker + noVNC + постоянный профиль + мастер логина, Web UI со встроенным noVNC.
- 01
Настоящий Chromium через Playwright
Агент видит страницу как
aria_snapshot(mode="ai")— YAML-дерево доступности с метками[ref=eN]— и действует черезclick/type, которые разрешаются селекторомaria-ref=. Никаких CSS-селекторов и кода под сайт. - 02
LLM-ядро без привязки к провайдеру
Подключайте Anthropic Claude (по умолчанию
claude-sonnet-4-6) или любой OpenAI-совместимый эндпоинт — OpenAI, OpenRouter, DeepSeek, локальный Ollama. Prompt caching в адаптере Anthropic из коробки. - 03
Docker + noVNC, профиль живёт
docker compose up -d --buildподнимает Chromium + Xvfb + x11vnc + noVNC + Web UI. Профиль браузера лежит на именованном томе — логинитесь один раз, сессия переживает рестарты. - 04
Контекст, который не взрывается
Старые
observe()-снепшоты автоматически сжимаются в одну строку; scratchpad переживает компрессию; рефлексия отмечает «клик ничего не сделал»; детектор повторов срабатывает после трёх одинаковых вызовов инструмента.
ReAct-цикл
Observe → think → act → reflect. Пока не вызовется done().
Каждый шаг агент получает свежий снепшот страницы, выбирает инструмент, выполняет его, читает телеметрию и либо решает следующий ход, либо завершает задачу. Бюджеты: MAX_STEPS=60, MAX_COST_USD=2.0 — мягкий abort при превышении.
- 01 · observe1
Снимаем страницу
Playwright
aria_snapshot(mode="ai")возвращает YAML-дерево доступности с[ref=eN]. Старые снепшоты в истории сжимаются в одну строку — токены платим только за свежий. - 02 · think2
Планируем LLM-ом
В Claude или GPT уходит системный промпт + описания инструментов + история + scratchpad. Модель отдаёт блоки
tool_use—navigate,click,type,extract,ask_user,done, … - 03 · act3
Запускаем инструменты
Обработчики резолвят refs через
aria-ref=, выполняют действие, фиксируют URL+title+длину body до и после и кидают события в шину — Web UI рисует их как живой timeline. - 04 · reflect4
Ловим пустые действия
Если меняющее действие не задело ни URL, ни title, ни длину body — в результат подмешивается
[reflection]. После трёх одинаковых вызовов(tool, args)подряд системная заметка просит сменить тактику.
Запустить у себя
Поднимается двумя командами.
Рекомендуемый путь — Docker: Chromium + Xvfb + x11vnc + noVNC + Web UI одним compose-файлом. Web UI на http://localhost:8000, голый noVNC на http://localhost:6080.
$ cp .env.example .env# заполните LLM_PROVIDER + API-ключ$ docker compose up -d --build# открыть http://localhost:8000
Учебный проект · Playwright + LLM · Anthropic · OpenAI · OpenRouter · DeepSeek · Ollama