CAPTCHA и бот-стены (ChallengeGate)
Когда сайт показывает Cloudflare «Just a moment…», reCAPTCHA, hCaptcha, Turnstile
или подобное, VibeOS не должен спамить кликами или выдумывать содержимое страницы.
Загрузите встроенный навык challenge-gate и следуйте уровням L0→L4.
Это не руководство по взлому безопасности сайтов. Путь продукта таков: обнаружить → избежать → одна опциональная помощь провайдера → вы решаете в живом браузере → продолжить или продолжить с частичным кратким отчётом.
Быстрый путь (операторы)
# Готовность включает ChallengeGate + опциональный Browserbase
vibeos research doctor
# Заполнить пустые web.* и отсутствующие значения по умолчанию browser.challenge.*
vibeos research preset research-pro --apply
# Глубокий пакет: чеклист ChallengeGate + cloud_provider Browserbase + заметка scrapling
vibeos research preset research-deep --apply
# Офлайн-проверка (без живой CAPTCHA)
scripts/smoke-challenge-gate.sh
# Офлайн-демо передачи (уточнение + контракт возобновления + артефакты L4)
scripts/demo-challenge-gate-handoff.sh
# Создать рабочее пространство (включает challenge.md)
vibeos research run --topic "…" --mode brief
На десктопе: Настройки → Research Pro показывает пилюли challenge / Browserbase / CDP и то же поведение Apply.
Ручное E2E (живые мягкие/жёсткие стены, Done/Skip, возобновление CDP): см.
docs/ops/challenge-gate-manual-e2e.md в вашей установке VibeOS.
Уровни (простым языком)
| Уровень | Значение |
|---|---|
| L0 Обнаружение | browser_navigate возвращает challenge / bot_detection_warning |
| L1 Избегание | Предпочесть web_search / web_extract / MCP OAuth; одна мягкая повторная попытка для мягких стен |
| L2 Провайдер | Опционально Browserbase stealth/прокси, если настроено — один раз |
| L3 Человек | Агент запрашивает через clarify; вы решаете; ответьте готово или done |
| L4 Частично | Отметить access: blocked_by_challenge в sources.json, записать challenge.md, продолжить |
Навыки, запрещающие обход (например, ru-public-sources), пропускают L2 и идут
Обнаружение → опционально Человек → L4.
Что делать, когда агент спрашивает
- Откройте окно живого браузера (локальный headed-браузер, Browserbase Live View
или Chrome, подключённый через
/browser connect/browser.cdp_url). - Пройдите CAPTCHA самостоятельно (не вставляйте пароли в чат).
- Предпочитайте Open live browser, когда текст уточнения содержит URL Browserbase Live View (та же облачная сессия / куки). Иначе используйте ваш headed Chrome / окно CDP.
- Ответьте
готовоилиdone— на десктопе кнопка Solve CAPTCHA также предлагает Done, Skip page и Research Pro. - Если не можете: ответьте
пропустить/skip— краткий отчёт продолжается без выдумывания этой страницы.
Шаблонный текст для агентов:
skills/research/challenge-gate/templates/human-handoff.md
Канбан / cron
Долгие исследовательские задачи должны блокироваться с kind=challenge
(статус остаётся blocked, исполнитель становится human) при ожидании CAPTCHA:
vibeos kanban block <task-id> --kind challenge --reason "CAPTCHA на каталоге поставщика"
# → Заблокировано … (kind=challenge, assignee=human)
Cron не должен продолжать разблокировать и повторно натыкаться на стену ночью —
вместо этого доставить частичный краткий отчёт / оповещение. Рецепт:
docs/ops/cron-research-challenge.md. Прерыватель цикла разблокировки
эскалирует до triage, если разблокировка ↔ повторная блокировка зацикливается.
Опциональное живое только обнаружение (никогда не решает):
RUN_LIVE_CHALLENGE_DETECT=1 CHALLENGE_GATE_LIVE_URL='https://…' \
scripts/smoke-challenge-gate-live-detect.sh
# Подготовка к возобновлению через куки — оставить сессию открытой для сценария E:
CHALLENGE_GATE_KEEP_SESSION=1 RUN_LIVE_CHALLENGE_DETECT=1 \
CHALLENGE_GATE_LIVE_URL='https://…' \
scripts/smoke-challenge-gate-live-detect.sh
Чеклист оператора: docs/ops/challenge-gate-manual-e2e.md (сценарий E) и
docs/ops/capability-operator-runbook.md.
Помощник логирования
python3 skills/research/challenge-gate/scripts/append_challenge_log.py \
--path challenge.md --also-sources sources.json <<'EOF'
{"url":"https://example.com","type":"cloudflare_iuam","severity":"hard","detected_by":"title","layer_reached":"L4","resolved":"no","human_handoff":"yes","notes":"пропущено"}
EOF
На десктопе: если встроенная панель Solve CAPTCHA прокручена в сторону, плавающий баннер рядом с композером всё равно предлагает Done / Skip / Research Pro.
Конфигурация (config.yaml)
browser:
challenge:
prefer_human: true # по умолчанию
max_auto_attempts: 1
human_timeout_seconds: 600
allow_provider_solve: true # помощь Browserbase/Firecrawl, если доступно
record_artifacts: true # записывать challenge.md в исследовательских пространствах
cdp_url: "" # опционально: подключить ваш Chrome для доверенных кук
Секреты остаются в .env: BROWSERBASE_API_KEY, BROWSERBASE_PROJECT_ID
(опционально). Поведенческие настройки остаются в config.yaml.
Артефакты исследования
| Файл | Роль |
|---|---|
challenge.md | Журнал встреченных стен и достигнутых уровней |
sources.json | Для каждого URL access: ok | challenge | blocked_by_challenge | partial |
brief.md | Должен упоминать заблокированные источники (проверяется eval-тестом) |
Связанное
- Навык:
skills/research/challenge-gate/SKILL.md - Маршрутизация:
choose-interaction-surface(таксономия CAPTCHA: веб vs нативный) - Использование компьютера: никогда не первый выбор для браузерной CAPTCHA — см. навык
computer-use - Стек исследований: Профессиональное исследование
- Десктоп: панель уточнения обнаруживает текст CAPTCHA → Done / Skip / Research Pro
- Канбан:
vibeos kanban block <id> --kind challenge … - Офлайн-эталонные заголовки:
tests/tools/fixtures/bot_wall_titles.yaml - Эталонные задачи:
docs/plans/challenge-gate-golden-tasks.yaml - Дополнение к плану:
docs/plans/2026-07-17-captcha-challenge-protocol.md