skills/stealth-browser/SKILL.md
Invisible Chrome automation for web scraping via CDP. Use when WebFetch fails or gets blocked (403, 429, Cloudflare, bot protection, JS-rendered pages). Launches your real Chrome install completely hidden, sends commands via Chrome DevTools Protocol. Sites see a normal browser with real extensions - no detectable automation. Learns which domains block and skips straight to stealth on future requests. Also handles form filling, clicking, screenshots, and scraping dynamic content.
npx skillsauth add changeflowhq/skills stealth-browserInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Invisible Chrome automation via CDP. Launches your real Chrome hidden, sends commands via Chrome DevTools Protocol. Sites see a normal browser - no detectable automation.
macOS only. Uses AppleScript and
open -gto hide Chrome.
Read ~/.claude/skills/stealth-browser/LEARNED.md at the start of every task. If it doesn't exist, create it with a # Learned header.
Capture learnings when you detect:
Before appending, check:
Format: One line, actionable. Write the rule, not the story.
Don't ask permission. Append and move on.
# 1. Read a page as markdown (most common)
stealth-browser read <url>
# 2. Full automation (open, interact, close)
stealth-browser open <url> --hidden
agent-browser --cdp 9222 snapshot -i
agent-browser --cdp 9222 click @e1
stealth-browser close
stealth-browser is at scripts/stealth-browser relative to this skill. Use full path:
~/.claude/skills/stealth-browser/scripts/stealth-browser read <url>
stealth-browser read <url> # Fetch as markdown (waits for JS render)
stealth-browser open <url> --hidden # Launch hidden Chrome
stealth-browser close # Stop Chrome
stealth-browser status # Check state
stealth-browser screenshot [path] # CDP screenshot (auto unhide/re-hide)
stealth-browser hide / unhide # Toggle visibility
stealth-browser doctor # Check dependencies
stealth-browser setup # Reset Chrome profile
agent-browser --cdp 9222 open <url> # Navigate
agent-browser --cdp 9222 snapshot -i # Get interactive elements
agent-browser --cdp 9222 click @e1 # Click by ref
agent-browser --cdp 9222 fill @e2 "text" # Fill input
agent-browser --cdp 9222 type @e2 "text" # Type without clearing
agent-browser --cdp 9222 press Enter # Press key
agent-browser --cdp 9222 scroll down 500 # Scroll
agent-browser --cdp 9222 get text @e1 # Get text
agent-browser --cdp 9222 get url # Get current URL
agent-browser --cdp 9222 eval "document.title" # Run JavaScript
agent-browser --cdp 9222 screenshot path.png # Screenshot
agent-browser --cdp 9222 wait 2000 # Wait
agent-browser --cdp 9222 back # Navigate back
Always re-snapshot after navigation or DOM changes - element refs change.
Chrome stays running and hidden after read or open --hidden:
stealth-browser closeBlocked domains are remembered at data/blocked-domains.txt. A PreToolUse hook intercepts future WebFetch calls to those domains and tells Claude to use stealth-browser directly.
See hooks/README.md for Claude Code integration setup. See README.md for full human documentation.
development
Local semantic search engine for markdown knowledge bases using qmd (tobi/qmd). Indexes markdown files with BM25 keyword search, vector embeddings for semantic search, and hybrid reranked queries. Auto-indexes on file edits via Claude Code hooks and refreshes embeddings overnight via launchd. Use when searching project docs, knowledge bases, meeting notes, or any indexed markdown collection.
development
Create, restructure, and validate Claude Code skills following best practices. Handles directory structure, YAML frontmatter, progressive disclosure, credential management, self-learning with consolidation, and script organization. Use when creating new skills, restructuring existing skills, reviewing skills for quality, or asking about skill structure, patterns, or best practices.
tools
Create short video animations from HTML/CSS/JS. Frame-by-frame capture at 30fps using Playwright + ffmpeg. Write CSS animations normally - the recorder pauses and steps them. Use for product demos, social clips, ad creative, feature announcements.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.