Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:42:13 +08:00
commit 43c7c7f639
25 changed files with 4114 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
# Shared Create Workflow
Reference file for `/para:create-*` commands.
## File Naming Convention (REQUIRED)
See: `naming-convention.md` in this folder.
**Standard**: Title Case with Spaces → `Folder/Title Case with Spaces.md`
| User Input | Filename |
|------------|----------|
| `"tassie holiday 2025"` | `Tassie Holiday 2025.md` |
| `"react best practices"` | `React Best Practices.md` |
| `"learn piano"` | `Learn Piano.md` |
**Always convert user input to Title Case before creating files.**
## PARA Principle: Don't Over-Organize
Per Tiago Forte's PARA method:
- "Keep it to 4-6 items per level maximum"
- "Resources don't need perfect organization. They just need to be findable."
**Rule**: Let structure emerge naturally. Don't create folders preemptively.
## Subfolder Logic by Type
| Type | Subfolder Behavior |
|------|-------------------|
| **Project** | Always create in `01_Projects/` root |
| **Area** | Always create in `02_Areas/` root |
| **Resource** | Suggest existing subfolders if they match title |
## Resource Subfolder Matching
Only for Resources - if user has existing subfolders:
1. List subfolders in `03_Resources/` using `mcp__MCP_DOCKER__obsidian_list_files_in_dir`
2. If subfolders exist, check if title contextually matches any
3. **If match** → Ask user with `AskUserQuestion`:
- Matching subfolder(s)
- Root folder option
4. **If no match or no subfolders** → Create in root silently
**Never offer "create new folder"** - structure should emerge from repeated use.
### Matching Examples
| Title | Existing Subfolders | Action |
|-------|---------------------|--------|
| "React Best Practices" | Technical/, Work/ | Ask: Technical/ or root? |
| "Docker Tutorial" | Technical/, Work/ | Ask: Technical/ or root? |
| "Fishing Trip Guide" | Technical/, Work/ | Create in root (no match) |
| "TypeScript Patterns" | (none) | Create in root |
## Argument Parsing
Use positional arguments: `$1` (title), `$2`, `$3` for optional fields.
- If arg provided → use it
- If arg missing → ask with `AskUserQuestion`
## Output Format
```
✅ Created: [[Title]]
📁 Location: [folder]/[filename].md
📋 Type: [project|area|resource]
```
## MCP Tools
- `mcp__MCP_DOCKER__obsidian_list_files_in_dir` - Check subfolders (Resources only)
- `mcp__MCP_DOCKER__obsidian_append_content` - Create note

View File

@@ -0,0 +1,106 @@
# File Naming Convention
Standard for all para-brain note creation.
## Convention: Title Case with Spaces
**Format**: `Title Case with Spaces.md`
### Rules
1. **Use spaces** - Not underscores, not hyphens
2. **Title Case** - Capitalize first letter of each significant word
3. **No special characters** - Avoid `/ \ : * ? " < > |`
4. **Dates in ISO format** - Use `YYYY-MM-DD` when dates are part of title
5. **Numbers are fine** - `2025 Tassie Holiday.md`
### Examples
| User Input | Filename |
|------------|----------|
| "tassie holiday 2025" | `Tassie Holiday 2025.md` |
| "react best practices" | `React Best Practices.md` |
| "learn piano" | `Learn Piano.md` |
| "Q1 2025 goals" | `Q1 2025 Goals.md` |
| "nathan's birthday" | `Nathans Birthday.md` |
### Title Case Rules
- Capitalize: First word, nouns, verbs, adjectives, adverbs
- Lowercase: Articles (a, an, the), prepositions (in, on, at), conjunctions (and, but, or)
- Exception: Always capitalize first and last word
### Why This Convention
1. **Most readable** - Natural language, easy to scan
2. **Obsidian-friendly** - Handles spaces perfectly in wikilinks `[[Title Case]]`
3. **No cognitive load** - Write titles naturally
4. **Consistent** - Same format across all note types
5. **Unique names prevent conflicts** - Descriptive names avoid wikilink resolution issues
### Conversion Function (Pseudocode)
```
function toTitleCaseFilename(input):
1. Trim whitespace
2. Remove special characters: / \ : * ? " < > |
3. Replace apostrophes with nothing (nathan's → nathans)
4. Convert to Title Case
5. Append .md
return filename
```
### What NOT to Do
| Wrong | Right |
|-------|-------|
| `tassie_holiday_2025.md` | `Tassie Holiday 2025.md` |
| `tassie-holiday-2025.md` | `Tassie Holiday 2025.md` |
| `TASSIE HOLIDAY 2025.md` | `Tassie Holiday 2025.md` |
| `tassie holiday 2025.md` | `Tassie Holiday 2025.md` |
---
## Critical: Avoid Duplicate Filenames
### Why This Matters
Obsidian wikilinks `[[Note Name]]` search **the entire vault** by filename. If two files have the same name in different folders, wikilinks will resolve to the wrong file.
### Generic Names to Avoid
**Never use these generic names:**
- `Overview.md`
- `README.md`
- `Index.md`
- `Notes.md`
- `Project.md`
- `Ideas.md`
**Instead, use descriptive, specific names:**
- `2025 Tasmania Holiday.md` (not `Overview.md`)
- `React Best Practices.md` (not `Notes.md`)
- `Levi School Term 1.md` (not `Project.md`)
### Example: Project Overview Files
```
❌ BAD - Causes wikilink conflicts:
/01_Projects/Tassie Holiday/Overview.md
/01_Projects/Home Renovation/Overview.md
/01_Projects/Learn Piano/Overview.md
✅ GOOD - Unique, descriptive names:
/01_Projects/2025 Tassie Holiday/2025 Tasmania Holiday.md
/01_Projects/Home Renovation/Home Renovation Project.md
/01_Projects/Learn Piano/Learn Piano Journey.md
```
### Rule of Thumb
**Include the project/area name in the filename:**
- Project folder: `My Project/`
- Main note: `My Project.md` or `My Project Overview.md`
- Never just: `Overview.md`
This ensures wikilinks `[[My Project]]` work correctly across your entire vault.

View File

@@ -0,0 +1,138 @@
# Note Validation
Validates frontmatter against PARA schemas. Call this when reading a note to detect outdated formats.
## Schemas by Type
### Project Schema (Required Fields)
```yaml
title: string # Required
created: date # Required
type: project # Required
status: string # Required: active, on-hold, completed, archived
start_date: date # Required
target_completion: date # Required
area: "[[Link]]" # Required
reviewed: date # Required
review_period: string # Optional, default 7d
tags: [project] # Required
```
### Area Schema (Required Fields)
```yaml
title: string # Required
created: date # Required
type: area # Required
status: string # Required: active
reviewed: date # Required
review_period: string # Optional, default 14d
tags: [area] # Required
```
### Resource Schema (Required Fields)
```yaml
title: string # Required
created: date # Required
type: resource # Required
source: string # Required: book, article, video, course, podcast, paper, web
areas: ["[[Link]]"] # Required - array of area links (NEW)
reviewed: date # Required (NEW)
tags: [resource] # Required
```
### Task Schema (Required Fields)
```yaml
title: string # Required
created: date # Required
type: task # Required
task_type: string # Required: task, reminder, habit, chore
status: string # Required: not-started, in-progress, blocked, done, cancelled
priority: string # Required: low, medium, high, urgent
effort: string # Required: small, medium, large
reviewed: date # Required
tags: [task] # Required
```
## Validation Function
When a command reads a note:
1. **Check `type:` field exists** - If missing, note is unformatted
2. **Look up schema for that type**
3. **Compare frontmatter to schema**
4. **Return missing/outdated fields**
## Validation Response Format
```markdown
### Note Validation: [[Note Title]]
**Type**: resource
**Status**: ⚠️ Needs update
**Missing fields**:
- `areas` - Required array of linked areas
- `reviewed` - Last review date
**Would you like to update this note?**
```
## Update Prompt
When validation finds issues, offer to fix:
```markdown
I can add the missing fields:
- `areas`: Which area(s) does this relate to?
- `reviewed`: I'll set to today's date
Update now? (y/n)
```
## How Commands Use This
```markdown
### In search.md, process.md, review.md:
After reading a note with `obsidian_get_file_contents`:
1. Parse frontmatter
2. Check against schema (see above)
3. If missing required fields:
- Show validation warning
- Ask if user wants to update
4. If user says yes:
- Prompt for missing values
- Use `obsidian_patch_content` to update frontmatter
5. Continue with original command purpose
```
## Common Migration Patterns
### Old Resource → New Resource
**Missing**: `areas`, `reviewed`
**Fix**:
1. Ask "Which area(s) does this resource relate to?"
2. Set `reviewed: [today]`
3. Patch frontmatter
### Unformatted Note → Typed Note
**Missing**: Everything
**Fix**:
1. Ask "What type is this? (project/area/resource/task)"
2. Apply appropriate template schema
3. Prompt for required fields by type
## Token Efficiency
- Only validate when note is already being read
- Don't re-validate if `reviewed` date is recent (< 7 days)
- Batch field prompts into single question when possible

23
commands/capture.md Normal file
View File

@@ -0,0 +1,23 @@
---
description: $ARGUMENTS - Quick capture to Obsidian inbox with PARA-compliant frontmatter
allowed-tools: Read, mcp__MCP_DOCKER__obsidian_append_content
---
# Quick Capture to Second Brain
Capture a new item to `00_Inbox/` using the template at [templates/capture.md](../templates/capture.md).
## Input
The user's capture: **$ARGUMENTS**
## Process
1. **Determine resonance** - Why is this worth saving?
- inspiring, useful, personal, or surprising
2. **Assess urgency** - high (24h), medium (few days), low (no pressure)
3. **Generate title** → Convert to Title Case (see `_shared/naming-convention.md`)
4. **Read template** at `templates/capture.md`
5. **Replace Templater prompts** with: title, $ARGUMENTS content, resonance, urgency
6. **Create file** in `00_Inbox/[Title].md` using `obsidian_append_content`
7. **Confirm**: "Captured to inbox: [[Title]] - Process within 48h with /para:process"

31
commands/create-area.md Normal file
View File

@@ -0,0 +1,31 @@
---
description: Create a new PARA area note for ongoing responsibilities
argument-hint: [title]
allowed-tools: Read, mcp__MCP_DOCKER__obsidian_list_files_in_dir, mcp__MCP_DOCKER__obsidian_append_content, AskUserQuestion
---
# Create Area Note
Create an area in `02_Areas/` using the template at [templates/area.md](../templates/area.md).
Areas are **ongoing responsibilities** with **no end date**.
## Arguments
- `$1` - Title (required)
**Examples:**
```
/para:create-area "Health & Fitness"
/para:create-area "Career Development"
/para:create-area "Melanie & Relationship"
```
## Process
1. **Parse title** → Convert to Title Case (see `_shared/naming-convention.md`)
2. **Read template** at `templates/area.md`
3. **Replace Templater prompts** with parsed values
4. **Create file** in `02_Areas/[Title].md` using `obsidian_append_content`
5. **Confirm** with location
6. **Suggest**: "Would you like to create a project within this area?"

View File

@@ -0,0 +1,36 @@
---
description: Create a new PARA project note with deadline and area
argument-hint: [title] [target-date?] [area?]
allowed-tools: Read, mcp__MCP_DOCKER__obsidian_list_files_in_dir, mcp__MCP_DOCKER__obsidian_append_content, AskUserQuestion
---
# Create Project Note
Create a project in `01_Projects/` using the template at [templates/project.md](../templates/project.md).
Projects have **end dates** and can be **finished**.
## Arguments
- `$1` - Title (required)
- `$2` - Target completion date (optional, ask if missing)
- `$3` - Related area (optional, ask if missing)
**Examples:**
```
/para:create-project "2025 Tassie Holiday" 2025-12-20 Travel
/para:create-project "Website Redesign" 2025-03-01
/para:create-project "Learn Piano"
```
## Process
1. **Parse arguments** - Title (→ Title Case), target date, area
2. **If target date missing** → Ask with options: "1 week", "1 month", "3 months", "Custom"
3. **If area missing** → List existing areas from `02_Areas/`, include "None / Create new"
4. **Read template** at `templates/project.md`
5. **Replace Templater prompts** with parsed values
6. **Create file** in `01_Projects/[Title].md` using `obsidian_append_content`
7. **Confirm** with location and suggest first action
**Naming**: See `_shared/naming-convention.md` for Title Case rules

View File

@@ -0,0 +1,51 @@
---
description: Create a new PARA resource note for reference material
argument-hint: [title] [source-type?]
allowed-tools: Read, mcp__MCP_DOCKER__obsidian_list_files_in_dir, mcp__MCP_DOCKER__obsidian_append_content, AskUserQuestion
---
# Create Resource Note
Create a resource in `03_Resources/` using the template at [templates/resource.md](../templates/resource.md).
Resources are **reference material** and **topics of interest**.
## Arguments
- `$1` - Title (required)
- `$2` - Source type (optional): book, article, video, course, podcast, paper, web
**Examples:**
```
/para:create-resource "TypeScript Best Practices" article
/para:create-resource "Deep Work by Cal Newport" book
/para:create-resource "NetworkChuck Docker Tutorial" video
```
## Process
1. **Parse arguments** - Title (→ Title Case), source type
2. **If source type missing** → Ask with options: book, article, video, course, podcast, paper, web
3. **Based on type, ask follow-ups**:
- book/article/paper → "Who's the author?"
- video/course/podcast/web → "What's the URL?" (optional)
4. **Ask for areas** (required):
- List existing areas from `02_Areas/` using `obsidian_list_files_in_dir`
- Ask "Which area(s) does this relate to?" with multi-select
- Resources MUST link to at least one area
- Can link to multiple areas (array in frontmatter)
5. **Smart subfolder check**: List `03_Resources/` subfolders, offer if match exists, else use root
6. **Read template** at `templates/resource.md`
7. **Replace Templater prompts** with parsed values, including `areas:` array
8. **Create file** using `obsidian_append_content`
9. **Suggest**: "Ready to capture key insights with Progressive Summarization?"
## Frontmatter Format
```yaml
areas:
- "[[Primary Area]]"
- "[[Secondary Area]]" # if multiple selected
```
**Naming**: See `_shared/naming-convention.md` for Title Case rules

140
commands/process.md Normal file
View File

@@ -0,0 +1,140 @@
---
description: Process inbox items using PARA decision tree - moves notes to correct folders
allowed-tools: mcp__MCP_DOCKER__obsidian_list_files_in_dir, mcp__MCP_DOCKER__obsidian_get_file_contents, mcp__MCP_DOCKER__obsidian_patch_content, mcp__MCP_DOCKER__obsidian_delete_file, mcp__MCP_DOCKER__obsidian_append_content, AskUserQuestion
---
# Process Inbox Items
You guide the user through processing their Obsidian inbox using the PARA method.
## Process
### 1. List Inbox Items
Use MCP to get inbox contents:
```
mcp__MCP_DOCKER__obsidian_list_files_in_dir
dirpath: 00_Inbox
```
### 2. For Each Item, Apply PARA Decision Tree
Present each item and ask:
```markdown
## Processing: [[Item Title]]
**Created**: [date]
**Resonance**: [type]
**Content preview**: [first 100 chars]
### PARA Decision:
1. **Is it actionable with an END DATE/GOAL?**
→ Move to `01_Projects/`
2. **Is it an ongoing responsibility with NO end date?**
→ Move to `02_Areas/`
3. **Is it reference material or an interest?**
→ Move to `03_Resources/`
4. **Is it done or no longer relevant?**
→ Move to `04_Archive/` or delete
Which destination? (1-4, or 'd' to delete)
```
### 3. On User Selection
**For Projects (1)**:
- Ask for target_completion date
- Ask which area it relates to
- Update frontmatter:
```yaml
type: project
status: active
start_date: [today]
target_completion: [user input]
area: "[[Area Name]]"
tags: [project]
```
- Move to `01_Projects/`
**For Areas (2)**:
- Update frontmatter:
```yaml
type: area
status: active
tags: [area]
```
- Move to `02_Areas/`
**For Resources (3)**:
- Ask for source type (book, article, video, etc.)
- Update frontmatter:
```yaml
type: resource
source: [user input]
tags: [resource]
```
- Move to `03_Resources/`
**For Archive (4)**:
- Add archived date
- Move to `04_Archive/[year]/`
**For Delete (d)**:
- Confirm deletion
- Delete the note
### 4. Summary
After processing all items:
```markdown
## Inbox Processing Complete
- **Processed**: X items
- **To Projects**: X
- **To Areas**: X
- **To Resources**: X
- **Archived**: X
- **Deleted**: X
Inbox is now empty. Great work!
Next: Run `/para:review` for your weekly review.
```
## Tips
- Process inbox at least every 48 hours
- When in doubt, put in Resources
- It's okay to delete things that no longer resonate
- Link new notes to existing notes when relevant
---
## Lazy Migration: Validate on Process
When moving a note to its destination, ensure it matches the current schema.
**See**: [_shared/validate-note.md](_shared/validate-note.md) for schemas.
### After PARA Decision
When updating frontmatter for the destination folder, always include ALL required fields for that type:
**For Resources (3)**:
```yaml
type: resource
source: [user input]
areas: # REQUIRED - prompt user
- "[[Primary Area]]"
reviewed: [today] # Set automatically
tags: [resource]
```
This ensures notes are created/moved with complete, current schemas.

198
commands/review.md Normal file
View File

@@ -0,0 +1,198 @@
---
description: Guided weekly review of your Second Brain using PARA method
allowed-tools: mcp__MCP_DOCKER__obsidian_list_files_in_dir, mcp__MCP_DOCKER__obsidian_get_file_contents, mcp__MCP_DOCKER__obsidian_get_recent_changes, mcp__MCP_DOCKER__obsidian_get_periodic_note, mcp__MCP_DOCKER__obsidian_simple_search, mcp__MCP_DOCKER__obsidian_patch_content, AskUserQuestion
---
# Weekly Review
You guide the user through a comprehensive weekly review of their Second Brain.
## Review Process
### Phase 1: Clear the Inbox
```markdown
## Phase 1: Clear the Inbox
Let's start by processing any unprocessed items.
```
Check inbox:
```
mcp__MCP_DOCKER__obsidian_list_files_in_dir
dirpath: 00_Inbox
```
If items exist:
- Run the processing workflow for each
- Goal: Empty inbox
If empty:
- "Inbox is clear. Moving to Phase 2."
---
### Phase 2: Review Active Projects
```markdown
## Phase 2: Review Active Projects
Let's check on your active projects.
```
List projects:
```
mcp__MCP_DOCKER__obsidian_list_files_in_dir
dirpath: 01_Projects
```
For each project, present:
```markdown
### [[Project Name]]
**Status**: [status]
**Target Completion**: [date]
**Area**: [[area]]
Questions:
1. Is this still active? (y/n/archive)
2. Is it on track for the deadline?
3. What's the next action?
[Update status if needed]
```
Check for:
- **Overdue projects** (target_completion passed)
- **Stale projects** (no updates in 2+ weeks)
- **Completed projects** (should be archived)
---
### Phase 3: Review Areas
```markdown
## Phase 3: Review Areas of Responsibility
Are you maintaining your key life areas?
```
List areas:
```
mcp__MCP_DOCKER__obsidian_list_files_in_dir
dirpath: 02_Areas
```
For each area:
```markdown
### [[Area Name]]
Questions:
1. Have you given this area attention this week?
2. Are there any urgent issues?
3. Should you create a new project for this area?
```
---
### Phase 4: Check Upcoming Deadlines
```markdown
## Phase 4: Upcoming Deadlines
Projects with deadlines in the next 2 weeks:
```
Search for target_completion dates and highlight:
- **This week**: Urgent attention needed
- **Next week**: Plan time for these
- **Overdue**: Address immediately or adjust deadline
---
### Phase 5: Express & Create
```markdown
## Phase 5: Express - What Can You Create?
Review your captured knowledge:
- Any patterns emerging across notes?
- Topics you've collected a lot about?
- Ideas ready to become projects?
Potential outputs:
- [ ] Blog post about [topic]
- [ ] Decision on [issue]
- [ ] Project plan for [idea]
```
---
### Phase 6: Summary
```markdown
## Weekly Review Complete
### Statistics
- **Inbox processed**: X items
- **Active projects**: X
- **Projects completed this week**: X
- **Areas reviewed**: X
### Key Takeaways
1. [Most important insight]
2. [Action needed]
3. [Celebration/win]
### Next Week Focus
- [ ] Top priority 1
- [ ] Top priority 2
- [ ] Top priority 3
---
Great work! Your Second Brain is up to date.
Next review: [date + 7 days]
```
## Best Practices
- Schedule weekly review at the same time each week
- Allow 30-60 minutes for thorough review
- Don't skip the "Express" phase - creation is the goal
- Celebrate completed projects!
- Be ruthless about archiving stale items
---
## Lazy Migration: Validate During Review
The weekly review is an ideal time to update outdated note schemas.
**See**: [_shared/validate-note.md](_shared/validate-note.md) for schemas.
### During Each Phase
When reading projects, areas, or resources, check frontmatter against current schema:
1. **Missing `reviewed` field?** → Add it, set to today
2. **Resource missing `areas`?** → Prompt user to add
3. **Project missing `review_period`?** → Add default (7d)
### Batch Update Option
At end of Phase 2 (Projects) and Phase 3 (Areas), offer:
```markdown
### Schema Updates Available
Found X notes with outdated schemas:
- [[Resource 1]] - missing `areas`
- [[Resource 2]] - missing `areas`, `reviewed`
- [[Project 1]] - missing `reviewed`
**Update all now?** I'll prompt for any required input.
```
This lets user fix multiple notes efficiently during their natural review workflow.

161
commands/search.md Normal file
View File

@@ -0,0 +1,161 @@
---
description: $ARGUMENTS - Search Obsidian vault with PARA-aware context
allowed-tools: mcp__MCP_DOCKER__obsidian_simple_search, mcp__MCP_DOCKER__obsidian_complex_search, mcp__MCP_DOCKER__obsidian_get_file_contents, mcp__MCP_DOCKER__obsidian_list_files_in_dir, mcp__MCP_DOCKER__obsidian_patch_content, AskUserQuestion
---
# Search Second Brain
You search the user's Obsidian vault with PARA-aware context.
## Input
Search query: **$ARGUMENTS**
## Search Strategy
### 1. Parse Query Intent
Determine search type:
- **By content**: General text search
- **By type**: "projects about X", "resources for Y"
- **By status**: "active projects", "inbox items"
- **By area**: "everything related to [area]"
- **By date**: "created this week", "due soon"
### 2. Execute Search
**Content Search**:
```
mcp__MCP_DOCKER__obsidian_simple_search
query: [search terms]
context_length: 150
```
**Folder-Specific Search**:
```
mcp__MCP_DOCKER__obsidian_list_files_in_dir
dirpath: [01_Projects|02_Areas|03_Resources|04_Archive]
```
Then filter/search within results.
**Complex Search (JsonLogic)**:
```
mcp__MCP_DOCKER__obsidian_complex_search
query: {"and": [
{"glob": ["01_Projects/**/*.md", {"var": "path"}]},
{"in": ["active", {"var": "content"}]}
]}
```
### 3. Present Results
```markdown
## Search Results: "[query]"
Found X results across your vault:
### Projects (X)
- [[Project 1]] - [brief context]
- [[Project 2]] - [brief context]
### Areas (X)
- [[Area 1]] - [brief context]
### Resources (X)
- [[Resource 1]] - [brief context]
### Archive (X)
- [[Archived Item]] - [brief context]
---
**Refine search?**
- `/para:search [query] in:projects` - Search only projects
- `/para:search [query] status:active` - Only active items
- `/para:search [query] area:[[Area Name]]` - By area
```
## Search Modifiers
| Modifier | Example | Description |
|----------|---------|-------------|
| `in:projects` | `meeting in:projects` | Search only 01_Projects/ |
| `in:areas` | `health in:areas` | Search only 02_Areas/ |
| `in:resources` | `typescript in:resources` | Search only 03_Resources/ |
| `in:inbox` | `urgent in:inbox` | Search only 00_Inbox/ |
| `status:active` | `api status:active` | Only active items |
| `status:completed` | `auth status:completed` | Only completed items |
| `area:[[X]]` | `task area:[[Work]]` | Items linked to area |
| `created:today` | `notes created:today` | Created today |
| `created:week` | `ideas created:week` | Created this week |
## Common Searches
**Find all active projects**:
```
/para:search status:active in:projects
```
**Find resources about a topic**:
```
/para:search typescript in:resources
```
**Find items in an area**:
```
/para:search area:[[Health & Fitness]]
```
**Find inbox items needing processing**:
```
/para:search in:inbox
```
**Find recently created notes**:
```
/para:search created:week
```
## No Results?
If search returns nothing:
1. Suggest alternative search terms
2. Check if content might be in a different PARA category
3. Offer to create a new note with this topic
---
## Lazy Migration: Validate Notes on Read
When user selects a note to view details, validate its frontmatter.
**See**: [_shared/validate-note.md](_shared/validate-note.md) for schemas.
### After Reading a Note
1. Parse frontmatter and check `type:` field
2. Compare against schema for that type
3. If missing required fields, show:
```markdown
### ⚠️ Note needs update
**[[Note Title]]** is missing required fields:
- `areas` - Which area(s) does this relate to?
- `reviewed` - Last review date
**Update now?** This takes 10 seconds.
```
4. If user agrees:
- Use `AskUserQuestion` to gather missing values
- Use `obsidian_patch_content` to update frontmatter
- Confirm update complete
5. Continue with original search results
### Skip Validation If
- Note was reviewed in last 7 days (`reviewed` field is recent)
- User previously declined to update this note in session

78
commands/task-quick.md Normal file
View File

@@ -0,0 +1,78 @@
---
description: "[title] [project-or-area]" - Quick checkbox in Next Actions section
argument-hint: [title] [project-or-area]
allowed-tools: mcp__MCP_DOCKER__obsidian_get_file_contents, mcp__MCP_DOCKER__obsidian_patch_content, mcp__MCP_DOCKER__obsidian_list_files_in_dir
---
# Quick Task (Checkbox)
Add a task checkbox to a project or area's `## Next Actions` section. No separate file created.
**Use when**: Quick capture, simple tasks that don't need rich metadata.
**Use `/para:task` instead when**: You need due dates, priorities, dependencies, or Dataview queries.
## Arguments
- `$1` - Task title (required)
- `$2` - Project or area name (required)
**Examples:**
```
/para:task-quick "Book flights" "2025 Tassie Holiday"
/para:task-quick "Setup SDK wrapper" "Firecrawl Plugin Optimization"
/para:task-quick "Schedule dentist" "Health"
```
## Process
### 1. Parse Arguments
- `$1` = Task title
- `$2` = Project or area name
If either missing, ask the user.
### 2. Find the Note
Check both locations:
1. `01_Projects/$2.md` or `01_Projects/$2/$2.md`
2. `02_Areas/$2.md` or `02_Areas/$2/$2.md`
If not found, list available projects/areas and ask.
### 3. Append Checkbox
Use `mcp__MCP_DOCKER__obsidian_patch_content`:
```yaml
filepath: [found path]
operation: append
target_type: heading
target: "Next Actions"
content: "\n- [ ] $1"
```
**If `## Next Actions` doesn't exist**, append to end of file:
```markdown
## Next Actions
- [ ] $1
```
### 4. Confirm
```
Added to [[Project/Area]]:
- [ ] Task title
```
## When to Use Which
| Scenario | Command |
|----------|---------|
| Quick reminder, simple task | `/para:task-quick` |
| Need due date, priority | `/para:task` |
| Want to query with Dataview | `/para:task` |
| Just jotting something down | `/para:task-quick` |

35
commands/task.md Normal file
View File

@@ -0,0 +1,35 @@
---
description: "[title] [--project name] [--area name] [--type] [--due] [--priority]" - Create task file in Tasks folder
argument-hint: [title] [--project name] [--area name]
allowed-tools: Read, mcp__MCP_DOCKER__obsidian_append_content, mcp__MCP_DOCKER__obsidian_list_files_in_dir, AskUserQuestion
---
# Create Task
Create a task file in `07_Tasks/` using the template at [templates/task.md](../templates/task.md).
## Arguments
- `$1` - Task title (required)
- `--project` - Link to project (optional)
- `--area` - Link to area (optional)
- `--type` - task, reminder, habit, chore (default: task)
- `--due` - Due date YYYY-MM-DD (optional)
- `--priority` - low, medium, high, urgent (default: medium)
**Examples:**
```
/para:task "Setup SDK wrapper" --project "Firecrawl Plugin Optimization"
/para:task "Take vitamins" --area "Health" --type habit
/para:task "Book flights" --project "2025 Tassie Holiday" --due 2025-01-15 --priority high
```
## Process
1. **Parse arguments** - Extract title, project, area, type, due, priority
2. **If title missing** → Ask user
3. **If no project/area** → List options from `01_Projects/` and `02_Areas/`, or "Standalone"
4. **Read template** at `templates/task.md`
5. **Replace Templater prompts** (`<% tp.system.prompt(...) %>`) with parsed values
6. **Create file** in `07_Tasks/[Title].md` using `obsidian_append_content`
7. **Confirm** with location and linked project/area