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:
| Variable | Description |
|---|---|
BW_WORKSPACE | Path to your workspace root |
BW_ELEMENT_ID | The frame element being refreshed |
BW_CANVAS_ID | The 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.
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.