browser-automation
Skill16 starsChanged 7 days agoMITView on GitHub
Automate browser tasks that require bypassing bot detection — scrape protected pages, fill forms behind CAPTCHAs, take screenshots of anti-bot sites, or run any Playwright/Puppeteer workflow without being blocked. Supports realistic human-like mouse and keyboard simulation. Trigger keywords: scrape XX page, automate filling XX, bypass captcha for XX.
- Installs packages
53 other projects use a version of this.
Adopted by
Most recently taken up by
- kinhluan/skillstheir own version, first seen Nov 8, 2026
- coffeegrind123/zendriver-mcptheir own version, first seen Nov 8, 2026
- darkweb19/skillstheir own version, first seen Nov 8, 2026
- better6666/redteam-skills-portabletheir own version, first seen Nov 8, 2026
- galiprandi/job-seekertheir own version, first seen Nov 5, 2026
- AgnesAI-Labs/agnet-skills-cntheir own version, first seen Nov 1, 2026
Used with
Projects with it also use karpathy-coder, api-test-suite-builder and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
csiddhant796-blipSkillkarpathy-coder
Use when writing, reviewing, or committing code to enforce Karpathy's 4 coding principles — surface assumptions before coding, keep it simple, make surgical changes, define verifiable goals. Triggers on "review my diff", "check complexity", "am I overcomplicating this", "karpathy check", "before I commit", or any code quality concern where the LLM might be overcoding.
Also in 5 projects that use this
Arnav-0Skillapi-test-suite-builder
Use when the user asks to generate API tests, create integration test suites, test REST endpoints, or build contract tests.
Also in 6 projects that use this
Hussain-ElfalahSkillandreessen
Also in 4 projects that use this
Hussain-ElfalahSkillbusiness-investment-advisor
Also in 4 projects that use this
csiddhant796-blipSkillself-eval
Honestly evaluate AI work quality using a two-axis scoring system. Use after completing a task, code review, or work session to get an unbiased assessment. Detects score inflation, forces devil's advocate reasoning, and persists scores across sessions.
Also in 5 projects that use this
DorianGalloSkillbinary-diff
跨版本符号迁移与二进制差分。当你有旧版本的符号/逆向结果,需要快速迁移到新版本时使用。 适用场景:内核缺 PDB 用旧版符号推导、程序更新后批量迁移函数名、应用更新后快速定位新偏移。 核心方法:用 LLM 做结构化差异比对,程序化输入输出,成本极低(200 函数 ~1 元)。 触发关键词:符号迁移、bindiff、跨版本、PDB 缺失、函数偏移迁移、symbol migration、binary diff、版本对比。
Also in 5 projects that use this
- +1 more from Hussain-Elfalah
Other versions53 projects use a version of this.
Word for word · 1
- tutorgpt-io/tutorgpt-skills★ 15100% same
Edited · 0
None found.
Wrote their own version · 52
- zhaoxuya520/reverse-skill-private★ 40ksame name
- zhaoxuya520/reverse-skill★ 38ksame name
- civitai/civitai★ 7.3ksame name
- pierrecomputer/pierre★ 6.5ksame name
- coco-research/coco★ 797same name
- SHAdd0WTAka/Zen-Ai-Pentest★ 470same name
- web-infra-dev/midscene-skills★ 319same name
- irahardianto/awesome-agv★ 157same name
- galiprandi/job-seeker★ 120same name
- cigery-useio/useio-skills★ 103same name
42 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository13 other files it gives its agents.
- ai-detectorSkill
- ai-documentsSkill
- ai-image-pptSkill
- ai-sheetsSkill
- data-analysisSkill
- deep-researchSkill
- mindmapSkill
- page-seo-checkerSkill
- page-seo-generator-i18nSkill
- page-seo-generatorSkill
- seo-image-generatorSkill
- seo-keyword-difficultySkill
- transcriptSkill
The file
We split this skill into the rules it gives an agent
1 rule. 0 are common, 0 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 35 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 21
geoip: When geoip=True and a proxy is set, downloads an offline GeoIP database and sets timezone/locale to match the proxy's exit IP.
“Common” is measured: kept by at least 6 in 10 of the 35 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
CloakHQ/CloakBrowser
Stealth Chromium with source-level C++ fingerprint patches — drop-in Playwright/Puppeteer replacement that passes reCAPTCHA v3, Cloudflare Turnstile, and FingerprintJS.
What it is
CloakBrowser is a pre-patched Chromium binary distributed as an npm package (cloakbrowser) and Python package (cloakbrowser), providing a stealth browser that eliminates bot-detection signals at the C++ source level rather than via JavaScript monkey-patching. Unlike playwright-stealth or undetected-chromedriver (which patch at the JS or CDP layer), CloakBrowser modifies canvas, WebGL, audio, fonts, WebRTC, GPU metadata, and CDP input events directly in the browser source. The wrapper is a thin shim: it downloads the binary (~200 MB, cached at ~/.cloakbrowser/), builds the correct Chromium flags, and returns a standard Playwright Browser or BrowserContext object. You replace one import line; everything else stays the same.
Mental model
- Binary: The stealth Chromium executable downloaded on first use. Has 48–57 source-level patches depending on platform. Auto-updates in the background unless
CLOAKBROWSER_AUTO_UPDATE=false. - Fingerprint seed: Integer passed via
--fingerprint=<seed>CLI arg. Determines deterministic, unique-but-realistic values for canvas noise, GPU model, audio rendering, etc. across all APIs. Without it, each launch gets a random seed. - Launch function: Entry point —
launch()(incognito),launchContext()(browser + context), orlaunchPersistentContext()(real user profile). Returns standard Playwright objects. - humanize: Optional wrapper around Playwright methods that replaces
click(),type(),scroll()with Bézier-curve mouse paths, per-character timing delays, and natural scroll physics. Opt-in per-call or per-session. - geoip: When
geoip=Trueand a proxy is set, downloads an offline GeoIP database and setstimezone/localeto match the proxy's exit IP. Requiresmmdb-lib(JS) orgeoip2+socksio(Python). - cloakserve: CDP multiplexer exposed on port 9222 for connecting external tools (browser-use, Stagehand, Crawlee) to a single stealth browser. Each connection gets its own fingerprint seed.
Install
# JavaScript (Playwright)
npm install cloakbrowser playwright-core
# JavaScript (Puppeteer)
npm install cloakbrowser puppeteer-core
# Python
pip install cloakbrowser// JS: hello world
import { launch } from 'cloakbrowser';
const browser = await launch();
const page = await browser.newPage();
await page.goto('https://bot.sannysoft.com');
console.log(await page.title());
await browser.close();# Python: hello world
from cloakbrowser import launch_async
import asyncio
async def main():
async with await launch_async() as browser:
page = await browser.new_page()
await page.goto('https://bot.sannysoft.com')
print(await page.title())
asyncio.run(main())Binary auto-downloads on first launch(). Pre-download with npx cloakbrowser install or python -m cloakbrowser install.
Core API
JavaScript (import from 'cloakbrowser')
launch(options?) → Browser Standard Playwright Browser (incognito context)
launchContext(options?) → BrowserContext Browser + context in one call
launchPersistentContext(options?) → BrowserContext Real user profile; accepts userDataDirimport from 'cloakbrowser/puppeteer'
launch(options?) → Browser Puppeteer Browser (not recommended for reCAPTCHA Enterprise)import from 'cloakbrowser/human'
// Manual humanize patching for externally-connected Playwright instancesJavaScript launch options
proxy string | ProxyObject 'http://user:pass@host:port' | 'socks5://...' | {server,bypass,username,password}
headless boolean default true
args string[] extra Chromium CLI flags (e.g. ['--fingerprint=12345'])
timezone string IANA tz string
locale string BCP-47 locale
geoip boolean auto-detect timezone+locale from proxy IP (requires mmdb-lib)
userDataDir string launchPersistentContext only
contextOptions object forwarded to Playwright newContext() (storageState, permissions, etc.)JavaScript utilities
ensureBinary() → Promise<string> Download binary if missing; returns path
binaryInfo() → object Version, path, platform
clearCache() → void Delete cached binaries
checkForUpdate() → Promise<string?> Return new version string if update availablePython (from cloakbrowser import ...)
launch_async(**kwargs) → Browser async; incognito
launch_context_async(**kwargs) → BrowserContext async; no profile folder needed; forwards to browser.new_context()
launch_persistent_context_async(user_data_dir, **kwargs) → BrowserContextPython launch kwargs (common)
proxy str | dict same format as JS
headless bool
humanize bool wrap Playwright methods with human-like behavior
human_preset str 'default' | 'careful'
human_config dict per-call override of HumanConfig fields
geoip bool requires geoip2+socksio extras
timezone str
locale str
viewport dict {'width': 1920, 'height': 1080}
extra_args list[str] additional Chromium CLI flagsCommon patterns
basic-playwright
import { launch } from 'cloakbrowser';
const browser = await launch();
const page = await browser.newPage();
await page.goto('https://protected-site.com');
await page.screenshot({ path: 'result.png' });
await browser.close();proxy-with-geoip
import { launch } from 'cloakbrowser';
// npm install mmdb-lib first
const browser = await launch({
proxy: 'http://user:pass@residential-proxy:8080',
geoip: true, // timezone+locale auto-matched to proxy exit IP
});persistent-context (avoid incognito detection, keep cookies)
import { launchPersistentContext } from 'cloakbrowser';
const ctx = await launchPersistentContext({
userDataDir: './chrome-profile',
headless: false,
});
const page = ctx.pages()[0] || await ctx.newPage();
await page.goto('https://example.com');
await ctx.close(); // session saved; reuse same path next timedeterministic-fingerprint (same device identity across sessions)
import { launch } from 'cloakbrowser';
const browser = await launch({
args: ['--fingerprint=42'], // any integer; consistent GPU, canvas, audio
proxy: 'http://proxy:8080',
});recaptcha-safe-sleep (avoid CDP traffic during reCAPTCHA)
// BAD: sends CDP commands reCAPTCHA can see
await page.waitForTimeout(3000);
// GOOD: invisible to the browser
await new Promise(r => setTimeout(r, 3000));
// Also use page.type() with delay instead of page.fill():
await page.type('#email', 'user@example.com', { delay: 50 });humanize-python
from cloakbrowser import launch_async
async with await launch_async(humanize=True, human_preset='careful') as browser:
page = await browser.new_page()
await page.goto('https://protected-form.com')
await page.click('#submit') # Bézier mouse path, natural timing
await page.type('#email', 'a@b.com') # per-character delays + thinking pausesbrowser-use-agent (AI agent via CDP)
from cloakbrowser import launch_async
from browser_use import Agent, BrowserSession
cb = await launch_async(proxy='http://proxy:8080', geoip=True)
session = BrowserSession(cdp_url='http://127.0.0.1:9242')
agent = Agent(task='Find the price of X', browser_session=session)
result = await agent.run()
await cb.close()docker-predownload
// In Dockerfile CMD or build step — avoids download at runtime
import { ensureBinary } from 'cloakbrowser';
await ensureBinary();
console.log('Binary ready');rollback-binary (when an auto-update breaks something)
# Point at a prior cached version; old binaries are kept
export CLOAKBROWSER_BINARY_PATH=~/.cloakbrowser/chromium-145.0.7632.159.2/chromeGotchas
- Incognito detection:
launch()uses an incognito context by default. Sites like BrowserScan explicitly check for this. UselaunchPersistentContext({ userDataDir: '...' })for a real profile — it also gives cookie persistence. page.waitForTimeout()is a reCAPTCHA signal: It sends CDPRuntime.callFunctionOncommands the score algorithm detects. Useawait new Promise(r => setTimeout(r, ms)). Similarly, minimizepage.evaluate()calls before the reCAPTCHA token is collected.page.fill()vspage.type():fill()sets the value directly without keyboard events; reCAPTCHA's behavioral analysis penalizes it. Usepage.type('#field', value, { delay: 50 })for form inputs before CAPTCHA triggers.- Rotating residential proxies + geoip: The GeoIP lookup resolves the proxy hostname's DNS IP, not the actual exit IP. With rotating proxies these differ — pass
timezoneandlocaleexplicitly instead of relying ongeoip: true. - Puppeteer vs Playwright for reCAPTCHA Enterprise: Puppeteer's CDP protocol sends more automation signals than Playwright's. Use Playwright for sites with reCAPTCHA Enterprise; Puppeteer is fine for most other anti-bot systems.
- Welcome banner goes to stderr (since 0.3.18): The first-launch banner no longer corrupts stdout JSON output, but piped output from earlier versions would include it. Make sure you're on >= 0.3.18 if parsing stdout.
- SOCKS5 credential encoding: Usernames/passwords with special characters in SOCKS5 URLs are auto-URL-encoded since 0.3.26. If you were manually encoding them before, double-encoding will break auth — use raw credentials in the string.
Version notes
The past ~12 months show significant feature velocity:
- humanize layer (0.3.11, 2026-03): Human-like mouse (Bézier + overshoot), keyboard (per-char delay, thinking pauses), and scroll added. Two presets:
defaultandcareful. Not available in earlier versions. - Patch count growth: Linux went from 33 patches (0.3.15) → 49 (0.3.22) → 57 (0.3.25). Windows jumped from 33 to 57 patches in 0.3.26. If you benchmarked detection rates on an older version, re-test.
- Native SOCKS5 (0.3.24): SOCKS5 proxies with UDP ASSOCIATE (QUIC/HTTP3) now handled natively in the binary; no wrapper-level workaround needed.
launch_context_async()(0.3.25, Python): New async function returns aBrowserContextwithout needing a persistent profile folder. Enablesstorage_state,permissions,extra_http_headerswithout writing to disk.- CDP locale/timezone replaced by binary flags (0.3.12): Timezone/locale now set via
--langand--timezoneChromium flags instead of Playwright's CDP emulation — eliminates a detection vector. Code usingbrowserContext.setDefaultNavigationTimeoutfor locale is now redundant. - WebRTC IP spoofing (0.3.20):
--fingerprint-webrtc-ipflag added; auto-injected whengeoip=True. Previously WebRTC could leak the real IP behind a proxy.
Related
- Depends on:
playwright-core >= 1.53orpuppeteer-core >= 21(peer, optional);mmdb-lib(JS, optional, for geoip);geoip2+socksio(Python, optional extras:pip install cloakbrowser[geoip]) - Alternatives:
playwright-stealth(JS-layer patches only, weaker),undetected-chromedriver(Selenium-based, Python),patchright(supported as alternative Python backend viapip install cloakbrowser[patchright]) - Integrates with: browser-use, Crawl4AI, Stagehand, Scrapling, LangChain, Crawlee, Scrapy — all via standard Playwright API or CDP connection to
cloakserve - Docker: Official image
cloakhq/cloakbrowseron Docker Hub; AWS Lambda example inexamples/integrations/aws_lambda/
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

