Skip to main content
Glama

Screen Agent

ИИ-агент для тестирования, который видит ваше приложение как реальный пользователь — в 15 раз быстрее, чем Claude Code, не касаясь вашего экрана.

Сервер MCP для автономного визуального тестирования. ИИ планирует шаги тестирования на естественном языке, а сервер выполняет их все без лишних запросов к LLM. Работает в фоновом режиме через CDP (Chrome) или Accessibility API (нативные приложения).

Быстрая демонстрация

# The AI plans. The server executes. No LLM round-trips. Background. 3 seconds.
run_test(name="Login Flow", steps=[
    {"find": "Email",    "action": "click_and_type", "text": "user@test.com"},
    {"find": "Password", "action": "click_and_type", "text": "secret123"},
    {"find": "Log in",   "action": "click"},
    {"verify": "Dashboard"},
])
# → ✅ 4/4 passed in 800ms. Screenshot evidence attached.

Related MCP server: vision-input

Зачем?

Каждый инструмент тестирования заставляет вас выбирать: быстро, но хрупко (Playwright) или умно, но медленно (Claude Code computer use). Screen Agent сочетает в себе оба подхода:

  • Автономное выполнение — run_test() выполняет ВСЕ шаги на стороне сервера. Никаких лишних запросов к LLM. 150 мс/шаг против 1–3 с/шаг у Claude Code. В 15 раз быстрее.

  • Приоритет зрения — LLM ВИДИТ экран и решает, куда нажать. Никаких DOM-селекторов. Изменения в интерфейсе не ломают тесты, так как LLM заново интерпретирует экран.

  • act + eval_js — act возвращает скриншот для визуального анализа LLM, а затем выполняет действие по координатам, предоставленным LLM. eval_js запускает JavaScript через CDP для проверок. 5 тестов за 0,6 с.

  • Фоновое тестирование — window_scope + CDP позволяют тестировать Chrome-приложения на любом рабочем столе macOS, не затрагивая экран пользователя. Для нативных приложений — тесты выполняются даже за другими окнами на том же рабочем столе.

  • Цепочка ввода с несколькими бэкендами — три метода ввода (Accessibility API → CGEvent → pyautogui) с автоматическим переключением. Работает с нативными приложениями, Electron-приложениями и игровыми движками.

  • Input Guardian — система безопасности в реальном времени, которая приостанавливает все действия агента, когда вы касаетесь мыши или клавиатуры. Ни один другой инструмент этого не предлагает.

  • Кросс-приложенческие рабочие процессы — тестирование сценариев, охватывающих несколько приложений (почта → браузер → Slack). Ни один другой инструмент не может этого сделать, так как они ограничены одним приложением.

Архитектура

┌──────────────────────────────────┐
│          MCP Layer               │  22 tools via Model Context Protocol
├──────────────────────────────────┤
│          Engine Layer            │  InputChain (fallback) + Guardian (safety)
│                                  │  + WindowSession (background testing)
├──────────────────────────────────┤
│        Platform Layer            │  Protocol-based backends
│  AX → CGEvent → pyautogui       │  macOS / Windows / Linux
└──────────────────────────────────┘

Цепочка бэкендов ввода

Основная проблема проектирования: pyautogui работает примерно для 80% приложений, но не справляется с игровыми движками и многими Electron-приложениями. Screen Agent решает это с помощью паттерна «Цепочка ответственности»:

Приоритет

Бэкенд

Метод

Лучше всего для

1

AX

AXPerformAction

Нативные приложения macOS — семантически, координаты не нужны

2

CGEvent

CGEventPost

Игры, Electron — нативная инъекция событий ОС

3

pyautogui

Python wrapper

Кроссплатформенный резервный вариант

Каждый бэкенд реализует один и тот же протокол InputBackend. Если один не срабатывает, цепочка автоматически пробует следующий. Все попытки логируются с телеметрией для наблюдаемости.

Установка

pip install screen-agent

# Recommended: install macOS native backends
pip install screen-agent[macos]

Быстрый старт

С Claude Code

claude mcp add screen -- screen-agent serve

С Cursor / другими MCP-клиентами

Добавьте в свою конфигурацию MCP:

{
  "mcpServers": {
    "screen": {
      "command": "screen-agent",
      "args": ["serve"]
    }
  }
}

Проверка возможностей системы

screen-agent check

Инструменты

Восприятие

Инструмент

Описание

capture_screen

Скриншот (полный или области), возвращает изображение для визуального анализа

list_windows

Список всех видимых окон с их позициями

get_active_window

Текущее активное окно

get_cursor_position

Текущая позиция мыши

Ввод (все поддерживают verify: true для скриншотов после действия)

Инструмент

Описание

click

Клик по координатам (левый/правый/средний, мульти-клик)

type_text

Ввод текста в позиции курсора (Unicode через буфер обмена на macOS)

press_key

Нажатие клавиши с модификаторами (например, Cmd+C)

scroll

Прокрутка колесика в указанной позиции

move_mouse

Перемещение курсора без клика

drag

Перетаскивание между двумя точками

focus_window

Вывод окна на передний план по частичному совпадению заголовка

OCR (автоматическое определение китайского, японского, корейского, английского)

Инструмент

Описание

ocr

Извлечение всего текста с ограничивающими рамками

find_text

Поиск текста и возврат его местоположения

click_text

Поиск текста и клик по его центру

Автономное тестирование (главное отличие)

Инструмент

Описание

run_test

Автономное выполнение полного плана тестирования — без лишних запросов к LLM. В 15 раз быстрее.

act

Приоритет зрения: возвращает скриншот → LLM анализирует → выполняет действие по координатам

eval_js

Выполнение JavaScript через CDP. DOM-проверки, клики по элементам, проверка состояния

interact

На основе OCR: поиск элемента по тексту + клик/ввод за один вызов

Фоновое тестирование

Инструмент

Описание

window_scope

Привязка к окну. Chrome: авто-CDP (любой рабочий стол). Нативные: CGWindowList (тот же рабочий стол).

window_release

Снятие привязки к окну, возврат в полноэкранный режим

Визуальное E2E-тестирование

Инструмент

Описание

test_start

Начало сессии тестирования с автоматическим сбором скриншотов

test_step

Начало шага теста (автоматически делает скриншот «до»)

test_verify

Проверка шага через OCR или сравнение скриншотов

test_end

Завершение сессии, создание markdown-отчета с доказательствами

test_status

Текущий статус сессии

Безопасность (Input Guardian)

Инструмент

Описание

add_app

Добавление приложения в «белый список» — агент может взаимодействовать ТОЛЬКО с ними

remove_app

Удаление из «белого списка»

set_region

Ограничение пиксельной областью

clear_scope

Удаление всех ограничений

get_agent_status

Состояние Guardian, статистика бэкендов, информация об области действия

Фоновое тестирование

Screen Agent может тестировать приложения, не занимая ваш экран. Три режима, выбираются автоматически:

Режим 1: CDP (Chrome/Electron — любой рабочий стол, полностью невидимо)

# Start Chrome with debugging port
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
  --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-test
# Connect — works even if Chrome is on a different desktop
window_scope(app="Chrome", url="localhost:3000")

# All operations go through Chrome's internal pipeline
interact(target="Submit", action="click")
interact(target="Email", action="click_and_type", text="test@example.com")

window_release()

CDP полностью обходит оконный сервер macOS. Скриншоты берутся из рендерера Chrome, клики проходят через систему ввода Chrome. Ваш экран никогда не затрагивается.

Режим 2: Захват окна (любое приложение macOS — тот же рабочий стол)

# Works with Figma, Xcode, Terminal, games — any app
window_scope(app="Figma", title="Design v2")
interact(target="Export", action="click")
window_release()

Использует CGWindowListCreateImage для захвата окна, даже если оно находится за другими приложениями. Требуется тот же рабочий стол macOS.

Режим 3: Полноэкранный (исходный)

Без window_scope работает с полным экраном, как и раньше.

Приоритет резервных вариантов

window_scope called → try CDP (Chrome) → try CGWindowList (same Space) → error
no scope → full screen mode

Input Guardian

Уникальная система безопасности Screen Agent с двумя гарантиями:

  1. Приоритет пользователя — любая активность клавиатуры/мыши мгновенно приостанавливает работу агента. Он возобновляет работу только после того, как вы были неактивны в течение 1,5 с (настраивается).

  2. Блокировка области — ограничение агента конкретными приложениями и/или областями экрана.

# Agent can only interact with Chrome and Figma
add_app("Chrome")
add_app("Figma")

# Or restrict to a region
set_region(x=0, y=0, width=800, height=600)

Конфигурация

Все параметры настраиваются через переменные окружения:

Переменная

По умолчанию

Описание

SCREEN_AGENT_COOLDOWN

1.5

Время ожидания Guardian в секундах

SCREEN_AGENT_GUARDIAN_DISABLED

0

Установите "1" для отключения

SCREEN_AGENT_INPUT_BACKENDS

ax,cgevent,pyautogui

Порядок приоритета бэкендов

SCREEN_AGENT_MAX_DIMENSION

2560

Максимальный размер скриншота

SCREEN_AGENT_LOG_LEVEL

INFO

Уровень логирования

Поддержка платформ

Функция

macOS

Windows

Linux

Скриншот

mss

mss

mss

Ввод AX

Quartz AX

-

-

Ввод CGEvent

Quartz

-

-

Ввод pyautogui

fallback

fallback

fallback

Управление окнами

AppleScript

-

wmctrl

OCR

Vision Framework

-

-

Масштабирование Retina

авто-определение

-

-

Захват окна

CGWindowListCreateImage

PrintWindow

xdotool+ImageMagick

Разработка

git clone https://github.com/chriswu727/screen-agent
cd screen-agent
pip install -e ".[dev,macos]"
pytest tests/unit/ -v
ruff check src/ tests/

См. DEVPATH.md для истории разработки и архитектурных решений.

Лицензия

MIT

Related MCP Connectors

Related MCP Servers