Obsidian Vault Skill
Manage Obsidian vaults directly via filesystem tools. No external CLI required — uses built-in read, write, list, and edit tools to work with vault files.
Vault Structure
An Obsidian vault is a directory containing markdown files and a .obsidian/ config folder:
MyVault/ ├── .obsidian/ # Obsidian config (DO NOT modify unless asked) │ ├── app.json # App settings │ ├── appearance.json # Theme settings │ ├── community-plugins.json # Installed plugin IDs │ └── plugins/ # Plugin configs ├── Daily Notes/ # Common daily notes folder ├── Templates/ # Common templates folder ├── Attachments/ # Images, PDFs, etc. ├── Notes/ # User's notes └── *.md # Root-level notes
Identify a vault: A directory is a vault if it contains .obsidian/ subdirectory.
Frontmatter (Properties)
Notes use YAML frontmatter between --- delimiters at the top of the file:
--- title: Meeting Notes date: 2026-02-26 tags: - meeting - project-alpha status: draft aliases: - Alpha Meeting --- # Meeting Notes Content starts here...
Read frontmatter
Read the file and parse everything between the first --- pair.
Update frontmatter
Use the edit tool to replace frontmatter fields. Preserve existing fields — only change what's requested.
Add frontmatter to a file without one
Prepend ---\n<fields>\n---\n\n before existing content.
Tags
Tags appear in two places:
- •Frontmatter tags —
tags: [meeting, project]in YAML - •Inline tags —
#tag-nameanywhere in the body text (NOT inside code blocks)
Nested tags use /: #project/alpha, #status/in-progress
Find all tags in vault
Search for #[\w/-]+ pattern across all .md files, plus parse tags: from frontmatter.
Find files with a specific tag
Search for both #tag-name in body text AND tag-name in frontmatter tags arrays.
Wikilinks
Obsidian links use double-bracket syntax:
| Syntax | Meaning |
|---|---|
[[Note Name]] | Link to note (matches filename without .md) |
[[Note Name|Display Text]] | Link with custom display text |
[[Note Name#Heading]] | Link to specific heading |
[[Note Name#^block-id]] | Link to specific block |
![[Note Name]] | Embed (transclude) entire note |
![[image.png]] | Embed image from vault |
Find backlinks
To find all files linking TO MyNote.md, search all .md files for [[MyNote]] or [[MyNote| or [[MyNote#.
Find broken links
Extract all [[target]] references, then check if target.md exists in the vault.
Tasks
Obsidian uses markdown checkboxes with optional metadata:
- [ ] Incomplete task - [x] Completed task - [ ] Task with due date [due:: 2026-03-01] - [ ] Task with priority [priority:: high] - [ ] #project/alpha Review the design doc
Find all tasks
Search for lines matching - \[[ x]\] across all .md files.
Find incomplete tasks
Search for - \[ \] (with space between brackets).
Complete a task
Edit the file, replacing - [ ] with - [x] on the target line.
Find overdue tasks
Search for \[due:: (\d{4}-\d{2}-\d{2})\] and compare dates.
Daily Notes
Daily notes follow a date-based naming convention. Common patterns:
| Pattern | Example Path |
|---|---|
Daily Notes/YYYY-MM-DD.md | Daily Notes/2026-02-26.md |
Journal/YYYY/MM-DD.md | Journal/2026/02-26.md |
YYYY-MM-DD.md (root) | 2026-02-26.md |
Detect daily notes folder
Check .obsidian/daily-notes.json for folder and format settings. If not configured, check for common folder names: Daily Notes, Journal, Dailies.
Create today's daily note
--- date: 2026-02-26 tags: - daily --- # 2026-02-26 ## Tasks - [ ] ## Notes
List recent daily notes
List files in the daily notes folder, sort by filename (date) descending.
Templates
Templates live in a configurable folder (check .obsidian/templates.json for folder). Common locations: Templates/, _templates/.
Apply a template
- •Read the template file
- •Replace template variables:
- •
{{date}}or{{date:YYYY-MM-DD}}→ current date - •
{{time}}or{{time:HH:mm}}→ current time - •
{{title}}→ note filename without.md
- •
- •Write as the new note content
Search
Full-text search
Use the shell tool with grep/ripgrep to search vault content:
# Search all markdown files for a term grep -rl "search term" /path/to/vault --include="*.md" # Search with context grep -rn "search term" /path/to/vault --include="*.md" -C 2
Or use the filesystem list tool to enumerate files, then read and filter.
Search by property
Parse frontmatter from each file and filter by property values.
Common Operations
Create a new note
Write a new .md file with frontmatter:
--- title: Note Title date: 2026-02-26 tags: [] --- # Note Title Content here.
Move/rename a note
- •Read the old file
- •Write to the new path
- •Delete the old file
- •Update backlinks: Search all
.mdfiles for[[OldName]]and replace with[[NewName]]
List all notes
List all *.md files in the vault, excluding .obsidian/ and .trash/.
Vault statistics
- •Count
.mdfiles (total notes) - •Extract and count unique tags
- •Count
[[references (total links) - •Count
- [ ]lines (open tasks) - •Count
- [x]lines (completed tasks)
Obsidian Config Files
These live in .obsidian/ — read but don't modify unless explicitly asked:
| File | Contains |
|---|---|
app.json | Editor settings, vim mode, etc. |
appearance.json | Theme, font, CSS snippet list |
community-plugins.json | Array of installed plugin IDs |
daily-notes.json | folder, format, template for daily notes |
templates.json | folder for templates |
bookmarks.json | Bookmarked files and searches |
graph.json | Graph view settings |
hotkeys.json | Custom keyboard shortcuts |
Tips
- •Always preserve existing frontmatter fields when editing — only change what's asked
- •Wikilinks are case-insensitive for matching but preserve original case
- •Files in
.trash/are soft-deleted — check there before declaring something missing - •Attachments (images, PDFs) are typically in
Attachments/or alongside the note - •Obsidian ignores dotfiles and
node_modules/— don't create notes there - •When creating notes, match the vault's existing naming convention (kebab-case, Title Case, etc.)
- •Canvas files (
.canvas) are JSON — read with filesystem tools, parse as JSON