Templates
Manages note templates for Obsidian vaults via obsidian:templates commands and templates.py CLI — listing, creating, applying, editing, and deleting templates with variable substitution ({{date}}, {{title}}, {{up}}, custom --var key=value) and Templater plugin support. Use this skill to list available templates (plugin + vault), show template content, create or delete custom templates, apply a template to a new note with variable substitution, check Templater plugin status, or understand template syntax (Templater vs fallback). Always consult for obsidian:templates commands, template creation/application, or when creating new notes from templates. This skill manages templates only — not frontmatter property definitions (use frontmatter), not note-type configurations (use note-types), not vault config files (use config), not note validation (use validate).From its SKILL.md
npx -y skills add wep4you/wep4you-agent-skills --skill templatesAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
8.9 KB, as published. Nobody here has run it
Obsidian Templates
Manage note templates with support for Templater plugin and simple variable substitution.
Slash Commands (v1.1.0)
| Command | Description |
|---|---|
obsidian:templates | List vault templates (default) |
obsidian:templates list | List vault templates (explicit) |
obsidian:templates list --source plugin | List only plugin templates |
obsidian:templates list --source all | List all templates |
obsidian:templates show <name> | Show template content |
obsidian:templates create <name> | Create new template |
obsidian:templates edit <name> | Edit template in editor |
obsidian:templates delete <name> | Delete template |
obsidian:templates apply <template> <file> | Apply template to file |
Quick Start
# List all available templates
uv run templates_command.py --vault .
# Show template content
uv run templates_command.py --vault . show map/basic
# Create new template
uv run templates_command.py --vault . create my-template
# Apply template to file
uv run templates_command.py --vault . apply map/basic "Atlas/Maps/New Map.md" --var up="Home" --var title="New Map"
Features
Template Discovery
The skill automatically discovers templates from multiple locations:
-
Plugin Templates: Pre-built templates in
templates/<type>/map/basic.md- Map of Content templatedot/basic.md- Atomic note templatesource/basic.md- Source note templatemap/templater.md- Map with Templater syntax
-
Vault Templates: Custom templates in your vault (searched in order)
x/templates/- Created by/obsidian:init(priority).obsidian/templates/Templates/templates/
Source Filtering
Use --source to filter templates by origin:
# List vault templates (default)
uv run templates_command.py --vault .
# List only plugin templates
uv run templates_command.py --vault . --source plugin
# List all templates (vault + plugin)
uv run templates_command.py --vault . --source all
Templater Support
The skill automatically detects if Templater plugin is installed:
✅ Detects: .obsidian/plugins/templater-obsidian/
Templater Syntax Supported:
<% tp.date.now("YYYY-MM-DD") %>- Current date<% tp.date.tomorrow() %>- Tomorrow's date<% tp.file.title %>- File name
Fallback Syntax:
{{date}}- Current date (YYYY-MM-DD){{time}}- Current time (HH:MM){{datetime}}- Date and time{{title}}- File name{{up}}- Parent note (custom variable)- Any custom variable via
--var key=value
Commands
List Templates
uv run skills/templates/scripts/templates.py --list
Output:
Name Type Source
============================================================
dot/basic dot plugin
map/basic map plugin
map/templater map plugin
source/basic source plugin
my-custom custom vault
Total: 5 templates
Templater: ✅ installed
Show Template
uv run skills/templates/scripts/templates.py --show map/basic
Create Template
# Create with default content
uv run skills/templates/scripts/templates.py --create my-template
# Create with custom content
uv run skills/templates/scripts/templates.py --create my-template --content "# {{title}}"
Edit Template
uv run skills/templates/scripts/templates.py --edit my-template
Opens template in $EDITOR (default: vim)
Delete Template
uv run skills/templates/scripts/templates.py --delete my-template
Note: Only vault templates can be deleted (not plugin templates)
Apply Template
# Basic usage
uv run skills/templates/scripts/templates.py --apply map/basic "New Map.md"
# With variables
uv run skills/templates/scripts/templates.py --apply map/basic "Atlas/Maps/PKM.md" \
--var up="Home" \
--var title="PKM System"
# Source template with metadata
uv run skills/templates/scripts/templates.py --apply source/basic "Sources/Article.md" \
--var up="Sources" \
--var author="John Doe" \
--var url="https://example.com"
Template Variables
Built-in Variables
| Variable | Value | Example |
|---|---|---|
{{date}} | Current date | 2025-01-15 |
{{time}} | Current time | 14:30 |
{{datetime}} | Date and time | 2025-01-15 14:30 |
{{title}} | File name (without .md) | My Note |
Custom Variables
Pass custom variables with --var:
--var up="Parent Note" \
--var collection="My Collection" \
--var author="Jane Smith"
Example Templates
Map of Content (map/basic.md)
---
type: map
up: "[[{{up}}]]"
created: {{date}}
daily: "[[{{date}}]]"
collection:
related: []
---
# {{title}}
## Overview
## Links
## Notes
Atomic Note (dot/basic.md)
---
type: dot
up: "[[{{up}}]]"
created: {{date}}
daily: "[[{{date}}]]"
collection:
related: []
---
# {{title}}
## Context
## Key Points
## Connections
Source Note (source/basic.md)
---
type: source
up: "[[{{up}}]]"
created: {{date}}
daily: "[[{{date}}]]"
collection:
related: []
author: {{author}}
url: {{url}}
---
# {{title}}
## Summary
## Key Takeaways
## Quotes
## Notes
Integration with Claude Code
When user requests template operations:
- List templates: Show available templates from plugin and vault
- Apply template: Substitute variables and create note
- Create template: Add to vault templates directory
- Detect Templater: Check plugin status and use appropriate syntax
Example Workflow
User: "Create a new map note called 'PKM System' under Home"
1. Check available templates (--list)
2. Apply map/basic template
3. Substitute variables: up="Home", title="PKM System"
4. Create file in appropriate location
Configuration
Templates are discovered automatically. No configuration needed.
Custom Template Location
To use custom vault templates:
- Create directory:
.obsidian/templates/orTemplates/ - Add
.mdfiles - Templates appear in
--listwith source="vault"
Templater Plugin Integration
If Templater is installed (.obsidian/plugins/templater-obsidian/):
- Skill shows "✅ Templater installed" in
--list - Supports Templater syntax in templates
- Falls back to simple
{{variable}}syntax if not installed
Supported Templater Functions
tp.date.now()- Current datetp.date.tomorrow()- Tomorrowtp.file.title- File name
Other Templater functions will be passed through as-is.
Templater vs Fallback: When to Use Which
Is Templater plugin installed? (.obsidian/plugins/templater-obsidian/)
├── Yes → Use Templater syntax (dynamic dates, file info)
│ <% tp.date.now("YYYY-MM-DD") %>
│ <% tp.file.title %>
└── No → Use fallback syntax (static substitution)
{{date}}, {{title}}, {{up}}
Side-by-Side Syntax Comparison
| Feature | Templater | Fallback |
|---|---|---|
| Current date | <% tp.date.now("YYYY-MM-DD") %> | {{date}} |
| Tomorrow | <% tp.date.tomorrow() %> | (not available) |
| File title | <% tp.file.title %> | {{title}} |
| Custom var | (use Templater user scripts) | {{varname}} + --var varname=value |
Recommendation: Use fallback syntax for portability. Use Templater only when you need dynamic features (date calculations, file system access).
Interactive Mode
Terminal
In terminal mode, the interactive wizard guides you through template creation and management.
Claude Code / Non-Interactive
When called without a terminal (e.g., in Claude Code), JSON is returned:
{
"interactive_required": true,
"action": "create",
"config_schema": {...}
}
Use --config='...' or --yes to pass values directly.
Exit Codes
0: Success1: Error (template not found, creation failed, etc.)