diff --git a/browsers/bot-detection/stealth.mdx b/browsers/bot-detection/stealth.mdx index 216316da..2d27d680 100644 --- a/browsers/bot-detection/stealth.mdx +++ b/browsers/bot-detection/stealth.mdx @@ -125,7 +125,3 @@ When encountering a Cloudflare challenge, our auto-CAPTCHA solver will attempt t After the "Ready" message appears, don't click the Cloudflare CAPTCHA checkbox — this can interfere with the solver. - -### hCaptcha (beta) - -KERNEL can also attempt to solve supported hCaptcha challenges automatically. The hCaptcha solver is in beta and isn't enabled for every organization by default. To turn it on, [contact support](/info/support) with the website or workflow you're testing, your expected volume, and whether you already use stealth mode, [profiles](/browsers/profiles), or custom [proxies](/proxies/overview). diff --git a/browsers/telemetry/pausing-for-captcha-solves.mdx b/browsers/telemetry/pausing-for-captcha-solves.mdx index aebca297..fc760435 100644 --- a/browsers/telemetry/pausing-for-captcha-solves.mdx +++ b/browsers/telemetry/pausing-for-captcha-solves.mdx @@ -653,7 +653,7 @@ Durations come straight from each event's `duration_ms`, which is authoritative; - **One episode at a time.** The gate resets after each verdict; overlapping visible challenges from the same provider aren't split apart, and the telemetry docs note Kernel's own event model can't always attribute a result in that case either. - **The page probe is best-effort.** It reads the DOM for known widget markers and a response token. A site that renders its challenge somewhere those selectors miss won't be held past the logged message alone. - **GeeTest has no selector either.** The solver reports `geetest` task events, but `PROBE`'s `groups` has no GeeTest entry and `tokenPresent` checks no GeeTest field, so `widgets` never reports one and the agent proceeds as soon as the task settles, even while the challenge is still open. Add a selector for your target's GeeTest integration if you need it to hold. -- **hCaptcha coverage depends on your organization's configuration.** When the hCaptcha solver isn't enabled for your org, hCaptcha pages produce no captcha events and the gate falls through to the page probe. +- **hCaptcha often takes several rounds.** hCaptcha challenges are hard, so the solver often fails a round and retries with a new one before the challenge clears. Each round is its own `image_challenge` task, so a finished or failed round doesn't mean the solve is over. Wait until the solver is done retrying, signaled by the `captcha_challenge_result` for that `challenge_id` (`solved` or `abandoned`), before letting the agent act on the page. If the agent is told about a single image round, have it keep waiting rather than interact with the widget. - **Press-and-hold has no selector at all.** It emits `captcha_challenge_result` telemetry like reCAPTCHA and hCaptcha, but `PROBE`'s `groups` has no entry for it, so `widgets` never reports one -- the tool-call handler treats that as clear and lets the agent proceed even while the challenge is still open. Add a selector for your target's specific implementation if you need it to actually hold. - **A reload within `TASK_SETTLE_MS` of the last verdict can still be missed.** `settledAt` treats an ID as fresh again once that window passes, so a genuinely new outcome for a reused `challenge_id` eventually gets through -- but if the reload happens sooner than that, its result is indistinguishable from a stale duplicate and gets dropped. diff --git a/docs.json b/docs.json index 93054184..9383b1f4 100644 --- a/docs.json +++ b/docs.json @@ -6,7 +6,7 @@ { "source": "/careers/backend-engineer", "destination": "https://jobs.ashbyhq.com/usekernel" }, { "source": "/careers/engineer-new-grad", "destination": "https://jobs.ashbyhq.com/usekernel" }, { "source": "/careers/customer-engineer", "destination": "https://jobs.ashbyhq.com/usekernel" }, - { "source": "/browsers/bot-detection/hcaptcha", "destination": "/browsers/bot-detection/stealth#hcaptcha-beta" }, + { "source": "/browsers/bot-detection/hcaptcha", "destination": "/browsers/bot-detection/stealth" }, { "source": "/overview/products", "destination": "/overview/features" }, { "source": "/proxies/datacenter", "destination": "/proxies/isp" }, { "source": "/apps/secrets", "destination": "/apps/deploy#secrets" },