Initial commit
This commit is contained in:
75
commands/_shared/create-workflow.md
Normal file
75
commands/_shared/create-workflow.md
Normal 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
|
||||
106
commands/_shared/naming-convention.md
Normal file
106
commands/_shared/naming-convention.md
Normal 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.
|
||||
138
commands/_shared/validate-note.md
Normal file
138
commands/_shared/validate-note.md
Normal 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
23
commands/capture.md
Normal 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
31
commands/create-area.md
Normal 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?"
|
||||
36
commands/create-project.md
Normal file
36
commands/create-project.md
Normal 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
|
||||
51
commands/create-resource.md
Normal file
51
commands/create-resource.md
Normal 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
140
commands/process.md
Normal 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
198
commands/review.md
Normal 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
161
commands/search.md
Normal 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
78
commands/task-quick.md
Normal 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
35
commands/task.md
Normal 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
|
||||
Reference in New Issue
Block a user