Dokumentation

Code-Steps

Der code_step-Knoten führt benutzerdefinierte Logik in einer Starlark-Sandbox aus — frei editierbar, begrenzt durch eine Werkzeug-Allowlist.

Code-Steps (code_step)

Manche Logik ist zu spezifisch für einen compute-Operator, aber zu deterministisch, um einen LLM-Agent zu rechtfertigen: Abgleiche aus mehreren Quellen, maßgeschneiderte Geschäftsberechnungen, exotische Normalisierungen. Für diese Fälle führt der code_step-Knoten Code innerhalb einer Sandbox aus, ohne LLM-Aufruf und mit vorhersehbarer Ausgabe.

Der Code wird direkt bearbeitet, wie jedes andere Konfigurationsfeld, und läuft, sobald er gespeichert wird.

Das Ausführungsmodell

code_step führt Starlark aus — einen für Isolation entworfenen Python-Dialekt: kein Dateisystemzugriff, kein Netzwerk, keine beliebigen Imports, deterministisch, durch ein Zeitbudget begrenzt. Der Code sieht nur:

  • Die Eingaben, die Sie ihm explizit zuordnen (input_paths).
  • Die Werkzeuge, die Sie ihm aufzurufen erlauben (allowed_tools).

Alles andere ist außer Reichweite. Ein Code-Step kann nicht auf eine Ressource zugreifen, die Sie ihm nicht übergeben haben.

Konfiguration

FeldZweck
CodeDer ausgeführte Starlark-Quellcode, direkt bearbeitet.
Eingaben (input_paths)Variable → Selektor-Zuordnung. Nur diese Kontextschlüssel werden dem Code bereitgestellt. Interne Schlüssel (_*) werden abgelehnt.
Werkzeug-AllowlistDie über tool(name, args) aufrufbaren Werkzeuge. Jeder Aufruf erbt die eigenen Schutzmechanismen des Werkzeugs (SSRF-Schutz, Abrechnung, Audit, Killswitch).
AusgabeschlüsselWo das Ergebnis im Kontext abgelegt wird. Nachgelagerte Knoten lesen diesen Schlüssel.
AusführungsbudgetZeitobergrenze (ms), serverseitig gedeckelt. Ein Step, der sie überschreitet, wird unterbrochen.

Wo die Sicherheitsgrenze liegt

Die Sprache ist nicht die Bedrohung: Starlark ist von Grund auf in einer Sandbox — von sich aus kann es weder eine Datei lesen, das Netzwerk erreichen noch endlos schleifen. Reine Berechnung ist harmlos.

Die einzige echte Fähigkeit ist die tool()-Brücke, und sie ist durch die zur Laufzeit durchgesetzte Allowlist begrenzt: Der Code kann nur die von Ihnen aufgelisteten Werkzeuge aufrufen, und jedes trägt seine eigenen Schutzmechanismen (SSRF-Schutz, Abrechnung, Audit, Killswitch). Genau dort — bei der Wahl der Werkzeuge — legen Sie fest, was ein Step tun darf.

Eine leere Allowlist = keine Fähigkeit zu Seiteneffekten: Der Step berechnet lediglich über seine Eingaben und produziert eine Ausgabe.

Wann verwenden

  • Ja: deterministische Logik, die Sie präzise beschreiben können, die aber über die integrierten compute-Operationen hinausgeht (mehrere Listen abgleichen, zusammengesetzte Geschäftsregeln, proprietäre Formate).
  • Nein: ein einfacher Filter, eine Aggregation oder Projektion → ein compute-Operator genügt.
  • Nein: eine Aufgabe, die Urteilsvermögen oder offenes Schreiben erfordert → das ist ein Agent, kein Code.