447 lines
12 KiB
Markdown
447 lines
12 KiB
Markdown
---
|
||
description: Generate an optimal learning sequence for a target note
|
||
---
|
||
|
||
# Learning Path
|
||
|
||
Generate an optimal learning sequence for a target note by tracing prerequisite chains through the knowledge graph.
|
||
|
||
## 0. Locate AZKG Repository
|
||
|
||
**Check for AZKG_REPO_PATH environment variable:**
|
||
|
||
- Use bash conditional: `if [ -z "$AZKG_REPO_PATH" ]; then REPO_PATH=$(pwd); else REPO_PATH="$AZKG_REPO_PATH"; fi`
|
||
- **If AZKG_REPO_PATH is set:** Use that path as the repository root
|
||
- **If AZKG_REPO_PATH is not set:** Use current working directory (pwd)
|
||
- Store result as REPO_PATH for all subsequent file operations
|
||
|
||
**All file operations must use REPO_PATH:**
|
||
|
||
- Read: `Read(REPO_PATH/filename.md)` or `Read("$REPO_PATH/filename.md")`
|
||
- Write: `Write(REPO_PATH/filename.md)` or `Write("$REPO_PATH/filename.md")`
|
||
- Edit: `Edit(REPO_PATH/filename.md)` or `Edit("$REPO_PATH/filename.md")`
|
||
- Grep: `Grep(pattern, path=REPO_PATH)` or with explicit path
|
||
- Glob: `Glob(pattern, path=REPO_PATH)` or with explicit path
|
||
|
||
**Example usage:**
|
||
|
||
```
|
||
# Check environment variable
|
||
if [ -z "$AZKG_REPO_PATH" ]; then
|
||
REPO_PATH=$(pwd)
|
||
else
|
||
REPO_PATH="$AZKG_REPO_PATH"
|
||
fi
|
||
|
||
# Then use REPO_PATH for all operations
|
||
Read("$REPO_PATH/agents.md")
|
||
```
|
||
|
||
**Concrete examples:**
|
||
|
||
- If AZKG_REPO_PATH="/c/Users/dothompson/OneDrive/src/witt3rd/donald-azkg"
|
||
→ Read("/c/Users/dothompson/OneDrive/src/witt3rd/donald-azkg/agents.md")
|
||
- If AZKG_REPO_PATH is not set and pwd is /c/Users/dothompson/OneDrive/src/witt3rd/donald-azkg
|
||
→ Read("agents.md") or use full path from pwd
|
||
|
||
## 1. Parse Input
|
||
|
||
**Input format:** User provides:
|
||
|
||
- A note name: `/learning-path mcp_security.md`
|
||
- Or just the topic: `/learning-path mcp_security`
|
||
|
||
**Normalize input:**
|
||
|
||
- Add `.md` extension if missing
|
||
- Use Glob to verify the target note exists
|
||
- If not found, suggest similar notes using Glob
|
||
|
||
## 2. Load Target Note
|
||
|
||
**Read the target note:**
|
||
|
||
- Use Read tool to get full content
|
||
- Extract YAML tags and title
|
||
- Parse "Related Concepts" section to get prerequisites
|
||
|
||
**Example:**
|
||
|
||
```markdown
|
||
## Related Concepts
|
||
|
||
### Prerequisites
|
||
- [[mcp_overview]] - Must understand MCP basics first
|
||
- [[oauth_fundamentals]] - OAuth is primary auth mechanism
|
||
|
||
### Related Topics
|
||
- [[api_security]] - General API security principles
|
||
```
|
||
|
||
## 3. Trace Prerequisite Chains
|
||
|
||
**Algorithm: Depth-First Traversal**
|
||
|
||
Starting from the target note, recursively follow prerequisite relationships:
|
||
|
||
```
|
||
function buildPrerequisiteTree(note, visited = new Set()):
|
||
if note in visited:
|
||
return [] // Cycle detection
|
||
|
||
visited.add(note)
|
||
|
||
// Read the note and parse "Related Concepts" → "Prerequisites"
|
||
prerequisites = readNote(note).prerequisites
|
||
|
||
if prerequisites is empty:
|
||
return [note] // Foundation reached
|
||
|
||
tree = []
|
||
for prereq in prerequisites:
|
||
subtree = buildPrerequisiteTree(prereq.note, visited)
|
||
tree.extend(subtree)
|
||
|
||
tree.append(note)
|
||
return tree
|
||
```
|
||
|
||
**Implementation with tools:**
|
||
|
||
1. **Read** target note to get prerequisites
|
||
2. For each prerequisite, **Read** that note to get its prerequisites
|
||
3. Recursively traverse until reaching foundation notes (no prerequisites)
|
||
4. Track visited nodes to detect cycles
|
||
|
||
**Key features:**
|
||
|
||
- **Cycle detection:** Track visited nodes to prevent infinite loops
|
||
- **Multiple paths:** Handle notes with multiple prerequisites
|
||
- **Foundation detection:** Identify notes with no prerequisites
|
||
- **Depth tracking:** Calculate how many levels deep each note is
|
||
|
||
## 4. Build Learning Sequence
|
||
|
||
**Create ordered learning path:**
|
||
|
||
1. **Topological sort:** Order notes so prerequisites always come before dependents
|
||
2. **Remove duplicates:** Each note appears once, at earliest possible position
|
||
3. **Group by depth level:** Show conceptual layers
|
||
|
||
**Example structure:**
|
||
|
||
```
|
||
Level 0 (Foundations):
|
||
- note_a.md
|
||
- note_b.md
|
||
|
||
Level 1 (Builds on foundations):
|
||
- note_c.md (requires: note_a)
|
||
- note_d.md (requires: note_b)
|
||
|
||
Level 2 (Intermediate):
|
||
- note_e.md (requires: note_c, note_d)
|
||
|
||
Level 3 (Target):
|
||
- target_note.md (requires: note_e)
|
||
```
|
||
|
||
## 5. Read Note Summaries
|
||
|
||
**For each note in the learning path:**
|
||
|
||
- Use Read tool to get first 3-5 lines (the summary)
|
||
- Extract the brief description after the title
|
||
- This provides context for each step
|
||
|
||
**Example:**
|
||
|
||
```
|
||
## mcp_overview.md
|
||
"Introduction to Model Context Protocol, a standardized way for AI assistants to connect to data sources and tools."
|
||
```
|
||
|
||
## 6. Analyze Learning Path
|
||
|
||
**Calculate metrics:**
|
||
|
||
**Path statistics:**
|
||
|
||
- Total notes in sequence: `N`
|
||
- Depth levels: `M` (foundation to target)
|
||
- Estimated reading time: `N × 10 minutes = X minutes`
|
||
- Foundational notes: Count of level 0 notes
|
||
- Branching factor: Average prerequisites per note
|
||
|
||
**Complexity assessment:**
|
||
|
||
- **Simple path (1-3 notes):** "Quick learning path"
|
||
- **Moderate path (4-7 notes):** "Intermediate learning sequence"
|
||
- **Complex path (8+ notes):** "Comprehensive learning journey"
|
||
|
||
**Identify critical concepts:**
|
||
|
||
- Notes that multiple paths converge through
|
||
- "Bottleneck" concepts that are prerequisites for many others
|
||
|
||
## 7. Suggest Related Learning
|
||
|
||
**Enrich the path with optional content:**
|
||
|
||
**Parallel reading (Related Topics):**
|
||
|
||
- Read "Related Topics" sections from notes in path
|
||
- Notes at same level that provide additional context
|
||
- Not strictly required but enhance understanding
|
||
|
||
**Deeper dives (Extended By):**
|
||
|
||
- Read "Extended By" sections from notes in path
|
||
- Advanced topics that build on concepts in the path
|
||
- "After mastering this path, explore..."
|
||
|
||
**Alternative approaches (Alternatives):**
|
||
|
||
- Read "Alternatives" sections from notes in path
|
||
- Different ways to achieve similar understanding
|
||
- "For a different perspective, consider..."
|
||
|
||
**Practical examples (Examples):**
|
||
|
||
- Read "Examples" sections from notes in path
|
||
- Concrete implementations to solidify understanding
|
||
- "Apply these concepts with..."
|
||
|
||
## 8. Generate Output
|
||
|
||
**Format the learning path:**
|
||
|
||
```markdown
|
||
# Learning Path: [Target Note Title]
|
||
|
||
🎯 **Goal:** Understand [target topic]
|
||
📚 **Total Notes:** N notes across M levels
|
||
⏱️ **Estimated Time:** X minutes
|
||
🏗️ **Complexity:** [Simple|Moderate|Complex]
|
||
|
||
---
|
||
|
||
## Prerequisites Sequence
|
||
|
||
### Level 0: Foundations
|
||
Start here if you're new to this topic.
|
||
|
||
1. **[[note_a]]** (5 min read)
|
||
Brief description from note.
|
||
*Why it's needed:* Foundation for understanding [concept]
|
||
|
||
2. **[[note_b]]** (8 min read)
|
||
Brief description from note.
|
||
*Why it's needed:* Introduces core [concept]
|
||
|
||
### Level 1: Core Concepts
|
||
Once you understand the foundations, proceed here.
|
||
|
||
3. **[[note_c]]** (10 min read)
|
||
Brief description from note.
|
||
*Builds on:* note_a
|
||
*Why it's needed:* Extends [concept] with [new idea]
|
||
|
||
4. **[[note_d]]** (7 min read)
|
||
Brief description from note.
|
||
*Builds on:* note_b
|
||
*Why it's needed:* Applies [concept] to [domain]
|
||
|
||
### Level 2: Integration
|
||
Combining concepts from previous levels.
|
||
|
||
5. **[[note_e]]** (12 min read)
|
||
Brief description from note.
|
||
*Builds on:* note_c, note_d
|
||
*Why it's needed:* Synthesizes [concepts] for [purpose]
|
||
|
||
### Level 3: Target Concept
|
||
Your destination!
|
||
|
||
6. **[[target_note]]** (15 min read)
|
||
Brief description from note.
|
||
*Builds on:* note_e
|
||
*This is your goal:* Complete understanding of [target topic]
|
||
|
||
---
|
||
|
||
## Optional Enrichment
|
||
|
||
### Parallel Reading (Same Level)
|
||
Enhance understanding at each level:
|
||
- **[[related_a]]** - Provides additional context on [concept]
|
||
- **[[related_b]]** - Alternative perspective on [concept]
|
||
|
||
### Go Deeper (Beyond Target)
|
||
After mastering this path:
|
||
- **[[advanced_a]]** - Builds on target with [advanced concept]
|
||
- **[[advanced_b]]** - Applies target to [specific domain]
|
||
|
||
### Practical Applications
|
||
See these concepts in action:
|
||
- **[[example_a]]** - Real implementation of [concept]
|
||
- **[[example_b]]** - Case study using [concept]
|
||
|
||
### Alternative Paths
|
||
Different approaches to similar understanding:
|
||
- **[[alternative_a]]** - [Different approach] to achieving similar goals
|
||
|
||
---
|
||
|
||
## Critical Concepts
|
||
|
||
These notes are central to this learning path:
|
||
- **[[critical_note]]** - Required by X other notes in this path
|
||
|
||
---
|
||
|
||
## Visual Path
|
||
|
||
```
|
||
|
||
Foundations Core Concepts Integration Target
|
||
───────────── ───────────── ─────────── ──────
|
||
|
||
note_a ──────────┐
|
||
├──> note_c ────────┐
|
||
│ │
|
||
note_b ──────────┴──> note_d ────────┴──> note_e ──> target_note
|
||
|
||
```
|
||
|
||
---
|
||
|
||
## Next Steps
|
||
|
||
1. **Start with Level 0** if concepts are new
|
||
2. **Skip familiar sections** if you have background knowledge
|
||
3. **Use `/graph-note`** to inspect relationships for each note
|
||
4. **Use `/expand-graph`** to discover more connections
|
||
5. **Review in Obsidian** for visual graph navigation
|
||
|
||
**Pro tip:** Open multiple notes in tabs and read through the sequence in order!
|
||
```
|
||
|
||
## 9. Handle Edge Cases
|
||
|
||
**No prerequisites:**
|
||
|
||
```
|
||
Learning Path: [Target Note]
|
||
|
||
✅ This note has no prerequisites!
|
||
|
||
This is a foundational concept that can be learned directly.
|
||
No background knowledge required.
|
||
|
||
**Estimated reading time:** X minutes
|
||
|
||
**What builds on this:**
|
||
After understanding this note, you can explore:
|
||
- [[note_x]] - Extends this concept
|
||
- [[note_y]] - Applies this concept
|
||
```
|
||
|
||
**Circular dependencies:**
|
||
|
||
```
|
||
⚠️ Circular Dependency Detected
|
||
|
||
The following notes form a dependency cycle:
|
||
- [[note_a]] requires [[note_b]]
|
||
- [[note_b]] requires [[note_c]]
|
||
- [[note_c]] requires [[note_a]]
|
||
|
||
**Suggested reading order:**
|
||
Read these notes together as an interconnected group:
|
||
1. [[note_a]] - Brief overview
|
||
2. [[note_b]] - Builds on understanding from note_a
|
||
3. [[note_c]] - Completes the cycle
|
||
4. Re-read all three for full understanding
|
||
|
||
**Action needed:** Consider refactoring these notes to break the cycle.
|
||
Use `/graph-validate` to check for more circular dependencies.
|
||
```
|
||
|
||
**Very long path (>15 notes):**
|
||
|
||
```
|
||
📚 Complex Learning Path Detected
|
||
|
||
This path contains N notes across M levels.
|
||
|
||
**Suggested approach:**
|
||
- Break into smaller milestones
|
||
- Focus on one level at a time
|
||
- Take breaks between levels
|
||
- Consider creating intermediate checkpoints
|
||
|
||
**Milestones:**
|
||
🎯 Milestone 1: Foundations (Notes 1-5)
|
||
🎯 Milestone 2: Core Concepts (Notes 6-10)
|
||
🎯 Milestone 3: Advanced Topics (Notes 11-15)
|
||
🎯 Milestone 4: Target Mastery (Notes 16-N)
|
||
```
|
||
|
||
## 10. Provide Summary Stats
|
||
|
||
**Output concise metrics:**
|
||
|
||
```
|
||
Learning Path Summary
|
||
━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
📊 Path Metrics:
|
||
- Total notes: N
|
||
- Depth levels: M
|
||
- Estimated time: X minutes
|
||
- Foundation notes: Y
|
||
- Average prerequisites per note: Z
|
||
|
||
🎯 Complexity: [Simple|Moderate|Complex]
|
||
|
||
💡 Key Insight: [Most important observation about this path]
|
||
|
||
🔗 Critical Concept: [Note that appears most frequently as prerequisite]
|
||
```
|
||
|
||
## Tools Used
|
||
|
||
- **Read** - Get note content, parse "Related Concepts" sections, extract summaries
|
||
- **Glob** - Verify notes exist, find similar notes if target not found
|
||
- **Parse logic** - Traverse prerequisite chains, topological sort, depth calculation
|
||
- **Graph traversal** - Depth-first search with cycle detection
|
||
|
||
## Important Notes
|
||
|
||
**Quality guidelines:**
|
||
|
||
- Clear level progression
|
||
- Justify why each prerequisite is needed
|
||
- Provide time estimates (realistic reading + comprehension)
|
||
- Make path scannable with good formatting
|
||
- Include visual representation when helpful
|
||
- Handle edge cases gracefully
|
||
|
||
**User experience:**
|
||
|
||
- Make it easy to start learning immediately
|
||
- Show progress milestones
|
||
- Suggest checkpoints for complex paths
|
||
- Provide escape hatches (skip, alternative paths)
|
||
- Encourage practical application
|
||
|
||
**Graph integrity:**
|
||
|
||
- Report any issues found (cycles, broken links)
|
||
- Suggest graph improvements
|
||
- Validate prerequisite chains make semantic sense
|
||
- Use `/graph-validate` to check bidirectionality
|
||
|
||
Execute the learning path generation for the note provided by the user.
|