| name | obsidian-vault-search |
| description | Searches an Obsidian vault intelligently — combines CLI search, frontmatter
filtering, content grep, and wikilink traversal. Goes beyond keyword search
to find notes by property, by link, by folder, and by content. Activates on
"find in vault", "search vault", "which note has", "where did I write about",
or when looking for specific notes in Obsidian.
|
| allowed-tools | bash: grep, find, ls, cat, obsidian-cli, obsidian, python3
file: read
|
Obsidian Vault Search
Raw grep on a vault is noisy. You search "API" and get 200 hits across daily
notes, templates, meeting notes, and the actual design doc you wanted. Obsidian
vaults are structured — frontmatter, wikilinks, folders, tags — and search
should use that structure. This skill searches smart: by property, by link graph,
by folder scope, not just by keyword.
When To Activate
- User says "find in vault", "search vault", "search obsidian"
- User says "which note has...", "where did I write about..."
- User says "find all meetings about...", "show notes tagged..."
- User needs to locate a specific note or set of notes
- Before creating a note (to check if it exists)
- Any vault-level search that isn't just opening a known file
Do NOT trigger for:
- Searching code repositories (use zero-in)
- Web search (different skill entirely)
- Single file content search (just read the file)
Instructions
Step 1: Classify the Search
Determine what kind of search before running anything:
| Request | Search Type | Method |
|---|
| "Find note about X" | Content search | grep + frontmatter |
| "All meetings with Sarah" | Property search | frontmatter scan |
| "Notes tagged #project" | Tag search | frontmatter scan |
| "What links to [[Note]]" | Backlink search | wikilink grep |
| "Notes in Projects/ folder" | Folder search | find |
| "Recent notes about X" | Combined | content + date sort |
| "Everything related to X" | Graph search | links + content |
Match the search method to the request. Don't grep the whole vault for a
property-based question.
Step 2: Run the Appropriate Search
<search_methods>
Content search — find notes mentioning a term:
grep -rl "search term" "$VAULT_PATH" --include="*.md" | head -20
grep -rn "search term" "$VAULT_PATH" --include="*.md" -C 2 | head -50
grep -ril "search term" "$VAULT_PATH" --include="*.md"
Property search — find notes with specific frontmatter:
grep -rl "^type: meeting" "$VAULT_PATH" --include="*.md"
grep -rl "^status: active" "$VAULT_PATH" --include="*.md"
grep -rl "tags:" "$VAULT_PATH" --include="*.md" | \
xargs grep -l "project-name"
grep -rl "attendees:" "$VAULT_PATH" --include="*.md" | \
xargs grep -l "Sarah"
grep -rl "^type: meeting" "$VAULT_PATH" --include="*.md" | \
xargs grep -l "^status: active"
Tag search — find notes with specific tags:
grep -rl "#tag-name" "$VAULT_PATH" --include="*.md"
grep -rl " - tag-name" "$VAULT_PATH" --include="*.md"
grep -rl "#tag-name\| - tag-name" "$VAULT_PATH" --include="*.md"
Backlink search — find notes that link to a specific note:
grep -rl "\[\[Note Name" "$VAULT_PATH" --include="*.md"
grep -rl "\[\[Note Name|" "$VAULT_PATH" --include="*.md"
Folder search — find notes in a specific location:
find "$VAULT_PATH/Projects/project-name" -name "*.md" | sort
Date-range search — find notes by date:
find "$VAULT_PATH" -name "*.md" -mtime -7 | sort
grep -rl "^date: 2026-02" "$VAULT_PATH" --include="*.md"
CLI search (if available):
obsidian search query="search term" limit=20
obsidian-cli search-content "search term"
</search_methods>
Step 3: Rank and Present Results
Don't dump raw grep output. Process the results:
- Deduplicate — same note from multiple matches
- Sort by relevance:
- Title match > heading match > body match
- Recent notes > older notes
- Exact match > partial match
- Extract context — show WHY each result matched
- Show frontmatter — type, status, date for each result
for file in $RESULTS; do
echo "---"
echo "File: $file"
head -10 "$file" | grep "^type:\|^status:\|^date:"
grep -n "search term" "$file" | head -3
done
Step 4: Offer Follow-Up Actions
After presenting results, offer relevant next steps:
- "Open [[Note Name]] to read it?"
- "Want to see notes that link to this one?"
- "Should I create a base view for this query?"
- "Want to add this to today's daily note?"
Output Format
## Vault Search: "query"
**Found:** X notes
### Results
1. **[[Note Title]]** — Notes/note-title.md
Type: note | Status: active | Date: 2026-02-10
> ...matching context...
2. **[[Another Note]]** — Projects/project/another-note.md
Type: meeting | Status: active | Date: 2026-02-08
> ...matching context...
### Related
- [[Linked Note 1]] (linked from result #1)
- [[Linked Note 2]] (linked from result #2)
Want to open any of these, or refine the search?
NEVER
- Dump raw grep output without processing
- Search the entire vault without narrowing scope first
- Return more than 20 results without asking to narrow
- Search without indicating what was searched and how
- Open or modify notes during a search (search is read-only)
ALWAYS
- Classify the search type before running commands
- Use the most targeted search method for the request
- Show frontmatter metadata alongside results
- Deduplicate results
- Offer follow-up actions
- Suggest narrowing if too many results (>20)
Example
User: "Find all my meeting notes about the API project"
Vault Search: "meeting notes about API project"
Search: type == meeting AND (content contains "API" OR project == "api")
Found: 4 notes
1. [[2026-02-10 API Design Review]] — Projects/api/meetings/2026-02-10-api-design-review.md
Type: meeting | Status: active | Date: 2026-02-10
> Discussed rate limiting approach and endpoint contracts
2. [[2026-02-05 API Sprint Planning]] — Projects/api/meetings/2026-02-05-api-sprint-planning.md
Type: meeting | Status: active | Date: 2026-02-05
> Sprint goals: auth middleware, rate limiting, documentation
3. [[2026-01-28 API Kickoff]] — Projects/api/meetings/2026-01-28-api-kickoff.md
Type: meeting | Status: completed | Date: 2026-01-28
> Initial scope: REST API for mobile app
4. [[2026-01-20 API Requirements]] — Projects/api/meetings/2026-01-20-api-requirements.md
Type: meeting | Status: completed | Date: 2026-01-20
> Requirements gathering with product team
Related notes:
- [[api-design]] (linked from 3 meetings)
- [[api-rate-limiting]] (linked from #1, #2)
Want to open any of these?
What DOESN'T work:
- Grepping "meeting" across the whole vault — matches templates, daily notes, random mentions
- Searching by filename only — misses notes where the content matches but the filename doesn't
- Not checking frontmatter — you find notes that MENTION meetings but aren't meeting notes
- Returning 50+ results — user can't process that, narrow the search