Skip to content
Automation
Skill

/solve-captcha

Solve a CAPTCHA on the current browser tab - free checkbox/text paths first, then a configured token service for image challenges. Returns solved or unsolved for the caller to fall back.

From plugin
jobpilot
10432 skills4 agents2 MCP

Claude Code

$ npx -y skills add suxrobGM/jobpilot --skill solve-captcha --agent claude-code

SKILL.md

solve-captcha.SKILL.md
name: solve-captcha
description: Solve a CAPTCHA on the current browser tab - free checkbox and text paths first, then a configured token service for image challenges. Returns solved or unsolved for the caller to fall back.
argument-hint: "[url | ref_or_description] (optional; a URL is opened first; omit to auto-detect)"

Solve CAPTCHA

Clear a CAPTCHA on the current tab, for the user's own applications only. Return **solved** or **unsolved**; on unsolved, leave the page as it is for the caller.

1. Identify

A URL argument: open it first. `browser_resize` to 1280x1400 so the widget is fully visible, then snapshot and `browser_take_screenshot` it:

  • **Checkbox** (reCAPTCHA "I'm not a robot", hCaptcha, Turnstile): step 2. Always try this first.
  • **Text** (distorted characters and an answer field): step 3.
  • **Image grid** already open: step 4.
  • **Slider or unknown**: unsolved.

2. Checkbox

`browser_click` the checkbox ref, wait, snapshot. Verified: solved. An image grid opened: step 4. Never click grid tiles yourself; automated clicks get flagged.

3. Text

Read the characters from a screenshot, `browser_type` them, submit. Verified: solved.

4. Token service

Read the sitekey with `browser_evaluate`:

() => {
  const el = document.querySelector(".g-recaptcha, [data-sitekey]");
  let key = el?.getAttribute("data-sitekey");
  if (!key) {
    const src = [...document.querySelectorAll('iframe[src*="recaptcha"]')]
      .map((f) => f.src)
      .find((s) => /[?&]k=/.test(s));
    key = src && new URL(src).searchParams.get("k");
  }
  return { sitekey: key, pageurl: location.href };
};

hCaptcha (`iframe[src*="hcaptcha"]`) is `type:"hcaptcha"`; Turnstile (`.cf-turnstile[data-sitekey]`) is `type:"turnstile"`. The server holds the service key and polls the provider:

jobpilot-api POST /api/captcha/solve --data '{"type":"recaptcha","sitekey":"<sitekey>","pageurl":"<pageurl>"}'

A failed call or an empty `.token` (no key configured, or the service failed): unsolved.

Inject the token with `browser_evaluate`, then `browser_click` the form's submit ref:

(t) => {
  document
    .querySelectorAll('textarea[name="g-recaptcha-response"], #g-recaptcha-response')
    .forEach((el) => {
      el.value = t;
      el.style.display = "";
    });
  try {
    for (const c of Object.values(window.___grecaptcha_cfg?.clients ?? {}))
      for (const o of Object.values(c))
        for (const m of Object.values(o ?? {}))
          if (typeof m?.callback === "function") m.callback(t);
  } catch {}
};

hCaptcha uses `h-captcha-response`; Turnstile uses `cf-turnstile-response`. Wait, verify: solved.

Rules

  • At most 3 rounds, then unsolved.
  • Click widgets only with `browser_click` on a ref. Never fake a click with `browser_evaluate`,

`.click()` or `scrollIntoView`: reCAPTCHA detects synthetic clicks and hard-fails. Scripts only read the sitekey and inject a token.

Read more
@suxrobgm
Ships withjobpilot

An AI agent that applies to jobs for you, using the Claude or Codex subscription you already have. Open JobPilot → · Docs · How it works · Changelog Watch it full size → Applying for jobs takes hours.

10432 skills4 agents2 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
104
Star history of suxrobGM/jobpilot on GitHub, a chart by star-history.com

Other skills on jobpilot.

add-api-route

add-api-route

Add a new JobPilot API route or module the standard way - contracts schema, controller, service, response schema, optional web…

@suxrobgm@suxrobgmInstall Skill
commit

commit

Write a git commit with a one-sentence Conventional Commits subject and no narrative body. Use whenever the user asks to commit,…

@suxrobgm@suxrobgmInstall Skill
db-migrate

db-migrate

Create and apply a Prisma migration safely against the remote (tunneled) PostgreSQL. Use for schema changes - "create a…

@suxrobgm@suxrobgmInstall Skill
knip-cleanup

knip-cleanup

Add knip to a TypeScript project and use it to remove dead exports, collapse pass-through barrels, and narrow every export to…

@suxrobgm@suxrobgmInstall Skill
pr-review

pr-review

Review a JobPilot pull request on its own branch, resolve merge conflicts with main, remove over-engineering, redundancy,…

@suxrobgm@suxrobgmInstall Skill
release

release

Bump the unified JobPilot version (host + plugin), update the changelog, commit, and tag a new release

@suxrobgm@suxrobgmInstall Skill

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n11d209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about solve-captcha.

Which coding agents can use solve-captcha?
solve-captcha installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.