Agent skill

Oxylabs Testing

by duckduckgo in duckduckgo/autoconsent

Test autoconsent rules across geographic regions using Oxylabs Agent Browser remote browsers.

MPL-2.0Auto-check passedProductivity & Automation

Install Oxylabs Testing

skills CLI
$ npx skills add duckduckgo/autoconsent --skill oxylabs-testing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install duckduckgo/autoconsent oxylabs-testing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/duckduckgo/autoconsent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/oxylabs-testing .claude/skills/oxylabs-testing && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
oxylabs-testing
GitHub stars
130
Token cost
~1.9k tokens
SKILL.md length
750 words
Files
3 (incl. scripts)
Skills in repo
4
Repo updated
First seen
Licence
MPL-2.0

At a glance

Test autoconsent rules across geographic regions using Oxylabs Agent Browser remote browsers.

  • A site shows our regional proxies a bot wall (captcha
  • SKILL.md covers Prerequisites, Usage, API and Regions, plus 2 more sections
  • Runs JavaScript scripts from its folder; calls npm; reaches wohnen.de; needs OXYLABS_PASSWORD
  • A region has no regional proxy (e.g

What it does

Oxylabs Testing is an agent skill from duckduckgo/autoconsent. Test autoconsent rules across geographic regions using Oxylabs Agent Browser remote browsers. Use when a site shows our regional proxies a bot wall (captcha, challenge page, access denied), when a region has no regional proxy (e.g. pt, br), or for US state/city targeting. Default to proxy-testing otherwise.

Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including scripts.

It sits in Productivity & Automation, covering Browser automation. The licence is MPL-2.0.

When your agent uses it

  • A site shows our regional proxies a bot wall (captcha
  • A region has no regional proxy (e.g

Example prompts

  • “/oxylabs-testing”

Requirements

  • Node.js

What it can do on your machine

Read from SKILL.md and the folder at commit 46be17f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 2 files in scripts/ (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • wohnen.de

    Also links to:

    • developers.oxylabs.io

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • OXYLABS_PASSWORD

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Oxylabs Testing loads about 1.9k tokens when it runs. Until then it costs about 81 tokens; SKILL.md has 750 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~81
When it runs · the whole SKILL.md, loaded when a task matches
~1.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from duckduckgo/autoconsent at commit 46be17f, republished under its MPL-2.0 licence (© duckduckgo). 750 words, ~1,860 tokens.

Download SKILL.mdSave it as .claude/skills/oxylabs-testing/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
oxylabs-testing
description
Test autoconsent rules across geographic regions using Oxylabs Agent Browser remote browsers. Use when a site shows our regional proxies a bot wall (captcha, challenge page, access denied), when a region has no regional proxy (e.g. pt, br), or for US state/city targeting. Default to proxy-testing otherwise.

Oxylabs Regional Testing

This skill runs autoconsent in Oxylabs Agent Browser sessions in a chosen country.

Default to the proxy-testing skill. Oxylabs costs money per session. Use this skill when:

  • a site shows our proxies a bot wall (a captcha, a challenge page, an "access denied" page) instead of the real site. Oxylabs gets past most of them. Retest only the affected regions here;
  • the region has no regional proxy (any two-letter country code works here, e.g. pt);
  • you need a US state or city (CCPA: us-california).

The region policy (core and expanded sets) is the one in the proxy-testing skill. Results have the same shape, and the same rule applies: autoconsent results can have false positives, so always inspect the screenshots and confirm that opt-out was successful.

Prerequisites

bash
npm run prepublish  # builds dist/autoconsent.playwright.js and rules/rules.json

Environment variables:

  • OXYLABS_USER — the Agent Browser username, including its account suffix (e.g. user_ab12)
  • OXYLABS_PASSWORD
  • OXYLABS_HOST (optional, defaults to hb.oxylabs.io. The older ubc.oxylabs.io endpoint is deprecated.)

The endpoint URL contains the credentials: never log it. Errors returned by this library are already redacted.

Usage

The library is at scripts/oxylabs.mjs. It exports the same functions as proxy-testing (testUrl, testRegions, testPage, injectAutoconsent, formatResult, region sets), so a script can switch providers by changing the import.

javascript
import { formatResult, testRegions } from './.agents/skills/oxylabs-testing/scripts/oxylabs.mjs';

for (const result of await testRegions('https://www.wohnen.de/', ['us', 'gb', 'de', 'pt'])) {
    console.log(formatResult(result));
}

Use an existing page (one Oxylabs session; the callback's page is closed afterwards):

javascript
import { testPage, withOxylabsPage } from './.agents/skills/oxylabs-testing/scripts/oxylabs.mjs';

const result = await withOxylabsPage('de', { device: 'mobile' }, async (page) => {
    const result = await testPage(page, 'https://www.wohnen.de/', 'de');
    await page.screenshot({ path: 'test-results/oxylabs/after-de-mobile.png' });
    return result;
});

API

  • testUrl(url, regionKey, options?) — open an Oxylabs session in the region, run autoconsent, screenshot, close; returns a TestResult.
  • testRegions(url, regions?, options?) — testUrl for each region (defaults to CORE_REGIONS), a fresh session per region.
  • testPage(page, url, regionKey, options?) — run a full test on a page from an Oxylabs session you opened.
  • withOxylabsPage(regionKey, options, fn) — open a session, call fn(page), close the session; returns what fn returns. Throws if the session cannot be opened.
  • connectOxylabs(regionKey, options?) — the raw Playwright Browser (chromium.connectOverCDP). Close it yourself.
  • injectAutoconsent(page, options?) — low level; call before page.goto(). Returns the proxy-testing context plus captcha ({ detected, solved }, the Oxylabs solver state) and captchaPromise (resolves when solving ends).
  • isOxylabsConfigured() — whether OXYLABS_USER and OXYLABS_PASSWORD are set.
  • formatResult(result), CORE_REGIONS, EXPANDED_REGIONS, ALL_REGIONS — same as proxy-testing.

Options: everything testPage takes in proxy-testing (action, screenshotsDir, navigationTimeout, completionTimeout, detectionTimeout), plus:

OptionDefaultDescription
device'desktop''desktop' | 'mobile' — sets ?p_device= (viewport, touch, headers, User-Agent). Use it for mobile tests instead of Playwright device descriptors, which would contradict the Oxylabs fingerprint.
solveCaptchafalseSends ?solve_captcha=true so Oxylabs solves captchas on the page, and waits for the solver (see Gotchas). Accounts without the feature get HTTP 400 for every session, so leave it off unless captcha solving is enabled.

Screenshots default to test-results/oxylabs, named <domain>-<region>-oxylabs-final.jpg.

Regions

Any two-letter country code maps to ?p_cc= (e.g. de → p_cc=DE), per the geolocation docs. State- and city-targeted keys (OXYLABS_LOCAL_REGIONS):

KeyLocationQuery params
us-californiaUnited States (California)p_state=california
us-newyorkUnited States (New York)p_cc=US&p_city=new_york
us-losangelesUnited States (Los Angeles)p_cc=US&p_city=los_angeles
Show full SKILL.md (290 more words)Show less

Architecture

Injection and result collection are shared with proxy-testing in .agents/lib/regional-testing/harness.mjs: autoconsent runs in an isolated world of every frame (including out-of-process iframes) and talks to Node over CDP bindings, and eval snippets run in the page's main world. This skill only adds the Oxylabs connection and the captcha handling.

With solveCaptcha: true, a listener in autoconsent's isolated world forwards the Oxylabs runtime's captcha window messages to Node over the same CDP binding, so they arrive even if the page navigates right after.

Gotchas

  • CAPTCHA events arrive via window.postMessage, not CDP. With solveCaptcha: true, autoconsent's wait pauses whenever a start event arrives, until oxylabs-captcha-end, oxylabs-captcha-solve-end or oxylabs-captcha-error, for at most 60s from the first start (the timeout in Oxylabs' example). Oxylabs documents no deadline for the start event, so captcha-free pages aren't held up waiting for one. Agent Browser sends oxylabs-captcha-solve-start with a captchaType (e.g. turnstile); the documented oxylabs-captcha-start is accepted too. A Cloudflare Turnstile took about 35-40s to solve. Hard blocks without a captcha (e.g. DataDome "Access is temporarily restricted", Akamai "Access denied") send no events, so solving doesn't help there.
  • Main-world CDP bindings don't work on Agent Browser. page.exposeBinding, and Runtime.addBinding without executionContextName, never reach the page. Bindings scoped to an isolated world (what the harness uses) work, and window messages reach isolated-world listeners, so listen there.
  • Limits: 100 concurrent sessions and 10 new sessions per second per account.
  • Call injection before page.goto, so autoconsent is in place before page scripts run.
  • Oxylabs blocks certain site categories (e.g. government sites), and some sites block Oxylabs too: check the screenshots. Use alternative URLs for the same CMP, or retest as described in the proxy-testing gotchas.
  • Each region test creates a new browser session — there's no session reuse across regions.

© duckduckgo, MPL-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (scripts) in .agents/skills/oxylabs-testing of duckduckgo/autoconsent.

  • SKILL.md
  • scripts/oxylabs.mjs
  • scripts/oxylabs.test.mjs

Open the folder on GitHubat commit 46be17f

Compare with similar skills

Oxylabs Testing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Oxylabs Testing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Oxylabs Testing this skillduckduckgo/autoconsent130—~1.9kAutomated safety check: PassMPL-2.0
Agent Browserquran/quran.com-frontend-next1.9k42 repos~3.3kAutomated safety check: PassNone
Dev-Browser CLI AutomationSawyerHood/dev-browser6.7k1 repos~455Automated safety check: PassMIT
Agent Browsersuperagent-ai/grok-cli3.5k1 repos~633Automated safety check: PassMIT
Browser Automationopenclaw/openclaw392k—~2.9kAutomated safety check: PassMIT
Camoufox CLIBin-Huang/camoufox-cli3501 repos~4.5kAutomated safety check: PassMIT

Similar skills

  • Agent Browser

    quran/quran.com-frontend-next

    Automates browser interactions for web testing, form filling, screenshots, and data extraction.

    1.9k GitHub starsUsed in 42 repos~3.3k tokens
    Productivity & AutomationAuto-check passed
  • Dev-Browser CLI Automation

    SawyerHood/dev-browser

    Browser automation with persistent named pages via the dev-browser CLI. Use when users ask to navigate websites, fill forms, take screenshots, extract web…

    6.7k GitHub starsUsed in 1 repo~455 tokens
    Productivity & AutomationAuto-check passed
  • Agent Browser

    superagent-ai/grok-cli

    Use the host-side agent-browser CLI for local browser smoke tests, screenshots, snapshots, and simple UI validation against forwarded localhost URLs.

    3.5k GitHub starsUsed in 1 repo~633 tokens
    Productivity & AutomationAuto-check passed
  • Browser Automation

    openclaw/openclaw

    A skill your agent uses when controlling web pages with the OpenClaw browser tool, especially multi-step flows, login checks, tab management, or recovery from stale refs/timeouts.

    392k GitHub stars~2.9k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Camoufox CLI

    Bin-Huang/camoufox-cli

    Anti-detect browser automation CLI & Skills for AI agents. An agent skill from Bin-Huang/camoufox-cli.

    350 GitHub starsUsed in 1 repo~4.5k tokens
    Productivity & AutomationAuto-check passed
  • Browser

    VibiumDev/vibium

    Automate browsers with the Vibium CLI. An agent skill from VibiumDev/vibium.

    2.9k GitHub stars~4.8k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed

More from duckduckgo/autoconsent

  • Proxy Testing

    duckduckgo/autoconsent

    Test autoconsent via regional proxies in Playwright. An agent skill from duckduckgo/autoconsent.

    130 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Publicwww Search

    duckduckgo/autoconsent

    Search PublicWWW to find websites using specific HTML/JS/CSS snippets.

    130 GitHub stars~456 tokensUpdated today
    Auto-check passed
  • Verify PR

    duckduckgo/autoconsent

    Verifies an autoconsent pull request by running local CI checks, reviewing rule quality, and inspecting Jenkins E2E results.

    130 GitHub stars~609 tokensUpdated today
    Auto-check passed

Questions about Oxylabs Testing

What does Oxylabs Testing do?

Test autoconsent rules across geographic regions using Oxylabs Agent Browser remote browsers. Oxylabs Testing is an agent skill from duckduckgo/autoconsent. Test autoconsent rules across geographic regions using Oxylabs Agent Browser remote browsers.

When should I use Oxylabs Testing?

Oxylabs Testing fits situations like: A site shows our regional proxies a bot wall (captcha; A region has no regional proxy (e.g.

How do I install Oxylabs Testing in Claude Code?

Run `npx skills add duckduckgo/autoconsent --skill oxylabs-testing -a claude-code`. Or copy the skill folder (.agents/skills/oxylabs-testing in duckduckgo/autoconsent) into .claude/skills/oxylabs-testing in your project. Claude Code loads it when a task matches its description.

How do I install Oxylabs Testing in Codex?

Run `npx skills add duckduckgo/autoconsent --skill oxylabs-testing -a codex`. Or copy the skill folder (.agents/skills/oxylabs-testing in duckduckgo/autoconsent) into .agents/skills/oxylabs-testing in your project. Codex loads it when a task matches its description.

Can I use Oxylabs Testing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add duckduckgo/autoconsent --skill oxylabs-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/oxylabs-testing, .gemini/skills/oxylabs-testing, .github/skills/oxylabs-testing and .opencode/skills/oxylabs-testing in your project.

What does Oxylabs Testing need to run?

Going by SKILL.md and its folder, Oxylabs Testing needs JavaScript for the scripts in its folder, the command-line tools its instructions call (npm) and credentials named OXYLABS_PASSWORD. Our summary lists: Node.js.

Does Oxylabs Testing access the network?

SKILL.md names 2 domains. In commands or code: wohnen.de; the agent is likely to contact it when it follows the instructions. As links in the text: developers.oxylabs.io. This is read from the text; nothing was executed.

Is Oxylabs Testing safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Oxylabs Testing use?

Oxylabs Testing is published under the MPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Oxylabs Testing use?

About 1.9k tokens (SKILL.md is roughly 7.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Oxylabs Testing?

Skills that share tags, products or a category with Oxylabs Testing: Agent Browser (quran/quran.com-frontend-next, 1.9k stars), Dev-Browser CLI Automation (SawyerHood/dev-browser, 6.7k stars), Agent Browser (superagent-ai/grok-cli, 3.5k stars) and Browser Automation (openclaw/openclaw, 392k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Oxylabs Testing?

duckduckgo (a GitHub organization) maintains it in duckduckgo/autoconsent, which has 130 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 8, 2026.

Source: duckduckgo/autoconsent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.