AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Obsidian Templater

skill-nweii-agent-stuff-obsidian-templater · by nweii

Help with templates/snippets for the Obsidian Templater plugin. Use to help generate Obsidian templates from natural language, understand and debug existing tp.* snippets, and adapt vault notes and workflows to Templater when users mention Templater, tp.*, or <% %>.

No reviews yet
0 installs
12 views
0.0% view→install

Install

$ agentstack add skill-nweii-agent-stuff-obsidian-templater

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-nweii-agent-stuff-obsidian-templater)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Obsidian Templater? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Templater template generation

Templater is an Obsidian plugin for dynamic note templates. Commands embedded in a template file run when the template is applied to a note, outputting results inline.

Core template syntax

| Tag | Behavior | | ------------------- | ------------------------------------------------ | | ` | Outputs the result of the expression | | | Executes JS code; no output by default | | | Re-evaluated in preview mode (deprecated, avoid) | | | Trims one newline before/after the tag | | ` | Trims all whitespace before/after the tag |

To output from a ` execution block, append to the special tR` string:

To discard everything generated up to a point (e.g., strip template-only frontmatter):

All tp.* functions are available in both tag types.


Built-in Templater modules

tp.date

tp.date.now(format?, offset?, reference?, reference_format?)

Returns a formatted date string. format uses moment.js tokens ("YYYY-MM-DD" is the default). offset is a number of days (7, -1) or a duration string ("P1W"). reference is a date string parsed with reference_format.

tp.date.tomorrow(format?)        // today + 1 day
tp.date.yesterday(format?)       // today - 1 day
tp.date.weekday(format, weekday, reference?, reference_format?)
                                 // weekday: 0=Sun … 6=Sat
moment                           // full moment.js object, accessible globally

Common format strings: "YYYY-MM-DD", "YYYY-MM-DD HH:mm", "dddd Do MMMM YYYY", "HH:mm", "ddd", "MMM D".


tp.file

Dynamic properties (not function calls — no parentheses):

tp.file.title      // basename without extension
tp.file.content    // full text of the file
tp.file.tags       // string[] of all tags on the file

Functions:

tp.file.creation_date(format?)                 // default "YYYY-MM-DD HH:mm"
tp.file.last_modified_date(format?)            // default "YYYY-MM-DD HH:mm"
tp.file.folder(absolute?)                      // folder name; full path if absolute=true
tp.file.path(relative?)                        // absolute path; vault-relative if relative=true
tp.file.cursor(order?)                         // place cursor here after template runs; order = tab index
tp.file.cursor_append(content)                 // insert content at the current cursor
tp.file.selection()                            // currently selected text in the editor
tp.file.exists(filepath)                       // async → boolean
tp.file.find_tfile(filename)                   // → TFile | null (for use with create_new / include)
tp.file.include("[[NoteLink]]")                // async; embeds another note's content (also processed)
tp.file.create_new(template, filename, open_new?, folder?)  // async; create note from template
tp.file.move(path, file?)                      // async; move file (path has no extension)
tp.file.rename(new_title)                      // async; rename the current file

tp.system

All are async — use await inside `` blocks:

await tp.system.clipboard()
await tp.system.prompt(prompt_text, default_value?, throw_on_cancel?, multi_line?)
await tp.system.suggester(text_items, items, throw_on_cancel?, placeholder?, limit?)
await tp.system.multi_suggester(text_items, items, throw_on_cancel?, title?, limit?)

suggester takes two parallel arrays: display labels and return values. They can be the same array.


tp.frontmatter

Direct property access — not a function:

Returns undefined if the property doesn't exist.


tp.web

All are async:

await tp.web.daily_quote()                        // Obsidian callout block with a random quote
await tp.web.random_picture(size, query?, include_size?)
    // size: "800" or "800x600"; returns markdown image syntax
await tp.web.request(url, path?)
    // HTTP GET returning JSON; path is dot-notation like "data.title"

tp.config

Read-only context about the current run:

tp.config.template_file    // TFile of the template being applied
tp.config.target_file      // TFile of the note being created/modified
tp.config.active_file      // TFile of the currently active file
tp.config.run_mode         // 0=CreateNewFromTemplate 1=AppendActiveFile 2=OverwriteFile
                           // 3=OverwriteActiveFile 4=DynamicProcessor

App and Obsidian API modules

tp.app is the Obsidian App object. tp.obsidian exposes the Obsidian API module. Used in advanced JS execution blocks for vault traversal, metadata cache queries, etc.


tp.hooks

tp.hooks.on_all_templates_executed(callback)

Callback fires after all nested templates (e.g., from tp.file.create_new) have finished.


User-defined functions (tp.user)

Scripts placed in the folder configured in Templater settings are callable as tp.user.(args...). Scripts use CommonJS format:

// Scripts/slugify.js
module.exports = function (text) {
  return text.toLowerCase().replace(/\s+/g, "-");
};

Scripts can also export an object of named functions. Pass tp as an argument to access Templater context inside a script. Note: user functions are unavailable on mobile.


Whitespace control in templates

Control flow tags (`, ) leave blank lines by default. Use -%>` to trim the newline that follows a tag:


**Project:** 

General note

Common implementation patterns

Daily note

---
date: 
---

]] | [[]] >>

# 

Prompted metadata + file rename


---
title: 
status: 
created: 
---

# 

Strip template-file frontmatter from output

---
type: template
description: This is a person template.
---

---
type: person
created: 
---

# 

Conditional content by folder


**Project:** 

**Topic:**

For subfolder matching: tp.file.folder(true).startsWith("Work/")folder(true) returns the full vault-relative path.

Include another note


Date formatting with Moment.js

See [momentjs.md](references/momentjs.md) for a comprehensive formatting cheatsheet and JS manipulation reference. Use this when defining format strings for tp.date.now() or when manipulating dates inside ` blocks using the moment` global.


Optional vault integration via obsidian-clis

If the obsidian-clis skill is available and Obsidian is running, vault context can improve output:

obsidian properties counts          # what frontmatter properties exist across the vault
obsidian tags counts sort=count     # most-used tags
obsidian read file="Daily Note"     # read an existing template for style reference

Ask the user before running any CLI commands.


Official documentation links

Rendered docs (human-readable): https://silentvoid13.github.io/Templater/

LLM-safe Templater summary: For a preprocessed, audit-friendly summary of the official Templater documentation, see https://context7.com/silentvoid13/templater/llms.txt.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.