Manage a zettelkasten in Obsidian — capturing notes, promoting ideas from daily → fleeting → permanent, finding connections, surfacing index opportunities, and navigating the knowledge graph. Use this skill whenever the user mentions their Obsidian vault, zettelkasten, taking notes, processing their inbox, finding connections between ideas, capturing a thought or reading, or anything related to their personal knowledge management workflow. Also trigger when user says things like "add this to my notes", "what notes do I have on X", "what should I link this to", "process my fleeting notes", "I've been thinking about X", or "make a note of this".
obsidian vault={vault_name} <command>| Folder | Purpose | Naming |
|---|---|---|
Daily/ | Journal / default capture inbox | YYYYMMDD-daily.md |
Fleeting/ | Half-formed ideas worth developing | YYYYMMDDHHMM-slug.md |
Literature/ | Notes on sources (books, papers, articles) | @citekey.md (Zotero-style) |
Permanent/ | Atomic, evergreen ideas | YYYYMMDDHHMM-slug.md |
Templates/ |
| Note templates |
Root-level files are older permanent notes — treat them the same as Permanent/.
Unless the user explicitly says "fleeting", capture goes to today's daily note.
# Get today's daily note path
DAILY="Daily/$(date +%Y%m%d)-daily.md"
# Check if it exists; create with header if not
obsidian vault={vault_name} file "$DAILY" 2>/dev/null || \
obsidian vault={vault_name} create path="$DAILY" \
content="# $(date +%Y%m%d) Daily\nCreated: $(date '+%Y-%m-%d')\n\n## Captures\n"
# Append the capture as a bullet
obsidian vault={vault_name} append path="$DAILY" \
content="- $(date '+%H:%M') $THOUGHT"
Format each capture as a timestamped bullet: - HH:MM thought here
A quick capture is just a bullet. Do not create a fleeting note, add tags, expand content, or create any additional files unless the user explicitly asks. The daily note is the inbox — let it be messy.
When the user says "fleeting", "make this a fleeting note", or "expand this":
ID=$(date +%Y%m%d%H%M)
SLUG="some-short-slug" # lowercase-hyphenated from title
obsidian vault={vault_name} create path="Fleeting/${ID}-${SLUG}.md" \
content="# $TITLE\nCreated: $(date '+%Y-%m-%d %H:%M')\n\n$CONTENT\n\n## References\n1."
When capturing from a source (book, paper, article):
obsidian vault={vault_name} create path="Literature/@${CITEKEY}.md" \
content="---\ntitle: $TITLE\nauthors: $AUTHORS\nyear: $YEAR\nreference: $REF\n---\n\n$SYNTHESIS\n\n## References\n1."
@citekey format: @lastnameYYYYword (e.g. @ahrensHowTakeSmart2017)(p. 42)The zettelkasten workflow moves ideas upstream: daily → fleeting → permanent.
When a daily note bullet deserves to be developed:
- [[YYYYMMDDHHMM-slug|original text]]# Create the fleeting note
ID=$(date +%Y%m%d%H%M)
obsidian vault={vault_name} create path="Fleeting/${ID}-${SLUG}.md" \
content="# $TITLE\nCreated: $(date '+%Y-%m-%d %H:%M')\n\n$EXPANDED_CONTENT\n\n## References\n1. [[$(date +%Y%m%d)-daily]]"
# Update daily note — replace the bullet with a link
# (use append to add a note, or ask user to do the edit if complex)
This is where the real thinking happens. A fleeting note is ready to promote when:
When promoting:
obsidian move (don't just create a copy):# Move the file to Permanent/
obsidian vault={vault_name} move path="Fleeting/${ID}-${SLUG}.md" \
path="Permanent/${ID}-${SLUG}.md"
# Or if renaming (new title → new slug):
obsidian vault={vault_name} move file="${ID}-${SLUG}" \
path="Permanent/${NEW_ID}-${NEW_SLUG}.md"
## References\n1. [[source-note]]Atomic note checklist — before confirming, verify the note:
When the user asks to "process notes", "check my inbox", or "what needs attention":
# List recent daily notes
obsidian vault={vault_name} files folder=Daily
# Read today's and recent ones to find raw bullets
obsidian vault={vault_name} read path="Daily/$(date +%Y%m%d)-daily.md"
obsidian vault={vault_name} files folder=Fleeting
When the user has 5 minutes, process 2-3 items. When they have more time, go deeper.
Use this proactively — whenever a note is created or promoted, suggest relationships.
# Search by keyword/concept
obsidian vault={vault_name} search query="$KEYWORD"
obsidian vault={vault_name} search:context query="$KEYWORD"
# Find what links to a note
obsidian vault={vault_name} backlinks file="$NOTE"
# Find all notes with a tag
obsidian vault={vault_name} tag name="$TAG" verbose
# Find orphans (no incoming links — potential connection targets)
obsidian vault={vault_name} orphans
# Find dead-ends (no outgoing links — need connections)
obsidian vault={vault_name} deadends
When to proactively suggest connections:
Surface connections as: "This note relates to [[note-name]] — want me to add a link?"
Index notes are entry points into a cluster of related permanent notes. They're not summaries — they're maps: an ordered list of links that tells the story of how the ideas connect.
Check tag counts periodically or after capturing:
obsidian vault={vault_name} tags counts format=json
If a tag has 5+ notes and no index note exists for that topic, suggest creating one:
"You have 7 notes tagged #leadership — want me to create an index for that cluster?"
Also suggest for named entities (companies, projects, jobs) when 3+ notes reference them.
obsidian vault={vault_name} create path="Permanent/$(date +%Y%m%d%H%M)-${TOPIC}-index.md" \
content="# $TOPIC Index\n#index #$TAG\n\n## Notes\n1. [[note-one|claim]]\n2. [[note-two|claim]]\n"
Index conventions:
#index plus the topic tag[[note-id|The claim this note makes]]Frontmatter tags: Use when a tag applies to the entire note (page-level) Inline tags: Use when tagging a specific bullet or passage
Both are valid — use whichever fits the scope.
When to suggest a tag:
# See all existing tags before suggesting new ones
obsidian vault={vault_name} tags counts format=json
Any agent starting work that might benefit from the user's accumulated thinking should query the vault first. This is how you avoid starting from scratch when the user has already thought deeply about something.
Search for relevant notes by topic, tag, or keyword:
# Search by concept
obsidian vault={vault_name} search query="$TOPIC"
obsidian vault={vault_name} search:context query="$TOPIC"
# Find notes with a relevant tag
obsidian vault={vault_name} tag name="$TAG" verbose
# Check if there's an index for this domain
obsidian vault={vault_name} search query="#index $TOPIC"
Read any relevant permanent notes — these represent the user's most distilled thinking:
obsidian vault={vault_name} read file="$NOTE_NAME"
obsidian vault={vault_name} backlinks file="$NOTE_NAME"
If you're working on something and notice it connects to the user's zettelkasten — mention it:
"I see you have notes on #leadership that might be relevant here — want me to pull those in?"
Agents can write to the vault on the user's behalf:
Agent-generated captures should be clearly marked so the user can review and curate:
# Append with agent attribution
obsidian vault={vault_name} append path="Daily/$(date +%Y%m%d)-daily.md" \
content="- $(date '+%H:%M') [agent] $OBSERVATION"
The [agent] marker signals "review this — I thought it was worth saving but you decide."
# All commands need vault={vault_name}
obsidian vault={vault_name} <command>
# Read a note
obsidian vault={vault_name} read path="Folder/note.md"
obsidian vault={vault_name} read file="note-name" # resolves by name like wikilinks
# Create
obsidian vault={vault_name} create path="Folder/name.md" content="..."
# Append
obsidian vault={vault_name} append path="Folder/name.md" content="..."
# Move / rename
obsidian vault={vault_name} move file="old-name" path="Folder/new-name.md"
# Search
obsidian vault={vault_name} search query="keyword"
obsidian vault={vault_name} search:context query="keyword"
# Links
obsidian vault={vault_name} backlinks file="note-name"
obsidian vault={vault_name} orphans
obsidian vault={vault_name} deadends
# Tags
obsidian vault={vault_name} tags counts format=json
obsidian vault={vault_name} tag name="tagname" verbose
# Files
obsidian vault={vault_name} files folder=Fleeting
obsidian vault={vault_name} files folder=Daily