Concept

Frames

Interactive, sandboxed containers for dashboards and custom UIs.

What are frames?

Frames are the most powerful element type on the canvas. Each frame is a sandboxed iframe that can hold any HTML and JavaScript content. Your agent writes the code, Jetro renders it inside the frame. No manual coding needed on your end.

Most things your agent builds end up as frames. Dashboards, charts, interactive tables, scoring models, sector comparisons, valuation tools. If it needs interactivity or visual richness, it’s a frame.

Sandboxed and safe

Each frame runs in complete isolation. It cannot access your filesystem, read your environment variables, or interfere with other frames. This is by design. You get the power of arbitrary HTML/JS without the risk.

The __BW SDK

Frames aren’t just static HTML. They have access to a built-in SDK called __BW that lets them:

  • Query your local database with SQL (DuckDB under the hood)
  • Read workspace files like images, data exports, and configs
  • Load assets such as fonts and stylesheets
  • Store and retrieve data with persistent key-value storage

This is what makes frames so useful. They can pull live data and render it however your agent decides.

Live data updates

Frames can receive live data through refresh bindings. When a binding is set up, Jetro periodically pushes fresh data into the frame. The frame re-renders automatically. This is how live dashboards work. See the Live Refresh concept for details.

Shareable

Any frame can be shared as a live web report. Recipients get a URL that works in any browser. No extension required.

How they get created

You just ask your agent. Say “build me a revenue comparison chart for these three companies” and the agent uses the bw_render tool to create a frame on your canvas with the chart inside it. The agent handles the HTML, the data fetching, and the layout.