Notebook View
Cell-based interface for exploratory data analysis with inline SQL results, Python output, and charts.
The notebook view provides a cell-based interface for exploratory data analysis. Each agent step becomes an individual cell — SQL query results, Python execution output, and explore commands all display as discrete, manageable units you can review, edit, and re-run.
Accessing the Notebook
There are two ways to open the notebook view:
- Direct URL — Navigate to
/notebookto start a fresh notebook session - From the sidebar — Click the notebook icon on any existing conversation to switch from chat view to notebook view
The notebook displays the same conversation content as the chat view, reorganized into cells.
Cell Types
Query Cells
Each query cell corresponds to an agent tool call or response:
| Cell type | Contents |
|---|---|
| Query result | SQL query, tabular results, and any generated charts |
| Python execution | Python code, stdout/stderr, and rendered charts (matplotlib or Recharts) |
| Explore output | Semantic layer file contents returned by the explore tool |
Cells display their output inline — you can see the SQL that was run, the rows returned, and any visualizations without switching views.
Text Cells
Text cells are freeform markdown annotations that you can insert between query cells. Use them to document your analysis, add headings, or write narrative context around your data exploration.
Text cells support full markdown syntax — headings, lists, bold/italic, code blocks, and links. They render as formatted markdown in preview mode.
To add a text cell:
- Click the Text Cell button in the toolbar above the cells
- Use the keyboard shortcut
Ctrl+Shift+Tto insert after the currently focused cell
Text cells start in edit mode. Press Escape or click the checkmark button to switch to preview mode. Double-click a text cell in preview mode to edit it again.
Cell Operations
Each query cell supports the following actions:
- Run — Execute the cell (or re-execute after editing)
- Edit — Modify the question or prompt that produced the cell
- Copy — Copy cell contents to the clipboard
- Fork — Create a new analysis branch from this cell (see Forking below)
- Delete — Remove the cell from the notebook
- Collapse / Expand — Toggle cell visibility to focus on specific results
Text cells support Edit, Delete, and Drag to reorder.
Re-running Cells
You can edit a cell's question and click Run to re-execute from that point. When you re-run a cell:
- The edited question is sent to the agent
- The agent re-executes from that cell onward
- All subsequent query cells are cleared — they will be replaced by new results
Text cells are not affected by re-running — they are independent annotations.
Reordering Cells
Drag cells to rearrange them in any order using the grip handle on the left side of each cell. Both query cells and text cells can be reordered freely. The display order is independent of execution order — reordering cells does not change the underlying conversation history.
Cell numbers update to reflect the new display position. Keyboard navigation follows display order after reordering.
Forking
Fork from any query cell to explore an alternative analysis direction without losing your existing work.
- Click the fork button (branch icon) on any query cell
- A new conversation is created with the history up to that cell
- You're navigated to the new branch where you can continue independently
- The original notebook is preserved unchanged
When a notebook has branches, a branch selector appears at the top showing all branches. Click any branch to switch between them — each branch maintains its own independent cell history.
Forking requires server-side persistence (an internal database). Without DATABASE_URL configured, the fork button is disabled.
Exporting
Export your notebook as a Markdown or HTML file using the Export dropdown in the toolbar.
Markdown Export
Generates a .md file with:
- Text cells rendered as-is (they're already markdown)
- Query cells as headings with their cell number, followed by response text, SQL in fenced code blocks, Python code in fenced code blocks, stdout output, and result tables as markdown tables
HTML Export
Generates a self-contained .html file with inline CSS styling. The file can be opened in any browser and shared without dependencies. Query results are rendered as styled HTML tables, and code blocks are formatted with monospace styling.
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
ArrowUp / ArrowDown | Navigate between cells |
Enter (cell focused) | Edit the selected cell |
Escape | Cancel edit / switch text cell to preview |
Enter (in editor) | Submit edit (re-run from this cell) |
Shift + Enter | Insert newline in editor |
Ctrl + Shift + Backspace | Delete the selected cell |
Ctrl + Shift + T | Insert a text cell after the selected cell |
Persistence
Cell state is persisted server-side when an internal database is configured (DATABASE_URL). Your notebook state — including cell order, collapsed states, text cell content, and fork metadata — survives page reloads, browser restarts, and device switches.
Browser localStorage is used as a write-through cache for fast loads and offline resilience. Server state takes priority when both are available.
Without an internal database, notebook state falls back to localStorage only. Clearing browser data or switching browsers will remove saved state in this mode.