Every screen in your repo, on one canvas.
A VS Code extension for the HTML you design in. List your pages and previews in one file, see each one at a real device width, draw on it, and hand the picture to your agent.

A screen is more than one picture.
Sign in has the empty form you land on and the one that comes back with a wrong password. Each state is listed under its screen, the way Storybook lists stories under a component.
Have the page respond to the state. Match CSS on html[data-wb-state="error"], keep an element only in some states with data-wb-state-only="error", or fill in a value with data-wb-set-error="value=…". Your pages need no scripts added.
- label: Sign in
src: pages/sign-in.html
states:
- id: default
label: Default
- id: error
label: Wrong password
Draw on the live page. Hand it to your agent.
Boxes, arrows, scribbles, and pinned comments sit above the running screen, so you can keep using it with Select. Select a mark to move it, nudge it with the arrow keys, or delete it with Delete.
In VS Code, Copy handoff saves the screenshot to the project’s ignored .canonic/.handoffs/ folder, clears the markup, and copies a written account of every mark to the clipboard. The account says what’s under each mark and which file the screen comes from. Paste it into any agent conversation.

Design and the real build, one click apart.
Declare where the code runs (a Storybook, a dev server, staging, or a booted iOS Simulator) and a lens switcher appears in the toolbar: Design first, then each implementation the screen has. A lens shows it in the same frame, at the same width, under the same marks.
The choice stays as you move between screens, and the address carries it, so a copied link opens the same view. A project can also configure a start command and a readiness check for a Storybook or local server; in a trusted VS Code workspace, Workbench starts it in a terminal only when the check fails.
#pages/sign-in.html:error@393~stagingpages/sign-in.html | the screen’s design file |
:error | the state, left out for the default |
@393 | the frame: a device width, fit, or a resizable size |
~staging | the lens, left out for the design |
One file is the whole integration.
No copy of the tool in your project, and no scripts added to your pages. Workbench only turns on in a folder with a workbench.yaml. Delete that file and nothing else remains in your project.
name: Acme
sections:
- name: Pages
icon: file-text
items:
- label: Sign in
src: pages/sign-in.htmlGet Canonic Workbench.
One .vsix file per platform. Choose the one that matches your computer.
- 01Install the .vsix
In VS Code, open the Extensions view, click ⋯, and choose Install from VSIX…. Or run:
code --install-extension <file>.vsix - 02Reload VS Code
Run Developer: Reload Window from the Command Palette.
- 03Add workbench.yaml
Create it at the root of your project, like the example above.
- 04Open the canvas
Workbench appears in the activity bar, and opens the canvas.


