obsidian-plugin/skills/vault-frontmatter/SKILL.md
Offline YAML frontmatter maintenance for Obsidian notes. Use when stripping legacy `id:`, cleaning Templater markers, or fixing bare emoji tags.
npx skillsauth add laurigates/claude-plugins vault-frontmatterInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Use this skill when... | Use the alternative instead when... |
|---|---|
| Bulk-stripping legacy id: fields or null tags: entries across many .md files offline | Setting a single property on one live note via the running CLI — use properties |
| Cleaning up unrendered {{title}} / <% tp.file.cursor() %> placeholders inside YAML | Repairing those markers in note body text — use vault-templates |
| Adding missing frontmatter blocks to notes that lack one | Consolidating the actual tag values once the YAML structure is sound — use vault-tags |
Offline, file-level repair of YAML frontmatter. Complements the properties skill (which uses the Obsidian CLI) by operating on .md files directly — safe for bulk mechanical passes.
id: field from a batch of notes<% tp.file.cursor() %>, {{title}})null entries inside tags: listscontext: fvh---
tags:
- 🛠️/neovim # emoji-prefixed category tag
- 📝/notes # note-type tag
context: fvh # FVH notes only
---
Rules:
id: field — removed from all current templates.emoji/subcategory or a bare note-type like 📝/moc.📝, 🌱, 📝/🌱) — they indicate the tag was never specified.null tag values — YAML must be valid.context: fvh; personal notes omit the field.| Issue | Grep pattern | Notes |
|-------|--------------|-------|
| Legacy id: | ^id: inside frontmatter block | Strip entire line |
| Bare placeholder tag | YAML tag value exactly 📝, 🌱, or 📝/🌱 | Remove if note has other useful tags; else leave |
| Null tag | YAML tag value literally null | Remove list entry |
| Templater leak | <% tp\. or \{\{title\}\} or \{\{date\}\} | Replace {{title}} with filename stem; strip <% tp.* %> |
| Corrupt emoji | Tag contains Unicode replacement char \ufffd | Flag for manual fix — don't guess |
| Missing FVH context | File under FVH/ without context: fvh | Add the line |
Before:
---
id: 20240118235900
tags: [🛠️/neovim]
---
After:
---
tags: [🛠️/neovim]
---
Before:
tags:
- 📝
- 🛠️/ansible
After:
tags:
- 🛠️/ansible
Before:
tags:
- 🗺️
After:
tags:
- 📝/moc
Use Edit with small targeted old_string / new_string replacements that preserve exact indentation. Never rewrite whole files when a line edit suffices — it minimizes the commit diff and makes reviews easy.
For bulk fixes across many files, drive from a script that emits one Edit call per file rather than running sed in Bash. The commit-per-category pattern (fix(tags): strip bare 📝 from 639 notes) relies on keeping all edits in one logical batch.
.obsidian/, .claude/, .git/, Files/. The safety hook enforces this.Notes/ or FVH/notes/ without verifying — they often don't need any.tools
Scaffold a new ComfyUI custom-node repo (pyproject, CI, release-please, vitest+pytest, JS extension skeleton) in the picker/gesture vein. Use when bootstrapping or init-ing a comfyui node pack.
tools
Orchestrate a ComfyUI node pack from idea to registry: scaffold, create + seed the repo, open the gitops adoption PR. Use when releasing or spinning up a new comfyui node pack.
testing
macOS EndpointSecurity/EDR high CPU & battery drain. Use when Kandji ESF / XProtect pegs a core; trace the exec storm via powermetrics + eslogger.
development
odiff pixel-by-pixel image diffing. Use when comparing screenshots, detecting visual regressions, diffing before/after PNGs, asserting golden images.