ClawHub Skill für OpenClaw-Agenten#
Der EnConvert Skill ist auf ClawHub veröffentlicht, der Skill-Registry für OpenClaw-Agenten. Nach der Installation stehen einem Agenten sechs Operationen zur Verfügung: eine URL als Markdown lesen, das Web durchsuchen, die URLs einer Site auflisten, typisierte Felder aus Seiten extrahieren und eine Datei nach Markdown oder nach PDF konvertieren. Jede gelesene Seite trägt einen render_quality-Wert von 0.0 bis 1.0, sodass eine Bot-Sperre oder die leere Hülle einer Single-Page-App markiert ankommt, statt weitergereicht zu werden, als wäre sie die Seite.
openclaw skills install @enconvert/enconvert · Listing: clawhub.ai/enconvert/skills/enconvert · Version: 0.0.1 · Quellcode: enconvert/clawhub-enconvert
Was ein ClawHub Skill ist#
Ein ClawHub Skill ist eine einzige Markdown-Datei mit Anweisungen. Der Agent liest sie und führt die Aufrufe selbst mit curl aus. Das ist der gesamte Mechanismus.
Das ist wichtiger, als es klingt. Die sechs Operationen unten sind keine registrierten Tool-Schemas. Nichts taucht in einer Tool-Liste auf, kein Argument-Objekt wird geprüft, bevor ein Aufruf rausgeht, und zwischen Agent und API sitzt kein SDK. Der Skill sagt dem Agenten, welchen Endpunkt er ansprechen soll, welchen Header er mitschickt und wie die Antwort aussieht; die HTTP-Anfrage baut der Agent selbst. Nenne sie Operationen, nicht Tools, dann ergibt das beobachtete Verhalten Sinn: Ein Agent, der die Datei nicht gelesen hat, ruft nichts auf, und ein Agent, der sie gelesen hat, kann davon abweichen.
Der praktische Vorteil: Außer curl muss nichts installiert werden, und dieselben Anweisungen funktionieren auf jeder Plattform, die einen Shell-Befehl ausführen kann.
Die sechs Operationen#
| Operation | Endpunkt | Was zurückkommt |
|---|---|---|
| Perceive URL | POST /v2/perceive |
render_quality, dazu ein outputs-Objekt aus signierten URLs mit 15 Minuten Laufzeit |
| Web Search | POST /v2/lookup |
results[] mit title, url, snippet, position |
| Discover URLs | POST /v2/discover |
urls[] und total, ohne dass eine Seite gerendert wird |
| Extract Structured | POST /v2/distill |
results[], ein Eintrag pro URL, jeder mit data und extraction_tier |
| Convert File to Markdown | POST /v1/convert/anything-to-markdown |
JSON mit presigned_url |
| Convert File to PDF | POST /v1/convert/anything-to-pdf |
JSON mit presigned_url |
Jeder Aufruf schickt den Header X-API-Key, nie Authorization: Bearer. Alle sechs laufen gegen dieselbe REST-API, die auf dieser Site dokumentiert ist, dein Tarif-Kontingent und deine Rate-Limits gelten also genau wie überall sonst.
POST /v2/lookup. Der V2-Namespace hat keinen Endpunkt, der nach dem Wort „search“ benannt ist; eine Anfrage dorthin liefert 404. Greift ein Agent zu diesem Pfad, war die Skill-Datei, die er gelesen hat, veraltet.
Installation#
Installiere ihn mit der OpenClaw CLI:
openclaw skills install @enconvert/enconvert
Das ist die Form, die das ClawHub-Listing anzeigt. Mit --global installierst du ihn für jedes Projekt statt nur für das aktuelle, und mit openclaw skills update --all holst du dir später neue Versionen.
Die ClawHub CLI installiert denselben Skill, falls du dieses Werkzeug ohnehin schon hast:
npm i -g clawhub
clawhub install @enconvert/enconvert
Das npm-Paket clawhub ist die CLI. Auf PyPI gibt es ein unverwandtes Paket gleichen Namens, dessen Releases alle zurückgezogen sind; pip install clawhub führt also nicht zu dieser CLI.
Dem Skill deinen API-Key geben#
Der Skill liest genau ein Secret: ENCONVERT_API_KEY.
- Erzeuge im Dashboard einen privaten API-Key. Private Keys beginnen mit
sk_. - Mach ihn dem Agenten zugänglich, entweder als
ENCONVERT_API_KEYin der Umgebung, in der der Agent läuft, oder über deine OpenClaw-Konfiguration gezielt für diesen Skill injiziert. Die Referenz zur Skill-Konfiguration beschreibt denenv-Block pro Skill. - Prüfe, ob der Key funktioniert, bevor du den Agenten um irgendetwas bittest:
curl -sS https://api.enconvert.com/v1/whoami -H "X-API-Key: $ENCONVERT_API_KEY"
# {"project_id":"2","plan_slug":"free"}
Ein öffentlicher pk_-Key wird hier mit einem 403 abgelehnt. Öffentliche Keys sind für Browser-Widgets gedacht, und keine Operation in diesem Skill akzeptiert einen. Siehe Private Keys.
ENCONVERT_API_KEY und die Binary curl im PATH. Fehlt eines von beidem, ist der Skill schlicht nicht verfügbar, und es gibt keine Fehlermeldung zu lesen. Das Symptom ist ein Agent, der antwortet, als hätte er nie von EnConvert gehört. Prüfe curl --version und den whoami-Aufruf oben, bevor du irgendetwas anderes debuggst.
Was von einem Seitenabruf zurückkommt#
Die Antwortform von POST /v2/perceive ist das eine, was du unbedingt verstanden haben solltest, bevor ein Agent sie aufruft:
curl -sS -X POST https://api.enconvert.com/v2/perceive \
-H "X-API-Key: $ENCONVERT_API_KEY" -H "Content-Type: application/json" \
-d '{"url":"https://example.com","outputs":["markdown"],"only_main_content":true}'
Für die Antwort gelten drei Regeln:
render_qualitykommt zuerst. Es ist eine Zahl von 0.0 bis 1.0 in einer200-Antwort, kein HTTP-Fehler. Ein niedriger Wert heißt, das Rendering ist beeinträchtigt; behandle den Inhalt dann als fragwürdig statt als verbindlich.- Jedes Artefakt unter
outputsist eine signierte URL mit 15 Minuten Laufzeit, Markdown eingeschlossen.outputs.markdown.urlist ein Link, nicht der Text der Seite. Dasselbe gilt fürhtml_cleaned,html_raw,screenshot,screenshot_full_page,pdf,linksundimages. Hol jedes davon mit einem einfachenGETund ohneX-API-Key-Header: Die Signatur in der URL ist die Authentifizierung, und deinen Key mitzuschicken würde ihn dem Storage-Host umsonst aushändigen. Mehr dazu unter Signierte URLs. structuredist die Ausnahme. Es kommt inline auf oberster Ebene der Antwort zurück, nicht unteroutputs.
Ein Agent, der inline Markdown erwartet, liest ein Objekt, wo er Text wollte, und meldet die Seite als leer. Zwei Schritte, nicht einer:
MD=$(curl -sS -X POST https://api.enconvert.com/v2/perceive \
-H "X-API-Key: $ENCONVERT_API_KEY" -H "Content-Type: application/json" \
-d '{"url":"https://example.com","outputs":["markdown"]}' \
| grep -o '"url":"[^"]*"' | head -n1 | cut -d'"' -f4)
curl -sS "$MD" # no key here
Die Dateikonvertierung endet nach demselben Muster: Das JSON trägt presigned_url, und die holst du mit einem einfachen GET ohne Key.
Eine Datei konvertieren#
Beide Konvertierungs-Endpunkte nehmen multipart/form-data mit einem einzigen Feld namens file. Setze Content-Type nicht von Hand; die Multipart-Boundary erledigt das.
curl -sS -X POST https://api.enconvert.com/v1/convert/anything-to-markdown \
-H "X-API-Key: $ENCONVERT_API_KEY" -F "[email protected]"
Die Dateiendung im Namen entscheidet über das Eingabeformat. Das ist die schärfste Kante dieses Ablaufs auf einer Agent-Plattform, wo die Eingabe meist eine URL statt eines lokalen Pfads ist: Lade die Quelle zuerst ohne X-API-Key-Header herunter (es ist ein fremder Host), behalte den ursprünglichen Dateinamen und schicke dann die Bytes. Einen Namen, den die API nicht lesen kann, repariert sie aus den Bytes, sofern das Format eine Signatur trägt (ein PDF, ein Bild oder ein DOCX übersteht das), ein Textformat hat aber keine: Markdown unter dem Namen notes.lJzoMq6Akq kommt als 400 Invalid file format '.ljzomq6akq' for anything-to-markdown zurück. Das mit dem Skill ausgelieferte Helferskript scripts/convert.sh erledigt die ganze Abfolge aus Herunterladen, Posten und Abholen korrekt.
Fehlerbehebung#
Der Agent erwähnt EnConvert nie.
Der Skill wurde nicht geladen. Entweder ist ENCONVERT_API_KEY für den Agent-Prozess nicht sichtbar, oder curl liegt nicht im PATH. Die Filterung zur Ladezeit ist bewusst stumm, in den Logs ist also nichts zu finden.
401 oder 403 bei jedem Aufruf.
Der Key fehlt, ist falsch oder ist ein öffentlicher pk_-Key. Führe den whoami-Aufruf oben aus; er scheitert exakt genauso und sagt es dir in einer Zeile.
Ein 404 von der Websuche.
Der Agent hat einen Endpunkt geraten, der nach dem Wort „search“ benannt ist. Diesen Pfad gibt es nicht. Websuche ist POST /v2/lookup.
400 Invalid file format.
Die hochgeladene Datei hatte keine brauchbare Endung und in ihren Bytes keine Signatur, aus der sich eine ableiten ließe, und das trifft auf jedes Textformat zu: CSV, HTML, Markdown, reiner Text. Behalte den Dateinamen der Quelle, oder benenne den Download in einen mit der richtigen Endung um.
Die Seite kommt leer zurück oder als [object Object].
outputs.markdown ist eine signierte URL. Hol sie ab. Nur structured kommt inline an.
Ein Download-Link funktioniert nicht mehr. Signierte URLs leben 15 Minuten. Führe die Operation erneut aus, statt zu versuchen, den Link aufzufrischen.
Quellen und Links#
- ClawHub-Listing: clawhub.ai/enconvert/skills/enconvert
- Publisher: @enconvert
- OpenClaw Skills: docs.openclaw.ai/tools/skills
- ClawHub Skill-Format: docs.openclaw.ai/clawhub/skill-format
- Zugrunde liegende API: Einführung, Perceive, Anything to Markdown
- Quellcode: enconvert/clawhub-enconvert
Für einen Coding-Agenten, der stattdessen das Model Context Protocol unterstützt, stellt MCP Setup dieselben Operationen als echte registrierte Tools bereit.
Häufig gestellte Fragen#
Wie installiere ich den EnConvert Skill in OpenClaw?#
Führe openclaw skills install @enconvert/enconvert aus. Das ist der Befehl, den das ClawHub-Listing zeigt. Die ClawHub CLI installiert denselben Skill mit clawhub install @enconvert/enconvert, nachdem du npm i -g clawhub ausgeführt hast. Setze danach ENCONVERT_API_KEY auf einen privaten sk_-Key aus deinem Dashboard, denn ohne ihn lädt der Skill nicht.
Wie bringe ich einen OpenClaw-Agenten dazu, eine Webseite als Markdown zu lesen?#
Frag ihn nach der Seite, sobald der Skill installiert ist. Er ruft POST /v2/perceive mit outputs: ["markdown"] auf und holt danach outputs.markdown.url mit einem einfachen GET ohne Key. Markdown ist rund sechsmal kleiner als das rohe HTML derselben Seite, was die Token-Kosten von allem senkt, was der Agent anschließend damit macht.
Warum macht der Skill überhaupt nichts?#
OpenClaw filtert Skills zur Ladezeit anhand ihrer deklarierten Voraussetzungen. Dieser deklariert die Umgebungsvariable ENCONVERT_API_KEY und die Binary curl. Fehlt eines von beidem, wird der Skill ausgeschlossen, bevor der Agent ihn überhaupt zu sehen bekommt, ohne Fehlermeldung. Das ist fast immer die Ursache.
Ist der Skill ein registriertes Tool, das der Agent aufrufen kann?#
Nein. Es ist eine Markdown-Datei mit Anweisungen, die der Agent liest und mit curl umsetzt. Es gibt kein Tool-Schema und keine Argumentprüfung, deshalb schreibt die Skill-Datei jeden Endpunkt, jeden Header und jede Antwortform aus. Sonst muss nichts installiert werden.
Kann ich einen öffentlichen pk_-Key verwenden?#
Nein. Öffentliche Keys sind für Browser-Widgets gedacht, und jede Operation hier lehnt sie mit einem 403 ab. Nutze einen privaten Key, der mit sk_ beginnt und im Dashboard unter API-Keys erzeugt wird.
Woher weiß der Agent, dass eine Seite nicht sauber gerendert wurde?#
Jede perceive-Antwort trägt render_quality, eine Zahl von 0.0 bis 1.0 innerhalb einer normalen 200. Eine Challenge-Seite, eine Cookie-Wand oder ein Skript, das nie zur Ruhe kam, bekommt einen niedrigen Wert. Der Skill weist den Agenten an, diesen Wert zuerst zu lesen und einen beeinträchtigten Abruf als solchen auszuweisen, statt ihn als zuverlässig zu präsentieren.