Cloudflare Browser Rendering
/install cloudflare-browser-rendering-skill
Cloudflare Browser Rendering
Overview
Use this skill to bridge the gap between lightweight web_fetch and full interactive browser automation.
Routing rule:
- Use
web_fetchfor simple static pages and quick reads. - Use this skill when content depends on JavaScript rendering or when you need to crawl many related pages.
- Use
browserwhen the task requires interaction such as login, clicking, typing, or manual flow control.
Quick decision guide
- Single page, static, fastest path matters ->
web_fetch - Single page, JS-heavy, want clean markdown ->
/markdown - Whole docs/blog/help center crawl ->
/crawl - Needs login/UI actions ->
browser
If uncertain, start with web_fetch. Escalate to /markdown if the page is incomplete or empty. Escalate to /crawl only when multiple pages are needed.
Read references/decision-guide.md for routing details and references/*.md for endpoint notes.
Prerequisites
Expect these environment variables to be available before running the scripts:
CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID
The token needs Browser Rendering Write for /markdown and crawl creation. Reading crawl results can use Browser Rendering Read or Write.
Single-page extraction with /markdown
Use scripts/cf_markdown.py.
Examples:
python3 scripts/cf_markdown.py --url https://example.com
python3 scripts/cf_markdown.py --url https://example.com --wait-until networkidle0
python3 scripts/cf_markdown.py --url https://example.com --wait-until networkidle0 --timeout-ms 60000
python3 scripts/cf_markdown.py --url https://example.com --cache-ttl 0 --json
python3 scripts/cf_markdown.py --html '\x3Cdiv>Hello\x3C/div>'
python3 scripts/cf_markdown.py --url https://example.com --user-agent 'Mozilla/5.0 ...'
python3 scripts/cf_markdown.py --url https://example.com --cookies-json '[{"name":"session","value":"abc","domain":"example.com"}]'
python3 scripts/cf_markdown.py --url https://example.com --authenticate-json '{"username":"u","password":"p"}'
python3 scripts/cf_markdown.py --url https://example.com --reject-request-pattern-json '["/^.*\\\\.(css)$/"]'
Guidelines:
- Prefer
--wait-until networkidle0ornetworkidle2for SPA/JS-heavy pages. - If a JS-heavy page times out, first raise
--timeout-ms(for example60000), then consider falling back todomcontentloadedif full idle waiting is too slow. - Use
--cache-ttl 0when freshness matters more than speed. - Use
--jsonwhen you want full API output for debugging. - Use raw JSON flags when you need advanced body fields without patching the script.
Multi-page crawling with /crawl
Use scripts/cf_crawl.py.
Examples:
python3 scripts/cf_crawl.py start --url https://developers.cloudflare.com/workers/ --depth 2 --limit 20 --format markdown
python3 scripts/cf_crawl.py wait --job-id \x3Cjob_id> --poll-seconds 5
python3 scripts/cf_crawl.py results --job-id \x3Cjob_id> --limit 20 --status completed
python3 scripts/cf_crawl.py run --url https://developers.cloudflare.com/workers/ --depth 2 --limit 20 --format markdown --wait
python3 scripts/cf_crawl.py run --url https://developers.cloudflare.com/workers/ --depth 2 --limit 20 --format markdown --wait --fetch-results --results-status completed --out-json out/crawl.json --out-markdown out/crawl.md
python3 scripts/cf_crawl.py start --url https://example.com --source links --goto-options-json '{"timeout":30000}'
Guidelines:
- Keep initial crawls small: low
depthand modestlimit. - Use
run --waitfor one-shot jobs. - Use
run --wait --fetch-resultswhen you want a full one-command workflow. - Use
start+wait+resultswhen you want more control. - Poll lightly; do not tight-loop.
- Prefer markdown format for downstream summarization or embeddings.
- Use
--out-jsonand--out-markdownfor large outputs instead of dumping everything into chat.
Output handling
For large crawls:
- First inspect summary fields: job status, total, finished, browser seconds used.
- Then fetch filtered results, usually
status=completed. - Avoid dumping huge markdown blobs into chat; summarize and point to saved output if needed.
Failure and fallback rules
- If
/markdownreturns incomplete content, retry with--wait-until networkidle0. - If
/crawlis overkill for the task, fall back to/markdownon key URLs. - If the site requires interaction or login, stop using this skill and switch to
browser. - If the API is unavailable or credentials are missing, report that clearly and fall back to
web_fetchwhen possible.
Resources
scripts/cf_markdown.py- rendered single-page Markdown extractionscripts/cf_crawl.py- async crawl job helperreferences/decision-guide.md- routing and fallback guidancereferences/markdown-endpoint.md- focused notes on/markdownreferences/crawl-endpoint.md- focused notes on/crawl
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install cloudflare-browser-rendering-skill - After installation, invoke the skill by name or use
/cloudflare-browser-rendering-skill - Provide required inputs per the skill's parameter spec and get structured output
What is Cloudflare Browser Rendering?
Use Cloudflare Browser Rendering REST APIs to extract rendered webpage content as Markdown or crawl whole sites asynchronously. Use when normal web_fetch is... It is an AI Agent Skill for Claude Code / OpenClaw, with 344 downloads so far.
How do I install Cloudflare Browser Rendering?
Run "/install cloudflare-browser-rendering-skill" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Cloudflare Browser Rendering free?
Yes, Cloudflare Browser Rendering is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Cloudflare Browser Rendering support?
Cloudflare Browser Rendering is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Cloudflare Browser Rendering?
It is built and maintained by Yangtao Chen (@cytwyatt); the current version is v0.1.1.