json-canvas
Creates and edits Obsidian Canvas (.canvas) files with nodes, edges, groups, and layout following JSON Canvas Spec 1.0.
Skill by Vepricov
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/vepricov-json-canvas
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/json-canvas
What's inside
- Skill name
json-canvas- Description
- Creates and edits Obsidian Canvas (.canvas) files with nodes, edges, groups, and layout following JSON Canvas Spec 1.0. Use when the user asks to make a canvas, add or connect nodes, group cards, rearrange a canvas layout, or fix a broken .canvas file.
- License
- MIT
- Instructions
- 241 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- EXAMPLES.md · references/
SKILL.md (first lines)
# JSON Canvas Skill
## File Structure
A canvas file (`.canvas`) contains two top-level arrays following the [JSON Canvas Spec 1.0](https://jsoncanvas.org/spec/1.0/):
```json
{
"nodes": [],
"edges": []
}
```
- `nodes` (optional): Array of node objects
- `edges` (optional): Array of edge objects connecting nodes
## Common Workflows
### 1. Create a New Canvas
1. Create a `.canvas` file with the base structure `{"nodes": [], "edges": []}`
2. Generate unique 16-character hex IDs for each node (e.g., `"6f0ad84f44ce9c17"`)
3. Add nodes with required fields: `id`, `type`, `x`, `y`, `width`, `height`
4. Add edges referencing valid node IDs via `fromNode` and `toNode`
5. **Validate**: Parse the JSON to confirm it is valid. Verify all `fromNode`/`toNode` values exist in the nodes array
### 2. Add a Node to an Existing Canvas
1. Read and parse the existing `.canvas` file
2. Generate a unique ID that does not collide with existing node or edge IDs
3. Choose position (`x`, `y`) that avoids overlapping existing nodes (leave 50-100px spacing)
4. Append the new node object to the `nodes` array
5. Optionally add edges connecting the new node to existing nodes
6. **Validate**: Confirm all IDs are unique and all edge references resolve to existing nodes
### 3. Connect Two Nodes
1. Identify the source and target node IDs
2. Generate a unique edge ID
3. Set `fromNode` and `toNode` to the source and target IDs
4. Optionally set `fromSide`/`toSide` (top, right, bottom, left) for anchor points
5. Optionally set `label` for descriptive text on the edge
6. Append the edge to the `edges` array
7. **Validate**: Confirm both `fromNode` and `toNode` reference existing node IDs
### 4. Edit an Existing Canvas
1. Read and parse the `.canvas` file as JSON
2. Locate the target node or edge by `id`
3. Modify the desired attributes (text, position, color, etc.)
4. Write the updated JSON back to the file
5. **Validate**: Re-check all ID uniqueness and edge reference integrity after editing
## Nodes
Nodes are objects placed on the canvas. Array order determines z-index: first node = bottom layer, last node = top layer.
### Generic Node Attributes
| Attribute | Required | Type | Description |
|-----------|----------|------|-------------|
| `id` | Yes | string | Unique 16-char hex identifier |
| `type` | Yes | string | `text`, `file`, `link`, or `group` |
| `x` | Yes | integer | X position in pixels |
| `y` | Yes | integer | Y position in pixels |
| `width` | Yes | integer | Width in pixels |
| `height` | Yes | integer | Height in pixels |
| `color` | No | canvasColor | Preset `"1"`-`"6"` or hex (e.g., `"#FF0000"`) |
### Text Nodes
| Attribute | Required | Type | Description |
|-----------|----------|------|-------------|
| `text` | Yes | string | Plain text with Markdown syntax |
```json
{
"id": "6f0ad84f44ce9c17",
"type": "text",
"x": 0,
"y": 0,
"width": 400,
"height": 200,
"text": "# Hello World\n\nThis is **Markdown** content."
}
```
**Newline pitfall**: Use `\n` for line breaks in JSON strings. Do **not** use the literal `\\n` -- Obsidian renders that as the characters `\` and `n`.
### File Nodes
| Attribute | Required | Type | Description |
|-----------|----------|------|-------------|
| `file` | Yes | string | Path to file within the system |
| `subpath` | No | string | Link to heading or block (starts with `#`) |
```json
{
"id": "a1b2c3d4e5f67890",
"type": "file",
"x": 500,
"y": 0,
"width": 400,
"height": 300,
"file": "Attachments/diagram.png"
}
```
### Link Nodes
| Attribute | Required | Type | Description |
|-----------|----------|------|-------------|
| `url` | Yes | string | External URL |
```json
{
"id": "c3d4e5f678901234",
"type": "link",
"x": 1000,From Vepricov/claude-brainlab, MIT.
More from Vepricov/claude-brainlab
- 0.657score
operon-obsidian-setup
Vepricov
Installs or repairs the laboratory's Operon task boards and project views in an Obsidian vault.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
obsidian-project-bootstrap
Vepricov
Creates or repairs the Obsidian knowledge base and folder mappings for an existing research repository.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
obsidian-project-memory
Vepricov
Maintains canonical project context and durable research decisions in the mapped Obsidian knowledge base.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
obsidian-literature-workflow
Vepricov
Develops project-linked reading notes and literature synthesis from papers stored in the Obsidian knowledge base or Zotero.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
obsidian-markdown
Vepricov
Writes and edits Obsidian Flavored Markdown with valid wikilinks, embeds, properties, callouts, comments, and tables.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
doc-coauthoring
Vepricov
Co-authors a technical document, proposal, or specification through context gathering, targeted drafting, and reader-testing review.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
bug-detective
Vepricov
Investigates software failures, exceptions, and errors by tracing execution, reproducing the problem, and testing the suspected cause.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
kaggle-learner
Vepricov
Extracts reusable ML techniques, code patterns, and feature engineering ideas from Kaggle competition winning solutions and maps where they apply.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
git-workflow
Vepricov
Prepares commits, branches and pull requests following the repository's existing Git conventions, including Conventional Commits messages and merge strategy.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
obsidian-bases
Vepricov
Creates and edits Obsidian Bases (.base) files with filters, formulas, views, and summaries in valid YAML.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
diagnose
Vepricov
Diagnoses hard bugs and performance regressions by building a reproducible feedback loop and testing competing causal hypotheses.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
paper-to-social
Vepricov
Creates Telegram, X, or Habr posts from a research paper using verified figures and the user's writing style.
SkillAFreshness: A★ 33Claude Code +9
Signals
- Stars
- 33
- Forks
- 5
- Open issues
- 1
- Last commit (this folder)
- Oct 18, 2026 (10 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Vepricov/claude-brainlab
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Vepricov
- 0.657score
kaggle-learner
Vepricov
Extracts reusable ML techniques, code patterns, and feature engineering ideas from Kaggle competition winning solutions and maps where they apply.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
git-workflow
Vepricov
Prepares commits, branches and pull requests following the repository's existing Git conventions, including Conventional Commits messages and merge strategy.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
bug-detective
Vepricov
Investigates software failures, exceptions, and errors by tracing execution, reproducing the problem, and testing the suspected cause.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
diagnose
Vepricov
Diagnoses hard bugs and performance regressions by building a reproducible feedback loop and testing competing causal hypotheses.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
doc-coauthoring
Vepricov
Co-authors a technical document, proposal, or specification through context gathering, targeted drafting, and reader-testing review.
SkillAFreshness: A★ 33Claude Code +9 - 0.657score
obsidian-bases
Vepricov
Creates and edits Obsidian Bases (.base) files with filters, formulas, views, and summaries in valid YAML.
SkillAFreshness: A★ 33Claude Code +9
Cite this page
json-canvas skill. Agent Mart. https://agentmart.dev/skills/vepricov-json-canvas (last updated 2026-10-24)