name: create trigger: /create description: Create a new note from template with filled frontmatter and wiki-link suggestions version: 1.0.0
/create -- Note Creator
Creates a new note by selecting the appropriate template, filling frontmatter, substituting all template variables, suggesting wiki-links to related notes, and placing the file in the correct target folder. Supports all 12 note types defined in the vault.
Invocation style: Hybrid -- natural language when intent is clear, guided prompts when ambiguous. Show-and-proceed transparency: Claude announces template selection and target folder, then creates without waiting for confirmation.
Usage
Natural language (Claude infers type and title):
"create a tool note about Docker" -> type=tool, title=Docker
"new project for Website Relaunch" -> type=project, title=Website Relaunch
"add a zettel about emergent behavior" -> type=zettel, title=Emergent Behavior
"log meeting with Sarah about Q2 plans" -> type=meeting, title=Sarah Q2 Plans
Explicit invocation:
/create tool Docker
/create project Website Relaunch
/create decision API Strategy
Guided (when ambiguous):
/create
Claude asks: "What type of note? (project, area, resource, tool, zettel, person, decision, meeting, code-snippet, daily, weekly, monthly)" then asks for the title.
Template Mapping
| Type | Template File | Target Folder | Filename Prefix | Example Filename |
|---|---|---|---|---|
| project | Project.md | 01 - Projects/ | (none) | Website Relaunch.md |
| area | Area.md | 02 - Areas/ | (none) | Health.md |
| resource | Resource.md | 03 - Resources/ | (none) | Book -- Clean Code.md |
| tool | Tool.md | 03 - Resources/ | Tool -- | Tool -- Docker.md |
| zettel | Zettel.md | 03 - Resources/ | Zettel -- | Zettel -- Emergent Behavior.md |
| person | Person.md | 03 - Resources/ | Person -- | Person -- Sarah Chen.md |
| decision | Decision.md | 01 - Projects/ | Decision -- | Decision -- API Strategy.md |
| meeting | Meeting.md | 01 - Projects/ | Meeting -- | Meeting -- Standup 2026-03-07.md |
| code-snippet | Code Snippet.md | 03 - Resources/ | Snippet -- | Snippet -- Quicksort.md |
| daily | Daily Note.md | 00 - Inbox/Daily Notes/ | (none) | 2026-03-07.md |
| weekly | Weekly Review.md | 00 - Inbox/ | (none) | Weekly Review 2026-03-07.md |
| monthly | Monthly Review.md | 00 - Inbox/ | (none) | Monthly Review 2026-03-07.md |
Execution Flow
Claude follows these steps when /create is invoked:
-
Ensure fresh indexes: Call
ensureFreshIndexes('.')to refresh vault indexes if stale (older than 5 minutes). -
Determine note type: Parse user input to identify the note type. If ambiguous, ask the user to specify from the 12 available types.
-
Look up template info: Call
getTemplateInfo(type)to get the template filename, target folder, and filename prefix. -
Read template file: Load template content from
05 - Templates/{template}. -
Compute date variables: Call
getDateVars(today)to get{ date, yesterday, tomorrow, time }. -
Build filename: Call
buildFileName(type, title, date)to construct the correct filename per naming conventions. -
Substitute template variables: Call
substituteVariables(content, vars)withvars = { date, title, time, yesterday, tomorrow }. This handles:- Standard:
{{date}},{{title}},{{time}},{{yesterday}},{{tomorrow}} - Templater-style:
{{date:YYYY-MM-DD}},{{date:MMMM YYYY}},{{date:ww}},{{date:YYYY}}
- Standard:
-
Load vault indexes: Read
vault-index.jsonandtag-index.jsonfrom.claude/indexes/. -
Suggest wiki-links: Call
suggestWikiLinks(type, tags, vaultIndex, tagIndex)to generate 3-5 ranked suggestions based on shared tags, with the relevant MOC boosted (+2 score). -
Write note file: Write the substituted content to
{folder}/{filename}. -
Check MOC format: Call
mocUsesDataview('.', mocPath)on the relevant MOC. If the MOC uses Dataview queries, the note will appear automatically via its frontmatter type/tags. If the MOC is static (no Dataview), add a wiki-link to the MOC (AUTO zone governance). -
Re-scan: Call
scan('.')to update indexes with the new note. -
Report to user: Announce:
- Template used and target folder
- Created file path
- 3-5 wiki-link suggestions with reasons (shared tags, relevant MOC)
- Whether the note was added to a MOC (or will appear via Dataview)
Code Example
const { ensureFreshIndexes, getTemplateInfo, buildFileName, getDateVars,
substituteVariables, suggestWikiLinks, mocUsesDataview } = require('./.agents/skills/create/create-utils.cjs');
const { scan } = require('./.agents/skills/scan/scanner.cjs');
const { loadJson } = require('./.agents/skills/scan/utils.cjs');
const fs = require('fs');
const path = require('path');
// 1. Ensure indexes are fresh
ensureFreshIndexes('.');
// 2-3. Determine type and get template info
const type = 'tool'; // from user input
const title = 'Docker';
const info = getTemplateInfo(type);
// info = { template: 'Tool.md', folder: '03 - Resources', prefix: 'Tool -- ' }
// 4. Read template
const templateContent = fs.readFileSync(path.join('05 - Templates', info.template), 'utf8');
// 5. Compute date vars
const today = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
const vars = getDateVars(today);
vars.title = info.prefix + title; // "Tool -- Docker"
// 6. Build filename
const filename = buildFileName(type, title, today);
// "Tool -- Docker.md"
// 7. Substitute variables
const content = substituteVariables(templateContent, vars);
// 8. Load indexes
const vaultIndex = loadJson('.claude/indexes/vault-index.json');
const tagIndex = loadJson('.claude/indexes/tag-index.json');
// 9. Suggest wiki-links
const suggestions = suggestWikiLinks(type, ['tool'], vaultIndex, tagIndex, 5);
// 10. Write file
const targetPath = path.join(info.folder, filename);
fs.writeFileSync(targetPath, content, 'utf8');
// 11. Check MOC
const usesDataview = mocUsesDataview('.', '06 - Atlas/MOCs/Tools MOC.md');
// 12. Re-scan
scan('.');
Edge Cases
- Unknown type: Ask the user to specify from the list of 12 supported types. Do not guess.
- Template file not found: Report error with the expected template path. Do not create a blank note.
- File already exists: Warn the user that a note with that name already exists in the target folder. Ask whether to open the existing note or create with a modified name.
- Empty title: For types that require a title (all except daily), ask the user to provide one.
- Special characters in title: Use the title as-is in the filename (Obsidian handles special characters in filenames).
Limitations
- Does not edit note body text (NEVER zone governance). Only fills template variables and frontmatter.
- Does not support custom templates beyond the 12 defined types. New template types require updating CLAUDE.md and create-utils.cjs.
- Does not auto-create folders. Target folders must already exist in the vault structure.
- Wiki-link suggestions are based on tag overlap only (Level 1). Semantic similarity deferred to Phase 4.
chat Comments (0)
Sign in to join the discussion and leave a comment.
Skill Details
Related Skills
Build your own?
Join 12,000+ developers contributing to the Claude ecosystem.
No comments yet. Be the first to share your thoughts!