Skills + CLI
Run Thunderbit from the terminal — distill pages into Markdown, extract structured data, suggest fields, and batch-process URLs in bulk (max 100 distill / 50 extract). The CLI works standalone or as a skills toolkit AI coding agents can discover.
Distill, extract, suggest fields, and run batch jobs directly from the terminal.
Installation
The CLI publishes to npm as @thunderbit/thunderbit-cli and exposes a thunderbit binary on your PATH.
# Install globally
npm install -g @thunderbit/thunderbit-cli
# Or run one-shot via npx
npx -y @thunderbit/thunderbit-cli --helpA Python (
pip install thunderbit) flavour with the same command surface is on the roadmap.
Authentication
Before using the CLI, you need to authenticate with your Thunderbit API key. Get a key at Thunderbit Dashboard. Format: tb_ followed by 32 hex chars.
Set via environment variable
export THUNDERBIT_API_KEY=tb_YOUR_API_KEYPass per command
thunderbit --api-key tb_YOUR_API_KEY distill https://example.comSelf-Hosted / Local Development
For self-hosted Thunderbit gateways, override the base URL:
# Per call
thunderbit --base-url https://api.your-domain.com distill https://example.com
# Or set via environment variable
export THUNDERBIT_API_BASE_URL=https://api.your-domain.com
thunderbit distill https://example.comCheck version
thunderbit --version
# or
thunderbit -VGlobal Options
These flags are available for every command:
| Option | Description |
|---|---|
--api-key <key>, -k | API key (or set THUNDERBIT_API_KEY) |
--base-url <url> | API base URL (or set THUNDERBIT_API_BASE_URL) |
--format <format>, -f | Output format: json, table, or markdown (default json) |
--version, -V | Print CLI version |
--help, -h | Show command help |
Commands
Distill
Distill a single URL into clean, LLM-ready Markdown.
# Basic usage
thunderbit distill https://example.com/article
# Stream Markdown to stdout
thunderbit distill https://example.com --format markdown
# Save to file
thunderbit distill https://example.com --format markdown > article.mdDistill Options
# Use the basic JS renderer (covers most modern sites)
thunderbit distill https://example.com --render-mode basic
# Use the full headless browser (slowest, highest fidelity)
thunderbit distill https://example.com --render-mode full
# Geo-target for region-aware sites
thunderbit distill https://example.com --country-code DE
# Bump per-page timeout
thunderbit distill https://example.com --timeout 60000
# Use sync /distill instead of the default async submit + poll
thunderbit distill https://example.com --syncAvailable Options:
| Option | Default | Description |
|---|---|---|
--render-mode <mode> | none | none, basic, or full |
--timeout <ms> | 30000 | Per-page request timeout in ms |
--country-code <CC> | US | ISO 2-letter code, uppercase |
--sync | false | Use sync mode instead of async submit + poll |
Extract
Extract structured data from a page. The schema is a flat map of fieldName → natural-language instruction — each value is a hint the AI uses to find the field on the page.
Note: the upstream OpenAPI spec example shows JSON Schema (
{type:"object",properties:…}). At time of writing the live server expects the flat instruction map shown below; we're aligning the spec.
# Inline schema — flat map of field → instruction
thunderbit extract https://example.com/product \
--schema '{"name":"product name","price":"the listed price as a number","currency":"3-letter currency code"}'
# Schema from file
thunderbit extract https://example.com/product --schema ./schema.json
# Save the extracted JSON
thunderbit extract https://example.com/product --schema ./schema.json --format json -o data.jsonThe response always returns data.data as an array, one element per page region matching your schema:
{
"success": true,
"data": {
"url": "https://example.com/product",
"data": [
{ "name": "iPhone 15 Pro", "price": 999, "currency": "USD" }
]
}
}