Concept

Live Refresh

Keep canvas elements up to date automatically.

How it works

You (or your agent) attach a “refresh binding” to any frame element on your canvas. This binding tells Jetro how to fetch fresh data and how often to do it. The frame then updates on its own, no manual intervention needed.

There are two types of bindings.

Script bindings

A Python script runs on a timer. Say, every 2 minutes. The script fetches data, does whatever processing you need, and outputs JSON. That JSON gets pushed into the frame. The frame re-renders automatically.

The script has access to environment variables so it knows its context:

VariableDescription
BW_WORKSPACEPath to your workspace root
BW_ELEMENT_IDThe frame element being refreshed
BW_CANVAS_IDThe parent canvas ID

Scripts have a 30-second timeout. If a run takes longer, it gets skipped and the next cycle tries again.

Prompt bindings

Instead of writing a script, you give the agent a prompt. On each refresh cycle, the agent re-runs the prompt and updates the frame with the result. This is great for things like market summaries or news digests where you want AI-generated content that stays current.

Minimum interval

Prompt bindings have a minimum interval of 5 minutes. Each cycle uses an LLM call, so shorter intervals would burn through your quota quickly.

The LIVE badge

When a frame has an active binding, it shows a small “LIVE” badge in the corner. You can see at a glance which elements are auto-updating.

Ephemeral by default

Live data shows up in the frame but does not get written to your saved canvas state. This keeps your canvas files clean. When you reopen the canvas, the binding restarts and fresh data flows in.

Background daemon

If you close your editor, a standalone daemon process can keep refresh bindings running in the background. Your dashboards stay current even when you’re not actively working.