Zum Hauptinhalt springen

Einheit 6 — Die Prüfkette: check, compile, graph

Was du nach dieser Einheit weißt: Du weißt, warum valid: true keine Aussage über die Funktionsfähigkeit eines Workflows ist, und kennst die dreistufige Prüfung, die jeden Fehler abfängt, den die Werkzeuge überhaupt abfangen können.

Drei Werkzeuge, drei Fragen

Alle drei arbeiten ausschließlich auf dem Text. Sie fassen deine Instanz nicht an, kosten nichts und dauern Millisekunden. Es gibt keinen Grund, eines davon zu überspringen.

WerkzeugFrageFängt
towelscript_checkIst die Syntax gültig?Tippfehler, unbekannte Node-Typen, kaputte Klammern
towelscript_compileWas wird daraus konkret?Falsch verschachtelte Optionen, verschluckte Werte, falscher Agent-Typ
towelscript_graphWie ist es verbunden?Fehlende, falsche oder verschluckte Verbindungen

Stufe 1 — towelscript_check

{
"valid": true,
"errors": [],
"warnings": [],
"stats": { "lines": 37, "nodes": 3, "flows": 1, "modules": 1 }
}

Im Fehlerfall bekommst du Zeile, Spalte und einen Code:

{
"message": "unexpected token 'payload' in flow body",
"code": "E0201",
"line": 8,
"column": 5
}

Die stats sind mehr wert, als sie aussehen: Stimmt nodes mit der Zahl überein, die du geschrieben hast? Wenn du sieben Nodes geschrieben hast und hier steht 6, hast du ein Problem — noch bevor du irgendetwas deployst.

Was check nicht prüft
  • Optionsnamen. post_urls statt post_url ist syntaktisch einwandfrei — und funktioniert nicht.
  • Optionswerte. Ein Liquid-Ausdruck, der ins Leere greift, ist ein gültiger String.
  • Ob die Verbindungen überhaupt ausgewertet wurden. Genau hier liegt der teuerste Fehler.

Stufe 2 — towelscript_compile

compile zeigt dir den Workflow so, wie er in 42°flow ankommt: jeden Agent mit Typ, GUID und allen Optionen.

{
"type": "Agents::PostAgent",
"name": "anlegen",
"guid": "ad1b7feb8ddde31b920ff3810cc10f18",
"options": {
"content_type": "json",
"method": "post",
"no_merge": true,
"payload": {
"company": "{{ company }}",
"email": "{{ email }}",
"name": "{{ name }}"
},
"post_url": "https://…/contacts"
}
}

Worauf du hier schaust:

  1. Ist der Agent-Typ der erwartete? http ohne post_url wird zu Agents::WebsiteAgent statt Agents::PostAgent.
  2. Sind verschachtelte Optionen wirklich verschachtelt? Siehe unten.
  3. Ist jede Option da, die du geschrieben hast? Mit = geschriebene Objekte verschwinden spurlos.
  4. Ist links gefüllt?

Die drei Schreibweisen im Compile-Ergebnis

So sieht derselbe Post-Node in den drei Varianten aus Einheit 4 aus:

// payload: { … }   ✅
"options": {
"post_url": "https://…",
"payload": { "name": "{{ name }}" }
},
"links": [ { "source": 0, "receiver": 1 }, { "source": 1, "receiver": 2 } ]
// payload { … }    ❌ flach gezogen, links leer
"options": {
"post_url": "https://…",
"name": "{{ name }}"
},
"links": []
// payload = { … }  ❌ Option komplett weg
"options": {
"post_url": "https://…"
},
"links": []

Stufe 3 — towelscript_graph

graph reduziert alles auf die Frage, die im Compile-Ergebnis leicht untergeht:

{
"flows": [
{
"name": "kontaktanfrage",
"nodes": [
{ "name": "eingang", "node_type": "form", "line": 4 },
{ "name": "extrahieren", "node_type": "ai", "line": 10 },
{ "name": "anlegen", "node_type": "http.post", "line": 17 }
],
"edges": [
{ "from": "eingang", "to": "extrahieren", "kind": "data" },
{ "from": "extrahieren", "to": "anlegen", "kind": "data" }
]
}
]
}

Die Regel ist einfach: bei n Nodes in einer Kette erwartest du n − 1 Kanten. Sind es weniger, stimmt etwas nicht. Ist edges leer, obwohl du eine Verbindungszeile geschrieben hast, hast du mit Sicherheit irgendwo einen { … }-Block ohne Doppelpunkt.

graph ist die schnellste Kontrolle von allen — eine Zeile Ausgabe, eine Zahl vergleichen.

Der Ablauf in der Praxis

TowelScript schreiben

├─ check → valid? stats.nodes plausibel?

├─ graph → edges = nodes − 1?

├─ compile → Agent-Typen richtig? payload verschachtelt?
│ jede Option vorhanden? links gefüllt?

└─ deploy

Formuliere das gegenüber Claude Code als feste Erwartung, dann musst du nicht jedes Mal einzeln danach fragen:

„Prüfe jede TowelScript-Änderung mit check, compile und graph, bevor du deployst. Zeig mir dabei immer die Anzahl der Kanten aus graph."

Diese Erwartung dauerhaft setzen

Schreib die Regel in eine CLAUDE.md in deinem Projektordner. Claude Code liest diese Datei bei jedem Start und hält sich daran, ohne dass du es wiederholen musst — dasselbe Prinzip wie eine Team-Konvention, nur für den Assistenten.

📹 Video: [Platzhalter — Screencast: Derselbe Quelltext einmal korrekt und einmal mit Blockschreibweise durch alle drei Prüfwerkzeuge]

towelscript_symbols — der Nebeneingang

symbols listet alle Module, Flows und Nodes mit Zeile und Spalte. Für kleine Workflows brauchst du es nicht. Bei 40 Nodes ist es die schnellste Antwort auf „in welcher Zeile steht eigentlich der Agent, der mir gerade Ärger macht?".

Zusammengefasst

StufePrüfeAlarmzeichen
checkvalid, stats.nodesweniger Nodes als geschrieben
graphAnzahl edgesedges: [] oder zu wenige
compileAgent-Typ, Verschachtelung, Vollständigkeit, linksflache Optionen, fehlende Optionen, links: []

Alle drei zusammen kosten weniger Zeit als eine einzige fehlgeschlagene Deploy-Runde.

Weiter: Einheit 7 — Testen ohne Nebenwirkungen