# Send Anemone to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "anemone",
    "name": "Anemone",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/EasonC13/anemone",
    "canonicalUrl": "https://clawhub.ai/EasonC13/anemone",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/anemone",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=anemone",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "bin/anemone.mjs",
      "package.json",
      "scripts/healthcheck.sh",
      "scripts/setup-mac.sh"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "anemone",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-29T03:25:17.572Z",
      "expiresAt": "2026-05-06T03:25:17.572Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=anemone",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=anemone",
        "contentDisposition": "attachment; filename=\"anemone-1.1.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "anemone"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/anemone"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/anemone",
    "downloadUrl": "https://openagent3.xyz/downloads/anemone",
    "agentUrl": "https://openagent3.xyz/skills/anemone/agent",
    "manifestUrl": "https://openagent3.xyz/skills/anemone/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/anemone/agent.md"
  }
}
```
## Documentation

### Anemone Browser — Managed Browser for OpenClaw Agents

Headful Chrome with anti-detection, VNC takeover, and multi-session isolation.
Works on Mac, Linux, Docker — anywhere OpenClaw runs.

### macOS

bash scripts/setup-mac.sh

Detects Chrome, configures OpenClaw browser profile. After setup:

openclaw browser start
# Agent's browser tool works automatically

Note: macOS setup does NOT include VNC/noVNC. The user is expected to access
the Mac via their own remote desktop solution (e.g. macOS Screen Sharing, Tailscale,
or physical access). VNC takeover with noVNC links is only available on Linux.

### Linux / Docker

# Install deps (once)
bash scripts/setup.sh

# Start browser + VNC environment (password is MANDATORY by default)
bash scripts/start.sh [password] [novnc_port] [cdp_port] [resolution]

# Without specifying password → random 14-char password auto-generated
bash scripts/start.sh

# Explicitly no password (NOT recommended)
bash scripts/start.sh --dangerously-no-password [novnc_port] [cdp_port] [resolution]

start.sh outputs the noVNC URL (with password in URL param), password, and CDP port. Safe to re-run.
VNC always requires a password. The noVNC URL always includes ?password=... so the user doesn't need to type it. The only way to skip is --dangerously-no-password.

### OpenClaw Config

Setup scripts configure this automatically. Manual reference:

macOS:

{
  "browser": {
    "enabled": true,
    "defaultProfile": "openclaw",
    "headless": false,
    "executablePath": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
  }
}

Linux:

{
  "browser": {
    "enabled": true,
    "headless": false,
    "noSandbox": true,
    "executablePath": "/usr/bin/google-chrome-stable"
  }
}

### Multi-Session Window Isolation

Multiple sessions share one Chrome (same cookies/logins) but each gets its own window.

### Rules (MUST follow):

On session start — open your own tab, save the targetId:
browser action=open targetUrl="https://example.com" profile=openclaw
# Returns targetId — THIS IS YOURS, save it



ALL subsequent calls — always include your targetId:
browser action=snapshot profile=openclaw targetId="<your-targetId>"
browser action=navigate profile=openclaw targetId="<your-targetId>" targetUrl="..."
browser action=act profile=openclaw targetId="<your-targetId>" ...



On session end — close your tab:
browser action=close targetId="<your-targetId>"



NEVER operate without targetId — you'll land on another session's tab.


NEVER pick another session's tab from browser action=tabs.

### Opening a new window (not tab) via CDP:

import json, asyncio, websockets, urllib.request

async def open_new_window(cdp_port, url):
    version = json.loads(urllib.request.urlopen(f"http://127.0.0.1:{cdp_port}/json/version").read())
    async with websockets.connect(version["webSocketDebuggerUrl"]) as ws:
        await ws.send(json.dumps({
            "id": 1, "method": "Target.createTarget",
            "params": {"url": url, "newWindow": True}
        }))
        resp = json.loads(await ws.recv())
        return resp["result"]["targetId"]

### Architecture:

Chrome (one instance, one profile, shared cookies)
├── Window targetId=AAA → Session A
├── Window targetId=BBB → Session B
└── Window targetId=CCC → Session C

### VNC Takeover (CRITICAL)

When hitting a CAPTCHA, login wall, or any blocker, send the user a noVNC link:

https://<IP>:<NOVNC_PORT>/vnc.html?password=<PASSWORD>&autoconnect=true&resize=scale

### Constructing the link:

Linux/Docker (from start.sh output):

https://57.129.90.145:10150/vnc.html?password=e0GGP4xeMUL5ga&autoconnect=true&resize=scale

IP: server's public or Tailscale IP
Port + password: from start.sh output

macOS: VNC takeover is NOT available. The user must access the Mac directly
(physical access, macOS Screen Sharing, or their own remote desktop solution).

### Takeover flow:

Agent detects blocker (CAPTCHA, login, 2FA)
Agent sends noVNC link to user
User opens link → sees Chrome → solves the problem
User confirms done → agent continues

### Anti-Detection

Headful Chrome — no HeadlessChrome in UA
--disable-blink-features=AutomationControlled — no navigator.webdriver=true
UA override via CDP if needed:
{"method": "Network.setUserAgentOverride", "params": {
  "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/131.0.0.0 Safari/537.36"
}}

### Security

SSL/TLS on noVNC (self-signed cert)
Random 14-char password (Linux) or system auth (macOS)
CDP: localhost only, never exposed to network
Chrome Policy: file://, javascript:, data:text/html blocked; extensions blocked; DevTools disabled

### Important: No Kiosk Mode

Do NOT use Chrome's --kiosk flag. It hides the tab bar and address bar, making multi-window unusable via VNC. Use --start-maximized instead.

### Chrome window not visible in VNC

Symptoms: VNC connects but shows only Ubuntu splash screen, no Chrome window.

Common causes and fixes:

Fluxbox crashed (becomes defunct):

Check: ps aux | grep fluxbox | grep defunct
Fix: Restart fluxbox
export DISPLAY=:99
fluxbox &





Stale X display lock files:

Check: ls -la /tmp/.X*lock
Fix: Use a different display number, or remove lock if no Xvfb running
rm -f /tmp/.X99-lock





Chrome window minimized or hidden:

Check: xwininfo -root -tree to find Chrome window ID
Fix: Use python-xlib to raise and resize:
from Xlib.display import Display
d = Display(':99')
window = d.create_resource_object('window', 0x800001)  # Chrome's window ID
window.configure(x=0, y=0, width=1920, height=1040)
window.configure(stack_mode='Above')
d.sync()





X11vnc not capturing properly:

Restart x11vnc after fluxbox:
pkill x11vnc
x11vnc -display :99 -forever -shared -rfbauth ~/.vnc/passwd -rfbport 5900 -bg

### Complete restart procedure

If all else fails, kill and restart everything:

# Kill all
pkill -9 -u $USER chrome
pkill -9 -u $USER x11vnc
pkill -9 -u $USER Xvfb
pkill -9 -u $USER fluxbox
pkill -9 -u $USER websockify
sleep 2

# Start fresh (use new display number to avoid stale locks)
rm -f /tmp/.X30-lock
Xvfb :30 -screen 0 1920x1080x24 &
sleep 2
export DISPLAY=:30
fluxbox &
sleep 2
google-chrome-stable --no-sandbox --disable-gpu ... &
sleep 4
x11vnc -display :30 -forever -shared -rfbauth ~/.vnc/passwd -rfbport 5900 -bg
sleep 1
websockify --web=/usr/share/novnc --cert=~/.vnc/combined.pem 15005 localhost:5900 -D

### Auto-Recovery (healthcheck.sh)

start.sh automatically installs a cron job that runs healthcheck.sh every 2 minutes.
It monitors all 5 components and auto-restarts any that crash or become defunct:

Xvfb — cleans stale lock files, restarts display
fluxbox — detects defunct (zombie) state, kills and restarts
x11vnc — restarts VNC server
websockify — restarts noVNC proxy
Chrome — restarts with same CDP port and anti-detection flags

Logs: /tmp/anemone-healthcheck.log

Manual run:

bash /root/healthcheck.sh [display_num] [vnc_port] [novnc_port] [cdp_port]
# defaults: 99 5900 6080 9222

To check status:

tail -20 /tmp/anemone-healthcheck.log

To disable:

crontab -l | grep -v healthcheck | crontab -
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: EasonC13
- Version: 1.1.0
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-04-29T03:25:17.572Z
- Expires at: 2026-05-06T03:25:17.572Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/anemone)
- [Send to Agent page](https://openagent3.xyz/skills/anemone/agent)
- [JSON manifest](https://openagent3.xyz/skills/anemone/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/anemone/agent.md)
- [Download page](https://openagent3.xyz/downloads/anemone)