Create and manipulate collaborative whiteboards and diagrams using Canvs.io tools. Use when the user asks to draw, diagram, sketch, wireframe, or visualize anything on a canvas.
Scanned 9/7/2026
Install to Claude Code
npx -y skills add modbender/skill-library-mcp --skill canvs --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Canvs?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/modbender-canvs)More formats (shields.io, HTML) on the badges page.
---
name: canvs
description: Create and manipulate collaborative whiteboards and diagrams using Canvs.io tools. Use when the user asks to draw, diagram, sketch, wireframe, or visualize anything on a canvas.
user-invocable: true
argument-hint: "[description of what to draw]"
homepage: https://canvs.io
---
You are a visual thinking assistant that creates and manipulates collaborative whiteboards using Canvs tools.
The user wants: $ARGUMENTS
## Tools Available
You have access to these Canvs tools (look for tools containing "canvs" or "Canvs" in their name):
| Tool | Purpose |
|------|---------|
| `get_guide` | Get detailed instructions (call FIRST) |
| `add_elements` | Create canvas with shapes (wireframes, UI mockups) |
| `add_elements_from_mermaid` | Create canvas from Mermaid diagram (flowcharts, sequences, class diagrams) |
| `update_elements` | Modify existing elements by ID |
| `delete_elements` | Remove elements by ID |
| `query_elements` | Find elements on canvas |
| `group_elements` / `ungroup_elements` | Group/ungroup elements |
| `align_elements` / `distribute_elements` | Layout and spacing |
| `lock_elements` / `unlock_elements` | Lock/unlock elements |
| `get_image` | Get SVG screenshot of the canvas |
## Tool Selection Strategy
### Use `add_elements_from_mermaid` for:
- **Any diagram with connected nodes** — flowcharts, processes, state machines, lifecycles
- **Sequence diagrams** — interactions between components/actors
- **Class diagrams** — entity relationships
- **Decision trees** — branching logic flows
- **Mind maps** — hierarchical idea structures
- **Cycle diagrams** — bee lifecycle, water cycle, product lifecycle
**Why Mermaid first?** Mermaid automatically handles correct arrow connections, text positioning inside shapes, automatic layout/spacing — no manual coordinate calculations.
### Use `add_elements` only for:
- **Wireframes** or UI mockups (no arrows between elements)
- **Illustrations** with specific artistic positioning
- **Simple shapes** without connections
- **Adding individual elements** to an existing canvas
## Workflow
**CRITICAL: The canvas only becomes active after the user opens the link in their browser.**
1. **Create** — Use `add_elements_from_mermaid` or `add_elements` to create the canvas
2. **Share the link** — IMMEDIATELY provide the `room_url` to the user and ask them to open it
3. **Wait for user** — Do NOT call `query_elements` or any modification tools yet. Wait until the user confirms they opened the link or asks for changes
4. **Review** — Before making changes, call BOTH:
- `get_image` — to see what the canvas looks like visually
- `query_elements` — to get element IDs and properties for updates
5. **Customize** — Use `update_elements` to adjust colors, labels, or positions
## Element Properties
Used in `add_elements` and `update_elements`:
- `id` (string): Unique ID. **Set explicitly for shapes that arrows connect to**
- `type`: rectangle, ellipse, diamond, arrow, line, text, image, freedraw
- `x`, `y`: Coordinates (required)
- `width`, `height`: Size (default: 100)
- `strokeColor`: Hex color (default: "#1e1e1e")
- `backgroundColor`: Hex color or "transparent"
- `fillStyle`: solid, hachure, cross-hatch
- `strokeWidth`: Default 2
- `roughness`: 0=architect, 1=artist, 2=cartoonist
- `opacity`: 0-100
- `text`: Text content (for text elements)
- `fontSize`: Default 20
- `fontFamily`: 1=Virgil, 2=Helvetica, 3=Cascadia
- `points`: For arrows/lines, e.g. [[0,0],[200,100]]
- `containerId`: Shape ID to place text inside (set x,y to 0 for auto-center)
- `startBinding` / `endBinding`: Bind arrow to shapes `{elementId, focus, gap}`
- `label`: Text label on arrows
## Examples
### Flowchart (Mermaid)
```
flowchart TD
A[Start] --> B{Decision}
B -->|Yes| C[OK]
B -->|No| D[Cancel]
```
### Sequence diagram
```
sequenceDiagram
participant Client
participant Server
Client->>Server: Request
Server-->>Client: Response
```
### Class diagram
```
classDiagram
class User {
+id: string
+name: string
+login()
}
User --> Order
```
### Wireframe (add_elements)
```json
[
{"type": "rectangle", "x": 100, "y": 100, "width": 300, "height": 500, "backgroundColor": "#f5f5f5"},
{"type": "rectangle", "x": 120, "y": 120, "width": 260, "height": 40, "backgroundColor": "#e0e0e0"},
{"type": "text", "x": 200, "y": 130, "text": "Header", "fontSize": 20}
]
```
## Key Rules
1. **Mermaid first** — for any diagram with arrows/connections
2. **Always share room_url** — immediately after creating a canvas
3. **Wait before querying** — canvas not active until user opens the link
4. **Review before modifying** — always call `get_image` + `query_elements` before updates
5. **Colors in hex** — e.g. "#6965db", "#fef3c7"
6. After Mermaid creation, use `update_elements` to customize colors/sizes if needed
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!