Live-антифрод Quest
Без нас вы нанимаете не кандидата, а его GPT. С нами — видите кто реально решал.
Как это работает
Клиентский JavaScript в Quest незаметно отслеживает четыре класса сигналов. Каждый собирается в объект telemetry, который передаётся вместе с ответом на бэкенд. Агрегатор anticheat.py вычисляет флаги и добавляет их в HR-отчёт.
Потеря фокуса / смена вкладки
Трекинг через visibilitychange + window blur. Срабатывает каждый раз, когда кандидат уходит с вкладки — типичный паттерн открытия LLM-чата или поиска.
document.visibilityState + window.blurfocus_loss_count > 0Открытые DevTools
Resize-trick: docked DevTools увеличивают outerHeight без изменения innerHeight. Разница >200px — сигнал. Опрос каждые 5 секунд.
window.outerHeight − window.innerHeight > 200devtools_event_count >= 3Демонстрация экрана
Патч navigator.mediaDevices.getDisplayMedia. Оригинальный вызов не блокируется — логируем факт. Ловит расширения, которые транслируют экран внешнему наблюдателю.
Monkey-patch getDisplayMedia до инициализации теста.screen_share_attempt_count >= 1Аномалия времени на вопрос
При рендере каждого вопроса фиксируем performance.now(). При ответе — вычисляем response_time_ms. Если медиана по открытым вопросам < 800 мс — флаг fast_open_text_median.
questionRenderedAt = performance.now() при render; delta при submit.median(response_time_ms_per_question) < 800Демо: аномалия времени
Нажмите «Показать вопрос», потом сразу «Ответить» — сработает флаг (менее 800 мс). Подождите секунду после показа — флаг не выставится.
Нажмите в Quest и увидите алерты здесь.
iframe с quest.i-develop.tech появится после настройки demo-токена
Live-алерты
Ждём сигналов...
Переключите вкладку, откройте DevTools
или запустите screen share