Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
agents365-ai avatar

Cloak Fetch

  • 6 installs
  • 48 repo stars
  • Updated May 18, 2026
  • agents365-ai/cloakfetch

cloak-fetch is a Claude Code skill that fetches bot-protected or WAF-blocked pages through a stealth Chromium (CloakBrowser) and returns clean markdown.

About

A Claude Code skill used as a fallback when a web page will not load because it is behind anti-bot or WAF protection. It routes the URL through CloakBrowser, a stealth Chromium with a real TLS fingerprint, then extracts clean markdown with trafilatura. A developer uses it when WebFetch or curl returns a 403, 429, or a bot-challenge page. It requires CloakBrowser and trafilatura installed locally.

  • Fallback fetch for pages blocked by Cloudflare, DataDome, Akamai, and other WAFs
  • Routes URLs through CloakBrowser (stealth Chromium) and extracts markdown via trafilatura
  • Recognizes vendor-specific 403/429 bot-block signatures to trigger proactively

Cloak Fetch by the numbers

  • 6 all-time installs (skills.sh)
  • Ranked #1,691 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

cloak-fetch capabilities & compatibility

Free; requires CloakBrowser and trafilatura installed in the same Python environment.

Capabilities
web scraping · bot bypass · content extraction
Use cases
web scraping · web search
Platforms
macOS · Linux · Windows
Pricing
Free
From the docs

What cloak-fetch says it does

or WAF screening, route the same URL through CloakBrowser (a real Chromium
SKILL.md
They all eventually let a real browser through, and
SKILL.md
npx skills add https://github.com/agents365-ai/cloakfetch --skill cloak-fetch

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs6
repo stars48
Last updatedMay 18, 2026
Repositoryagents365-ai/cloakfetch

What it does

Fetch pages blocked by Cloudflare, DataDome, or other WAFs via a stealth browser and return markdown.

Who is it for?

Fetching content from sites behind anti-bot or WAF protection as a fallback to WebFetch/curl.

Skip if: 404s, 500s, or login-walled 401 pages, which CloakBrowser cannot fix.

When should I use this skill?

A recent fetch returned 403/429, a Just a moment / Access Denied page, or an empty body from bot detection.

What you get

Clean markdown extracted from a page that a plain HTTP fetcher could not load.

  • Clean markdown of the fetched page

By the numbers

  • Recognizes signatures for 9+ bot-protection vendors (Cloudflare, DataDome, Akamai, PerimeterX, Imperva, F5/Distil, Kasad

Files

SKILL.mdMarkdownGitHub ↗

cloak-fetch — bot-protection / WAF fetch fallback

When a normal HTTP fetcher fails because the target site uses bot protection or WAF screening, route the same URL through CloakBrowser (a real Chromium with anti-bot patches at the C++ level and a genuine TLS/JA3 fingerprint) and return clean markdown via trafilatura. The agent never has to tell the user "the page is unfetchable" — it can try this skill first.

The underlying engine doesn't care which vendor is blocking the request — Cloudflare, DataDome, Akamai, PerimeterX, Imperva, Distil, Kasada, AWS WAF, or a no-name WAF rule. They all eventually let a real browser through, and CloakBrowser is a real browser.

When to trigger

Use immediately after any of these symptoms from a recent fetch tool call:

Symptom in tool outputLikely cause
HTTP 403, 403 Forbidden, HTTP 429Bot protection or rate-limit block
Empty body / a few hundred bytes of nothing on a content-rich URLSilent WAF / TLS-fingerprint reject
Page rendered as a near-empty shell with a JS challenge scriptSPA-only page or anti-bot challenge
Resource was not loaded, net::ERR_HTTP2_PROTOCOL_ERRORUpstream blocked the fetch handshake
Access denied, Blocked, You don't have permissionGeneric WAF / bot detection

Vendor-specific signatures

If the failure string roughly matches one of these, it's a CloakBrowser case — don't waste another round-trip on a plain HTTP client:

VendorTelltale strings / headers
CloudflareJust a moment..., Enable JavaScript and cookies to continue, cf-ray: header, __cf_bm cookie, `Attention Required! \
DataDomeblocked by DataDome, <title>blocked</title>, dd-cookie / datadome cookie, <head>...captcha-delivery.com, geo-block style 403 with empty body
Akamai Bot ManagerAccess Denied with Reference #18. (long hex.epoch.hex) ID, <TITLE>Access Denied</TITLE> + Akamai <HTML><HEAD> boilerplate, Pragma: akamai-x-cache, akamai-bot-manager cookie
PerimeterX / HUMANPlease verify you are a human, Access to this page has been denied because we believe you are using automation tools, _px* cookies (_pxhd, _px3), <title>Human Verification</title>
Imperva / IncapsulaIncapsula incident ID:, Request unsuccessful. Incapsula incident ID, _Incapsula_Resource, visid_incap_* cookie, X-Iinfo header
F5 / DistilPardon Our Interruption, As you were browsing something about your browser made us think you were a bot, distil_r_captcha, D_RID cookie
Kasada<head> containing ips.js, x-kpsdk-cd / x-kpsdk-cr response headers, 429 with empty body + kasada reference
AWS WAFRequest blocked + <aws-waf-token>, awswaf cookie, body referencing aws-waf-token
SucuriSucuri WebSite Firewall - Access Denied, <title>Sucuri WebSite Firewall - CloudProxy</title>, X-Sucuri-ID / X-Sucuri-Cache header, sucuri-cf-id cookie (very common on self-hosted WordPress)
reCAPTCHA / hCaptcha passive triggersInterstitial that displays without user interaction — page replaced with g-recaptcha/h-captcha div and no real content. (See "When NOT to trigger" for interactive checkbox/slider cases.)
TLS / JA3 fingerprint rejectConnection drops, empty body, ERR_HTTP2_PROTOCOL_ERROR, SSL_ERROR_ZERO_RETURN on a site that loads fine in a normal browser

Also trigger preemptively when the user asks to fetch a page on a domain known to live behind one of these stacks — publishers (science.org, nature.com, sciencedirect.com, jstor.org), news (nytimes.com, bloomberg.com, ft.com, wsj.com), retail (nike.com, adidas.com, sephora.com), travel (kayak.com, southwest.com), financial (most broker portals). Going straight to this skill avoids a guaranteed-to-fail plain-HTTP round trip.

When NOT to trigger

SymptomWhy this skill won't help
404 Not FoundPage genuinely doesn't exist
500 Internal Server ErrorOrigin is broken, not blocking you
401 Unauthorized / login wallCredentials needed — CloakBrowser does not carry them
Plain network error (DNS, connection refused, no route to host)Network unreachable, not a bot block
Interactive captcha — slider, image-grid (reCAPTCHA "select all crosswalks"), Cloudflare Turnstile checkbox that requires a click, hCaptcha challengeNeeds a human or a paid solver service. CloakBrowser passes passive fingerprint checks but does not solve human-interaction challenges.
Geo-block where your IP's country is the actual reason (This content is not available in your region)CloakBrowser uses the same IP — proxy/VPN is the fix, not a different browser
Site requires a session cookie, OAuth, or signed URLNo credential plumbing — fetch the auth artifact first via the proper channel
The normal fetcher already succeededNo need to re-fetch

In these cases, report the actual failure to the user instead of masking it.

How to invoke

One command — the wrapper picks the right Python, runs the headless browser, extracts the main content with trafilatura, and writes clean markdown to stdout:

<SKILL_DIR>/cloak_fetch.sh "<URL>"

Where <SKILL_DIR> is wherever this skill is installed. Common locations:

  • Claude Code: ~/.claude/skills/cloak-fetch
  • OpenClaw: ~/.openclaw/skills/cloak-fetch
  • Codex: ~/.codex/skills/cloak-fetch
  • Project-local: .claude/skills/cloak-fetch or skills/cloak-fetch

A portable invocation that finds the skill across these locations:

for d in \
  "$HOME/.claude/skills/cloak-fetch" \
  "$HOME/.openclaw/skills/cloak-fetch" \
  "$HOME/.codex/skills/cloak-fetch" \
  ".claude/skills/cloak-fetch" \
  "skills/cloak-fetch"; do
  if [ -x "$d/cloak_fetch.sh" ]; then
    SKILL_DIR="$d"; break
  fi
done

"$SKILL_DIR/cloak_fetch.sh" "https://www.science.org/content/page/information-authors-research-articles"

The wrapper streams clean markdown on stdout. Save to a file with > out.md or pipe directly into further processing.

Behavior

  • Headless by default — no browser window opens.
  • Latency: ~20–40 s per call (browser launch + page render + content settle).
  • Output: clean markdown via trafilatura. Page chrome, navigation, ads,

and cookie banners stripped. Headings, lists, links, and code blocks preserved. When trafilatura can't isolate a main content node, the wrapper falls back to emitting the rendered HTML so the agent still has something to read.

  • Failure modes: exits non-zero with a message on stderr if no

cloakbrowser-enabled Python is found, the browser couldn't reach the URL, or CloakBrowser couldn't pass the challenge. Surface the failure honestly to the user — do not fabricate page content.

Configuration

Env varPurposeDefault
CLOAKBROWSER_PYTHONPath to the Python interpreter with cloakbrowser installed~/github/CloakBrowser/.venv/bin/python, falling back to python3

For more advanced tuning (headless toggle, content-selector wait list, settle timing), edit cloak_fetch.py directly — see comments in that file.

Example end-to-end

User: "Get the authors info from https://www.science.org/content/page/information-authors-research-articles"

1. Agent tries WebFetch — gets HTTP 403 Forbidden. 2. Agent recognises the 403 → invokes this skill:

   ~/.claude/skills/cloak-fetch/cloak_fetch.sh \
     "https://www.science.org/content/page/information-authors-research-articles"

3. ~25 s later, ~26 KB of clean markdown lands on stdout. 4. Agent answers the user from the markdown — no need to mention the underlying fetch took two attempts.

Related

  • cloakFetch hook — same fallback wired up as a Claude Code

PostToolUse hook (fully automatic, no agent decision required). Use the hook on Claude Code; use this skill on agents that lack a hook system (Codex, OpenCode, OpenClaw, etc.).

Related skills

FAQ

When should it not be used?

On 404 (page missing), 500 (broken origin), or 401 login walls, where CloakBrowser does not help.

What does it return?

Clean markdown extracted from the rendered page via trafilatura.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.