actionbook

star 56

MUST USE AUTOMATICALLY when user sends URLs from x.com, twitter.com, or any site that web_fetch fails on. Do NOT ask the user — just load this skill and use it. Browser automation and web scraping with anti-detection stealth mode. Capabilities: (1) Scrape Twitter/X content without login, (2) Extract data from anti-bot-protected websites, (3) Automate browser interactions (clicking, typing, screenshots), (4) Bypass JavaScript-rendered content that web_fetch cannot handle, (5) Access pages requiring cookies or sessions. Built on Chrome DevTools Protocol with fingerprint spoofing.

longzhi By longzhi schedule Updated 3/14/2026

name: actionbook description: "MUST USE AUTOMATICALLY when user sends URLs from x.com, twitter.com, or any site that web_fetch fails on. Do NOT ask the user — just load this skill and use it. Browser automation and web scraping with anti-detection stealth mode. Capabilities: (1) Scrape Twitter/X content without login, (2) Extract data from anti-bot-protected websites, (3) Automate browser interactions (clicking, typing, screenshots), (4) Bypass JavaScript-rendered content that web_fetch cannot handle, (5) Access pages requiring cookies or sessions. Built on Chrome DevTools Protocol with fingerprint spoofing." requires: bins: - actionbook permissions: network: allow: [":443", ":80"] exec: [actionbook, sh] fs: read: ["$SKILL_DIR/"] write: ["$WORK_DIR/"]


Actionbook - Stealth Browser Automation

High-performance browser automation using your existing Chrome/Brave/Edge browser via Chrome DevTools Protocol (CDP). Zero downloads, anti-detection built-in.

⚡ Auto-Trigger Rules (READ FIRST)

You MUST automatically use this skill — do NOT ask the user for permission — in these situations:

  1. URL contains x.com or twitter.com → Always use actionbook with --stealth flag. Twitter blocks all non-browser access.
  2. web_fetch returned an error or empty/useless content → Retry with actionbook. Many sites require JavaScript rendering.
  3. User asks to scrape, screenshot, or interact with a website → Use actionbook directly.
  4. URL points to a known JavaScript-heavy SPA (e.g., React/Angular dashboards, social media) → Prefer actionbook over web_fetch.

Workflow when auto-triggering:

  1. Load this skill via the skill tool (to get full command reference)
  2. Use actionbook --stealth browser open "<URL>" to open the page
  3. Use actionbook browser wait if needed for dynamic content
  4. Extract content with actionbook browser eval or actionbook browser snapshot
  5. Close the browser with actionbook browser close when done
  6. Present the extracted content to the user

NEVER do these:

  • Do NOT ask "Should I use actionbook?" — just use it when triggers match
  • Do NOT try web_fetch first for Twitter/X links — it will always fail
  • Do NOT forget --stealth flag for Twitter/X — it will be detected as a bot without it

Core Capabilities

1. Twitter/X Scraping (No Login Required)

Extract tweets, profiles, and timelines using stealth mode to bypass anti-bot detection:

# Open Twitter with anti-detection
actionbook --stealth browser open "https://x.com/username/status/123456789"

# Extract tweet text
actionbook browser eval 'document.body.innerText'

# Screenshot the tweet
actionbook browser screenshot tweet.png

When to use: Twitter blocks web_fetch and requires JavaScript rendering. Actionbook's stealth mode bypasses detection.

2. JavaScript-Heavy Websites

Handle single-page apps (SPAs) and dynamic content that web_fetch cannot parse:

# Navigate and wait for content
actionbook browser goto "https://example.com/dashboard"
actionbook browser wait '[data-loaded="true"]'

# Extract after JS execution
actionbook browser eval 'JSON.stringify(window.appState)'

3. Interactive Automation

Automate form filling, clicking, and multi-step workflows:

# Fill a search form
actionbook browser type 'input[name="q"]' "OpenClaw"
actionbook browser click 'button[type="submit"]'
actionbook browser wait '.results'

# Extract results
actionbook browser eval 'document.querySelector(".results").innerText'

4. Session & Cookie Management

Maintain login state across requests using profiles:

# Create a dedicated profile for a site
actionbook profile create twitter-session

# Use it (manual login once, cookies persist)
actionbook --profile twitter-session browser open "https://x.com"

# Reuse in future sessions
actionbook --profile twitter-session browser goto "https://x.com/home"

Quick Reference

Essential Commands

# Browser control
actionbook browser open <URL>        # Open URL in new browser
actionbook browser goto <URL>        # Navigate current page
actionbook browser close             # Close browser

# Content extraction
actionbook browser eval <JS>         # Execute JavaScript
actionbook browser snapshot          # Get accessibility tree (structured HTML)
actionbook browser screenshot [PATH] # Take screenshot

# Interaction
actionbook browser click <SELECTOR>          # Click element
actionbook browser type <SELECTOR> <TEXT>    # Type into input
actionbook browser wait <SELECTOR>           # Wait for element

# Cookies & state
actionbook browser cookies list              # List all cookies
actionbook browser cookies get <NAME>        # Get specific cookie
actionbook browser cookies set <NAME> <VAL>  # Set cookie

Global Flags

--stealth                    # Enable anti-detection (recommended for Twitter/X)
--stealth-os <OS>            # Spoof OS (macos-arm, windows, linux)
--stealth-gpu <GPU>          # Spoof GPU (apple-m4-max, rtx4080, etc.)
--profile <NAME>             # Use isolated browser session
--headless                   # Run browser invisibly

Workflow Patterns

Pattern 1: Twitter Content Extraction

# Step 1: Open with stealth
actionbook --stealth browser open "https://x.com/elonmusk"

# Step 2: Wait for timeline to load (optional, but safer)
actionbook browser wait '[data-testid="primaryColumn"]'

# Step 3: Extract content
actionbook browser eval '
  Array.from(document.querySelectorAll("[data-testid=\"tweetText\"]"))
    .map(el => el.innerText)
    .join("\n\n---\n\n")
'

# Step 4: Screenshot for reference
actionbook browser screenshot timeline.png

# Step 5: Close when done
actionbook browser close

Pattern 2: Form Submission with Retry

# Fill form
actionbook browser type '#email' "user@example.com"
actionbook browser type '#password' "secret"
actionbook browser click 'button[type="submit"]'

# Wait for success indicator
actionbook browser wait '.dashboard'

# Extract result
actionbook browser eval 'document.querySelector(".welcome-message").innerText'

Pattern 3: Persistent Session (Login Once, Reuse)

# First time: Create profile and login manually
actionbook profile create my-service
actionbook --profile my-service browser open "https://service.com/login"
# (Interact with browser to log in manually)

# Future sessions: Cookies preserved
actionbook --profile my-service browser goto "https://service.com/dashboard"
actionbook --profile my-service browser eval 'getUserData()'

Stealth Mode Details

Stealth mode applies anti-detection measures:

  • Navigator overrides (navigator.webdriver → undefined)
  • WebGL fingerprint spoofing (matches selected GPU)
  • Plugin injection (fake PDF viewer, Native Client)
  • Chrome flags (--disable-blink-features=AutomationControlled)

Available OS profiles: macos-arm, macos-intel, windows, linux
Available GPU profiles: apple-m4-max, rtx4080, gtx1660, intel-uhd630

Example:

# Spoof as Windows + RTX 4080
actionbook --stealth --stealth-os windows --stealth-gpu rtx4080 browser open "https://bot-check.com"

Troubleshooting

"Element not found"

Wait for page to fully load:

# Add explicit wait before extraction
actionbook browser wait '[data-testid="tweet"]'
actionbook browser eval 'document.querySelector("[data-testid=\"tweet\"]").innerText'

"Connection refused" or "CDP not ready"

Browser didn't start cleanly. Restart:

actionbook browser close
actionbook browser open "https://example.com"

Twitter shows "Log in to see more"

Use --stealth flag and consider creating a logged-in profile:

# Option 1: Stealth mode (no login)
actionbook --stealth browser open "https://x.com/..."

# Option 2: Manual login once, reuse cookies
actionbook profile create twitter-main
actionbook --profile twitter-main browser open "https://x.com"
# (Complete login in browser)

Extracting data from deeply nested elements

Use browser eval with JavaScript:

actionbook browser eval '
  const tweets = document.querySelectorAll("[data-testid=\"tweetText\"]");
  Array.from(tweets).map(t => ({
    text: t.innerText,
    author: t.closest("article")?.querySelector("[data-testid=\"User-Name\"]")?.innerText
  }))
'

Installation

Ensure actionbook is in your PATH. The skill declares requires.bins: [actionbook] and will not activate if the binary is missing.

Resources

scripts/

fetch_tweet.sh - Simplified wrapper for extracting Twitter content

references/

commands.md - Complete command reference
selectors.md - Common CSS selectors for popular sites

Install via CLI
npx skills add https://github.com/longzhi/clawhive --skill actionbook
Repository Details
star Stars 56
call_split Forks 14
navigation Branch main
article Path SKILL.md
More from Creator