Iron Proxy Gateway for NanoClaw
nanocoai/nanoclaw
Installs or refreshes Iron Proxy and its Iron Control web console for NanoClaw, with a local Docker setup, database, credentials and a human approval bridge.
Persistent authenticated browser for OpenClaw via kasmweb/chrome Docker sidecar.
$ npx skills add LeoYeAI/openclaw-master-skills --skill virtual-desktop-pro -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills virtual-desktop-pro --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/virtual-desktop-pro .claude/skills/virtual-desktop-pro && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "virtual-desktop-pro" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/virtual-desktop-pro into .claude/skills/virtual-desktop-pro/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "virtual-desktop-pro", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/virtual-desktop-proType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LeoYeAI/openclaw-master-skills --skill virtual-desktop-pro -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills virtual-desktop-pro --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/virtual-desktop-pro .agents/skills/virtual-desktop-pro && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "virtual-desktop-pro" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/virtual-desktop-pro into .agents/skills/virtual-desktop-pro/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "virtual-desktop-pro", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill virtual-desktop-pro -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills virtual-desktop-pro --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/virtual-desktop-pro .cursor/skills/virtual-desktop-pro && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "virtual-desktop-pro" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/virtual-desktop-pro into .cursor/skills/virtual-desktop-pro/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "virtual-desktop-pro", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LeoYeAI/openclaw-master-skills.git --path skills/virtual-desktop-pro--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LeoYeAI/openclaw-master-skills --skill virtual-desktop-pro -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills virtual-desktop-pro --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/virtual-desktop-pro .gemini/skills/virtual-desktop-pro && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "virtual-desktop-pro" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/virtual-desktop-pro into .gemini/skills/virtual-desktop-pro/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "virtual-desktop-pro", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LeoYeAI/openclaw-master-skills virtual-desktop-proInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LeoYeAI/openclaw-master-skills --skill virtual-desktop-pro -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/virtual-desktop-pro .github/skills/virtual-desktop-pro && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "virtual-desktop-pro" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/virtual-desktop-pro into .github/skills/virtual-desktop-pro/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "virtual-desktop-pro", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill virtual-desktop-pro -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills virtual-desktop-pro --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/virtual-desktop-pro .opencode/skills/virtual-desktop-pro && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "virtual-desktop-pro" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/virtual-desktop-pro into .opencode/skills/virtual-desktop-pro/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "virtual-desktop-pro", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
virtual-desktop-proPersistent authenticated browser for OpenClaw via kasmweb/chrome Docker sidecar.
Virtual Desktop Pro is an agent skill from LeoYeAI/openclaw-master-skills. Persistent authenticated browser for OpenClaw via kasmweb/chrome Docker sidecar. Principal logs in once via noVNC — sessions saved permanently in Docker volume. Agent navigates any website, clicks, fills forms, extracts data, uploads files, takes screenshots, solves CAPTCHAs autonomously, and analyses pages with Claude Vision. Use when the task requires a real authenticated browser, not a static fetch.
Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files (for example `CONFIGURATION.md`, `README.md` and `_meta.json`).
It sits in DevOps & Cloud, covering Containers. It works with Docker. The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.
Read from SKILL.md and the folder at commit e5199b5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
dockerpython3curlapt-getFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.capsolver.comapi.anthropic.comregistry.npmjs.orggithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
CAPSOLVER_API_KEYBROWSERBASE_API_KEYCAPSOLVER_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Virtual Desktop Pro loads about 5k tokens when it runs. Until then it costs about 106 tokens; SKILL.md has 673 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
# 2. Update .envif ! grep -q "VNC_PW" .env 2>/dev/null; thenecho "VNC_PW=${VNC_GENERATED}" >> .envgrep -q "BROWSER_CDP_URL" .env || echo "BROWSER_CDP_URL=http://browser:9222" >> .envgrep -q "CAPSOLVER_API_KEY" .env || echo "CAPSOLVER_API_KEY=" >> .envgrep -q "BROWSERBASE_API_KEY" .env || echo "BROWSERBASE_API_KEY=" >> .envCAPSOLVER_KEY=$(grep CAPSOLVER_API_KEY .env | cut -d= -f2). Enter password: your VNC_PW value from .env# Add BROWSERBASE_API_KEY to .envPROXY_URL=http://user:pass@proxy:port to .envAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 673 words, ~4,978 tokens.
.claude/skills/virtual-desktop-pro/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Gives the agent a persistent authenticated browser (kasmweb/chrome) running as a Docker sidecar. Principal logs in once via noVNC. Sessions saved permanently.
| Capability | What it means |
|---|---|
| ANALYZE | Read any page, extract structured data, monitor changes over time |
| PLAN | Map the UI, identify selectors, prepare multi-step action sequences |
| EXECUTE | Click, type, fill forms, submit, upload, download, navigate any flow |
| SELF-CORRECT | Screenshot error state, identify root cause, retry with alternate approach |
| IMPROVE | Write UI patterns and selector maps to .learnings/ after every session |
Use cases: Google Workspace · social platforms · admin dashboards · e-commerce · forms · market research · data extraction · any platform with or without an API
/workspace/
├── screenshots/ ← visual proof of every action (auto-created)
├── logs/browser/ ← full tracebacks (auto-created)
├── tasks/lessons.md ← immediate task capture during mission
├── AUDIT.md ← append-only action log
├── memory/YYYY-MM-DD.md ← daily session summary
└── .learnings/
├── ERRORS.md ← errors, broken selectors, ref maps
└── LEARNINGS.md ← patterns, timing, navigation per platformUse this skill when the task requires a real authenticated browser:
Prefer a lighter path first — if a simple HTTP request or existing OpenClaw tool can answer the question, use that instead. This skill uses more tokens and resources than plain fetch.
This skill runs a persistent kasmweb/chrome Docker sidecar alongside OpenClaw. Principal logs in once via noVNC (port 6901). Sessions saved permanently in a Docker volume.
Three execution paths — load only what the task needs:
| Path | When to use | File |
|---|---|---|
| OpenClaw native browser | Simple navigate/click/extract — fastest, fewest tokens | Built-in |
| browser_control.py | AUDIT logging, workflows, CAPTCHA, Vision | browser_control.py |
| noVNC (manual) | Initial login, 2FA, session renewal | Port 6901 |
Load only the smallest path needed. Simple navigation → OpenClaw native. Complex multi-step with logging → browser_control.py.
OPENCLAW_DIR="${OPENCLAW_DIR:-$(pwd)}"
cd "$OPENCLAW_DIR"
CONTAINER="${OPENCLAW_CONTAINER:-$(docker ps --format '{{.Names}}' | grep openclaw | head -1)}"
# 1. Add kasmweb/chrome to docker-compose.yml
python3 -c "
import yaml, os
VNC_PW = os.environ.get('VNC_PW') or __import__('secrets').token_urlsafe(18)
with open('docker-compose.yml') as f:
data = yaml.safe_load(f)
data.setdefault('services', {})['browser'] = {
'image': 'kasmweb/chrome:1.15.0',
'container_name': 'browser',
'restart': 'unless-stopped',
'shm_size': '1gb',
'ports': ['6901:6901', '9222:9222'],
'environment': [
'VNC_PW=' + VNC_PW,
'RESOLUTION=1920x1080',
'CHROME_ARGS=--remote-debugging-port=9222 --remote-debugging-address=0.0.0.0 --no-sandbox --disable-blink-features=AutomationControlled --disable-infobars'
],
'volumes': ['browser-profile:/home/kasm-user/chrome-profile'],
'networks': list(data.get('networks', {'default': None}).keys())
}
data.setdefault('volumes', {})['browser-profile'] = None
with open('docker-compose.yml', 'w') as f:
yaml.dump(data, f, default_flow_style=False, allow_unicode=True)
print('docker-compose.yml updated')
"
# 2. Update .env
# VNC_PW — generate a strong random password if not already set
if ! grep -q "VNC_PW" .env 2>/dev/null; then
VNC_GENERATED=$(python3 -c "import secrets,string; print(''.join(secrets.choice(string.ascii_letters+string.digits) for _ in range(24)))")
echo "VNC_PW=${VNC_GENERATED}" >> .env
echo "✅ VNC_PW generated — save this: ${VNC_GENERATED}"
fi
grep -q "BROWSER_CDP_URL" .env || echo "BROWSER_CDP_URL=http://browser:9222" >> .env
grep -q "CAPSOLVER_API_KEY" .env || echo "CAPSOLVER_API_KEY=" >> .env
grep -q "BROWSERBASE_API_KEY" .env || echo "BROWSERBASE_API_KEY=" >> .env
# 3. Update openclaw.json — hot reload, no restart needed
python3 -c "
import json, os
f = 'data/.openclaw/openclaw.json'
with open(f) as fp: cfg = json.load(fp)
cfg.setdefault('browser', {}).update({'enabled': True, 'headless': False,
'noSandbox': True, 'defaultProfile': 'chrome-sidecar'})
profiles = cfg['browser'].setdefault('profiles', {})
profiles['chrome-sidecar'] = {'cdpUrl': 'http://browser:9222', 'color': '#4285F4'}
bb_key = os.environ.get('BROWSERBASE_API_KEY', '')
if bb_key:
profiles['browserbase'] = {'cdpUrl': f'wss://connect.browserbase.com?apiKey={bb_key}', 'color': '#F97316'}
with open(f, 'w') as fp: json.dump(cfg, fp, indent=2)
print('openclaw.json updated — hot reload active')
"
# 4. Start browser container only — OpenClaw keeps running
docker compose up -d --no-deps browser
sleep 12
# 5. Install Python dependencies
docker exec "$CONTAINER" pip install requests playwright --break-system-packages -q
docker exec "$CONTAINER" node /app/node_modules/playwright-core/cli.js install chromium
echo "✅ Python dependencies installed"
# 6. Download CapSolver extension (optional — only if key present)
CAPSOLVER_KEY=$(grep CAPSOLVER_API_KEY .env | cut -d= -f2)
if [ -n "$CAPSOLVER_KEY" ]; then
docker exec "$CONTAINER" bash -c "
apt-get install -y unzip curl -qq
curl -sL https://github.com/capsolver/capsolver-browser-extension/releases/latest/download/chrome.zip \
-o /tmp/capsolver.zip
unzip -q /tmp/capsolver.zip -d /data/.openclaw/capsolver-extension
sed -i \"s/apiKey: \\\"\\\"/apiKey: \\\"$CAPSOLVER_KEY\\\"/\" \
/data/.openclaw/capsolver-extension/assets/config.js 2>/dev/null
"
echo "✅ CapSolver extension configured"
fi
# 7. Create workspace directories and deploy browser_control.py
docker exec "$CONTAINER" bash -c "
mkdir -p /data/.openclaw/workspace/skills/virtual-desktop
mkdir -p /workspace/screenshots /workspace/logs/browser /workspace/.learnings /workspace/memory
touch /workspace/AUDIT.md /workspace/.learnings/ERRORS.md /workspace/.learnings/LEARNINGS.md
"
docker cp {baseDir}/browser_control.py \
"$CONTAINER":/data/.openclaw/workspace/skills/virtual-desktop/browser_control.py
echo "✅ browser_control.py deployed"
# 8. Verify
docker ps | grep -E "openclaw|browser"
curl -s http://localhost:9222/json > /dev/null && echo "✅ Chrome CDP active" || echo "⏳ Chrome starting"
docker exec "$CONTAINER" \
python3 /data/.openclaw/workspace/skills/virtual-desktop/browser_control.py status
# 9. Notify principal
VPS_IP=$(curl -s ifconfig.me 2>/dev/null || echo "YOUR_VPS_IP")
echo "Virtual Desktop ready — https://${VPS_IP}:6901"
echo "Log in to your platforms via noVNC then reply DONE."https://YOUR_VPS_IP:6901 login: kasm_user password: your VNC_PWOpen Chrome via noVNC and log in to every platform you want the agent to access.
Sessions saved in Docker volume browser-profile — survive restarts — valid indefinitely.
Step by step — do this once after setup:
1. Open https://YOUR_VPS_IP:6901 in your browser
2. Enter password: your VNC_PW value from .env
3. Chrome Desktop opens inside the browser
4. Log in to Google (accounts.google.com)
→ Email + password + 2FA if required
→ "Trust this device" → YES
→ This unlocks: Gmail, Drive, Calendar, Docs,
Sheets, Google AI Studio, YouTube, all Google services
5. Log in to every other platform you want Wesley to access:
→ Twitter/X → twitter.com
→ LinkedIn → linkedin.com
→ Reddit → reddit.com
→ Hostinger panel → hpanel.hostinger.com
→ Any other site → log in normally
6. After each login: Chrome saves the session automatically
in the Docker volume browser-profile
7. Reply DONE to Wesley on Telegram
→ Wesley confirms sessions are active
→ He will never ask for your credentials againWhat happens after:
Wesley opens any platform → already logged in ✅
No credentials needed → ever again
Session expires (rare) → Wesley notifies Telegram
→ You open noVNC → log in again → reply DONE
→ Takes 2 minutesImportant — 2FA:
Google 2FA → confirm once via noVNC
Chrome remembers the device
No 2FA required again on this browser
Other platforms → same principle
confirm once → trusted device → done| Reference | Content |
|---|---|
| OpenClaw native browser commands | See below — openclaw browser |
| browser_control.py commands | See below — $BC |
| CAPTCHA strategy | See CAPTCHA section |
| Residential proxy | See Proxy section |
| Claude Vision | See Vision section |
| Selectors, timing, auth flows | LEARNINGS.md (auto-built by agent) |
| Broken selectors, error recovery | ERRORS.md (auto-built by agent) |
# Navigation
openclaw browser open <url>
openclaw browser snapshot [--interactive]
openclaw browser back | forward | reload | close
# Interaction
openclaw browser click <ref>
openclaw browser type <ref> "text"
openclaw browser select <ref> "value"
openclaw browser hover <ref>
openclaw browser scroll [--direction down|up|right|left]
# Files
openclaw browser upload /tmp/file.pdf
openclaw browser download <ref> file.pdf
# Cookies & storage
openclaw browser cookies | cookies set k v --url "https://example.com" | cookies clear
openclaw browser storage local get | set k v | clear
# Configuration
openclaw browser set geo 48.8566 2.3522 --origin "https://example.com"
openclaw browser set timezone Europe/Paris
openclaw browser set locale fr-FR
openclaw browser set device "iPhone 14"
openclaw browser set media dark
openclaw browser set headers --headers-json '{"X-Custom":"val"}'
# Debug
openclaw browser console --level error
openclaw browser requests --filter api
openclaw browser trace start | stop
openclaw browser status
# Stealth (if site blocks VPS)
openclaw browser --browser-profile browserbase open <url>BC="python3 /data/.openclaw/workspace/skills/virtual-desktop/browser_control.py"
$BC screenshot <url> [label]
$BC navigate <url> [selector]
$BC click <url> <selector>
$BC click_xy <url> <x> <y>
$BC fill <url> <selector> <value>
$BC select <url> <selector> <value>
$BC hover <url> <selector>
$BC scroll <url> <direction> [pixels]
$BC keyboard <url> <selector> <key>
$BC extract <url> <selector> [output_file]
$BC wait_for <url> <selector> [timeout_ms]
$BC upload <url> <file_selector> <file_path>
$BC analyze <url_or_image> [question] ← Claude Vision
$BC captcha <url> ← Autonomous CAPTCHA
$BC workflow <json_steps_file> ← Multi-step workflow
$BC status[
{ "action": "goto", "target": "https://TARGET_URL" },
{ "action": "captcha" },
{ "action": "analyze", "value": "Identify the key elements on this page" },
{ "action": "wait_for", "target": ".loaded", "timeout_ms": 5000 },
{ "action": "fill", "target": "#field", "value": "text" },
{ "action": "click", "target": "#btn" },
{ "action": "click_xy", "x": 960, "y": 540 },
{ "action": "scroll", "direction": "down" },
{ "action": "hover", "target": "#menu" },
{ "action": "select", "target": "#list", "value": "option" },
{ "action": "keyboard", "target": "#input", "value": "Enter" },
{ "action": "extract", "target": ".data", "value": "/workspace/tasks/out.json" },
{ "action": "screenshot" },
{ "action": "wait", "value": "2" }
]1. Auto-detection on every page load
→ reCAPTCHA v2/v3, hCaptcha, Cloudflare Turnstile
2. CapSolver API (if CAPSOLVER_API_KEY set)
→ Extracts sitekey → API → token → injects → continues
→ ~$0.001 per CAPTCHA
3. Cloudflare Turnstile
→ CapSolver Chrome extension handles in background → waits 60s
4. Fallback — if CapSolver fails or key not set
→ Screenshot → Telegram → principal opens noVNC → solves → agent continues# Browserbase — CAPTCHA + stealth + residential proxy built-in
# Free tier: 1 concurrent session, 1h/month — browserbase.com
# Add BROWSERBASE_API_KEY to .env
openclaw browser --browser-profile browserbase open <url>
# Custom proxy
# Add PROXY_URL=http://user:pass@proxy:port to .env
# browser_control.py reads it automatically via get_browser()# Web page → auto screenshot + analysis
$BC analyze https://example.com "What does this page sell?"
# AI-generated image
$BC analyze https://site.com/image.png "Describe the visual elements"
# Existing screenshot
$BC analyze /workspace/screenshots/capture.png "Is there a form here?"
# Inside a workflow
{ "action": "analyze", "value": "Identify all form fields" }BEFORE EVERY ACTION:
1. Log to AUDIT.md: "BEFORE [action] on [url]"
2. Detect CAPTCHA → resolve automatically if present
3. Execute action
4. Screenshot as proof
5. Log to AUDIT.md: "OK/FAILED [action]"
6. Telegram report if real-world consequences
NEVER:
→ Access platforms not authorized by the principal
→ Execute payments or destructive actions without explicit approval
→ Fail silently — always log
→ Retry more than 3 times without alerting the principalAvoid these common mistakes:
snapshot --interactive or codegen to discover stable refsCAPTCHA → CapSolver auto → fallback noVNC
CLOUDFLARE → switch to --browser-profile browserbase
SESSION EXPIRED → Telegram → principal opens noVNC → reconnects
ELEMENT MISSING → use analyze to understand the new layout
→ log to .learnings/ERRORS.md with ref map
TIMEOUT → check /workspace/logs/browser/YYYY-MM-DD.log| File | When | Content |
|---|---|---|
/workspace/AUDIT.md | Every action | Before + after log, append-only |
/workspace/screenshots/YYYY-MM-DD_*.png | Every action | Visual proof |
/workspace/screenshots/*_analysis.txt | After analyze | Vision result |
/workspace/logs/browser/YYYY-MM-DD.log | On exception | Full traceback |
/workspace/.learnings/ERRORS.md | On failure | Errors + broken selectors |
/workspace/.learnings/LEARNINGS.md | On discovery | Patterns + timing per platform |
/workspace/tasks/lessons.md | During mission | Immediate task capture |
/workspace/memory/YYYY-MM-DD.md | Daily | Session summary |
This skill does NOT:
Write immediately after every session — do not batch:
# ERRORS.md — on failure
## [YYYY-MM-DD] [Platform] — [Title]
**Priority**: low|medium|high **Status**: pending|resolved
**What happened**: ... **Root cause**: ... **Fix**: ... **Ref map**: {"old_ref":"new_ref"}
# LEARNINGS.md — on discovery
## [YYYY-MM-DD] [Platform] — [Pattern]
**Category**: navigation|interaction|timing|auth_flow|captcha|vision
**Discovery**: ... **Usage**: ...This skill opens port 6901 (noVNC) and stores authenticated browser sessions permanently.
REQUIRED before running:
1. Set a strong VNC_PW in .env — never use the default
2. Firewall port 6901 to your IP only:
Hostinger → Panel → VPS → Firewall → restrict 6901 to your IP
Or use SSH tunnel: ssh -L 6901:localhost:6901 user@YOUR_VPS_IP
3. Only log in to accounts you trust the agent to access
4. Optional keys (CapSolver, Browserbase, Anthropic) send data to
those services — only add them if you trust and accept their costs| Endpoint | Data sent | Purpose |
|---|---|---|
| Any URL the principal authorizes | Browser requests, cookies, form data | Automation |
http://browser:9222 | CDP protocol — internal only | Browser control |
https://api.capsolver.com | CAPTCHA sitekey + page URL | CAPTCHA solving (optional) |
wss://connect.browserbase.com | Browser session | Stealth proxy (optional) |
https://api.anthropic.com | Screenshot base64 | Claude Vision (optional) |
https://registry.npmjs.org | Package metadata | Playwright install only |
No other data is sent externally.
© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files in skills/virtual-desktop-pro of LeoYeAI/openclaw-master-skills.
Open the folder on GitHubat commit e5199b5
Virtual Desktop Pro next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Virtual Desktop Pro this skillLeoYeAI/openclaw-master-skills | 2.2k | — | ~5k | Automated safety check: Notes | MIT | |
| Iron Proxy Gateway for NanoClawnanocoai/nanoclaw | 31k | — | ~4.6k | Automated safety check: Notes | MIT | |
| GreptimeDB Dev Docker ImageGreptimeTeam/greptimedb | 6.7k | — | ~4k | Automated safety check: Notes | Apache-2.0 | |
| Senior DevOps Toolkitmaslennikov-ig/claude-code-orchestrator-kit | 260 | 6 repos | ~1.1k | Automated safety check: Notes | Custom licence | |
| LangBot Deployment Guidelangbot-app/LangBot | 18k | — | ~1.2k | Automated safety check: Notes | Apache-2.0 | |
| Build Openshell Mxc WindowsNVIDIA/OpenShell | 16k | — | ~4.9k | Automated safety check: Pass | Apache-2.0 |
nanocoai/nanoclaw
Installs or refreshes Iron Proxy and its Iron Control web console for NanoClaw, with a local Docker setup, database, credentials and a human approval bridge.
GreptimeTeam/greptimedb
Packages a locally built GreptimeDB debug binary into a development-only Docker image for local-cluster testing, with an optional push to a dev registry.
maslennikov-ig/claude-code-orchestrator-kit
Comprehensive DevOps skill for CI/CD, infrastructure automation, containerization, and cloud platforms (AWS, GCP, Azure). Includes pipeline setup…
langbot-app/LangBot
Deploys and configures a LangBot instance with Docker Compose or Kubernetes, covering config.yaml, the Box sandbox runtime, the plugin runtime and the global API key.
NVIDIA/OpenShell
Maintain and validate OpenShell's build-only Windows MSVC lane for x64 and ARM64.
NVIDIA/Megatron-LM
Moves Megatron-LM CI to a newer NVIDIA PyTorch base image, updating both the GitHub and GitLab pins together and handling the CI follow-up.
LeoYeAI/openclaw-master-skills
Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.
LeoYeAI/openclaw-master-skills
Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.
LeoYeAI/openclaw-master-skills
Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.
LeoYeAI/openclaw-master-skills
Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.
LeoYeAI/openclaw-master-skills
Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.
LeoYeAI/openclaw-master-skills
Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.
Works with
Categories
Persistent authenticated browser for OpenClaw via kasmweb/chrome Docker sidecar. Virtual Desktop Pro is an agent skill from LeoYeAI/openclaw-master-skills. Persistent authenticated browser for OpenClaw via kasmweb/chrome Docker sidecar.
Virtual Desktop Pro fits situations like: the task requires a real authenticated browser; not a static fetch.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill virtual-desktop-pro -a claude-code`. Or copy the skill folder (skills/virtual-desktop-pro in LeoYeAI/openclaw-master-skills) into .claude/skills/virtual-desktop-pro in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill virtual-desktop-pro -a codex`. Or copy the skill folder (skills/virtual-desktop-pro in LeoYeAI/openclaw-master-skills) into .agents/skills/virtual-desktop-pro in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LeoYeAI/openclaw-master-skills --skill virtual-desktop-pro -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/virtual-desktop-pro, .gemini/skills/virtual-desktop-pro, .github/skills/virtual-desktop-pro and .opencode/skills/virtual-desktop-pro in your project.
Going by SKILL.md and its folder, Virtual Desktop Pro needs Python for the scripts in its folder, the command-line tools its instructions call (docker, python3, curl and apt-get) and credentials named CAPSOLVER_API_KEY, BROWSERBASE_API_KEY and CAPSOLVER_KEY. Our summary lists: Python 3; Docker; A credential in CAPSOLVER_API_KEY; A credential in BROWSERBASE_API_KEY.
SKILL.md names 4 domains. In commands or code: api.capsolver.com, api.anthropic.com, registry.npmjs.org and github.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Virtual Desktop Pro is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Virtual Desktop Pro: Iron Proxy Gateway for NanoClaw (nanocoai/nanoclaw, 31k stars), GreptimeDB Dev Docker Image (GreptimeTeam/greptimedb, 6.7k stars), Senior DevOps Toolkit (maslennikov-ig/claude-code-orchestrator-kit, 260 stars) and LangBot Deployment Guide (langbot-app/LangBot, 18k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,160 GitHub stars. The repository holds 1,235 skills in this directory. The repository was last updated on July 20, 2026.
Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.