Эфир 18.11 · Поток 318 ноября в 19:00 МСК — бесплатный практический эфир по ИИ-агентам · Живой Поток 3 стартует 23.11Эфир 18 ноября →Поток 3 (23.11)
РелизРазбор · На радарHabr AI→ оригинал

Маркетолог собрал AI-монитор конкурентов: он видит тихие фичи и не шумит на деплоях

Обычный мониторинг сайтов конкурентов превращается в детектор фронтенд-деплоев: поменялся класс или URL, и в Slack летит алерт. Аналитик Garage Eight построил иначе: LLM заходит в продукт под логином пользователя и превращает интерфейс в список возможностей, а сравнивает их обычный Python-код. В Slack попадает только то, что пользователь теперь может делать нового.

AI-обработка оригинала Habr AI; редакция Hamidun News
Маркетолог собрал AI-монитор конкурентов: он видит тихие фичи и не шумит на деплоях
Источник: Habr AI. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникHabr AI ↗
Главный редактор
Ключевой факт #1Сравнивайте capabilities («schedule_action»), а не DOM и названия кнопок
Логины и пароли держите вне MCPавтологин в отдельном процессе
Session-cookie умирает с Chromeне закрывайте браузер, подключайтесь через CDP

Самые интересные изменения в продуктах конкурентов никто не анонсирует. Новую автоматизацию или AI-помощника просто включают пользователям, без пресс-релиза и без записи в сторе. Владимир Михайлов, Marketing Analyst в Garage Eight, решил ловить такие вещи автоматически. Его опыт полезен всем, кто пытался сделать мониторинг на Playwright и утонул в ложных тревогах.

Почему сравнение DOM не работает

Первая идея очевидна: снять HTML сегодня, снять завтра, сравнить. На современном SPA это даёт детектор фронтенд-деплоев, а не продуктовых изменений. Поменялся CSS-класс, testid, адрес раздела, компонент переехал, кнопку переименовали, пользователю показали другой вариант A/B-теста. Всё это сотни алертов в день, и почти все бесполезны.

Автор поменял сам вопрос. Не «что изменилось на странице», а «что пользователь теперь может делать такого, чего не мог раньше». Из этого вытекает ключевое архитектурное решение: LLM не получает два HTML-файла с просьбой «найди разницу». Модель работает раньше, на входе: исследует интерфейс и собирает структурированную модель продукта. Сравнение двух моделей делает детерминированный Python. Результат стабильный и воспроизводимый, а не зависящий от настроения модели.

Пример из статьи. Функция переехала с /analytics на /insights/analytics, DOM переписали, пользователь ничего не заметил. Структурный diff закричит «MAJOR CHANGE!». А если URL и название остались прежними, но к ручному действию добавилось расписание автоматического запуска, diff промолчит, хотя это важное изменение. Поэтому у каждой функции хранится список capabilities: schedule_action, export_report, create_custom_alert. Для них считается отдельный хеш, и именно он говорит об изменении по существу.

Пайплайн и два интерфейса

Цепочка такая: браузер с авторизованной сессией, AI Discovery, модель функций, семантический снимок, сравнение, фильтр бизнес-значимости, Slack. Публичный сайт показывает лишь витрину. Saved Views, Custom Alerts, Automation Rules и рекомендации видны только после входа, поэтому система ходит по продукту как обычный залогиненный пользователь.

К этому добавлен аналитический слой. Claude подключён через MCP к истории мониторинга с read-only инструментами: текущие функции конкурентов, NEW/UPDATED/REMOVED за период, фильтры по категориям, проверка покрытия. Получилось два режима. Slack присылает изменения сам. А на вопрос «что появилось у конкурентов за месяц, чего нет у остальных?» аналитик получает ответ обычным языком, без SQL и JSON. История ещё и синхронизируется с Google Drive как база знаний для отдельного Claude Project.

Авторизация: где ломается автоматизация

Большая часть статьи посвящена тому, как не сломаться на логине. Практичные находки:

  • Состояния вместо проверки URL. Условие «в адресе нет /login» ненадёжно: SPA может на секунду показать одно и тут же перебросить на другое. Автор использует state machine (AUTH_OK, AUTH_EXPIRED, AUTH_2FA_REQUIRED, AUTH_CAPTCHA_REQUIRED, AUTH_UNKNOWN) и считает пользователя авторизованным, если найдено минимум два из трёх независимых маркеров, например меню пользователя и кнопка выхода.
  • Ошибки навигации не равны провалу логина. Исключение «Execution context was destroyed» при успешном входе может спровоцировать повторную отправку формы. Состояние проверяется серией замеров, а временные ошибки пропускаются.
  • Секреты не попадают в модель. Логин и пароль лежат в системном хранилище, а вводит их отдельный standalone-процесс Playwright. AI получает лишь сигнал, что сессия снова жива, и в истории запросов к модели секретов нет.
  • 2FA не обходят. Если пришла СМС, система останавливается и ждёт человека. После ввода кода сессия сохраняется, и следующие запуски идут сами.
  • Капча капче рознь. Невидимый reCAPTCHA-бейдж на странице не значит, что вас сейчас просят пройти проверку. Нужно различать «капча существует» и «капча блокирует вход».
  • Persistent profile не равен persistent session. Один сервис выдавал auth-cookie с expires: -1, и она умирала вместе с процессом Chrome. Автор не стал с этим бороться: после автологина браузер остаётся открытым, а Playwright MCP подключается к нему через CDP (connectOverCDP).

Что забрать себе и о чём помнить

Три переносимые идеи. Первая: LLM используйте для превращения хаоса в структуру, а сравнивайте детерминированным кодом. Вторая: описывайте продукт через действия пользователя, а не через разметку. Третья: считайте секреты зоной, куда модель не заходит в принципе.

Ограничения тоже есть. В доступной части материала нет цифр: сколько стоит прогон, как часто модель пропускает или выдумывает функции, как фильтр значимости отличает важное от мелочи. Заход в чужие продукты под аккаунтом может нарушать условия использования сервиса, и это стоит проверить с юристами до запуска. Сама архитектура при этом выглядит рабочей и годится для продуктовой разведки в любой команде.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: почему сравнение DOM не работает?

Первая идея очевидна: снять HTML сегодня, снять завтра, сравнить. На современном SPA это даёт детектор фронтенд-деплоев, а не продуктовых изменений. Поменялся CSS-класс, testid, адрес раздела, компонент переехал, кнопку переименовали, пользователю показали другой вариант A/B-теста. Всё это сотни алертов в день, и почти все бесполезны. Автор поменял сам вопрос. Не «что изменилось на странице», а «что пользователь теперь может делать такого, чего не мог раньше».

Что известно по теме: пайплайн и два интерфейса?

Цепочка такая: браузер с авторизованной сессией, AI Discovery, модель функций, семантический снимок, сравнение, фильтр бизнес-значимости, Slack. Публичный сайт показывает лишь витрину. Saved Views, Custom Alerts, Automation Rules и рекомендации видны только после входа, поэтому система ходит по продукту как обычный залогиненный пользователь. К этому добавлен аналитический слой.

Что известно по теме: авторизация: где ломается автоматизация?

Большая часть статьи посвящена тому, как не сломаться на логине. Практичные находки: Состояния вместо проверки URL. Условие «в адресе нет /login» ненадёжно: SPA может на секунду показать одно и тут же перебросить на другое. Автор использует state machine (AUTH_OK, AUTH_EXPIRED, AUTH_2FA_REQUIRED, AUTH_CAPTCHA_REQUIRED, AUTH_UNKNOWN) и считает пользователя авторизованным, если найдено минимум два из трёх независимых маркеров, например меню пользователя и кнопка выхода. Ошибки навигации не равны провалу логина.

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Практика · Hamidun Academy

Соберите рабочего ИИ-агента или сервис своими руками без ручного кода

В Академии Жемала Хамидуна (academy.hamidun.com) открыт бесплатный 72-часовой тест-драйв: интерактивные скетч-уроки по Claude Code и Cursor, живой Tech Radar и готовые шаблоны агентов.

Открыть 72ч бесплатный доступ →Интенсив по Вайб-кодингу
Что вы думаете?
Загружаем комментарии…