Install
openclaw skills install yumwebUse an already-logged-in Edge/Chrome/Chromium browser as the agent's hands. A persistent logged-in browser bridge for OpenClaw, Copilot CLI, Claude Code, Hermes, and other local AI agents. Use when: open browser, reuse logged-in websites, check X/Gmail/Outlook/Amazon/LinkedIn/Facebook/Instagram/WeChat Web, read webpages, switch tabs, click, type, fetch pages, browser automation.
openclaw skills install yumwebPlatform: Windows / macOS / Linux, with any Chromium-based browser (Microsoft Edge preferred; Chrome / Chromium also auto-detected). Python: 64-bit only — Playwright's
greenletdependency has no 32-bit Windows wheel.
A dedicated Chromium-based browser instance with Chrome DevTools Protocol (CDP)
enabled, running on port 9333 with its own user-data directory — separate
from your everyday browser by default. Cookies persist across runs, so you log
in once (e.g. to x.com, Gmail, Outlook, Amazon, LinkedIn, Facebook,
Instagram, or WeChat Web) and stay logged in for later agent sessions.
When multiple tabs are open, yumweb persists the last explicitly activated tab
(tab-switch, tab-new, goto, x-read, etc.) so follow-up commands like
read, click, and type target the intended page more reliably.
This skill exposes a single Python script (scripts/yumweb.py, Playwright
backend) that any AI agent (OpenClaw, Copilot CLI, Claude Code, Hermes, etc.)
can shell out to in order to: open URLs, read page contents as text or
markdown, click & type, take screenshots, run JavaScript, and operate inside
real logged-in websites.
Most browser tools focus on controlling a browser.
yumweb focuses on preserving a persistent, logged-in browser world that an agent can come back to later.
That makes it useful for personal-assistant style tasks like:
./profile/ next to this skill — log in once, keep
cookies across runs (treat that directory like credentials; the bundled
.gitignore excludes it from git).See README.md for full installation. Quick version:
python -m pip install playwright html2text requests
python scripts\yumweb.py start
# Manually log in to x.com (or any site you want cached cookies for).
start is idempotent — running it again is a no-op if Edge is already up.
| Command | Description |
|---|---|
start | Launch Edge with --remote-debugging-port=9333 + dedicated profile. Detached. |
stop | Kill the Edge instance (only the one on port 9333) |
status | Show whether Edge is up, current URL, list of tabs |
goto <url> | Navigate active tab to URL (waits for load) |
read [--mode text|md|html] [--selector CSS] [--max N] | Get page text/markdown/HTML. Default: text, body, max 8000 chars |
fetch <url> | Shortcut: goto <url> && read --mode md |
click <selector> | Click first element matching CSS |
type <selector> <text> [--enter] | Focus selector, type text (optionally press Enter) |
screenshot <path> | Save PNG screenshot of viewport |
eval <js> | Run JS in active tab, print JSON result |
tabs | List all open tabs (idx, title, url) |
tab-new <url> | Open new tab |
tab-switch <idx> | Switch active tab |
tab-close <idx> | Close tab |
x-read [--user <handle>] [--n 20] | Read tweets from home timeline or user profile |
x-post <text> | Post a new tweet (requires prior login) |
All commands print to stdout. Errors go to stderr with non-zero exit.
:: Quick read of any URL (markdown form, good for LLMs)
python scripts\yumweb.py fetch https://example.com
:: Read your home timeline
python scripts\yumweb.py x-read --n 10
:: Read someone's tweets
python scripts\yumweb.py x-read --user satyanadella --n 5
:: Post a tweet
python scripts\yumweb.py x-post "Hello from CLI"
:: Click a button by CSS
python scripts\yumweb.py click "button[data-testid='login']"
:: Search box: type and press enter
python scripts\yumweb.py type "input[name=q]" "GB200 firmware" --enter
When the user asks to "check what's on X about XYZ", "go look at this URL", "post a tweet about Y", or anything web-browsing related:
./scripts/run.sh status (or python scripts\yumweb.py status on Windows) — start if not running.fetch <url> for quick reads (LLM-friendly markdown output).x-read / x-post for X.tab-switch <idx> before read / click / type when multiple tabs are open.eval for anything custom (return must be JSON-serializable).scripts/yumweb.py — main script (Playwright backend)scripts/config.json — port, profile dir, edge.exe path (paths blank → auto-resolve next to this skill)profile/ — Edge user-data dir (created on first start, gitignored)logs/yumweb.log — stderr from launched Edge (gitignored)logs/active_tab.json — last active tab metadata used to make follow-up commands target the intended pageplaywright (>= 1.40) — attaches to existing browser via CDP; no bundled browser neededpsutil (>= 5.9) — cross-platform process management for stoprequestshtml2text (auto-installed on first read --mode md if missing)profile/ — treat that directory like a credential. The
bundled .gitignore excludes it. Don't commit it.eval runs arbitrary JS — only invoke with trusted strings.