Skip to content
Content
Skill

/canvas-create

Create new Obsidian Canvas files — blank with a starter structure, or from one of 12 template archetypes (presentation, flowchart, mind-map, gallery, dashboard, storyboard, knowledge-graph, mood-board, timeline, comparison, kanban, project-brief). Handles directory creation,

From plugin
claude-canvas
2478 skills3 agents1 command1 hook
Install
$ npx -y skills add AgriciDaniel/claude-canvas --skill canvas-create --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/canvas-create

Context preview

The summary Claude sees to decide when to auto-load this skill.

Create new Obsidian Canvas files — blank with a starter structure, or from one of 12 template archetypes (presentation, flowchart, mind-map, gallery, dashboard, storyboard, knowledge-graph, mood-board, timeline, comparison, kanban, project-brief). Handles directory creation,

SKILL.md

canvas-create.SKILL.md
name: canvas-create
description: >
  Create new Obsidian Canvas files — blank with a starter structure, or from
  one of 12 template archetypes (presentation, flowchart, mind-map, gallery,
  dashboard, storyboard, knowledge-graph, mood-board, timeline, comparison,
  kanban, project-brief). Handles directory creation, slug generation, and
  starter zone setup.
  Triggers on: canvas create, create canvas, new canvas, canvas new, start canvas.
user-invocable: false

canvas-create: Create New Canvases

---

Operations

Blank Canvas (`/canvas create [name]`)

1. Slugify the name: lowercase, spaces to hyphens, strip special chars. 2. Determine canvas directory (see canvas orchestrator for context detection). 3. Create `[canvas_dir]/[slug].canvas` with starter structure:

{
  "nodes": [
    {
      "id": "zone-default",
      "type": "group",
      "label": "General",
      "x": -400, "y": -140, "width": 800, "height": 400, "color": "4"
    },
    {
      "id": "title",
      "type": "text",
      "text": "# [Name]\n\nDrop images, PDFs, and notes here.",
      "x": -400, "y": -300, "width": 400, "height": 120, "color": "6"
    }
  ],
  "edges": []
}

Note: Groups MUST come before content nodes in the array (z-index ordering — groups render behind content).

4. Report: "Created [canvas_dir]/[slug].canvas. Open it in Obsidian to view."

Templated Canvas (`/canvas create [name] from [template]`)

1. Validate template name against the 12 archetypes. 2. If no template name given or unclear, show available templates:

presentation   — Slide deck (1200x675, Advanced Canvas)
flowchart      — Process flow (Sugiyama/dagre layout)
mind-map       — Radial center-out expansion
gallery        — Grid of image nodes
dashboard      — Metric cards + charts + zones
storyboard     — Linear scene cards + script annotations
knowledge-graph — Force-directed entity map
mood-board     — Asymmetric image grid
timeline       — Horizontal event sequence
comparison     — Side-by-side columns
kanban         — Column zones (Todo/Doing/Done)
project-brief  — Hero zone + objectives + deliverables

3. Ask the user for template-specific parameters (title, number of items, color scheme). 4. Delegate to canvas-template skill for instantiation. 5. **MANDATORY: Replace ALL placeholder text** in every node with real, relevant content based on the title and topic. This is not optional:

  • Read the generated canvas JSON
  • For each text node, replace generic text ("Describe this step", "YYYY-MM-DD", "Value: 0") with real content relevant to the canvas title
  • Use the Edit tool to update each node's `text` field
  • This is the difference between a skeleton and a finished canvas

6. Run `python3 scripts/canvas_validate.py <path>` to verify validity. 7. Report the created canvas with node/zone counts.

---

Slug Generation

import re
def slugify(name):
    slug = name.lower().strip()
    slug = re.sub(r'[^a-z0-9\s-]', '', slug)
    slug = re.sub(r'[\s]+', '-', slug)
    slug = re.sub(r'-+', '-', slug)
    return slug.strip('-')

---

Directory Rules

  • Vault mode (`wiki/canvases/` exists): create there, media to `_attachments/images/canvas/`
  • Standalone mode: create in `.canvases/`, media to `.canvases/assets/`
  • Create the directory if it doesn't exist.
  • Never overwrite an existing canvas without asking the user.
Read more
Ships withclaude-canvas

AI-orchestrated visual production for Obsidian Canvas. Create presentations, flowcharts, mood boards, knowledge graphs, and galleries with intelligent layout and AI-generated content.

Get the whole plugin

Other skills on claude-canvas.