Agent skill

Obsidian Canvas Boards

by AgriciDaniel in AgriciDaniel/claude-obsidian

Creates, inspects and updates Obsidian JSON Canvas boards in a vault, with text, file, link, group and edge nodes, using safe recoverable edits.

MITAuto-check passedKnowledge Management

Install Obsidian Canvas Boards

skills CLI
$ npx skills add AgriciDaniel/claude-obsidian --skill canvas -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install AgriciDaniel/claude-obsidian canvas --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-obsidian.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/canvas .claude/skills/canvas && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
canvas
GitHub stars
15k
Token cost
~1.4k tokens
SKILL.md length
620 words
Files
2 (incl. references)
Skills in repo
15
Repo updated
First seen
Licence
MIT

At a glance

Creates, inspects and updates Obsidian JSON Canvas boards in a vault, with text, file, link, group and edge nodes, using safe recoverable edits.

  • Works in 5 steps: Read the entire canvas and any catalog… → Preserve unknown JSON fields and… → Draft the requested nodes or edges → …
  • Creating a new canvas board for a project in an Obsidian vault
  • SKILL.md covers Choose the syntax source, Scope, Read-only operations and Draft a mutation, plus 1 more section
  • Calls python3

What it does

A canvas is treated as a vault-scoped JSON Canvas document: reads never change anything, and every requested change goes through one recoverable transaction. The agent finds the installed product root from the skill's own location rather than from the vault or working directory. For format details it prefers a separately installed `json-canvas` skill from `kepano/obsidian-skills`, and otherwise reads `references/canvas-spec.md`, which follows the open JSON Canvas 1.0 standard.

Scope rules are strict: boards live under `wiki/canvases/`, with `main.canvas` as the default; paths inside nodes must be vault-relative, rejecting absolute paths, `..` traversal and symlink escapes; and the skill never downloads or copies assets. Link nodes accept HTTPS URLs only, and because opening one in Obsidian may fetch preview metadata from that host, the agent discloses this and confirms, or uses a text node. Status requests report node counts, group labels, broken edges and missing file targets without creating anything.

When your agent uses it

  • Creating a new canvas board for a project in an Obsidian vault
  • Adding vault notes, media or links to an existing .canvas file
  • Checking a canvas for broken edges or missing file targets
  • Laying out groups and zones as a visual map

Example prompts

  • “Create a canvas for my thesis research with groups for sources, methods and open questions.”
  • “Add the notes in wiki/concepts to the main canvas as file nodes.”
  • “Check the status of my canvases and report any broken edges.”
  • “Put this article link on the canvas as a text node instead of a link node.”

Requirements

  • An Obsidian vault
  • The claude-obsidian plugin installed, including its `scripts/claude-obsidian.py` core

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Read the entire canvas and any catalog target. Record each expected SHA-256,
  2. Preserve unknown JSON fields and existing array order. The node array is
  3. Draft the requested nodes or edges
  4. Position new content deliberately. A group is a visual container, not a
  5. Serialize valid UTF-8 JSON with top-level nodes and edges arrays.

What it can do on your machine

Read from SKILL.md and the folder at commit 32ac5a0. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • jsoncanvas.org

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Obsidian Canvas Boards loads about 1.4k tokens when it runs, and up to ~3.6k if it reads all its reference files. Until then it costs about 77 tokens; SKILL.md has 620 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~77
When it runs · the whole SKILL.md, loaded when a task matches
~1.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from AgriciDaniel/claude-obsidian at commit 32ac5a0, republished under its MIT licence (© AgriciDaniel). 620 words, ~1,360 tokens.

Download SKILL.mdSave it as .claude/skills/canvas/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
canvas
description
Create, inspect, and update Obsidian JSON Canvas boards with text, file, link, group, and edge nodes. Use for canvas status, canvas lists, visual maps, zones, spatial layouts, adding vault notes or media to a .canvas file, and requests such as create canvas, add to canvas, or put this on the canvas.

Canvas

Treat a canvas as a vault-scoped JSON Canvas document. Keep reads read-only and route every requested mutation through one recoverable transaction.

Resolve the installed product root from this skill's own location, not from the vault or current working directory:

bash
PRODUCT_ROOT=/absolute/path/to/installed/claude-obsidian
CORE="$PRODUCT_ROOT/scripts/claude-obsidian.py"
test -f "$CORE"

Every ../wiki/references/ link in this file resolves the same way, relative to this skill's own directory under $PRODUCT_ROOT, never relative to the selected vault's wiki/ directory.

Choose the syntax source

Prefer a separately installed kepano/obsidian-skills json-canvas skill for format details. Otherwise read references/canvas-spec.md. The open standard is JSON Canvas 1.0.

Use this skill for vault workflow and transaction safety even when an upstream syntax skill is available.

Scope

  • Resolve the user vault before reading. Never derive it from plugin files.
  • Store boards under wiki/canvases/; use wiki/canvases/main.canvas only as the default when the user did not name a board.
  • Treat wiki/canvases/index.md as an optional catalog. Update it only when a canvas is created, renamed, or removed.
  • Use vault-relative paths in file and background; reject absolute paths, .. traversal, home shortcuts, and paths that escape through symlinks.
  • Reference only files already inside the vault. If an optional capture or media capability is detected, compose with it and consume its returned vault-relative path. Do not assume a particular plugin, command, or session log, and do not download or copy assets in this skill.
  • Use link nodes for URLs. Accept HTTPS URLs only; a link node does not grant permission to fetch the page. Creating its JSON makes no request, but opening it in Obsidian may fetch Open Graph metadata from that URL's host. Disclose that render-time egress and confirm it is acceptable; otherwise use a text node containing the URL.

Read-only operations

For status or list requests, parse the selected .canvas files and report node counts, group labels, broken edge endpoints, and missing vault-relative file targets. If the default canvas is absent, report that fact and offer a creation preview; do not create it during a status request.

Show full SKILL.md (296 more words)Show less

Draft a mutation

  1. Read the entire canvas and any catalog target. Record each expected SHA-256, or null for a file that must be absent.
  2. Preserve unknown JSON fields and existing array order. The node array is bottom-to-top z-order.
  3. Draft the requested nodes or edges:
    • Give every node and edge a unique ID. Prefer a random 16-character lowercase hexadecimal ID and verify it is unused.
    • Require integer x, y, width, and height values for every node.
    • Use text, file, link, or group exactly as defined by JSON Canvas.
    • Require every fromNode and toNode to reference an existing or newly drafted node.
  4. Position new content deliberately. A group is a visual container, not a parent. Use 20 px inner padding and 40 px gaps, wrap to a new row when needed, and preview any group expansion.
  5. Serialize valid UTF-8 JSON with top-level nodes and edges arrays.

Minimal node examples:

json
{
  "nodes": [
    {
      "id": "6f0ad84f44ce9c17",
      "type": "text",
      "text": "# Research map\n\nA concise orientation card.",
      "x": 0,
      "y": 0,
      "width": 400,
      "height": 180
    },
    {
      "id": "a1b2c3d4e5f67890",
      "type": "file",
      "file": "wiki/concepts/Contextual Retrieval.md",
      "x": 460,
      "y": 0,
      "width": 400,
      "height": 240
    }
  ],
  "edges": []
}

Use file plus optional subpath: "#Heading" for notes, images, PDFs, and other vault files. Use url only on a link node. Escape line breaks in JSON strings as \n, not as literal backslash-plus-n text.

Preview and apply

Validate before showing the preview:

  • JSON parses and uses supported node types.
  • IDs are unique and edge endpoints exist.
  • dimensions are positive integers;
  • file and background paths are safe, vault-relative, and present;
  • new nodes do not unintentionally overlap or overflow their requested group.

Build one claude-obsidian.transaction.v1 bundle with operation type canvas. Include the canvas and the catalog in that same bundle when the catalog changes. Read operation-transactions.md, then inspect the bundle before applying it:

bash
python3 "$CORE" transaction inspect BUNDLE --vault VAULT
# Set APPROVAL_SHA256 to the inspect result's approval_sha256 after review.
python3 "$CORE" transaction apply BUNDLE --vault VAULT \
  --approved-plan-sha256 "$APPROVAL_SHA256"

For removals, replacements, renames, or other destructive changes, obtain explicit consent after presenting the preview. Report the operation ID, exact changed paths, board name, node IDs, and final positions. Do not commit Git.

© AgriciDaniel, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in skills/canvas of AgriciDaniel/claude-obsidian.

  • SKILL.md
  • references/canvas-spec.md

Open the folder on GitHubat commit 32ac5a0

Compare with similar skills

Obsidian Canvas Boards next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Obsidian Canvas Boards compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Obsidian Canvas Boards this skillAgriciDaniel/claude-obsidian15k—~1.4kAutomated safety check: PassMIT
Subscription Videos MetadataEfficientStreet/youtube-subscriptions-ingest178—~7.1kAutomated safety check: NotesMIT
My LLM WikiMartinLwx/dotfiles140—~2.7kAutomated safety check: PassNone
Obsidian Knowledge BuilderMichael-OvO/obsidian-knowledge-agent205—~917Automated safety check: PassMIT
NexusProfSynapse/nexus157—~1.3kAutomated safety check: PassMIT
Obsidian Project Knowledge BaseGalaxy-Dawn/claude-scholar5.7k—~551Automated safety check: PassMIT

Similar skills

  • Subscription Videos Metadata

    EfficientStreet/youtube-subscriptions-ingest

    Pull metadata from YouTube subscription videos into a second-brain vault as a real cross-linked knowledge graph — not just a flat archive.

    178 GitHub stars~7.1k tokensUpdated 1 mo ago
    Knowledge ManagementAuto-check: notes
  • My LLM Wiki

    MartinLwx/dotfiles

    Provides access to the user's personal wiki, including notes, research, project documentation, decisions, and archived knowledge.

    140 GitHub stars~2.7k tokensUpdated yesterday
    Knowledge ManagementAuto-check passed
  • Obsidian Knowledge Builder

    Michael-OvO/obsidian-knowledge-agent

    Turns PDFs, slides, syllabi, papers and transcripts into structured, teaching-quality Obsidian notes, matching how much structure is built to how much the material needs.

    205 GitHub stars~917 tokensUpdated 3 mo ago
    Knowledge ManagementAuto-check passed
  • Nexus

    ProfSynapse/nexus

    Read, search, and edit the user's Obsidian vault (notes, folders, canvas, bases, tasks, memory/workspaces, saved prompts) from the shell via the nexus CLI — no MCP connection needed.

    157 GitHub stars~1.3k tokensUpdated today
    Knowledge ManagementAuto-check passed
  • Obsidian Project Knowledge Base

    Galaxy-Dawn/claude-scholar

    Maintains a project-scoped Obsidian research knowledge base: bootstrapping its folders, routing notes, updating hub, plan and index notes, and linting.

    5.7k GitHub stars~551 tokensUpdated 16 days ago
    Knowledge ManagementAuto-check passed
  • Obsidian Vault Operations

    ballred/obsidian-claude-pkm

    Reads, creates and edits notes in an Obsidian vault while preserving wiki-links, YAML frontmatter, tags and template variables.

    1.9k GitHub stars~652 tokensUpdated 7 mo ago
    Knowledge ManagementAuto-check passed

More from AgriciDaniel/claude-obsidian

All 15 skills in this repo
  • Bounded Autoresearch

    AgriciDaniel/claude-obsidian

    Runs a bounded, source-grounded research loop that drafts a cited dossier and can propose a separately reviewed merge into an Obsidian vault.

    15k GitHub stars~1.6k tokensUpdated 28 days ago
    Auto-check passed
  • Obsidian Wiki Vault Setup

    AgriciDaniel/claude-obsidian

    Sets up or adopts a separate Obsidian knowledge vault through the claude-obsidian core script and routes follow-up work to the right wiki sub-skill.

    15k GitHub stars~1.3k tokensUpdated 28 days ago
    Auto-check passed
  • Obsidian Wiki Log Fold

    AgriciDaniel/claude-obsidian

    Creates a bounded, extractive rollup of recent Obsidian wiki log entries, previewed by default, with one optional apply step and no changes to child pages.

    15k GitHub stars~1.2k tokensUpdated 28 days ago
    Auto-check passed
  • Defuddle Web Page Cleaner

    AgriciDaniel/claude-obsidian

    Plans, and with explicit network consent runs, an external Defuddle extractor that turns an article-like HTTPS page into clean Markdown for later wiki ingestion.

    15k GitHub stars~1.1k tokensUpdated 28 days ago
    Auto-check passed
  • Obsidian Bases Editor

    AgriciDaniel/claude-obsidian

    Explains, drafts and validates Obsidian Bases .base files, building filters, formulas and table, card or list views, and applying edits only through one inspected transaction.

    15k GitHub stars~1.2k tokensUpdated 28 days ago
    Auto-check passed
  • Obsidian Markdown Syntax

    AgriciDaniel/claude-obsidian

    Explains, drafts and validates Obsidian Flavored Markdown such as properties, wikilinks, embeds, callouts and Mermaid, with vault edits applied through approved transactions.

    15k GitHub stars~1.1k tokensUpdated 28 days ago
    Auto-check passed

Works with

Questions about Obsidian Canvas Boards

What does Obsidian Canvas Boards do?

Creates, inspects and updates Obsidian JSON Canvas boards in a vault, with text, file, link, group and edge nodes, using safe recoverable edits. A canvas is treated as a vault-scoped JSON Canvas document: reads never change anything, and every requested change goes through one recoverable transaction. The agent finds the installed product root from the skill's own location rather than from the vault or working directory.

When should I use Obsidian Canvas Boards?

Obsidian Canvas Boards fits situations like: creating a new canvas board for a project in an Obsidian vault; adding vault notes, media or links to an existing .canvas file; checking a canvas for broken edges or missing file targets; laying out groups and zones as a visual map.

How do I install Obsidian Canvas Boards in Claude Code?

Run `npx skills add AgriciDaniel/claude-obsidian --skill canvas -a claude-code`. Or copy the skill folder (skills/canvas in AgriciDaniel/claude-obsidian) into .claude/skills/canvas in your project. Claude Code loads it when a task matches its description.

How do I install Obsidian Canvas Boards in Codex?

Run `npx skills add AgriciDaniel/claude-obsidian --skill canvas -a codex`. Or copy the skill folder (skills/canvas in AgriciDaniel/claude-obsidian) into .agents/skills/canvas in your project. Codex loads it when a task matches its description.

Can I use Obsidian Canvas Boards in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AgriciDaniel/claude-obsidian --skill canvas -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/canvas, .gemini/skills/canvas, .github/skills/canvas and .opencode/skills/canvas in your project.

What does Obsidian Canvas Boards need to run?

Going by SKILL.md and its folder, Obsidian Canvas Boards needs the command-line tools its instructions call (python3). Our summary lists: An Obsidian vault; The claude-obsidian plugin installed, including its `scripts/claude-obsidian.py` core.

Does Obsidian Canvas Boards access the network?

SKILL.md names 1 domain. As links in the text: jsoncanvas.org. This is read from the text; nothing was executed.

Is Obsidian Canvas Boards safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Obsidian Canvas Boards use?

Obsidian Canvas Boards is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Obsidian Canvas Boards use?

About 1.4k tokens (SKILL.md is roughly 5.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.3k tokens, read only when the agent opens those files.

What are the alternatives to Obsidian Canvas Boards?

Skills that share tags, products or a category with Obsidian Canvas Boards: Subscription Videos Metadata (EfficientStreet/youtube-subscriptions-ingest, 178 stars), My LLM Wiki (MartinLwx/dotfiles, 140 stars), Obsidian Knowledge Builder (Michael-OvO/obsidian-knowledge-agent, 205 stars) and Nexus (ProfSynapse/nexus, 157 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Obsidian Canvas Boards?

AgriciDaniel (a GitHub user) maintains it in AgriciDaniel/claude-obsidian, which has 15,420 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on September 10, 2026.

Source: AgriciDaniel/claude-obsidian on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.