Steps: Core Actions
Last validated: 2026-05-14
This page covers step primitives that perform actions, assign values, and emit outputs.
do
Executes a tool call.
do "Fetch source data" with llm
prompt = "Analyze {project}"
system = "You are a research synthesizer."
-> source_analysisSyntax:
do "Label" with tool_name
input_name = expr
input_name2 = expr
on error: retry 3
-- or: on error: fallback other_tool { key = expr }
-- or: on error: ignore
-> binding_nameStreaming binding is also supported:
do "Stream chunks" with stream_tool
query = topic
->> chunk_streamNotes:
- Tool name can be identifier or
llm. - Inputs are free-form key/value expressions.
mode = "local"/mode = "cloud"is treated as normal input key.
Error Recovery In do
Supported on error: forms:
do "Primary call" with http_request
url = url
on error: retry 5
-> resultdo "Primary call" with llm
prompt = prompt
on error: fallback echo { message = "fallback path" }
-> resultdo "Best effort" with optional_tool
payload = data
on error: ignore
-> maybe_resultlet
Assigns expression result into context.
let counter = counter + 1
let is_ready = status == "ready" and retries < 3emit
Produces final (or intermediate) structured output record for thread results.
emit "Done"
status = "ok"
summary = report.textMultiple emit steps are allowed; terminal result shape depends on runtime accumulation behavior and latest outputs.
yield
Emits stream records during execution, typically used with stream schema and pipe/each loops.
yield "Embedding Batch"
embedding = embedding.message
batch_index = fileUse yield for incremental consumption; use emit for final summary payload.
send
Dispatches payload to a named channel.
send "Notify Ops" via "slack"
channel = "#alerts"
text = "Pipeline completed"Syntax:
send "Label" via "channel_name"
field = expr
field2 = exprSection Markers
Section separators improve readability and are parsed as section steps:
### Phase 1: Discovery ###You can use them to make long scripts easier to scan without changing data behavior.
Binding Arrows
Bindings attach step outputs into context.
-> name: collect output to variable->> name: stream-forward binding (supported ondoandpipe)
Example:
do "Call API" with http_request
url = url
-> response