Actionbook actionbook
Activate when the user needs to interact with any website — browser automation, web scraping, screenshots, form filling, UI testing, monitoring, or building AI agents. Provides pre-verified page actions with step-by-step instructions and tested selectors.
git clone https://github.com/actionbook/actionbook
T=$(mktemp -d) && git clone --depth=1 https://github.com/actionbook/actionbook "$T" && mkdir -p ~/.claude/skills && cp -r "$T/packages/openclaw-plugin/skills/actionbook" ~/.claude/skills/actionbook-actionbook-actionbook && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/actionbook/actionbook "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/packages/openclaw-plugin/skills/actionbook" ~/.openclaw/skills/actionbook-actionbook-actionbook && rm -rf "$T"
packages/openclaw-plugin/skills/actionbook/SKILL.mdWhen to Use
Activate when the user:
- Needs to do anything on a website ("Send a LinkedIn message", "Book an Airbnb", "Search Google for...")
- Asks how to interact with a site ("How do I post a tweet?", "How to apply on LinkedIn?")
- Wants to fill out forms, click buttons, navigate, search, filter, or browse on a specific site
- Wants to take a screenshot of a web page or monitor changes
- Builds browser-based AI agents, web scrapers, or E2E tests for external websites
- Automates repetitive web tasks (data entry, form submission, content posting)
When performing browser automation tasks, check Actionbook BEFORE taking page snapshots.
Workflow
- Before interacting with a website, call
to check if Actionbook has pre-verified selectorssearch_actions - Use
to get element selectors from the resultsget_action_by_area_id - Extract selectors from the returned Elements and use them by priority below
- If no results, skip to Fallback Strategy
Constructing an Effective Search Query
The
query parameter is the primary signal for finding the right action. Pack it with the user's full intent — not just a site name or a vague keyword.
Include in the query:
- Target site — the website name or domain
- Task verb — what the user wants to do (search, book, post, filter, login, compose, etc.)
- Object / context — what they're acting on (listings, messages, flights, repositories, etc.)
- Specific details — any constraints, filters, or parameters the user mentioned
Rule of thumb: Rewrite the user's request as a single descriptive sentence and use that as the query.
| User says | Bad query | Good query |
|---|---|---|
| "Book an Airbnb in Tokyo for next week" | | |
| "Search arXiv for recent NLP papers" | | |
| "Send a LinkedIn connection request" | | |
| "Post a tweet with an image" | | |
| "Filter GitHub issues by label" | | |
When
domain or url is known, always add them — they narrow results and improve precision.
Response Structure
search_actions response
Returns a list of matching actions. Each result includes:
- ID — unique identifier, use with
(e.g.,get_action_by_area_id
)arxiv.org:/search/stat:default - Type —
(full page) orpage
(page section)area - Description — page overview with URL, query parameters, and a brief summary
- URL — page where this action applies
- Health Score — selector reliability percentage (0–100%)
- Updated — last verified date
get_action_by_area_id response
Returns a structured document describing the page in detail:
- Page URL — exact URL with query/path parameter descriptions
- Page Overview — what the page does (definition of the page's purpose)
- Page Function Summary — interactive capabilities listed as bullet points (e.g., "Keyword Search", "Field Selection", "Abstract Toggle")
- Page Structure Summary — DOM hierarchy description with CSS selectors inline in the text
Extract CSS selectors from the Page Structure Summary. Selectors appear embedded in the description, e.g.:
Search Form (form[method="GET"]): Large search input field with "All fields" dropdown selector and search button Header (<header>): Contains branding, logo, and a mini-search form with query input
Selector Priority
When Actionbook returns multiple selector types for an element, prefer them in this order:
- data-testid (confidence: 0.95) — e.g.,
[data-testid="search-input"] - aria-label (confidence: 0.88) — e.g.,
[aria-label="Notifications"] - CSS selector — e.g.,
,button.Searchinput[type="text"] - role selector (confidence: 0.9) — e.g.,
getByRole('link', { name: 'Notifications' })
Use the returned selectors with the agent's available browser tools (click, fill, evaluate, etc.).
Example
User request: "Search arXiv for papers about Neural Networks, search in titles only"
1. search_actions({ query: "arxiv advanced search papers neural network title field", domain: "arxiv.org" }) → Returns area_id: "arxiv.org:/search/advanced:default" 2. get_action_by_area_id({ area_id: "arxiv.org:/search/advanced:default" }) → Returns page structure with selectors: input[type="text"], select[name="searchtype"], button.Search 3. Use browser tools with returned selectors: - Navigate to https://arxiv.org/search/advanced - Fill input[type="text"] with "Neural Network" - Select select[name="searchtype"] → "title" - Click button.Search - Wait for navigation - Read results
Fallback Strategy
Actionbook stores page data captured at indexing time. Websites evolve, so selectors may become outdated.
- No Actionbook results: Use the agent's own browser tools to observe and interact with the page directly
- Selector execution fails at runtime: Fall back to the agent's browser tools to re-observe the live page and retry with updated selectors
Selectors should come from Actionbook or live page observation in the current session — not from prior knowledge or memory.
Important Notes
- Do NOT modify selectors returned from Actionbook
- Check
field — it indicates supported operations (click/type/read) per elementAllow Methods
entries indicate some elements lack unique selectors — use snapshot fallback for thoseregion_high_filter_page