This document describes the current product model for the canvas. Earlier drafts described a transition from a panel system to a canvas. That transition has effectively happened; the current product language is tile.
Agent Studio is an infinite canvas made of tiles.
Three concepts matter:
Files: durable workspace artifactsTiles: canvas views over files or derived dataChat: the agent interface that can work globally or in the context of selected tiles
The key rule is:
Files are the source of truth. Tiles are views.
If the agent says it created something durable, it should exist as a real file in the workspace first.
The workspace shell has three layers:
-
Workspace FilesA compact file shelf that surfaces durable artifacts. -
CanvasThe main infinite canvas where tiles live, move, group, minimize, and connect. -
ChatThe primary conversation surface, docked on wide screens and tabbed on narrower ones.
On smaller widths, canvas and chat switch through a segmented tab control instead of overlapping.
Current user-facing tile categories:
- markdown tiles
- table/CSV tiles
- chart tiles
- cards tiles
- PDF tiles
- HTML/file preview tiles
- utility tiles such as the workspace files view
Some tiles are file-backed and some are derived.
Examples:
report.mddata.csvchart.htmlnotes.pdffigure.png
These should support actions like:
Go to TileShow in Workspace FilesDownload File
Examples:
- a chart built from a table
- cards built from search results
- inline markdown generated as a summary
These should support actions like:
Export DataSave Snapshot as PNG
The intended flow is:
- The agent creates or updates files in the workspace.
- The files appear in
Workspace Files. - Files can be shown on the canvas as tiles.
- The user can inspect, compare, group, or download them.
This is why a request like “make me a ZIP” is treated as file creation, not as a special tile export.
There are two main chat modes:
-
Global chatWorks against the workspace generally. -
Scoped chatWorks against the selected tile or selected tile group.
The main composer can inherit selected-tile scope. Contextual tile chat is still useful for tightly local reasoning.
| Action | Result |
|---|---|
| Drag background | Pan canvas |
| Scroll / pinch | Zoom |
| Click tile | Select tile |
| Shift-click | Multi-select |
| Drag tile | Move tile |
| Drag edge | Resize tile |
| Double-click tile/header | Open contextual tile chat or focus behavior, depending on tile/action |
| Minimize | Send tile to dock |
| Maximize | Expand tile |
| Action | Result |
|---|---|
| Show on Canvas | Create or reveal a tile for that file |
| Go to Tile | Focus the existing tile |
| Download File | Download the durable artifact |
| Show in Workspace Files | Reveal the file in the shelf/context |
Tiles can be:
- grouped
- renamed as groups
- moved together
- queried as a group
Connections represent provenance or follow-on relationships between tiles. They help explain how one tile led to another, but they are secondary to the file-first model.
Wide screens:
- canvas and chat are visible together
Compact screens:
- canvas and chat switch via tabs
- the header compresses
- the files shelf remains accessible from the canvas view
The app should never rely on overlapping chat and canvas panes.
Use these terms consistently in user-facing copy:
tile, notpanelfile, notdownload, for the artifact itselfShow on Canvas, notOpen as TileGo to Tile, when a visible tile already exists
Internally, some state still uses panels in code and storage. That is an implementation detail, not product language.
Conceptually, the canvas stores:
interface CanvasState {
viewport: { x: number; y: number; zoom: number };
tiles: TileState[];
groups: TileGroup[];
connections: TileConnection[];
}In current persisted app state, this still maps onto uiState.panels, groups, and connections.
- spatial first
- files first
- truthful actions
- compact artifact surfacing
- strong desktop experience with usable compact layouts
- one coherent vocabulary
- When should a generated result stay inline versus become a real file automatically?
- Which derived tiles should get first-class export actions beyond snapshots?
- How far should tile connections go visually before they add clutter?
- What is the right mobile floor for the canvas experience?