Skills for working with Obsidian vaults and related formats: Obsidian Flavored Markdown, JSON Canvas files, the Obsidian CLI, and Defuddle for clean web content extraction.
96
96%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Advisory
Suggest reviewing before use
{
"instructions": [
{
"instruction": "Always wrap formula expressions that access note properties in an if() guard before using them. For example, write if(due_date, (date(due_date) - today()).days, \"\") instead of (date(due_date) - today()).days, because accessing date() on an empty property throws a runtime error.",
"relevant_when": "The user is writing a formula that reads a frontmatter property which may not be present on every note.",
"why_given": "new knowledge"
},
{
"instruction": "When subtracting two dates the result is a Duration type, not a Number. To use Number methods such as .round(), .floor(), or .ceil(), access a numeric field on the Duration first. For example, write (now() - file.ctime).days.round(0) rather than (now() - file.ctime).round(0).",
"relevant_when": "The user writes any formula that performs date arithmetic and then applies a Number method to the result.",
"why_given": "new knowledge"
},
{
"instruction": "Every formula.X reference that appears in order, properties, or summaries must have a matching key defined under formulas. If the key is missing, Obsidian silently drops the column with no error message.",
"relevant_when": "The user references formula.something in a view's order list or in the properties section.",
"why_given": "new knowledge"
},
{
"instruction": "Any YAML string value that contains a colon (:), curly brace ({, }), bracket ([, ]), hash (#), or other special YAML characters must be quoted. Use double quotes for display names and simple strings. Use single quotes for formula expressions that contain double quotes.",
"relevant_when": "The user writes a displayName, filter string, or formula value that contains special characters.",
"why_given": "new knowledge"
},
{
"instruction": "Use file.basename (not file.name) when displaying note titles in table, list, or cards views. file.name includes the .md extension; file.basename does not. Reserve file.name for cases where the extension is meaningful.",
"relevant_when": "The user adds file name columns to a view for display purposes.",
"why_given": "new knowledge"
},
{
"instruction": "Global filters (the top-level filters block) restrict every view in the base. If you want one view to show archived items and another to show active items, do not exclude archived items in the global filter. Move status-specific conditions to view-level filters and keep global filters limited to invariant scope constraints such as folder or tag.",
"relevant_when": "The user wants different views to show different subsets of the same note set, especially when some views should show items that others exclude.",
"why_given": "new knowledge"
},
{
"instruction": "Validate that the .base file is syntactically correct YAML before opening it in Obsidian. Common causes of parse failures: unquoted strings containing colons, mismatched single/double quotes in formula expressions, and indentation errors. Run a YAML linter or paste the content into a YAML validator.",
"relevant_when": "The user has finished writing a base file and is about to open it in Obsidian.",
"why_given": "new knowledge"
},
{
"instruction": "Formula expressions that reference note properties (e.g., status, priority, due) should use the bare property name, not a prefix. For example, write if(priority == 1, ...) not if(note.priority == 1, ...). The note. prefix is optional for frontmatter properties.",
"relevant_when": "The user writes filter or formula expressions that compare frontmatter property values.",
"why_given": "new knowledge"
},
{
"instruction": "When using groupBy in a view, reference only properties or formula names that exist in the base. A groupBy on an undefined property silently produces a single ungrouped view.",
"relevant_when": "The user adds a groupBy clause to a view.",
"why_given": "new knowledge"
},
{
"instruction": "Duration fields available after date subtraction are: .days, .hours, .minutes, .seconds, .milliseconds. There is no .weeks or .months field. To get weeks, divide .days by 7.",
"relevant_when": "The user writes a formula involving time elapsed in weeks or months.",
"why_given": "new knowledge"
}
]
}defuddle
json-canvas
evals
obsidian-bases
evals
references
obsidian-cli
evals
obsidian-markdown
evals