From obsidian
Invoke to create or update an Obsidian canvas that visually maps a set of notes as linked nodes. Handles node layout, edge creation, and updates to existing canvases. Triggers: "create a canvas", "visualise these notes", "make a canvas map", or automatically after obsidian-writer finishes a topic with 3+ notes.
npx claudepluginhub mohd-bilal/obsidian-claude-plugin --plugin obsidianThis skill uses the workspace's default tool permissions.
- Only when a topic folder has **3 or more notes** (index + at least 2 deep dives).
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Automates semantic versioning and release workflow for Claude Code plugins: bumps versions in package.json, marketplace.json, plugin.json; verifies builds; creates git tags, GitHub releases, changelogs.
{Folder}/{Topic}.canvascanvas_read to check if {Folder}/{Topic}.canvas exists.| Node | Position | Size |
|---|---|---|
| Index note | Center {x: 0, y: 0} | 400 × 200 |
| Deep-dive 1 | {x: 500, y: -300} | 250 × 130 |
| Deep-dive 2 | {x: 500, y: 0} | 250 × 130 |
| Deep-dive 3 | {x: 500, y: 300} | 250 × 130 |
| Deep-dive N | Continue 300px apart vertically | 250 × 130 |
Adjust x-offsets for very large sets (wrap into 2 columns at 6+ deep dives).
Call canvas_create with:
{
"path": "Folder/Topic.canvas",
"nodes": [
{
"id": "index",
"type": "file",
"file": "Folder/Topic — Index.md",
"x": 0, "y": 0,
"width": 400, "height": 200
},
{
"id": "dive-01",
"type": "file",
"file": "Folder/01 - Subtopic.md",
"x": 500, "y": -150,
"width": 250, "height": 130
}
],
"edges": [
{
"id": "edge-dive-01-index",
"fromNode": "dive-01",
"fromSide": "left",
"toNode": "index",
"toSide": "right"
}
]
}
Edge direction convention: deep-dive → index (deep dives point to their hub). Cross-edges between deep-dives: add only when those notes explicitly wikilink to each other. Label edges only when the relationship is non-obvious.
canvas_read to get current nodes and edges.canvas_update with the full updated JSON.Use short, stable, human-readable IDs:
"index""dive-01", "dive-02", etc."edge-{fromId}-{toId}"| Use | Type |
|---|---|
Linking to a .md note | "file" |
| Free-floating label | "text" |
| Group/section boundary | "group" |
Always use "file" for note nodes in this skill. "text" nodes are only for adding short annotations if helpful.