gridaco/grida/dotcanvas
- community
Checking that the SKILL.md file is still in the repository.
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.
Install
npx vskill@latest install gridaco/grida/dotcanvasSKILL.md
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.
Structure
- The bundle is a folder whose name ends in
.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.
- Each document's CONTENT is a separate file (or a URL) referenced by its
src. - Manifest shape (only
srcis required per document):
``json { "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 vialayout).
editor: "slides" = linear deck (order) — see the slides skill.
layoutis{ 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.
Working pattern
- To start, make the bundle folder first — a NEW directory whose name ends
in .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.
- A document's
srcmay 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.
- To place a generated image (or any produced file) on the board:
materialize it into the bundle, then reference it. Copy it from your scratch dir into the bundle with the shell — e.g. 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.)
- To move / resize / reorder, edit the
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).
Show the result
- Treat presentation as the first production milestone, not the final
"validate and open" step. For a new board, establish a meaningful renderable checkpoint early: the manifest references at least one existing, valid document with a basic visible composition. Call 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.
- Never open an empty bundle or a broken manifest. Open only when the manifest
references at least one existing, renderable document. Pass the bundle directory, never its .canvas.json manifest.
- For an existing primary board, open it after reading its manifest and before
substantial edits.
- If the
.canvasbundle itself is mounted as/in a dedicated file
surface, it is already presented; do not call surface_open just to reopen it.
- Treat presentation as auxiliary: continue regardless of the result, never
retry based on presentation status, and do not call surface_open after every write.
- Use
surface_list_openonly when the current host surface state is materially
useful. It is not required before surface_open.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/dotcanvas/SKILL.md
Popularity
- Repository stars
- 2,686
- Repository forks
- 150
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/gridaco/grida/dotcanvas)