Build or update the BlueBubbles external channel plugin for Moltbot (extension package, REST...
npx skills add Jaredw2289-svg/chrome-pilot --skill "chrome-pilot"
Install specific skill from multi-skill repository
# Description
Control the user's real Chrome browser via AppleScript. Write Python scripts using chrome_pilot library to browse, extract, and download web content. Invisible to anti-bot detection.
# SKILL.md
name: chrome-pilot
description: Control the user's real Chrome browser via AppleScript. Write Python scripts using chrome_pilot library to browse, extract, and download web content. Invisible to anti-bot detection.
What this skill does
You control the user's real Chrome browser by writing and executing Python scripts that use the chrome_pilot library. This is invisible to anti-bot systems (PerimeterX, Cloudflare, etc.) because it uses macOS AppleScript IPC, not CDP or WebDriver.
When to use this skill
- Browsing sites with anti-bot protection (Seeking Alpha, WSJ, Bloomberg, etc.)
- Accessing content behind login/paywalls (user's Chrome is already logged in)
- Any web task where Playwright MCP gets blocked
- Downloading images/files from authenticated sessions
- Form filling on internal/enterprise systems
Prerequisites
- macOS
- Chrome running
- Chrome β View β Developer β Allow JavaScript from Apple Events β
pip install chrome-pilot(orpip install -e ~/coding/chrome-pilot)
How to work
- Understand the user's goal
- Write a complete Python script that uses chrome_pilot to accomplish it
- Execute the script via Bash tool
- If it fails, read the traceback, fix the script, re-execute
- Return results to the user
Do NOT call chrome_pilot tools one-by-one in a loop. Write the full script first, then run it.
API reference
from chrome_pilot import chrome
from chrome_pilot.extractor import extract_article, extract_links, extract_images
from chrome_pilot.downloader import download_image, download_images
import time, json
# --- Navigation ---
chrome.navigate(url) # open URL (auto-waits 3s)
chrome.navigate(url, wait=5) # custom wait
chrome.back() / chrome.forward()
chrome.reload()
chrome.new_tab(url)
chrome.close_tab()
# --- Read page ---
chrome.snapshot() -> str # page visible text
chrome.html(selector?) -> str # element HTML
chrome.js(code) -> str # execute any JavaScript
chrome.url() -> str
chrome.title() -> str
chrome.tabs() -> [{title, url}]
# --- Interact ---
chrome.click(selector) # CSS selector
chrome.type_text(selector, text) # type into input
chrome.select(selector, value) # select dropdown option
chrome.scroll("down"|"up"|"bottom"|"top")
chrome.wait(seconds)
chrome.wait_for(js_condition, timeout=30)
# --- Smart extract ---
extract_article() -> {title, author, date, url, content_md, summary, word_count}
extract_links(pattern?) -> [{title, url}]
extract_images() -> [{url, alt, width, height}]
# --- Download ---
download_image(url, save_dir) -> filepath
download_images(save_dir, min_width=100) -> [filepaths]
# --- State ---
chrome.cookies(domain?) -> str
chrome.storage(key?) -> str
chrome.is_running() -> bool
Script patterns
Fetch articles from a listing page
from chrome_pilot import chrome
from chrome_pilot.extractor import extract_article, extract_links
import time, json
chrome.navigate("https://seekingalpha.com/symbol/NVDA/analysis")
time.sleep(5)
links = extract_links(pattern="/article/")[:5]
articles = []
for link in links:
chrome.navigate(link["url"])
time.sleep(4)
article = extract_article()
if article.get("content_md"):
articles.append(article)
print(f"β {article['title'][:60]}")
else:
print(f"β {link['title'][:60]} - no content")
# Save results
from pathlib import Path
out = Path.home() / "articles"
out.mkdir(exist_ok=True)
for a in articles:
slug = a["title"][:50].lower().replace(" ", "-")
(out / f"{slug}.md").write_text(
f"# {a['title']}\n\n**{a['author']}** | {a['date']}\n\n{a['content_md']}"
)
print(f"\nSaved {len(articles)} articles to ~/articles/")
Search and extract
from chrome_pilot import chrome
import time
chrome.navigate("https://seekingalpha.com")
time.sleep(3)
chrome.click('input[data-test-id="search-input"]')
chrome.type_text('input[data-test-id="search-input"]', "NVDA GTC 2026")
chrome.press_key("enter")
time.sleep(3)
print(chrome.snapshot())
Download all images
from chrome_pilot import chrome
from chrome_pilot.downloader import download_images
chrome.navigate("https://example.com/gallery")
chrome.wait(3)
saved = download_images("~/Downloads/gallery", min_width=200)
print(f"Downloaded {len(saved)} images")
Rules
Ask before acting
Before writing and executing a script, confirm with the user if any of these are unclear:
- Which Chrome window/profile to use (if multiple are open)
- Which specific pages or URLs to target
- Where to save output files
- How many articles/items to fetch
- Whether to navigate away from the current page
Example: "I'll open a new tab in your Junyu profile window, navigate to SA, and extract the first 5 NVDA articles to ~/articles/. OK?"
Do NOT ask about
- Technical implementation details (selectors, sleep timing, script structure)
- Things the user already specified in their request
- Obvious defaults (e.g. save format is Markdown unless stated otherwise)
Execution rules
- Always
time.sleep(3-5)afternavigate() - Never ask for login credentials β the user's Chrome is already logged in
- If CAPTCHA or error dialog appears, report it and stop β do not retry endlessly
- Prefer
extract_article()over manual DOM parsing - Scripts are disposable β write, run, discard or save as the user prefers
- Use
chrome.snapshot()to understand page state before deciding actions - Print progress during loops so the user sees what's happening
- Use
Chrome(window=...)orchrome.use(window=...)to target a specific profile window without disturbing the user's active browsing
CLI usage (alternative to Python scripts)
chrome-pilot navigate "https://example.com"
chrome-pilot snapshot
chrome-pilot extract article
chrome-pilot extract links --pattern "/article/"
chrome-pilot download images ~/images/
chrome-pilot status
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.