Install
openclaw skills install captcha-relayHuman-in-the-loop CAPTCHA solving with two modes: screenshot (default, zero infrastructure) and token relay (requires network access). Screenshot mode captur...
openclaw skills install captcha-relaySolve CAPTCHAs by relaying them to a human. Two modes available.
Grid overlay screenshot → send image to human via Telegram → human replies with cell numbers → inject clicks.
sharp for image processing + CDP for screenshots and click injection.node index.js # screenshot mode (default)
node index.js --mode screenshot # explicit
node index.js --screenshot # legacy alias
const { solveCaptchaScreenshot } = require('./index');
const capture = await solveCaptchaScreenshot({ cdpPort: 18800 });
// capture.imagePath — annotated screenshot to send to human
// capture.prompt — text prompt for the human
Detects CAPTCHA type + sitekey → serves real widget on relay page → human solves natively → token injected via CDP.
node index.js --mode relay # with localtunnel
node index.js --mode relay --no-tunnel # with Tailscale/LAN
const { solveCaptcha } = require('./index');
const result = await solveCaptcha({ cdpPort: 18800, useTunnel: false });
// result.relayUrl — URL to send to human
// result.token — solved CAPTCHA token
| Scenario | Mode |
|---|---|
| Quick & easy, no setup | screenshot |
| Any CAPTCHA type (sliders, text, etc.) | screenshot |
| Known CAPTCHA with sitekey (reCAPTCHA, hCaptcha, Turnstile) | relay |
| Tailscale already configured | relay |
| No network access to host | screenshot |
| Flag | Default | Description |
|---|---|---|
--mode screenshot|relay | screenshot | Select solving mode |
--screenshot | — | Alias for --mode screenshot |
--no-inject | inject | Return token without injecting into browser |
--no-tunnel | tunnel | Skip tunnel, use local/Tailscale IP (relay mode) |
--timeout N | 120 | Timeout in seconds |
--cdp-port N | 18800 | Chrome DevTools Protocol port |
solveCaptchaScreenshot({ cdpPort })capture.imagePath to human via message tool with capture.promptinjectGridClicks(cdpPort, capture, selectedCells) to click those cellssolveCaptcha({ useTunnel: false }) (Tailscale) or solveCaptcha() (tunnel)result.relayUrl to human via message tool--remote-debugging-port=18800npm install (deps: ws, sharp)