Argus
Сервер MCP, который тестирует приложения как настоящий инженер по тестированию — исследуя пользовательские пути, выявляя несценарные баги и доказывая каждое обнаружение перед его сообщением.
Argus — это сервер MCP. Он добавляет QA в браузере с упором на доказательства к Claude Code, Codex, Cursor или любому MCP-хосту, не занимая идентичность агента хоста или более широкую задачу кодирования. Агент исследует, проверяет устойчивость, регистрирует воспроизводимые баги. Каждый сертифицированный вывод повторно подтверждается из чистой загрузки страницы, прежде чем быть сообщением.
Страница продукта · Быстрый старт · Почему Argus уникален · Сравнение · Инструменты · Бенчмарки
Результат
Дайте ему URL — получите отчет о баге с пометкой, воспроизводил ли Argus его независимо, или он был только наблюдаемым:
Зелёный бейдж — вот в чём суть. Любой может «заявить» баг в LLM. Argus перезагружает страницу с нуля и повторно проверяет симптом, прежде чем пометить VERIFIED — поэтому отчет представляет собой список багов, которым можно доверять, а не список догадок для triage.
Как это работает
flowchart LR
A(["observe"]) --> B{"looks wrong?"}
B -->|not sure| C["act: click · type · resize · verify"]
C --> A
B -->|bug| D["verify_persistence — reload from a clean state"]
D -->|symptom repeats| E(["VERIFIED"])
D -->|symptom gone| F(["dropped — no false positive"])
E --> G[["report: HTML · JSON · JUnit · SARIF"]]
Агент — интеллект. Argus предоставляет краткие инструкции по QA, набор инструментов с описанием целей (click_what("Login button"), а не click(7)), реестр охвата целей и движок воспроизведения, который превращает «модель считает это багом» в «этот баг реальный, вот доказательство».
Быстрый старт
С установленным uv глобальных пакетов Python не требуется. Установите Chromium один раз:
uvx --from playwright playwright install chromium
Затем подключите Argus к вашему MCP-клиенту.
Claude Code
claude mcp add argus -- uvx --from argus-testing argus-mcp
Codex и настольное приложение ChatGPT
CLI Codex, расширение IDE Codex и настольное приложение ChatGPT используют одну и ту же локальную конфигурацию MCP:
codex mcp add argus -- uvx --from argus-testing argus-mcp
Cursor
Кнопка добавляет Argus в Cursor; запустите команду установки Chromium выше перед первым тестом.
Любой stdio MCP-клиент
{
"mcpServers": {
"argus": {
"command": "uvx",
"args": ["--from", "argus-testing", "argus-mcp"]
}
}
}
По умолчанию профиль core обеспечивает основной рабочий поток веб-тестирования без перегрузки хоста каждым специализированным инструментом. Используйте uvx --from argus-testing argus-mcp --list-tools чтобы проверить выбранный профиль, --tool-profile screen для нативного macOS-тестирования или --tool-profile full для полного набора инструментов. Переменная окружения ARGUS_TOOL_PROFILE передаёт ту же настройку.
Затем просто скажите в сессии агента:
"Проверь мое приложение по адресу http://localhost:3000 — найди реальные баги."
И всё. Агент управляет, Argus держит его в рамках и формирует отчет.
Для ограниченного обзора хост может задать explicit goals, constraints и advisory time_budget_minutes. Argus возвращает полный протокол тестирования один раз и сохраняет открытые цели и найденные страницы для последующих наблюдений. Отметьте цель как in_progress перед её началом; когда coverage_update помечает её как exercised или blocked, Argus требует конкретного объяснения и автоматически связывает URL, действия с редактированными значениями, скриншоты, проверки устойчивости, баги и наблюдения, возникшие в этом окне тестирования. Финальные HTML и JSON-отчеты сохраняют как завершённое, так и незавершённое покрытие, не подразумевая, что неполный проход был исчерпывающим.
Установка через pip
pip install argus-testing
playwright install chromium
claude mcp add argus -- argus-mcp
CLI-режим (нет MCP-хоста — используйте свой собственный LLM)
# Использует планировщик на базе LiteLLM. Установите ключ провайдера (OPENAI_API_KEY, DEEPSEEK_API_KEY, …).
uvx --from argus-testing argus http://localhost:3000 --model deepseek/deepseek-chat
# Более высокая полнота: объединение N независимых проходов (дубликаты устранены, повторяемость сохранена)
uvx --from argus-testing argus http://localhost:3000 --passes 3
Screen-мод (macOS) — тестируйте любые нативные приложения, не только веб
pip install 'argus-testing[mac]'
brew install cliclick # резервный ввод клавиш / координат
argus-mcp --doctor # проверить разрешения Screen Recording + Accessibility
claude mcp add argus-screen -- argus-mcp --tool-profile screen
Та же описательная настройка инструментов, но цель — любое приложение, находящееся на переднем плане в macOS — Notes, Cursor, Safari, ваша текущая фича. Нет headless Chrome, нет скриптов Playwright. Argus видит то, что видит пользователь, через дерево Accessibility.
Почему Argus отличается
Существующие инструменты тестирования тестируют то, что вы запрограммировали. Playwright и Cypress выполняют ваши утверждения. Argus обнаруживает баги, о которых вы не подумали тестировать — и делает то, что один LLM не может надёжно сделать: доказывает их.
| Argus | Playwright MCP | Chrome DevTools MCP | browser-use | |
|---|---|---|---|---|
| Автономное обнаружение неизвестных багов | Да | Нет (драйвер) | Нет (отладчик) | Частично (задачно-ограничено) |
| Независимая верификация каждого вывода | Да (receipt) | Нет | Нет | Нет (оценка LLM) |
| Богатый багаж доказательств багов | Да | Нет | Нет | Частично |
| Черный ящик (без доступа к репо/коду) | Да | Да | Да | Да |
| Нулевой риск регрессионного CI | Да | Частично | Нет | Частично |
Это не «худшие» инструменты — это другая работа. Playwright MCP даёт агента в руки, Chrome DevTools MCP — глубокий просмотр сети/памяти/производительности Argus-у—этого нет. Argus — слой, который определяет, что является багом, и доказывает это. Используйте их вместе.
Бенчмарки
$ python -m argus.bench --target all
buggytasks 22 / 22 = 100 % · механические баги (консольные ошибки, фиктивное удаление, обход аутентификации…)
darkshop 12 / 12 = 100 % · баги на взгляд человека (фиктивная редкость, «лежачие» уведомления и т. п.)
──────────────────────────────────────────────────────────────────────
total 34 / 34 = 100 % · воспроизводимо из git clone двумя командами
34 / 34 — это потолок возможностей — то, что реально находимо через поверхность инструмента, измеряемое детерминированными скриптами. Оно сознательно отделено от того, как часто конкретная модель LLM помнит использовать инструменты хорошо, что ниже будет опубликовано откровенно.
Истинная память реальных LLM — честная цифра (и почему мы показываем разброс)
python -m argus.bench.agent_runner ставит в роли водителя реальную модель и оценивает recall по трём попыткам. Что мы узнали в ходе тестирования:
-
Истинный recall заметно ниже потолка
34/34. Живой драйвер находит лишь часть багов из затащенной совокупности за проход — потолок показывает, что можно найти, а модель — что реально найдётся. -
Большой разброс — не судите модели по нескольким запускам. Recall по попыткам сильно варьируется; мы публикуем разброс, а не одну «геройскую» цифру.
-
Бенч-мод сыграл в Argus саму собой — crash
record_bugна строковом аргументе, пропадание находок, пропуски резольвера на распространённых словоформах. Инструмент-тестовый инструмент протестирован. -
Прецизионность сохраняется независимо от драйвера. В каждом испытании воспроизводение сохраняло нулевые ложные сертификации — слабая модель найдёт меньше багов, но те, что помечены VERIFIED, остаются реальными.
Что за фикстуры заливаются
BuggyTasks (:5555) — 22 механических бага в тестовом приложении: консольные ошибки, мёртвые ссылки, фиктивное удаление (интерфейс пишет «удалено!», но данные сохраняются после обновления), обход аутентификации, NaN-даты, off-by-one, гонки. Уровень, где «скриптовый E2E мог бы найти их».
DarkShop (:5556) — 12 багов, видимых глазу человека, в хорошо выглядящем магазине: встроенная «Only 3 left!» нехватка товара, бейджи -50%, где цена продажи равна оригиналу, баннер «free shipping over $50», противоречащий фиксированной стоимостью в $5 на этапе оплаты, инвертированная визуальная иерархия, изменение состояния между страницами, переработанные названия в навигации. Статический анализ почти ничего не ловит — эти баги требуют агента, который читает страницу и Reasoning.
python test-site/app.py # BuggyTasks :5555
python human-eye-fixture/app.py # DarkShop :5556
python -m argus.bench --target all
Поверхность инструментов
argus-mcp стартует с сфокусированного профиля core. Ниже описаны все открытые инструменты. Подсчёт также доступен напрямую через установленный сервер:
uvx --from argus-testing argus-mcp --list-tools
uvx --from argus-testing argus-mcp --tool-profile screen --list-tools
uvx --from argus-testing argus-mcp --tool-profile full --list-tools
| Профиль | Публичные инструменты | Предназначение |
|---|---|---|
| core | 30 | Основной рабочий процесс веб-QA; по умолчанию. |
| screen | 14 | Фокусированное native macOS тестирование через Accessibility и скриншоты. |
| full | 77 | Всё в core и screen, плюс специалисты по браузеру, состоянию, сети, координациям и обходам. |
Профиль Core — 30 инструментов
| Инструменты | Назначение |
|---|---|
| start_session | Запуск исследовательского, визуального или регрессионного обзора браузера; может принять цели, ограничения и time_budget_minutes; возвращает одноразовый протокол и начальное наблюдение. |
| observe | Возвращает URL, заголовок, интерактивные элементы по описанию, счётчики, видимую обратную связь, ARIA-дерево и состояние окна просмотра. |
| coverage_update | Открыть окно доказательств цели с in_progress, затем пометить как exercised или blocked; конечные состояния требуют объяснения и автоматически связывают доказательства сессии. |
| click_what | Нажать на элемент, максимально соответствующий естественно-языковому описанию; при неоднозначности возвращает кандидатов вместо догадки. |
| type_into · select_into | Разрешить поле по описанию, затем набрать текст или выбрать опцию. |
| hover_what · press_key | Тестировать наведения и клавиатурные взаимодействия по целям с описанием. |
| resize · emulate_device | Тестировать точки прелома адаптивности или повторно открыть страницу под реальные мобильные настройки. |
| upload_file | Прикреплять один или несколько локальных файлов к соответствующему input. |
| navigate · go_back · scroll_down | Перемещаться напрямую, возвращаться по истории браузера или открывать контент ниже прокрутки. |
| inspect_element · check_layout | Изучать вычисляемые стили, ARIA и разметку, а также сигналы переполнения, обрезки, мелких целей и наложений. |
| screenshot · screenshot_diff | Захватывать доказательства в виде скриншота экрана, всей страницы или элемента и выводить пиксель-диапазон. |
| get_errors | Очистить связанные ошибки консоли и HTTP 4xx/5xx, зарегистрированные со времени предыдущего чтения. |
| capsule_save · capsule_restore | Сохранять и восстанавливать именованное аутентифицированное или за Seed-состояние браузера, с опциональной проверкой живости. |
| verify_persistence | Принудительно перезагрузить и проверить наличие целевого текста; «Saved!» на тосте не доказательство, это — это. |
| test_action · test_form | Выполнить описание-ориентированное действие или отправку формы и вернуть изменение состояния в одном раунде. |
| check_links · check_performance | Проверить внутренние ссылки текущей страницы и предоставить исходные показатели производительности браузера без автоматической сертификации общих выводов аудита. |
| regression_check | Повторно проверить зафиксированные находки для текущего origin без необходимости повторной стадии обнаружения. |
| record_bug · record_observation | Зафиксировать воспроизводимый дефект с доказательствами и receipts, или сохранить качественный обзор отдельно от сертифицированных багов. |
| end_session | Завершить активную сессию и вывести отчёты HTML, JSON, JUnit и SARIF. |
Отчёты сохраняют оригинальные скриншоты как доказательство и по умолчанию пишут компактные превью WebP в report-assets/, вместо того чтобы встраивать каждый полный PNG в HTML. Установите ARGUS_PORTABLE_REPORT=1, если важнее получить один самодостаточный HTML-файл, чем размер. Вывод JSON включает полные reproduction receipts, контракт покрытия и его структурированные ссылки на доказательства, ограничения, режим обзора, счётчики вызовов инструментов и записанных шагов, метаданные скриншотов и качественные наблюдения. Итоги по тестам JUnit совпадают с выпущенными узлами <failure>.
Screen-профиль — 14 инструментов
| Инструменты | Назначение |
|---|---|
| start_screen_session | Привязаться к переднему плану или к именованному macOS-приложению после проверки разрешений Screen Recording и Accessibility. |
| screen_observe | Вернуть переднее приложение, заголовок окна, ограниченное AX-дерево, координаты экрана и новый скриншот. |
| screen_click_what · screen_type_into · screen_press_key | Разрешать через AX-дерево и действовать через нативный accessibility, с запасным вариантом cliclick. |
| screen_wait_for_stable | Ждать, пока целевое окно остаётся визуально стабильным в заданном пороге. |
| screen_launch · screen_quit · screen_is_running | Управлять и проверять приложение по локальному имени, идентификатору пакета или абсолютному пути. |
| screen_screenshot_region | Захватить точную прямоугольную область экрана для детализированного визуального доказательства. |
| screen_session_status | Сообщать о прошедшем времени, оставшемся бюджете сессии, количестве действий и пути к файлу прерывания. |
| record_bug · record_observation · end_session | Использовать общие средства доказательств, отчетности и завершения в режиме screen. |
Безопасность: ограничение по времени вызова, лимит сессии в 30 минут, файл паники ~/.argus/abort, который останавливает все последующие действия, и автоматическая цепочка скриншотов до/после каждого действия.
Полный профиль — 77 инструментов Полный профиль включает все инструменты core и screen, плюс 36 специальных инструментов. Используйте, когда рабочий процесс действительно нуждается в низкоуровневом состоянии, инъекции ошибок, контроле нескольких вкладок, координатах или обходах.
| Дополнительные инструменты | Назначение |
|---|---|
| paste_into · right_click | Выполнить реальный клипборд-вставку или открыть контекстное меню цели. |
| emulate_media | Эмулировать темную/светлую тему и предпочтения с минимизированным движением. |
| click_at · type_at · hover_at · drag_at · drag_what | Работать с холстами/WebGL, раскрытием наведения и перетаскиванием по координатам или по описанию. |
| drop_file | Перетащить реальный файл в соответствующую зону.drop. |
| set_dialog_handler | В очереди подготовить ответ на следующий JavaScript-диалог (accept/dismiss/prompt). |
| eval_js | Выполнять произвольный JavaScript в контексте страницы. Работает при включённом параметре --unsafe на сервере. |
| network_requests · network_request | Просмотреть ограниченный лог запросов или детализировать один соответствующий запрос. |
| network_mock · network_unmock · network_clear_mocks · network_clear_log | Вставлять готовые HTTP-ответы и независимо сбрасывать активные моки или перехваченный трафик. |
| cookies_get · cookies_set · cookies_clear | Просматривать, задавать или очищать cookies контекста браузера. |
| storage_get · storage_set · storage_remove · storage_clear | Просматривать и изменять page-local localStorage или sessionStorage. |
| tabs_list · tabs_switch · tabs_close | Управлять OAuth, платежами и другими попапами или мульти-вкладками. |
| wait_for_text · wait_for_request | Ждать появления конкретного видимого текста или соответствующего исходящего трафика с ограничением по времени. |
| get_downloads | Просматривать файлы, загруженные во время сессии, их пути и размеры. |
| crawl_site | Пробежать ограниченные внутренние страницы и собрать события браузера, результаты ссылок и доказательства производительности. |
| screen_click_at · screen_hover_at · screen_drag · screen_keys · screen_type_at | Использовать абсолютные координаты экрана и многоклавишные последовательности, когда нативное AX-дерево не даёт полезного элемента. |
Чтобы открыть eval_js как рабочий инструмент, а не отключённую заглушку безопасности:
uvx --from argus-testing argus-mcp --tool-profile full --unsafe
Локальная безопасность и приватность
Argus работает на вашем устройстве и не отправляет телеметрию в сервис Argus. Отчёты и скриншоты сохраняются по умолчанию в ./argus-reports; ваш MCP-хост и его настроенный провайдер моделей всё равно могут получать результаты инструментов, включённые в диалог. Browser-действия и нативные macOS-контроли могут вызывать реальные побочные эффекты, поэтому по возможности используйте тестовые учётные записи и данные.
Прочтите полное положение о конфиденциальности и политику безопасности перед использованием Argus против чувствительных систем.
Философия
Доверяйте агенту, а не симулируйте интеллект
Argus предполагает водителя уровня Opus. Статические правила, которые пытаются «быть» интеллектуальным слоем, добавляют обслуживание и ложные срабатывания и отвлекают от того, что агент реально видел. Поэтому detector.py минимален: он фиксирует только те два канала, которые агент буквально не может увидеть (поток консольных событий и HTTP-слой). «Это тост вводит в заблуждение? У визуальной иерархии есть ошибки? Этот счёт неверен?» — агент читает observe() и принимает решение.
Руководство по обзору; не перегружайте хост-задачу
Глобальная инструкция намеренно короткая, чтобы не повторять длинный QA-промпт в каждом описании инструмента MCP. start_session возвращает полный протокол доказательств, целей, ограничений и бюджета единожды; наблюдения затем показывают только компактный живой реестр покрытия. Argus остаётся возможностью внутри текущей задачи пользователя: он не заменяет реализацию, не подменяет идентичность хоста и не даёт полномочий на необратимые внешние действия.
Описание по ключевым характеристикам, а не по индексу
click_what("Login button"), а не click(7). Элементы по индексу — ненадёжная абстракция даже внутри одного observe. Умелый агент описывает то, чем он является, и разрешение сопоставляет это с нужным элементом — отказываясь промахнуться из-за неоднозначности, а не угадывая.
Структура проекта
argus/
├── mcp_server.py # поверхность инструментов + инструкции по ролям + reproduction-receipt engine
├── browser.py # Back-end Playwright: извлечение DOM/ARIA, capsule/replay
├── resolver.py # description → element (web + screen)
├── reporter.py # HTML + JSON + JUnit + SARIF
├── detector.py # захват консоли + сети (только)
├── cli.py # argus (explore) + argus-regression
├── bench/ # детерминированный потолок + реальная recall от LLM
└── screen/ # macOS AX-бэкенд, разрешения, безопасность
test-site/ # BuggyTasks (22 механических бага)
human-eye-fixture/ # DarkShop (12 багов "на глаз")
MIT licensed · Страница продукта · Руководство по установке агента · Конфиденциальность · Безопасность · Разработано Yichen Wu