vault-templates

v2026.09.24

Obsidian Templater drift repair. Use when fixing unrendered `<% tp.file.cursor() %>` markers or replacing `{{title}}`/`{{date}}` placeholders.

GitHub
Install command
npx skhub add laurigates/vault-templates
Markdown
SKILL.md

Templater Convention & Drift Repair

When to Use This Skill

Use this skill when...Use the alternative instead when...
Repairing unrendered <% tp.file.cursor() %> / {{title}} markers committed in note bodiesStripping the same kind of markers inside YAML frontmatter — use vault-frontmatter
Auditing daily-note structure drift against the canonical Templater templateCreating new daily notes interactively via the running CLI — use vault-files
Fixing notes committed before Templater finished renderingReconnecting the cleaned-up notes into a hub afterwards — use vault-mocs

Obsidian's Templater plugin renders placeholder syntax when a new note is created. When rendering fails (plugin error, user dismissal, manual copy-paste), the literal markers get committed and persist. Fixing them is mechanical.

Unrendered Markers

MarkerMeaningFix
<% tp.file.cursor(N) %>Cursor position placeholderStrip the entire tag
<% tp.file.title %>Filename stemReplace with actual filename (no .md)
<% tp.date.now("YYYY-MM-DD") %>Today's dateReplace with the creation date from frontmatter, or the filename date for daily notes
{{title}}Filename stem (legacy)Replace with filename stem
{{date}}Today's date (legacy)Same as above
<% await tp.system.prompt(...) %>User promptStrip; requires user to refill

Detection

# Find any Templater leak
rg '<%\s*tp\.' --glob '*.md'
rg '\{\{title\}\}|\{\{date\}\}' --glob '*.md'

Fixing <% tp.file.cursor(1) %>

Before:

---
tags: [📝/notes]
---

<% tp.file.cursor(1) %>

After:

---
tags: [📝/notes]
---

Use Edit with old_string='\n\n<% tp.file.cursor(1) %>' and new_string='' (or adjust for trailing whitespace) — the cursor marker never has meaningful content around it.

Fixing {{title}} in daily notes

Before (file work/notes/2025-03-26.md):

# {{title}}

## Log

After:

# 2025-03-26

## Log

Use the filename stem (no .md). Don't replace {{title}} inside code blocks or quoted text — only in headings / body.

Canonical Template Files

The templates themselves live in Templates/ and should contain raw Templater syntax — never "fix" them. Only fix notes outside Templates/.

TemplateProducesSections
Daily.mdNotes/YYYY-MM-DD.mdQuick Links, Today's Focus, Work, Personal, Tomorrow's Prep, Navigation
MOC.mdZettelkasten/{Subject} MOC.mdTitle heading + sections
New.mdgeneral Zettelkasten notesFrontmatter + body stub
Work Daily.mdwork/notes/YYYY-MM-DD.mdLog, Thoughts, Discoveries, Todo, Recurring reminders

Daily Note Structure Drift

Personal daily notes created before 2025 usually lack ## Navigation and ## Tomorrow's Prep. Two remediation options:

  1. Retrofit template — add the missing sections to every old daily note. Usually not worth the diff; users rarely look at old daily notes.
  2. Leave as-is — document the change boundary in a single commit message and let old notes age.

Default to #2 unless the user specifically asks for retrofit.

Work Daily Note Drift

Work-namespace daily notes that contain literal {{title}} in the heading — fix these.

Safety

  • Never edit Templates/*.md when fixing leakage — templates are supposed to contain Templater syntax.
  • Never run a blanket sed -i 's/{{title}}/.../' — always use file-specific Edit calls so the title derivation is correct per file.
  • When you encounter <% tp.system.prompt(...) %>, don't guess the answer — flag for user.

Related Skills

  • vault-frontmatter — YAML-level fixes
  • vault-files — daily-note operations via Obsidian CLI
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

obsidian-plugin/skills/vault-templates

Default branch

main

Latest commit

1668324

Tree SHA

b2d4cc3