Specification
Timeline & Observability
The Studio Timeline gives real-time visibility into stilt execution. Steps opt into the timeline with the timeline property.
Timeline & Observability
The Studio Timeline gives real-time visibility into stilt execution. Steps opt into the timeline with the timeline property.
Timeline Overview
Every stilt run produces a live timeline in Studio. As the stilt executes, nodes appear one by one. Each node is inspectable — click to view its output.
The timeline always has this shape:
[User] → [Init] → (circles...) → [Exit] → [Final Answer]Steps opt into timeline visibility by setting timeline: "circle" or timeline: "init" on the step. Steps without a timeline marker still execute normally but are invisible in the UI — they don't create any nodes in the timeline.
Node Types
Every node in the timeline has a kind, a shape, and content.
User (square) — always the first node. Shows the input message that triggered the stilt run. Created automatically when the run starts.
Init (square) — always created at the start of the timeline, right after the User node. If a step is tagged with timeline: "init", that step's output populates the init node's content — it becomes clickable and shows an initial draft or first processing pass. If no step is tagged, the init node still appears as a visual anchor but stays empty.
Circle — one circle per node in a step marked timeline: "circle". A step with nodes: 5 and timeline: "circle" produces five circles in the timeline. Each circle is clickable and shows that specific branch's output.
Exit (diamond/rhombus) — created each time the exit step completes a loop pass. A single-loop stilt produces one exit node. A 3-loop stilt produces three. The exit node shows the exit step's output for that loop. The final loop's exit node content matches what the API returns.
Final Answer (square) — the last node, showing the stilt's complete output as returned to the caller.
Every node also tracks which loop it belongs to (loop_index), its position within the step (serial), its output text (content), and its status (pending, done, or error).
Loops in the Timeline
Multi-loop stilts repeat the circle and exit pattern for each loop pass. Each set of nodes is tagged with loop_index to indicate which round produced them.
A 2-loop Tree of Thoughts stilt with an evaluate step (3 branches) and a select step produces:
[User] → [Init] → ○ ○ ○ → ○ → [Exit] → ○ ○ ○ → ○ → [Exit] → [Final]
eval sel R0 eval sel R1The first set of circles and the first exit belong to loop 0. The second set belongs to loop 1. The current_loop indicator on the timeline updates as the stilt progresses through rounds.
Invisible Steps
Steps without a timeline property execute normally but create no nodes in the timeline.
Common patterns: candidate generation steps where the evaluations are visible but the raw candidates are not. Data transformation or formatting steps that are purely internal. Branch selection logic where the result flows into the next visible step.
steps:
- id: generate
name: Generate Candidates
type: normal
nodes: "{{knobs.coverage}}"
fields:
- name: Context
type: text
from: input.context
systemPrompt: "Generate candidate answers."
# no timeline property — invisible in Studio
- id: evaluate
name: Evaluate
type: normal
nodes: "{{knobs.coverage}}"
timeline: "circle"
fields:
- name: Candidate
type: ingest
from:
stepId: generate
loopRef: current
systemPrompt: "Score this candidate."The generate step runs and produces outputs, but nothing appears in the timeline. The evaluate step runs next, reads those outputs, and each branch shows up as a clickable circle.