Variables
Templates (${…} in any text field) and conditions read the run’s variables. The Insert… menu lists exactly these for the step you are editing, with titles and types, so this page is for reading YAML rather than for writing it from memory.
The subject
Every automation gets a prelude step, __subject, that resolves the node the run is about.
| Expression | |
|---|---|
steps.__subject.subject.<field> | A property of the subject, by its schema name: title, description, from_address, … |
steps.__subject.subject_path | Its path. Always a string; empty when it could not be resolved (a deleted node). |
steps.__subject.workspace | Its workspace. |
steps.__subject.subject_type | Its node type. |
steps.__subject.subject_updated_by | Who wrote the change that started the run. |
steps.__subject.http_body | For a URL trigger: the request body. |
Step outputs
| Step kind | Where its answer is |
|---|---|
| Run a function | steps.<id>.<field> — the function’s return value is the step’s output; there is no extra level. steps.read.body, steps.file.category_label, steps.draft.outbound_path. |
| Ask an agent (plain) | steps.<id>.response — the text. |
| Ask an agent (structured) | steps.<id>.structured_output.<field> — the fields you defined; response still holds the raw text. |
| Ask an agent (chooses) | steps.<id>.routed_to, steps.<id>.reasoning, steps.<id>.confidence. |
| Ask an agent (competition) | steps.<id>.response (the winner’s), winner, confidence, confident, reasoning, rounds, answers, models. |
| Ask a person | steps.<id>.action — the value of the chosen option; steps.<id>.response — anything else they entered. |
| Talk it through | steps.<id>.result.<field> — the structured result the conversation ended with. |
| Call a URL | steps.<id>.status, steps.<id>.body, steps.<id>.headers. |
Save the answer as (output_key) on a step republishes its primary value under a name of your own: steps.classify.verdict.
Counters
| Expression | |
|---|---|
visits.<id> | How many times the run has entered the step — 1 on the first pass. The bound for every loop: visits.draft < 3. Engine retries after a failure count; a step coming back with its result does not. |
Rendering
- A template that names something missing renders empty; it does not fail the step. Check the run when a prompt looks short.
- Objects and arrays render as JSON. For prompts, prefer the text forms a step provides (
thread_text,attachments_text,listing). - Conditions are not templates: write
steps.review.action == 'send', not${steps.review.action} == 'send'.
Pilot documentation. Studio is in a partner pilot. Screens and YAML shown here are current as of the version noted on each page; tell your Maravilla contact when something does not match what you see.