Erste Schritte

Skills + CLI

Nutze Thunderbit vom Terminal aus — Seiten in Markdown destillieren, strukturierte Daten extrahieren, Felder vorschlagen lassen und bis zu 100 URLs im Batch verarbeiten. Die CLI funktioniert eigenständig oder als Skills-Toolkit, das KI-Coding-Agents auffinden können.

Destilliere, extrahiere, schlage Felder vor und führe Batch-Jobs direkt aus dem Terminal aus.

Installation

Die CLI wird auf npm als @thunderbit/thunderbit-cli veröffentlicht und stellt ein thunderbit-Binary in deinem PATH bereit.

# Globale Installation
npm install -g @thunderbit/thunderbit-cli

# Oder einmalig per npx ausführen
npx -y @thunderbit/thunderbit-cli --help

Eine Python-Variante (pip install thunderbit) mit identischer Befehlsoberfläche ist auf der Roadmap.

Authentifizierung

Bevor du die CLI nutzt, musst du dich mit deinem Thunderbit-API-Key authentifizieren. Hol dir einen Key im Thunderbit Dashboard. Format: tb_ gefolgt von 32 Hex-Zeichen.

Über Umgebungsvariable setzen

export THUNDERBIT_API_KEY=tb_YOUR_API_KEY

Pro Befehl übergeben

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

Self-Hosted / Lokale Entwicklung

Für Self-Hosted-Thunderbit-Gateways überschreibe die Base-URL:

# Pro Aufruf
thunderbit --base-url https://api.your-domain.com distill https://example.com

# Oder per Umgebungsvariable
export THUNDERBIT_API_BASE_URL=https://api.your-domain.com
thunderbit distill https://example.com

Version prüfen

thunderbit --version
# oder
thunderbit -V

Globale Optionen

Diese Flags sind für jeden Befehl verfügbar:

OptionBeschreibung
--api-key <key>, -kAPI-Key (oder THUNDERBIT_API_KEY setzen)
--base-url <url>API-Basis-URL (oder THUNDERBIT_API_BASE_URL setzen)
--format <format>, -fAusgabeformat: json, table oder markdown (Standard json)
--version, -VCLI-Version ausgeben
--help, -hHilfe zum Befehl anzeigen

Befehle

Distill

Destilliere eine einzelne URL in sauberes, LLM-fertiges Markdown.

# Grundlegende Verwendung
thunderbit distill https://example.com/article

# Markdown nach stdout streamen
thunderbit distill https://example.com --format markdown

# In Datei speichern
thunderbit distill https://example.com --format markdown > article.md

Distill-Optionen

# Basic-JS-Renderer verwenden (deckt die meisten modernen Sites ab)
thunderbit distill https://example.com --render-mode basic

# Vollen Headless-Browser nutzen (am langsamsten, höchste Genauigkeit)
thunderbit distill https://example.com --render-mode full

# Geo-Targeting für regionsspezifische Sites
thunderbit distill https://example.com --country-code DE

# Timeout pro Seite erhöhen
thunderbit distill https://example.com --timeout 60000

# Synchrones /distill statt des standardmäßigen async submit + poll
thunderbit distill https://example.com --sync

Verfügbare Optionen:

OptionStandardBeschreibung
--render-mode <mode>nonenone, basic oder full
--timeout <ms>30000Request-Timeout pro Seite in ms
--country-code <CC>USISO-2-Buchstaben-Code, Großbuchstaben
--syncfalseSync-Modus statt async submit + poll

Extract

Extrahiere strukturierte Daten aus einer Seite. Das schema ist eine flache Map aus fieldName → Natural-Language-Anweisung — jeder Wert ist ein Hinweis, mit dem die KI das Feld auf der Seite findet.

Hinweis: Das vorgelagerte OpenAPI-Spec-Beispiel zeigt JSON Schema ({type:"object",properties:…}). Zum Zeitpunkt der Erstellung erwartet der Live-Server die unten gezeigte flache Anweisungs-Map; wir gleichen die Spec an.

# Inline-Schema — flache Map aus Feld → Anweisung
thunderbit extract https://example.com/product \
  --schema '{"name":"product name","price":"the listed price as a number","currency":"3-letter currency code"}'

# Schema aus Datei
thunderbit extract https://example.com/product --schema ./schema.json

# Extrahiertes JSON speichern
thunderbit extract https://example.com/product --schema ./schema.json --format json -o data.json

Die Antwort liefert data.data immer als Array, ein Element pro Seitenbereich, der zu deinem Schema passt:

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

Interaktiver Modus

# Die KI schlägt Felder vor, du toggelst/editierst, dann läuft die Extraktion mit dem kuratierten Schema
thunderbit extract https://example.com/product --interactive

# Vorschlag mit Prompt steuern
thunderbit extract https://example.com/product -i --prompt "focus on pricing and availability"

# Schema zur Wiederverwendung speichern
thunderbit extract https://example.com/product -i --save-schema ./product-schema.json

Extract-Optionen

# Render-Zeit für SPAs erhöhen
thunderbit extract https://example.com --schema ./schema.json --render-mode full

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

# Längeres Timeout für komplexe Seiten
thunderbit extract https://example.com --schema ./schema.json --timeout 120000

Verfügbare Optionen:

OptionStandardBeschreibung
--schema <json-or-file>Inline-JSON oder Pfad zur Schema-Datei
--interactive, -ifalseVorschlagen → kuratieren → extrahieren in einem Schritt
--prompt <text>Hinweis für KI-Vorschlag (mit -i)
--render-mode <mode>nonenone, basic oder full
--timeout <ms>60000Request-Timeout pro Seite in ms
--syncfalseSync-Modus
--save-schema <file>Finales Schema zur Wiederverwendung speichern

Suggest Fields

Lass die KI extrahierbare Felder vorschlagen, bevor du ein Schema schreibst.

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

# Mit Prompt steuern
thunderbit suggest-fields https://example.com/listings --prompt "extract job postings only"

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

Im interaktiven Editor kannst du Felder per Nummer toggeln (1 3 5), add, rm 2, edit 4 und dann mit done bestätigen. suggest-fields liefert [{name, type, instruction}, …]; wenn du das in extract einspeist, wandle es zuerst in eine flache Map um:

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

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

Verfügbare Optionen:

OptionStandardBeschreibung
--prompt <text>Steuerhinweis
--country-code <CC>USISO-2-Buchstaben-Code

Batch Distill

Sende bis zu 100 URLs in einem einzigen Batch-Job. Standardverhalten: submit + pollen bis COMPLETED / FAILED / CANCELLED.

# URLs als Positionsargumente
thunderbit batch distill https://a.com https://b.com https://c.com

# Oder URLs aus Datei lesen (eine pro Zeile)
thunderbit batch distill --file urls.txt

# Nur einreichen — Job-ID ausgeben und beenden (Webhook nutzen oder später pollen)
thunderbit batch distill --file urls.txt --no-poll

Batch-Distill-Optionen

# Timeout pro Seite erhöhen
thunderbit batch distill --file urls.txt --timeout 60000

# Ergebnisse in ein anderes Tool pipen
thunderbit batch distill --file urls.txt --format json \
  | jq -r '.data.results[] | select(.success == true) | .markdown' \
  > distilled.md

Verfügbare Optionen:

OptionStandardBeschreibung
--file <path>URLs aus Datei lesen (eine pro Zeile)
--timeout <ms>30000Request-Timeout pro Seite in ms
--no-pollfalseNur einreichen, Job-ID ausgeben, beenden

Einen laufenden batch-distill-Job abbrechen

thunderbit batch cancel-distill <jobId>

Bereits abgeschlossene Seiten behalten ihre Ergebnisse. Ausstehende Seiten werden verworfen und dafür wird nichts mehr berechnet. Der Status wechselt auf CANCELLED, sobald der Server bestätigt.


Batch Extract

Sende bis zu 100 URLs mit einem gemeinsamen Schema.

# URLs als Positionsargumente + Inline-Schema
thunderbit batch extract https://a.com https://b.com \
  --schema ./schema.json

# URLs aus Datei lesen
thunderbit batch extract --file urls.txt --schema ./schema.json

# Nur einreichen
thunderbit batch extract --file urls.txt --schema ./schema.json --no-poll

Verfügbare Optionen:

OptionStandardBeschreibung
--file <path>URLs aus Datei lesen (eine pro Zeile)
--schema <json-or-file>Inline-JSON oder Schema-Datei (erforderlich)
--timeout <ms>60000Request-Timeout pro Seite in ms
--no-pollfalseNur einreichen, Job-ID ausgeben, beenden

Einen laufenden batch-extract-Job abbrechen

thunderbit batch cancel-extract <jobId>

Gleiche Semantik wie cancel-distill — abgeschlossene Zeilen bleiben erhalten, ausstehende Zeilen werden verworfen, die Abrechnung stoppt für den Rest.

Ausgabe-Handling

Die CLI schreibt standardmäßig nach stdout, was Pipes und Redirects einfach macht.

# Markdown in ein anderes Tool pipen
thunderbit distill https://example.com --format markdown | head -50

# In Datei umleiten
thunderbit distill https://example.com --format markdown > output.md

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

Format-Verhalten

  • --format json (Standard): vollständige API-Antwort als kompaktes JSON, einschließlich success, data, creditsUsed usw. In jq pipen.
  • --format markdown: roher Markdown-Body für distill; vollständiges JSON für andere Befehle.
  • --format table: ASCII-Tabelle für tabellarische Ergebnisse (extract, suggest-fields).
# Markdown-Body direkt auf Disk
thunderbit distill https://example.com --format markdown

# Vollständige strukturierte Antwort
thunderbit distill https://example.com --format json

Beispiele

Schnelles Distill

# Einen Artikel destillieren
thunderbit distill https://docs.thunderbit.com/introduction --format markdown

# HTML-konvertiertes Markdown auf Disk speichern
thunderbit distill https://example.com --format markdown -o page.md

Massen-RAG-Ingestion

# Eine Doku-Site aus urls.txt destillieren und jede Seite auf Disk schreiben
thunderbit batch distill --file urls.txt --format json \
  | jq -r '.data.results[] | select(.success == true) | "\(.url)\t\(.markdown)"' \
  > corpus.tsv

Erst entdecken, dann extrahieren

# Schritt 1: KI schlägt Felder vor, du kuratierst, Schema wird auf Disk gespeichert
thunderbit extract https://example.com/product -i --save-schema ./schema.json

# Schritt 2: über den ganzen Katalog wiederverwenden
thunderbit batch extract --file urls.txt --schema ./schema.json --format json > products.json

CI-Gate — fehlschlagen, wenn Extraktion nichts liefert

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

Mit anderen Tools kombinieren

# URLs aus einer JSON-Suchergebnisantwort herausziehen
thunderbit distill https://example.com --format json \
  | jq -r '.data.metadata.canonicalUrl'

# Destillierten Inhalt zur Zusammenfassung in ein Modell pipen
thunderbit distill "$URL" --format markdown \
  | claude -p "summarise the article in 5 bullets"

# Erfolgreiche Seiten in einem Batch zählen
thunderbit batch distill --file urls.txt --format json \
  | jq '[.data.results[] | select(.success == true)] | length'

Exit-Codes

CodeBedeutung
0Erfolg. Das Ergebnis liegt auf stdout im durch --format gewählten Format.
1Beliebiger Fehler — fehlender API-Key, Auth-Fehler, HTTP 4xx/5xx, Netzwerkfehler, fehlende Schema-Datei, fehlendes Pflichtargument.

Aller Fehlertext wird nach stderr geschrieben. Bei einem Fehler bleibt stdout leer (ja, auch mit --format json). Damit erhält eine jq-Pipeline nie ein halbgares Envelope — prüfe vor dem Parsen den Exit-Code (oder set -e).

Polling-Fortschritt (z. B. Processing... (3) aus async submit + poll) wird ebenfalls auf stderr geschrieben. Mit 2>/dev/null kannst du ihn stummschalten. Synchrone Single-Page-Aufrufe (--sync) geben keinen Fortschritt aus.

Troubleshooting

Error: API key is required. Exportiere THUNDERBIT_API_KEY oder übergib --api-key.

Netzwerkfehler hinter einem Unternehmens-Proxy. Setze HTTPS_PROXY und HTTP_PROXY — sowohl Node- als auch Python-Clients respektieren sie.

Langsames Batch-Polling. Erhöhe --timeout für das Pro-Seite-Budget. Die Polling-Frequenz selbst ist fest auf wenige Sekunden eingestellt und derzeit nicht über die CLI konfigurierbar.

Open Source

Die Thunderbit-CLI ist MIT-lizenziert und Open Source auf GitHub: GitHub repository (das gleiche Repo enthält auch den MCP-Server und das Claude-Code-Plugin). Auf npm als @thunderbit/thunderbit-cli veröffentlicht.

Verwandt

  • MCP Server — dieselben Operationen, als MCP-Tools bereitgestellt
  • SDKs — aus deinem eigenen Code aufrufen
  • API Reference — rohes HTTP