Tabstack is a web execution API for reading, extracting, transforming, and
interacting with web pages and PDF documents. It handles JavaScript-rendered
sites, structured data extraction, AI-powered content transformation, and
multi-step browser automation.
Install dependencies from the skill's directory:
cd <skill-dir> && npm install
Where is the directory containing this SKILL.md file.
All operations are run via the exec tool. First cd into the skill directory,
then run the command with a relative path:
<skill-dir>/scripts/run.sh <command> <args>
Execution strategy: Always run tabstack commands in the foreground —
call exec and wait for completion. Background execution requires manual
polling and is unreliable.
JSON arguments: Any JSON argument (schema, --data) can be passed inline
or as a file path prefixed with @ (e.g. @/tmp/schema.json). Use file
paths for complex schemas to avoid shell quoting issues.
extract-markdown — Read a page or PDF as clean MarkdownBest for: reading articles, documentation, PDF reports. This is the cheapest
operation — prefer it when you just need to read content.
<skill-dir>/scripts/run.sh extract-markdown "<url>"
Returns the page/PDF as Markdown. For web pages, includes YAML frontmatter
metadata (title, author, etc.).
Optional flags:
--metadata — return metadata as a separate JSON block--nocache — bypass caching and get fresh content--geo CC — fetch from a specific country (ISO 3166-1 alpha-2, e.g. US, GB)extract-json — Pull structured data from a page or PDFBest for: prices, product details, tables, invoices, any document with
predictable repeating structure.
Without a schema (Tabstack infers structure):
<skill-dir>/scripts/run.sh extract-json "<url>"
With a JSON Schema (inline or from file):
<skill-dir>/scripts/run.sh extract-json "<url>" @/tmp/schema.json
Optional flags: --nocache, --geo CC.
See references/examples.md for common JSON schema
patterns (products, articles, events, tables, contacts).
generate — Transform web/PDF content into a custom JSON shapeBest for: summaries, categorization, sentiment analysis, reformatting. Unlike
extract-json (which pulls existing data), generate uses an LLM to create
new content. May be slower due to LLM processing.
<skill-dir>/scripts/run.sh \
generate "<url>" "<json_schema|@file>" "<instructions>"
Optional flags: --nocache, --geo CC.
Example — categorise and summarise HN posts:
<skill-dir>/scripts/run.sh \
generate "https://news.ycombinator.com" \
'{"type":"object","properties":{"stories":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"category":{"type":"string"},"summary":{"type":"string"}}}}}}' \
"For each story, categorize as tech/business/science/other and write a one-sentence summary"
See references/examples.md for more schema and
instruction examples.
automate — Multi-step browser task in natural languageBest for: tasks needing real browser interaction — clicking, navigating across
pages, filling forms. Does NOT support PDFs or --geo.
<skill-dir>/scripts/run.sh \
automate "<natural language task>" --url "<url>"
Optional flags:
--url — starting URL for the task. When omitted, automate uses itsown built-in web search to find relevant pages — this can be cheaper and
faster than research for simple factual questions.
--max-iterations N — limit steps (default 50, range 1-100)--guardrails "..." — safety constraints (e.g. "browse only, don't submit forms")--data '{"key":"val"}'|@file — JSON context for form fillingTimeout: May take 30-120 seconds. Use at least 420s exec timeout.
Example — fill a contact form with guardrails:
<skill-dir>/scripts/run.sh \
automate "Fill out the contact form with my information" \
--url "https://example.com/contact" \
--data '{"name":"Alex","email":"alex@example.com","message":"Hello"}' \
--guardrails "Only fill and submit the contact form, do not navigate away"
Example — simple search (no URL, uses built-in web search):
<skill-dir>/scripts/run.sh \
automate "Find the current price of a MacBook Air M4"
research — AI-powered deep web researchSearches the web, analyzes multiple sources, and synthesizes a comprehensive
answer with citations. Unlike the other operations, research doesn't need
a URL — you give it a question and it finds the answers.
For simple factual lookups, automate without a --url may be faster and
cheaper. Use research when you need depth, multiple perspectives, or
cited sources.
Use cases:
of Rust vs Go for CLI tools?")
<skill-dir>/scripts/run.sh research "<query>"
Optional flags:
--mode fast|balanced — fast for quick single-source answers, balanced(default) for deeper multi-source research with more iterations
--geo CC — research from a specific country's perspectiveTimeout: May take 60-120 seconds. Use at least 420s exec timeout.
Example — quick factual lookup:
<skill-dir>/scripts/run.sh research "What is the current LTS version of Node.js?" --mode fast
Example — deep research:
<skill-dir>/scripts/run.sh research "Compare WebSocket vs SSE vs long polling for real-time web applications"
Read references/examples.md when you need to:
extract-json — patterns for products, articles,events, tables, contacts, invoices
generate — recipes for summarization,sentiment analysis, competitive analysis, content digests
results, check for a better approach
| Operation | Use when... | Cost | Timeout |
|---|---|---|---|
| -------------------- | ------------------------------------------------ | --------- | --------- |
extract-markdown | Read/summarise a page or PDF | Lowest | 60s |
extract-json | Structured data from a page or PDF | Medium | 60s |
generate | AI-transformed content from a page or PDF | Medium | 60s |
research | Answers from multiple web sources | Medium | 420s |
automate | Browser interaction or simple web search (no PDF) | Highest | 420s |
Prefer cheaper operations when they suffice. Use extract-markdown for
simple reading. Only use automate when the task requires clicking,
navigating, or form interaction.
Inform the user before triggering multiple automate calls — they are the
most expensive.
| Error | Meaning |
|---|---|
| --------------------- | ----------------------------------------------- |
401 Unauthorized | TABSTACK_API_KEY is missing or invalid |
422 Unprocessable | URL is malformed or page is unreachable |
400 Bad Request | Malformed request — check arguments |
| No output | Task timed out or page blocked automation |
On automate failures, retry once. If it fails again, fall back to
extract-markdown for read-only tasks.
This skill requires a TABSTACK_API_KEY to function. Get one from
tabstack.ai (Mozilla-backed, free tier available).
Set the key via the CLI:
openclaw config set env.TABSTACK_API_KEY "your-key-here"
The skill will exit with an error if the key is not set.
TABSTACK_API_KEY. All requests are sent to the Tabstack API (api.tabstack.ai) using this key for
authentication. The key is read from the environment, not hardcoded.
and any --data payloads are sent to Tabstack's servers for processing.
**Do not pass passwords, authentication tokens, or other secrets via
--data** unless you explicitly trust the Tabstack service.
automate command drives a remote browser that can click, navigate, fill forms, and submit data. Use --guardrails
to constrain what the browser can do (e.g. `"browse only, don't submit
forms"`).
@tabstack/sdk and tsx from npm. A package-lock.json is provided for reproducible installs.
credentials, or run outside of its own directory.
共 1 个版本