Echolot
Flows

Blöcke

Jede Blockart, die ein Flow enthalten kann, mit Einstellungen und Ports – und wie Werte, Vorlagen und Bedingungen zwischen den Blöcken funktionieren.

Jeder Block tut genau eine Sache. Seine Einstellungen findest du im Inspektor, sobald du ihn auswählst; seine Ports sitzen auf der Arbeitsfläche, die Eingänge links und die Ausgänge rechts. Diese Seite listet jede Blockart in den Gruppen der Blockauswahl und erklärt dann die Werte, die zwischen Blöcken wandern, Vorlagen wie {{body.id}} und Bedingungen.

Wie ein Durchlauf abläuft

  • Ein Block läuft, sobald jeder Eingang mit einer Verbindung einen Wert hat. Er sendet dann Werte aus einigen seiner Ausgänge, und nur die Blöcke, die daran hängen, laufen als Nächstes.
  • Start läuft zuerst. Die Blöcke „Wert“ und „Variable lesen“, in die nichts verbunden ist, laufen ebenfalls am Anfang.
  • Blöcke laufen nebeneinander, wenn es geht. Ein Block „Zeigen und warten“ kann auf dich warten, während ein Block „Abfragen“ weiterläuft.
  • Mehrere Blöcke können fehlschlagen: „Anfrage“, „Abfragen“, „Tool“, „Flow“, „Auswerten“ und „Datei schreiben“ haben einen Ausgang fail. Ist er verbunden, kommt der Fehler dort heraus und der Durchlauf geht weiter. Ist er es nicht, schlägt der ganze Durchlauf an diesem Block fehl.
  • Der Durchlauf endet, wenn nichts mehr läuft.

Der Inspektor jedes Blocks hat außerdem Titel (auf dem Block angezeigt; leer zeigt er den Namen der Blockart) und Pausiert (Werte gehen direkt durch). Ein pausierter Block ist abgeblendet und wird übersprungen: Was hineinkommt, geht direkt aus seinem ersten Ausgang wieder heraus.

Auslöser

Start

Hier beginnt ein Durchlauf: mit der Taste Ausführen, über einen Agenten (wenn der Flow ein Tool ist), einen Zeitplan, einen Webhook oder echolot flow run. Sein Inspektor enthält die Auslöser des Flows; siehe Ausführen und Auslöser.

PortSeiteWas er trägt
runausAlle Eingaben des Flows als ein Objekt.
einer pro EingabeausDer Wert dieser Eingabe.

Ein Flow hat genau einen Block „Start“. Er steht nicht in der Blockauswahl.

Ausgabe

Was der Durchlauf zurückgibt: an den Agenten, der den Flow aufgerufen hat, an die Befehlszeile, an den Aufrufer des Webhooks oder an einen übergeordneten Flow. Ein Flow hat höchstens einen.

PortSeiteWas er trägt
valueeinDas Ergebnis.

Aktionen

Anfrage

Sendet eine gesicherte Anfrage des Arbeitsbereichs (HTTP, GraphQL oder eine MCP-Anfrage) mit ihrer Auth, ihren Skripten, Prüfungen und der Umgebung des Durchlaufs.

EinstellungWas sie bewirkt
AnfrageDie gesicherte Anfrage, aus einer Liste gewählt (erforderlich).
VariablenNamen, durch Kommas getrennt. Jeder wird zu einem Eingang, der diese {{variable}} der Anfrage füllt.
PortSeiteWas er trägt
sendeinSendet die Anfrage. Kommt ein Objekt an, wird jeder seiner Schlüssel zu einer Variablen dieses Sendevorgangs.
einer pro Name in VariableneinDer Wert für diese Variable.
successausDie Antwort, wenn die Anfrage erfolgreich war.
failausDie Antwort, wenn sie außerhalb von 2xx lag oder eine Prüfung fehlschlug, oder der Fehler, wenn nichts zurückkam.

Eine Anfrage ist erfolgreich, wenn sie mit 2xx antwortet und ihre Prüfungen, Skript-Tests und Skripte alle bestehen, wie in der Ausführung. Variablen, die ein Flow übergibt, gelten nur für dieses Senden und haben Vorrang vor denen der Umgebung.

Im Flow Place a test order ist der Ausgang success von Sign in mit send von Create order verbunden: Die Bestellung wird erst aufgegeben, nachdem die Anmeldung geklappt hat, und das Token, das Sign in erfasst, steht schon in {{token}}.

Tool

Führt eines der eigenen Tools von Echolot aus, etwa einen Mock starten, einen Ordner ausführen, eine Spec prüfen oder ein Tool eines MCP-Servers aufrufen – mit denselben Regeln wie für Agenten.

EinstellungWas sie bewirkt
ToolDas Tool, aus einer Liste gewählt (erforderlich).
ArgumenteDie Argumente des Tools als JSON, etwa { "name": "{{value}}" }. Textwerte dürfen Vorlagen enthalten.
PortSeiteWas er trägt
runeinFührt das Tool aus. Kommt ein Objekt an, werden seine Schlüssel zu den Argumenten hinzugefügt.
resultausWas das Tool zurückgegeben hat.
failausWarum es fehlgeschlagen ist.

Ein Block „Tool“ kann keinen anderen Flow ausführen; dafür gibt es den Block „Flow“.

Nur im direkten Download

Ein Block „Tool“, der einen MCP-Server aufruft, der als lokales Programm (stdio) läuft, funktioniert im Direktdownload. In der App-Store-Edition kann Echolot dieses Programm nicht starten: Der Block zeigt eine Warnung und schlägt beim Ausführen fehl.

Editionen vergleichen

Flow

Führt einen anderen Flow des Arbeitsbereichs aus und sendet, was bei dessen Block „Ausgabe“ angekommen ist.

EinstellungWas sie bewirkt
FlowDer andere Flow (erforderlich). Ein Flow kann sich nicht selbst ausführen, und Flows können sich nicht im Kreis gegenseitig ausführen.
PortSeiteWas er trägt
inputeinEin Objekt mit den Eingaben des anderen Flows.
outputausWas der andere Flow zurückgegeben hat.
failausWarum der andere Flow fehlgeschlagen ist.

Flows führen sich höchstens 8 Ebenen tief gegenseitig aus. Secrets wandern nicht als Werte zwischen Flows: Sichere sie stattdessen als Variablen.

Personen

Blöcke dieser Gruppe halten den Durchlauf an und fragen dich etwas. In der App öffnet sich ein Blatt; wenn ein Agent den Flow gestartet hat, geht die Frage an den Client des Agenten; in der Befehlszeile wird sie im Terminal gestellt. Bei Durchläufen, die Zeitpläne und Webhooks starten, ist niemand da, den man fragen könnte – ein Block dieser Gruppe schlägt dort fehl, ebenso echolot flow run --no-input.

Fragen

Fragt Werte mit einem kleinen Formular ab.

EinstellungWas sie bewirkt
NachrichtWas gefragt wird. Vorlagen sind erlaubt.
FelderDie Felder des Formulars (erforderlich). Jedes hat einen name (sein Port und sein Schlüssel), ein label, das daneben steht, einen type (text, number, bool, secret oder choice), bei einer Auswahl die choices, durch Kommas getrennt, und einen default.
PortSeiteWas er trägt
runeinFragt. Ein Objekt füllt die Vorlagen der Nachricht.
answersausAlle Antworten als ein Objekt.
einer pro FeldausDie Antwort auf dieses Feld.
cancelledaustrue, wenn die Person auf Abbrechen geklickt hat.

Das Blatt hat Abbrechen und Fortfahren. Antworten auf Felder vom Typ secret sind im Durchlaufprotokoll verborgen.

Zeigen und warten

Zeigt eine Nachricht, einen Code zum Kopieren und einen Link zum Öffnen und wartet dann auf Fortfahren oder darauf, dass ein Wert an until ankommt. Nutze es für Geräteanmeldungen: Zeige den Code, während ein Block „Abfragen“ auf die Genehmigung wartet.

EinstellungWas sie bewirkt
TitelDer Titel des Blatts.
NachrichtWas angezeigt wird (erforderlich).
CodeGroß angezeigt, mit Code kopieren (ein Gerätecode).
LinkAngezeigt mit Im Browser öffnen.
QRZeigt den Link auch als QR-Code. Standardmäßig aus.

Alle fünf nehmen Vorlagen an.

PortSeiteWas er trägt
runeinZeigt das Blatt. Ein Objekt füllt die Vorlagen.
untileinMacht von selbst weiter, wenn ein Wert ankommt, etwa das success eines Blocks „Abfragen“.
doneausWas bei run hereingekommen ist.

Ist until verbunden, steht auf dem Blatt Danach geht es von selbst weiter. Nicht mehr warten schließt es und lässt den Block fehlschlagen.

Genehmigen

Bittet dich um Genehmigung, bevor der Flow weitergeht – vor etwas, das sich nicht rückgängig machen lässt.

EinstellungWas sie bewirkt
NachrichtDie Frage (erforderlich). Vorlagen sind erlaubt.
PortSeiteWas er trägt
runeinFragt. Ein Objekt füllt die Vorlagen der Nachricht.
approvedausWas bei run hereingekommen ist, nach Genehmigen.
declinedausWas bei run hereingekommen ist, nach Ablehnen.

Genehmigen ist immer Sache der Person. Wenn ein Agent einen Flow ausführt und einen Block „Genehmigen“ beantwortet, legt Echolot dir die Frage zuerst vor. In Place a test order fragt der Block „Genehmigen“ namens Keep the order? Keep order {{body.id}} for CHF {{body.total.amount}}? mit der Bestellung, die der Shop gerade angelegt hat; Ablehnen schickt sie weiter zu Cancel order.

Das Genehmigen-Blatt von Place a test order: Keep the order? mit der Bestell-ID und dem Gesamtbetrag in Schweizer Franken sowie den Tasten „Ablehnen“ und „Genehmigen“

Logik

Wenn

Sendet, was hereinkommt, nach einer Bedingung an true oder false.

EinstellungWas sie bewirkt
BedingungEin JavaScript-Ausdruck (erforderlich), etwa value.status == 200.
PortSeiteWas er trägt
valueeinDer Wert, der geprüft wird.
true, falseausDerselbe Wert, aus einem der beiden Ausgänge.

Morning stock check verwendet einen Block „Wenn“ namens Running low? mit value.body.items.some(p => p.stock.bern < 5) auf die Produkte, die der Shop zurückgegeben hat.

Switch

Sendet, was hereinkommt, an den ersten Fall, dessen Bedingung zutrifft, sonst an default.

EinstellungWas sie bewirkt
FälleEine Liste (erforderlich). Jeder Fall hat einen name (sein Ausgangsport) und eine condition.
PortSeiteWas er trägt
valueeinDer Wert, der geprüft wird.
einer pro FallausDer Wert, wenn dieser Fall der erste ist, der zutrifft.
defaultausDer Wert, wenn kein Fall zutrifft.

Auswerten

Führt JavaScript auf dem aus, was hereinkommt. Der letzte Ausdruck ist das Ergebnis: ({ id: value.body.id }) oder a + b. Code mit einem eigenen return läuft als Rumpf einer Funktion, und was return liefert, ist das Ergebnis. Ein Promise wird abgewartet. pm.test und pm.expect funktionieren wie in Skripten, und ihre Ergebnisse zählen als Tests des Durchlaufs. Zeilen von console.log landen im Durchlaufprotokoll.

EinstellungWas sie bewirkt
CodeDas JavaScript (erforderlich).
EingängeNamen der Eingänge, durch Kommas getrennt; jeder ist eine Variable im Code. Leer gilt value.
PortSeiteWas er trägt
einer pro Name in EingängeeinDer Wert dieser Variablen.
resultausDas Ergebnis.
failausDer Fehler, wenn der Code eine Ausnahme ausgelöst hat.
// Inputs: pages. Joins the lists that Collect gathered.
return pages.flat();

Verzögern

Wartet und gibt den Wert dann weiter.

EinstellungWas sie bewirkt
MillisekundenWie lange gewartet wird (erforderlich). Eine Zahl oder eine Vorlage wie {{wait}}.

Ports: value ein, value aus.

Schleifen

Wiederholen

Sendet index so oft wie Anzahl, von 0 aufwärts gezählt, dann done.

EinstellungWas sie bewirkt
AnzahlWie oft (erforderlich): 0 bis 100.000. Eine Zahl oder eine Vorlage wie {{pages}}.
PortSeiteWas er trägt
runeinStartet die Schleife.
indexaus0, 1, 2 … einmal pro Runde.
doneausWas bei run hereingekommen ist, nach der letzten Runde.

Für jedes

Sendet nacheinander jedes Element einer Liste, dann done. Es hat keine Einstellungen.

PortSeiteWas er trägt
listeinDie Liste. Alles andere lässt den Block fehlschlagen.
itemausEin Element pro Runde.
indexausDie Position des Elements, ab 0.
doneausDie ganze Liste, nach der letzten Runde.

Sammeln

Sammelt, was während einer Schleife ankommt, in einer Liste und sendet sie, wenn die Schleife fertig ist. Es hat keine Einstellungen.

PortSeiteWas er trägt
itemeinEin Wert pro Runde.
listausAlles Gesammelte, sobald die Schleife endet, zu der der Block gehört.

Jede Runde einer Schleife ist fertig, bevor die nächste beginnt, und die Blöcke, die sie erreicht, laufen in jeder Runde erneut. Werte von außerhalb der Schleife, etwa eine Eingabe von Start, bleiben für jede Runde verfügbar.

Abfragen

Sendet eine gesicherte Anfrage immer wieder, bis eine Bedingung zutrifft (eine Anmeldung genehmigt, ein Job fertig) oder die Frist abläuft.

EinstellungWas sie bewirkt
AnfrageDie gesicherte Anfrage (erforderlich).
VariablenNamen, durch Kommas getrennt; jeder wird zu einem Eingang, der diese {{variable}} füllt.
BisEine Bedingung auf response, die letzte Antwort. Standard: response.status >= 200 && response.status < 300.
IntervallSekunden zwischen zwei Sendevorgängen. Standard 5. Eine Zahl oder eine Vorlage.
FristSekunden, bis aufgegeben wird. Standard 300. Eine Zahl oder eine Vorlage.
PortSeiteWas er trägt
sendeinStartet das Abfragen. Kommt ein Objekt an, werden seine Schlüssel zu Variablen.
einer pro Name in VariableneinDer Wert für diese Variable.
successausDie Antwort, die die Bedingung erfüllt hat.
timeoutausDie letzte Antwort, wenn die Frist abgelaufen ist. Ist timeout nicht verbunden, schlägt stattdessen der Block fehl.
failausDer Fehler, wenn ein Sendevorgang fehlgeschlagen ist.

Anders als bei „Anfrage“ lässt eine Antwort außerhalb von 2xx den Block „Abfragen“ nicht fehlschlagen: Er sendet erneut, bis Bis zutrifft.

Daten

Wert

Ein fester Wert: Text, eine Zahl, true oder false, eine Liste oder ein Objekt.

EinstellungWas sie bewirkt
WertText, eine Zahl oder JSON (erforderlich).
PortSeiteWas er trägt
runeinSendet den Wert bei jedem Eintreffen erneut.
valueausDer Wert. Ist nichts mit run verbunden, wird er einmal am Anfang gesendet.

Vorlage

Text, dessen {{name}} aus dem ankommenden Objekt und den Variablen des Durchlaufs gefüllt wird.

EinstellungWas sie bewirkt
TextDer Text mit Vorlagen (erforderlich).

Ports: values ein (ein Objekt), text aus.

Auswählen

Greift per Pfad Werte aus dem heraus, was hereinkommt, je einen pro Ausgang.

EinstellungWas sie bewirkt
FelderEine Liste (erforderlich). Jedes Feld hat einen name (sein Ausgangsport) und einen path, etwa $.body.user_code.
PortSeiteWas er trägt
valueeinDer Wert, aus dem ausgewählt wird, oft eine Antwort.
einer pro FeldausDer Wert an diesem Pfad, oder null, wenn dort nichts ist.
allausAlle Felder als ein Objekt.

Pfade sind der gemeinsame Teil von JSONPath:

PfadWählt
$.body.items[0].skuEinen Schlüssel, dann das erste Element einer Liste.
$.body.items[-1]Das letzte Element.
$.body.items[*].skusku jedes Elements, als Liste.
$['content-type']Einen Schlüssel mit Zeichen, die ein Punkt nicht aufnehmen kann.
body.idOhne $ beginnt der Pfad beim Wert.

Variable setzen

Sichert Werte als Variablen, damit spätere Blöcke und Anfragen sie mit {{name}} lesen.

EinstellungWas sie bewirkt
VariablenEine Liste (erforderlich). Jede hat einen name, einen path in das, was hereingekommen ist (leer: alles), eine scope und secret.
Ebene (scope)Wohin der Wert geht
runNur in diesen Durchlauf und die Anfragen, die er sendet.
environmentIn die aktive Umgebung (der Standard). Ist keine Umgebung gewählt, schlägt der Durchlauf hier fehl.
workspaceIn die eigenen Variablen des Arbeitsbereichs.
globalAus Flows nicht beschreibbar: Der Durchlauf schlägt fehl und bittet dich, in der Umgebung oder im Arbeitsbereich zu sichern.

Mit secret an kommt der Wert in den Schlüsselbund, nie in eine Datei, und ab dem Moment, in dem er den Block verlässt, ist er im Durchlaufprotokoll und in dem, was Agenten sehen, verborgen. Findet path nichts, behält die Variable ihren alten Wert, sodass eine Token-Antwort ohne neues Refresh-Token das vorhandene nicht löscht. Siehe Secrets.

Ports: value ein, value aus (das Hereingekommene, weitergegeben).

Variable lesen

Liest eine Variable so, wie Anfragen sie sehen: zuerst die des Durchlaufs, dann die der Umgebung, des Arbeitsbereichs und die globalen.

EinstellungWas sie bewirkt
NameDie Variable (erforderlich).
PortSeiteWas er trägt
runeinLiest sie bei jedem Eintreffen erneut.
valueausIhr Wert, oder null, wenn es keinen gibt. Ist nichts mit run verbunden, wird sie einmal am Anfang gelesen.

Ausgabe

Anzeigen

Gibt weiter, was hereinkommt, unverändert, damit du es dir ansehen kannst: Wähle den Block nach einem Durchlauf aus und lies Letzter Durchlauf im Inspektor.

EinstellungWas sie bewirkt
Formatauto, text, json, table oder image. Standard auto.

Ports: value ein, value aus.

Log

Schreibt eine Zeile ins Durchlaufprotokoll.

EinstellungWas sie bewirkt
NachrichtDie Zeile, mit Vorlagen. {{value}} ist das Hereingekommene; bei leerer Nachricht alles davon.

Ports: value ein, value aus. In Place a test order schreibt Order failed Create order answered {{status}}, wenn sich die Bestellung nicht aufgeben lässt.

Prüfen

Prüft, was hereinkommt. Jede Prüfung ist ein Testergebnis des Durchlaufs, und eine fehlgeschlagene lässt echolot flow run fehlschlagen.

EinstellungWas sie bewirkt
PrüfungenEine Liste (erforderlich). Jede Prüfung hat einen name und eine condition auf value.
PortSeiteWas er trägt
valueeinDer Wert, der geprüft wird.
passedausDer Wert, wenn jede Prüfung zutrifft.
failedausDer Wert, wenn eine Prüfung fehlschlägt.
value.status === 200   // Answers 200
value.time < 2000      // Within two seconds

Mitteilen

Zeigt eine macOS-Mitteilung von Echolot. macOS fragt beim ersten Mal nach der Erlaubnis. In der Befehlszeile wird die Mitteilung stattdessen ausgegeben.

EinstellungWas sie bewirkt
TitelDer Titel der Mitteilung (erforderlich). Vorlagen sind erlaubt.
NachrichtIhr Text. Vorlagen sind erlaubt.

Ports: value ein, value aus. Morning stock check endet mit einem Block „Mitteilen“ namens Restock mit dem Titel Restock Bern.

Datei schreiben

Schreibt, was hereinkommt, in eine Datei im Ordner des Arbeitsbereichs.

EinstellungWas sie bewirkt
PfadRelativ zum Ordner des Arbeitsbereichs, etwa exports/items.json (erforderlich). Vorlagen sind erlaubt.
Formatjson (formatiert), text oder csv. Standard json.
PortSeiteWas er trägt
valueeinWas geschrieben wird.
pathausDer Pfad der Datei, relativ zum Arbeitsbereich.
failausWarum sie nicht geschrieben werden konnte.

Eine vorhandene Datei wird ersetzt. Die eigenen Dateien des Arbeitsbereichs sind tabu: die Ordner requests, flows, environments, mocks, mcp-servers und specs, workspace.toml und versteckte Dateien. Bei CSV wird aus einer Liste von Objekten eine Zeile pro Objekt mit einer Spalte pro Schlüssel; alles andere wird mit einem Wert pro Zeile geschrieben.

Werte zwischen Blöcken

Werte sind JSON: Text, Zahlen, true und false, Listen, Objekte oder null.

Das Antwortobjekt

„Anfrage“ und „Abfragen“ senden eine Antwort als Objekt:

{
  "status": 201,
  "reason": "Created",
  "headers": { "content-type": "application/json", "location": "/v1/orders/ord_9Px3Kd" },
  "body": { "id": "ord_9Px3Kd", "total": { "amount": 449, "currency": "CHF" } },
  "time": 182.4,
  "url": "https://demo.echolot.dev/v1/orders"
}
  • body ist geparstes JSON, wenn die Antwort JSON ist, sonst Text, und null, wenn sie leer ist.
  • Header-Namen sind kleingeschrieben. Ein Header, der mehrfach gesendet wurde, wird mit , verbunden.
  • time ist der ganze Austausch in Millisekunden.
  • Ein Body über 8 MB kommt als null mit "truncated": true an. Die vollständige Antwort steht weiterhin im Verlauf.

Vorlagen

Einstellungen mit dem Hinweis „Vorlagen sind erlaubt“ füllen {{name}} aus dem, was in den Block hereinkam:

  • {{status}}, {{body.id}} oder {{body.items[0].sku}}: ein Schlüssel oder ein Pfad in das Objekt, das hereingekommen ist.
  • {{value}} bei „Log“, „Mitteilen“ und „Datei schreiben“: der ganze Wert, der hereingekommen ist.
  • Variablen, die ein Block „Variable setzen“ mit der Ebene run gesichert hat.

Ein Name, der nichts trifft, bleibt, wie er ist, sodass die eigenen {{variables}} eines Blocks „Anfrage“ beim Senden weiterhin aus der Umgebung aufgelöst werden. Objekte und Listen werden als JSON-Text geschrieben.

Bedingungen

„Wenn“, „Switch“, „Abfragen“ und „Prüfen“ nehmen einen JavaScript-Ausdruck, der wahr oder falsch ist. value ist das Hereingekommene; Bis bei „Abfragen“ liest es als response, was auch überall sonst funktioniert.

value.status == 200
response.status === 200 && !!(response.body && response.body.access_token)
value.body.items.length > 0

Ein Ausdruck, der eine Ausnahme auslöst, lässt den Block fehlschlagen (bei „Prüfen“ lässt er diese Prüfung fehlschlagen).

Grenzen

Damit eine falsche Verbindung nicht ewig laufen kann, stoppt ein Durchlauf nach 10.000 Blockausführungen oder einer Stunde. Durchläufe, die Webhooks starten, stoppen nach zwei Minuten.

Auf dieser Seite