Commencer

Skills + CLI

Exécutez Thunderbit depuis le terminal — distillez des pages en Markdown, extrayez des données structurées, suggérez des champs et traitez en lot jusqu'à 100 URL. La CLI fonctionne en autonome ou comme une boîte à outils de skills que les agents IA de coding peuvent découvrir.

Distillez, extrayez, suggérez des champs et exécutez des tâches en lot directement depuis le terminal.

Installation

La CLI est publiée sur npm sous le nom @thunderbit/thunderbit-cli et expose un binaire thunderbit dans votre PATH.

# Install globally
npm install -g @thunderbit/thunderbit-cli

# Or run one-shot via npx
npx -y @thunderbit/thunderbit-cli --help

Une variante Python (pip install thunderbit) avec la même surface de commandes est sur la roadmap.

Authentification

Avant d'utiliser la CLI, vous devez vous authentifier avec votre clé API Thunderbit. Récupérez une clé sur Thunderbit Dashboard. Format : tb_ suivi de 32 caractères hexadécimaux.

Définir via variable d'environnement

export THUNDERBIT_API_KEY=tb_YOUR_API_KEY

Passer par commande

thunderbit --api-key tb_YOUR_API_KEY distill https://example.com

Auto-hébergement / Développement local

Pour les passerelles Thunderbit auto-hébergées, remplacez la 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.com

Vérifier la version

thunderbit --version
# or
thunderbit -V

Options globales

Ces flags sont disponibles pour chaque commande :

OptionDescription
--api-key <key>, -kClé API (ou définir THUNDERBIT_API_KEY)
--base-url <url>URL de base de l'API (ou définir THUNDERBIT_API_BASE_URL)
--format <format>, -fFormat de sortie : json, table ou markdown (par défaut json)
--version, -VAfficher la version de la CLI
--help, -hAfficher l'aide de la commande

Commandes

Distill

Distille une seule URL en Markdown propre, prêt pour les LLM.

# 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.md

Options de Distill

# 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 --sync

Options disponibles :

OptionPar défautDescription
--render-mode <mode>nonenone, basic ou full
--timeout <ms>30000Timeout de requête par page en ms
--country-code <CC>USCode ISO à 2 lettres, en majuscules
--syncfalseUtiliser le mode synchrone au lieu de l'async submit + poll

Extract

Extrait des données structurées d'une page. Le schema est une map plate de fieldName → instruction en langage naturel — chaque valeur est une indication que l'IA utilise pour trouver le champ sur la page.

Note : l'exemple de la spec OpenAPI en amont montre un JSON Schema ({type:"object",properties:…}). Au moment où ces lignes sont écrites, le serveur en production attend la map plate d'instructions présentée ci-dessous ; nous alignons la spec.

# Schéma inline — map plate champ → instruction
thunderbit extract https://example.com/product \
  --schema '{"name":"product name","price":"the listed price as a number","currency":"3-letter currency code"}'

# Schéma depuis un fichier
thunderbit extract https://example.com/product --schema ./schema.json

# Sauvegarder le JSON extrait
thunderbit extract https://example.com/product --schema ./schema.json --format json -o data.json

La réponse renvoie toujours data.data sous forme de tableau, un élément par région de page correspondant à votre schéma :

{
  "success": true,
  "data": {
    "url": "https://example.com/product",
    "data": [
      { "name": "iPhone 15 Pro", "price": 999, "currency": "USD" }
    ]
  }
}

Mode interactif

# AI proposes fields, you toggle/edit, then extraction runs with the curated schema
thunderbit extract https://example.com/product --interactive

# Steer the suggestion with a prompt
thunderbit extract https://example.com/product -i --prompt "focus on pricing and availability"

# Persist the schema for reuse
thunderbit extract https://example.com/product -i --save-schema ./product-schema.json

Options d'Extract

# Bump page-render time for SPAs
thunderbit extract https://example.com --schema ./schema.json --render-mode full

# Sync mode
thunderbit extract https://example.com --schema ./schema.json --sync

# Longer timeout for complex pages
thunderbit extract https://example.com --schema ./schema.json --timeout 120000

Options disponibles :

OptionPar défautDescription
--schema <json-or-file>JSON inline ou chemin vers un fichier de schéma
--interactive, -ifalseSuggérer → curer → extraire en une seule passe
--prompt <text>Indication pour la suggestion AI (avec -i)
--render-mode <mode>nonenone, basic ou full
--timeout <ms>60000Timeout de requête par page en ms
--syncfalseMode synchrone
--save-schema <file>Persiste le schéma final pour réutilisation

Suggest Fields

Laissez l'AI proposer des champs extractibles avant que vous n'écriviez un schéma.

# Basic
thunderbit suggest-fields https://example.com/product

# Steer with a prompt
thunderbit suggest-fields https://example.com/listings --prompt "extract job postings only"

# Region-aware
thunderbit suggest-fields https://example.com --country-code DE

L'éditeur interactif vous permet de basculer les champs par numéro (1 3 5), add, rm 2, edit 4, puis done pour confirmer. suggest-fields renvoie [{name, type, instruction}, …] ; lorsque vous l'injectez dans extract, transformez-le d'abord en map plate :

thunderbit suggest-fields "$URL" --format json \
  | jq 'map({(.name): .instruction}) | add' > schema.json

thunderbit extract "$URL" --schema ./schema.json

Options disponibles :

OptionPar défautDescription
--prompt <text>Indication d'orientation
--country-code <CC>USCode ISO à 2 lettres

Batch Distill

Soumettez jusqu'à 100 URL dans une seule tâche batch. Par défaut : submit + poll jusqu'à COMPLETED / FAILED / CANCELLED.

# URLs as positional args
thunderbit batch distill https://a.com https://b.com https://c.com

# Or read URLs from a file (one per line)
thunderbit batch distill --file urls.txt

# Submit only — print the job ID and exit (use webhook or poll later)
thunderbit batch distill --file urls.txt --no-poll

Options de Batch Distill

# Bump per-page timeout
thunderbit batch distill --file urls.txt --timeout 60000

# Pipe results into another tool
thunderbit batch distill --file urls.txt --format json \
  | jq -r '.data.results[] | select(.success == true) | .markdown' \
  > distilled.md

Options disponibles :

OptionPar défautDescription
--file <path>Lire les URL depuis un fichier (une par ligne)
--timeout <ms>30000Timeout de requête par page en ms
--no-pollfalseSoumettre uniquement, afficher l'ID de tâche, quitter

Annuler un job batch distill en cours

thunderbit batch cancel-distill <jobId>

Les pages déjà terminées conservent leurs résultats. Les pages en attente sont abandonnées et vous n'êtes plus facturé pour celles-ci. Le statut bascule en CANCELLED dès que le serveur l'acquitte.


Batch Extract

Soumettez jusqu'à 100 URL avec un schéma partagé.

# URLs as positional args + inline schema
thunderbit batch extract https://a.com https://b.com \
  --schema ./schema.json

# Read URLs from a file
thunderbit batch extract --file urls.txt --schema ./schema.json

# Submit only
thunderbit batch extract --file urls.txt --schema ./schema.json --no-poll

Options disponibles :

OptionPar défautDescription
--file <path>Lire les URL depuis un fichier (une par ligne)
--schema <json-or-file>JSON inline ou fichier de schéma (requis)
--timeout <ms>60000Timeout de requête par page en ms
--no-pollfalseSoumettre uniquement, afficher l'ID de tâche, quitter

Annuler un job batch extract en cours

thunderbit batch cancel-extract <jobId>

Même sémantique que cancel-distill — les lignes terminées sont conservées, les lignes en attente sont abandonnées, la facturation s'arrête pour le reste.

Gestion de la sortie

La CLI écrit par défaut sur stdout, ce qui facilite les pipes et les redirections.

# Pipe Markdown into another tool
thunderbit distill https://example.com --format markdown | head -50

# Redirect to a file
thunderbit distill https://example.com --format markdown > output.md

# Save extraction JSON
thunderbit extract https://example.com --schema ./schema.json --format json > data.json

Comportement du format

  • --format json (par défaut) : réponse complète de l'API en JSON compact, incluant success, data, creditsUsed, etc. À piper dans jq.
  • --format markdown : corps Markdown brut pour distill ; JSON complet pour les autres commandes.
  • --format table : tableau ASCII pour les résultats tabulaires (extract, suggest-fields).
# Markdown body straight to disk
thunderbit distill https://example.com --format markdown

# Full structured response
thunderbit distill https://example.com --format json

Exemples

Distill rapide

# Distill an article
thunderbit distill https://docs.thunderbit.com/introduction --format markdown

# Save HTML-converted Markdown to disk
thunderbit distill https://example.com --format markdown -o page.md

Ingestion RAG en masse

# Distill a docs site listed in urls.txt and write each page to disk
thunderbit batch distill --file urls.txt --format json \
  | jq -r '.data.results[] | select(.success == true) | "\(.url)\t\(.markdown)"' \
  > corpus.tsv

Découvrir puis extraire

# Step 1: AI proposes fields, you curate, schema saved to disk
thunderbit extract https://example.com/product -i --save-schema ./schema.json

# Step 2: re-use across the catalog
thunderbit batch extract --file urls.txt --schema ./schema.json --format json > products.json

Garde CI — échouer lorsque l'extraction ne renvoie rien

thunderbit extract "$URL" --schema ./schema.json --format json \
  | jq -e '.data | length > 0'

Combiner avec d'autres outils

# Extract URLs from a search-result JSON
thunderbit distill https://example.com --format json \
  | jq -r '.data.metadata.canonicalUrl'

# Pipe distilled content into a model for summarisation
thunderbit distill "$URL" --format markdown \
  | claude -p "summarise the article in 5 bullets"

# Count successful pages in a batch
thunderbit batch distill --file urls.txt --format json \
  | jq '[.data.results[] | select(.success == true)] | length'

Codes de sortie

CodeSignification
0Succès. Le résultat est sur stdout dans le format choisi par --format.
1Tout échec — clé API manquante, erreur d'auth, HTTP 4xx/5xx, erreur réseau, fichier de schéma manquant, argument requis manquant.

Tout le texte d'erreur est écrit sur stderr. En cas d'échec, stdout reste vide (oui, même avec --format json). Cela signifie qu'un pipeline jq ne reçoit jamais d'enveloppe à moitié cuite — vérifiez le code de sortie (ou set -e) avant de parser.

La progression du polling (par exemple Processing... (3) depuis async submit + poll) est aussi écrite sur stderr. Pipez 2>/dev/null pour la museler. Les appels synchrones sur une seule page (--sync) n'émettent pas de progression.

Dépannage

Error: API key is required. Exportez THUNDERBIT_API_KEY ou passez --api-key.

Erreurs réseau derrière un proxy d'entreprise. Définissez HTTPS_PROXY et HTTP_PROXY — les clients Node et Python les respectent tous les deux.

Polling de batch lent. Augmentez --timeout pour le budget par page. La cadence de polling elle-même est fixée à quelques secondes et n'est pas configurable depuis la CLI aujourd'hui.

Open source

La CLI Thunderbit est sous licence MIT et open source sur GitHub : GitHub repository (le même dépôt fournit aussi le serveur MCP et le plugin Claude Code). Distribuée sur npm sous le nom @thunderbit/thunderbit-cli.

Voir aussi