| name | islandiguana |
| description | Use islandiguana to search the Obsidian vault by YAML front matter using yq expressions. Use when asked to find notes by tag, status, or any front matter field, or when asked to peruse or search the Obsidian vault. Obsidian inline #tags are backed by YAML front matter, so islandiguana is the correct tool for finding notes by Obsidian tag. |
Searching the Obsidian Vault with islandiguana
islandiguana recursively searches Markdown files by their YAML front matter using yq expression syntax.
Binary: /Users/mtm/go/bin/islandiguana
Vault path: /Users/mtm/Documents/Obsidian Vault
Basic usage
islandiguana "/Users/mtm/Documents/Obsidian Vault" '.tags[] == "python"'
islandiguana "/Users/mtm/Documents/Obsidian Vault" '.status == "draft"'
islandiguana "/Users/mtm/Documents/Obsidian Vault" 'has("filetype")'
islandiguana "/Users/mtm/Documents/Obsidian Vault" '.author == null'
islandiguana "/Users/mtm/Documents/Obsidian Vault" '(.tags // []) | length == 0'
islandiguana "/Users/mtm/Documents/Obsidian Vault" '.title | test("(?i)kubernetes")'
islandiguana "/Users/mtm/Documents/Obsidian Vault" '(.tags[] == "python") or (.tags[] == "ruby")'
islandiguana "/Users/mtm/Documents/Obsidian Vault" '.priority > 3'
islandiguana --max-depth 1 "/Users/mtm/Documents/Obsidian Vault" '.tags[] == "python"'
Combining with ripgrep (stdin mode)
When no directory argument is given, islandiguana reads file paths from stdin.
When a directory argument is also given alongside piped stdin, both sources are merged and deduplicated.
rg -l "Expresso" "/Users/mtm/Documents/Obsidian Vault" | islandiguana '.tags[] == "coffee"'
rg -l "Expresso" "/Users/mtm/Documents/Obsidian Vault" --null | islandiguana "/Users/mtm/Documents/Obsidian Vault" --null-input '.tags[] == "coffee"'
Mutating front matter in place
Use --mutate with a yq expression to edit matched files:
islandiguana "/Users/mtm/Documents/Obsidian Vault" '.filetype == "product"' --mutate 'del(.filetype)'
islandiguana "/Users/mtm/Documents/Obsidian Vault" '.status == "draft"' --mutate '.status = "published"'
islandiguana "/Users/mtm/Documents/Obsidian Vault" --mutate '.tags = ((.tags // []) + ["mytag"] | unique)'
rg -l 'some-term' "/Users/mtm/Documents/Obsidian Vault" --null | islandiguana --null-input --mutate '.tags = ((.tags // []) + ["some-term"] | unique)'
Output options
islandiguana -0 "/Users/mtm/Documents/Obsidian Vault" '.tags[] == "python"' | xargs -0 grep -l TODO
islandiguana --no-cache "/Users/mtm/Documents/Obsidian Vault" '.priority > 3'
Workflow
To answer questions about vault contents, run islandiguana via Bash, then Read the files it returns.
Always quote the vault path — it contains spaces.
Use yq expression syntax for queries.
The expression is always the last positional argument (after the optional directory).