Redeo Docs
DocsLukiScript / Timeline & Observability

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:

text
[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:

text
[User] → [Init] → ○ ○ ○ → ○ → [Exit] → ○ ○ ○ → ○ → [Exit] → [Final]
                    eval    sel    R0      eval    sel    R1

The 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.

yaml
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.