Author and edit a Grida `.canvas` board — a `.canvas.json` manifest plus document files (references, generated images, notes) placed on an infinite canvas. Use when working on a `.canvas` bundle or arranging visuals/design work spatially. For a linear deck/presentation, use the `slides` skill instead.
75
92%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
A .canvas is a Grida design board — a directory bundle, not a single
file. You work it like any other files: with read_file / write_file /
edit_file (no special canvas tool). It is the durable, spatial home for a
piece of work: reference images, generated outputs, and notes, arranged on an
infinite canvas. Prefer a .canvas board for freeform visual/design work; for
a linear deck / presentation / pitch / slideshow, use the slides skill.
.canvas (e.g. poster.canvas/)..canvas.json (the manifest) holds the STRUCTURE: which documents are on the
board, their placement, order, and the editor mode.src.src is required per document):
{
"editor": "board",
"documents": [
{
"src": "https://…/ref.jpg",
"id": "ref1",
"layout": { "x": 0, "y": 0, "w": 480, "h": 320 }
},
{
"src": "outputs/hero.png",
"id": "hero",
"layout": { "x": 520, "y": 0, "w": 768, "h": 512 }
}
]
}editor: "board" = freeform infinite canvas (placement via layout).
editor: "slides" = linear deck (order) — see the slides skill.layout is { x, y, w, h, z? } in world space (z = paint order, optional).
A document with no layout is unplaced — the host positions it; set a
layout to place it deliberately..canvas (e.g. poster.canvas/); a plain folder, or files loose in the
workspace root, is NOT a board and won't open. Then write_file its
.canvas.json and each document file INSIDE that folder. To add to an existing
board, read_file .canvas.json first (preserve version/$schema/editor
and any unknown fields), then write the FULL updated manifest back.src may be a URL (a pointable reference — a picked library
image, used as-is, no download) OR a file path inside the bundle. Both are
first-class placed documents.cp <scratch>/image-….png <board>.canvas/outputs/hero.png — then add a
document whose src is that bundle-relative path. (A src can point at any
file the host can read, but a file inside the bundle is the durable, portable
choice.)layout (and document order) in the
manifest. The human can also drag pins directly — re-read .canvas.json
before editing so you don't clobber their changes (last write per file wins).surface_open immediately
with the workspace-rooted .canvas bundle directory (for example,
/poster.canvas), then continue building and polishing it while the user can
watch. Intentionally use a lightweight initial composition instead of
authoring the finished board before opening it. Do not wait for all content,
assets, polish, preview generation, exhaustive validation, or task
completion..canvas.json manifest..canvas bundle itself is mounted as / in a dedicated file
surface, it is already presented; do not call surface_open just to reopen
it.surface_open after
every write.surface_list_open only when the current host surface state is materially
useful. It is not required before surface_open.2e0d276
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.