skills/obsidian-skills-agent/SKILL.md
```markdown --- name: obsidian-skills-agent description: Teach AI coding agents to work with Obsidian vaults using Markdown, Bases, JSON Canvas, and the Obsidian CLI triggers: - work with obsidian vault - create obsidian notes - edit obsidian markdown - use obsidian bases - create json canvas - interact with obsidian cli - add obsidian agent skills - teach agent obsidian syntax --- # Obsidian Skills for AI Agents > Skill by [ara.so](https://ara.so) — Daily 2026 Skills collectio
npx skillsauth add aradotso/trending-skills skills/obsidian-skills-agentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
---
name: obsidian-skills-agent
description: Teach AI coding agents to work with Obsidian vaults using Markdown, Bases, JSON Canvas, and the Obsidian CLI
triggers:
- work with obsidian vault
- create obsidian notes
- edit obsidian markdown
- use obsidian bases
- create json canvas
- interact with obsidian cli
- add obsidian agent skills
- teach agent obsidian syntax
---
# Obsidian Skills for AI Agents
> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.
`obsidian-skills` is a collection of agent skills that teach AI coding agents (Claude Code, Codex CLI, OpenCode, Cursor, etc.) how to work with Obsidian vaults. It covers Obsidian Flavored Markdown, Bases, JSON Canvas, and the Obsidian CLI — following the [Agent Skills specification](https://agentskills.io/specification).
---
## Installation
### Via Marketplace (if supported)
/plugin marketplace add kepano/obsidian-skills /plugin install obsidian@obsidian-skills
### Via npx
```bash
npx skills add [email protected]:kepano/obsidian-skills.git
Copy the repo contents into a /.claude folder at the root of your Obsidian vault:
git clone https://github.com/kepano/obsidian-skills.git /path/to/vault/.claude
Copy the skills/ directory into your Codex skills path:
git clone https://github.com/kepano/obsidian-skills.git /tmp/obsidian-skills
cp -r /tmp/obsidian-skills/skills/* ~/.codex/skills/
Clone the full repo into the OpenCode skills directory:
git clone https://github.com/kepano/obsidian-skills.git ~/.opencode/skills/obsidian-skills
Do not copy only the inner
skills/folder. Clone the full repo so the path resolves to:~/.opencode/skills/obsidian-skills/skills/<skill-name>/SKILL.mdOpenCode auto-discovers all
SKILL.mdfiles under~/.opencode/skills/. Restart OpenCode after cloning.
| Skill | File | Description |
|---|---|---|
| obsidian-markdown | skills/obsidian-markdown/SKILL.md | Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties |
| obsidian-bases | skills/obsidian-bases/SKILL.md | Obsidian Bases (.base) with views, filters, formulas, summaries |
| json-canvas | skills/json-canvas/SKILL.md | JSON Canvas (.canvas) with nodes, edges, groups, connections |
| obsidian-cli | skills/obsidian-cli/SKILL.md | Obsidian CLI for vault, plugin, and theme interaction |
| defuddle | skills/defuddle/SKILL.md | Extract clean markdown from web pages using Defuddle |
Obsidian uses a superset of standard Markdown. Key syntax additions:
---
title: My Note
tags:
- research
- ai
date: 2026-03-01
status: draft
aliases:
- My Research Note
---
[[Note Name]]
[[Note Name|Display Text]]
[[Folder/Note Name]]
[[Note Name#Heading]]
![[Note Name]]
![[image.png]]
![[Note Name#Section]]
![[Note Name#^block-id]]
> [!note]
> This is a note callout.
> [!warning] Custom Title
> This is a warning with a custom title.
> [!tip]- Collapsible Tip
> This callout is collapsible by default (closed).
> [!info]+ Expanded Collapsible
> This callout is collapsible and starts open.
Callout types: note, abstract, info, tip, success, question, warning, failure, danger, bug, example, quote
This paragraph has a block ID. ^my-block-id
- List item with block ID ^list-block
Reference with: [[Note#^my-block-id]]
#tag
#nested/tag
#multi-word-tag
.base files)Bases are database-like views over your vault's markdown files, using .base file format.
# my-projects.base
view: table
filter:
type: eq
field: type
value: project
fields:
- name
- status
- due
- priority
sort:
- field: due
order: asc
view: table # Spreadsheet-style
view: list # Simple list
view: board # Kanban-style (requires groupBy)
view: gallery # Card/image grid
view: calendar # Calendar (requires date field)
# Single filter
filter:
type: eq
field: status
value: active
# Compound filter
filter:
type: and
conditions:
- type: eq
field: type
value: project
- type: neq
field: status
value: archived
Filter operators: eq, neq, gt, gte, lt, lte, contains, not_contains, starts_with, ends_with, is_empty, is_not_empty
fields:
- name: days_remaining
formula: "dateDiff(now(), due, 'days')"
- name: full_name
formula: "concat(first_name, ' ', last_name)"
summary:
- field: budget
type: sum
- field: status
type: count_by_value
.canvas files)JSON Canvas is an open format for infinite canvas data. Files use the .canvas extension.
{
"nodes": [
{
"id": "node1",
"type": "text",
"x": 0,
"y": 0,
"width": 250,
"height": 100,
"text": "Hello, Canvas!"
}
],
"edges": []
}
{
"nodes": [
{
"id": "text-node",
"type": "text",
"x": 0, "y": 0,
"width": 250, "height": 100,
"text": "## Markdown content\nSupports **bold**, *italic*, [[wikilinks]]"
},
{
"id": "file-node",
"type": "file",
"x": 300, "y": 0,
"width": 400, "height": 300,
"file": "Notes/My Note.md"
},
{
"id": "link-node",
"type": "link",
"x": 0, "y": 200,
"width": 400, "height": 200,
"url": "https://obsidian.md"
},
{
"id": "group-node",
"type": "group",
"x": -50, "y": -50,
"width": 600, "height": 400,
"label": "My Group",
"background": "#ff6b6b",
"backgroundStyle": "solid"
}
]
}
{
"edges": [
{
"id": "edge1",
"fromNode": "node1",
"fromSide": "right",
"toNode": "node2",
"toSide": "left",
"label": "connects to",
"color": "#ff0000"
}
]
}
Edge sides: top, right, bottom, left
{
"color": "1"
}
Preset colors: "1" (red), "2" (orange), "3" (yellow), "4" (green), "5" (cyan), "6" (purple)
Custom: "color": "#ff6b6b"
{
"nodes": [
{
"id": "idea-central",
"type": "text",
"x": 200,
"y": 200,
"width": 300,
"height": 150,
"color": "4",
"text": "# Central Idea\nThe core concept here."
},
{
"id": "note-ref",
"type": "file",
"x": 600,
"y": 100,
"width": 400,
"height": 300,
"file": "Research/Background.md"
},
{
"id": "web-ref",
"type": "link",
"x": -200,
"y": 150,
"width": 350,
"height": 200,
"url": "https://example.com/source"
}
],
"edges": [
{
"id": "e1",
"fromNode": "idea-central",
"fromSide": "right",
"toNode": "note-ref",
"toSide": "left",
"label": "supported by"
},
{
"id": "e2",
"fromNode": "web-ref",
"fromSide": "right",
"toNode": "idea-central",
"toSide": "left",
"label": "references"
}
]
}
The Obsidian CLI lets you interact with vaults programmatically.
# Open a vault
obsidian open /path/to/vault
# Open a specific note
obsidian open /path/to/vault --file "Notes/My Note.md"
# Create a new note
obsidian new /path/to/vault --file "Notes/New Note.md" --content "# New Note"
# List all notes in vault
obsidian list /path/to/vault
# Search vault
obsidian search /path/to/vault --query "search term"
# Install a plugin
obsidian plugin install /path/to/vault --id dataview
# Enable a plugin
obsidian plugin enable /path/to/vault --id dataview
# List installed plugins
obsidian plugin list /path/to/vault
# Install a theme
obsidian theme install /path/to/vault --name "Minimal"
Defuddle extracts clean Markdown from web pages, removing navigation, ads, and clutter.
npm install -g defuddle-cli
# Extract clean markdown from a URL
defuddle https://example.com/article
# Save output to a file
defuddle https://example.com/article -o output.md
# Extract and save directly into your vault
defuddle https://example.com/article -o /path/to/vault/Clippings/article.md
# Include metadata as frontmatter
defuddle https://example.com/article --frontmatter
# Specify output format
defuddle https://example.com/article --format markdown
defuddle https://example.com/article --format text
import { Defuddle } from 'defuddle';
const result = await Defuddle.parse('https://example.com/article');
console.log(result.markdown);
console.log(result.title);
console.log(result.author);
console.log(result.date);
#!/bin/bash
# save-clip.sh — Save a URL as a clipping to Obsidian vault
URL="$1"
VAULT="/path/to/vault"
DATE=$(date +%Y-%m-%d)
defuddle "$URL" \
--frontmatter \
-o "$VAULT/Clippings/$DATE-clipping.md"
---
title: My Project
type: project
status: active
due: 2026-06-01
tags:
- work
- development
---
# My Project
## Overview
Brief description here.
## Tasks
- [ ] Task one
- [ ] Task two
- [x] Completed task
## Related Notes
- [[Research/Background]]
- [[Meetings/Kickoff Meeting]]
## Resources
![[attachments/diagram.png]]
# active-projects.base
view: board
groupBy: status
filter:
type: and
conditions:
- type: eq
field: type
value: project
- type: neq
field: status
value: archived
fields:
- title
- due
- priority
sort:
- field: due
order: asc
summary:
- field: title
type: count
#!/bin/bash
# bulk-clip.sh — Import a list of URLs into Obsidian vault
VAULT="${OBSIDIAN_VAULT_PATH:-$HOME/vault}"
CLIPPINGS_DIR="$VAULT/Clippings"
mkdir -p "$CLIPPINGS_DIR"
while IFS= read -r url; do
filename=$(echo "$url" | sed 's|https\?://||;s|/|-|g' | cut -c1-60)
echo "Clipping: $url"
defuddle "$url" --frontmatter -o "$CLIPPINGS_DIR/${filename}.md"
done < urls.txt
Ensure the repo is placed in the /.claude folder at the root of your vault, not in a subfolder:
vault/
.claude/
skills/
obsidian-markdown/
SKILL.md
...
Make sure you cloned the full repo (not just the skills/ subfolder) into ~/.opencode/skills/:
~/.opencode/skills/
obsidian-skills/ ← full repo root here
skills/
obsidian-markdown/
SKILL.md
Restart OpenCode after cloning — skills are auto-discovered on startup.
Some sites require JavaScript rendering. Use a headless browser flag if supported:
defuddle https://example.com --js
Wikilinks are case-sensitive and must match the note filename exactly. Check:
.base file is inside your Obsidian vault directory# Set your default vault path for CLI scripts
export OBSIDIAN_VAULT_PATH="/path/to/your/vault"
# Defuddle API key (if using cloud features)
export DEFUDDLE_API_KEY="your-key-here"
development
```markdown --- name: compose-performance-skills description: Install and use the skydoves/compose-performance-skills agent skill library to diagnose and fix Jetpack Compose performance issues including stability, recomposition, lazy layouts, modifiers, side effects, and build configuration. triggers: - "my composable recomposes too often" - "LazyColumn drops frames during scroll" - "diagnose Compose stability issues" - "fix unnecessary recomposition in Jetpack Compose" - "optimize Com
development
Headless iOS Simulator manager with host-side HID input injection, 60fps streaming, and device farm web UI for iOS 26
development
```markdown --- name: claude-code-game-studios description: Turn Claude Code into a full 49-agent game dev studio with 72 workflow skills, automated hooks, and a real studio hierarchy for Godot, Unity, and Unreal projects. triggers: - "set up claude code game studios" - "use ai agents for game development" - "set up game dev studio with claude" - "add game studio agents to my project" - "how do I use claude code for game dev" - "set up godot unity unreal ai workflow" - "49 agents g
development
```markdown --- name: xq-py-quantum-vm description: Python implementation of the Quip Network's quantum virtual machine (xqvm) triggers: - quantum virtual machine python - xqvm quip network - quantum circuit simulation python - xq-py quantum vm - quip network quantum python - simulate quantum gates python - quantum vm xqvm - xqvm-py quantum circuit --- # xq-py Quantum Virtual Machine > Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection. `xqvm-py` is a Python impl