Generate intelligent content for PARA Obsidian vault templates. Use when asked to create new notes (project, area, resource, task, capture, daily, weekly-review, booking, checklist, itinerary, trip-research), populate template sections with AI-generated content, or understand what fields a template requires before creation.
Inherits all available tools
Additional assets for this skill
This skill inherits all available tools. When active, it can use any tool Claude has access to.
references/content-strategies.mdreferences/examples.mdreferences/template-catalog.mdBefore creating notes, understand what already exists:
# List existing areas
bun ${CLAUDE_PLUGIN_ROOT}/src/cli.ts list-areas --format json
# List existing projects (for task linking)
bun ${CLAUDE_PLUGIN_ROOT}/src/cli.ts list-projects --format json
# Show allowed tags from config
bun ${CLAUDE_PLUGIN_ROOT}/src/cli.ts list-tags --format json
CRITICAL: Classification vs Invention
When selecting areas/projects, you are CLASSIFYING content into existing categories, NOT inventing factual data:
Areas/Projects = CLASSIFICATION (analytical task)
Factual Data = INVENTION (requires user knowledge)
null when unknown, never guessVia MCP tools:
para_list_areas - Get existing areaspara_list_projects - Get existing projectspara_list_tags - Get allowed tagspara_scan_tags - See tags actually in useFor slash commands: Use AskUserQuestion to present existing areas/projects as options with descriptions of what domain they represent. Include "Other" for new classifications when content doesn't fit existing categories.
bun ${CLAUDE_PLUGIN_ROOT}/src/cli.ts template-fields project --format json
Returns required args, auto-filled fields, and body sections.
Ask focused questions matching the template type:
| Template | Key Questions |
|---|---|
| project | What's the goal? How will you know it's done? Which life domain does this belong to (analyze: Home/Work/Health/Finance/Learning/Family)? ← CLASSIFY into existing areas |
| area | What's your responsibility? What standards matter? |
| resource | Why does this resonate? What's the key insight? Which life domain is this resource for? ← CLASSIFY based on content domain |
| task | What's the outcome? What's the priority? Which project is this supporting (analyze task context)? ← CLASSIFY into existing projects or standalone |
Classification approach:
Content-Heavy (project, resource, weekly-review, daily): Generate paragraphs, bullet lists, [[wikilinks]]
Metadata-Heavy (task, booking, checklist, capture): Focus on frontmatter, minimal body content
CRITICAL: When generating wikilinks for frontmatter args, do NOT include quotes:
--arg "Area=[[Product]]"--arg "Area=\"[[Product]]\""This ensures Dataview queries work correctly.
bun ${CLAUDE_PLUGIN_ROOT}/src/cli.ts create --template project \
--title "Launch Dark Mode" \
--arg "Area=[[Product]]" \
--arg "Target completion date (YYYY-MM-DD)=2025-03-31" \
--content '{"Why This Matters": "Dark mode reduces eye strain...", "Success Criteria": "- [ ] Theme toggle works\n- [ ] Persists across sessions"}'
bun ${CLAUDE_PLUGIN_ROOT}/src/cli.ts frontmatter validate "Launch Dark Mode.md" --format json
| Error | Resolution |
|---|---|
| Template not found | Run bun ${CLAUDE_PLUGIN_ROOT}/src/cli.ts templates to list available templates |
| Missing required arg | Run bun ${CLAUDE_PLUGIN_ROOT}/src/cli.ts template-fields <template> to discover requirements |
| Section not injected | Heading may not exist in template |
| Vault not git repo | Ensure PARA_VAULT is an initialized git repository |
Load these as needed based on the task:
./references/template-catalog.md — Full catalog of all 11 templates with required args and body sections./references/content-strategies.md — Template-specific content generation strategies (goal clarification, success criteria, risk identification)./references/examples.md — Complete CLI examples for project, area, resource, task, captureThe convert command uses classification-based prompting to intelligently populate area/project fields:
bun ${CLAUDE_PLUGIN_ROOT}/src/cli.ts convert note.md --template project
# Vault context: 5 areas, 12 projects, 20 tags
# LLM analyzes content and classifies into existing [[Health]] area
# Example: "fitness tracking" content → [[Health]] (not "Wellness" or "Fitness")
How classification works:
Classification examples from prompt:
For manual note creation via slash commands, use classification-based questioning:
Example:
// 1. Fetch existing areas
const { areas } = await para_list_areas({ response_format: "json" });
// 2. Analyze content and ask user (with domain context)
const answer = await AskUserQuestion({
question: "This content appears to be about fitness tracking. Which life domain should it belong to?",
header: "Area",
options: [
{ label: "Health", description: "Ongoing health & wellness management (recommended for fitness)" },
{ label: "Personal", description: "Personal development & self-improvement" },
{ label: "Home", description: "Home responsibilities & maintenance" }
],
multiSelect: false
});
// 3. Create with classified area
await para_create({
template: "project",
title: "My Project",
args: { "Area": `[[${answer}]]` } // No quotes!
});
Classification guidance:
Tags are hard constrained - must come from config:
# Get allowed tags
const { tags } = await para_list_tags({ response_format: "json" });
# LLM must choose from: project, area, resource, task, daily, journal...
# NO new tags allowed