| name | learning-system |
| description | Process learning resources from markdown files, extract content, identify clusters, and create Ship-Learn-Next learning paths |
| triggers | process learning inbox, process learning from, create learning paths |
Learning System
Purpose
Transform collected learning resources (URLs + notes) into structured Ship-Learn-Next learning paths.
Usage
Call this skill with a markdown file containing learning resources:
process learning from AI/Inbox.md
The file can contain:
- YouTube URLs
- Web article URLs
- PDF file paths
- Your own notes and thoughts about topics
- Any mix of the above
Workflow
Phase 1: Parse & Extract
Read the inbox file
- Parse markdown content
- Identify URLs (YouTube, web articles)
- Extract user notes (text content, bullet points)
- Report summary: "Found X YouTube videos, Y articles, Z paragraphs of notes"
Extract content from URLs
- For YouTube URLs: Call
youtube-transcriptskill - For web article URLs: Call
article-extractorskill - For PDF paths: Read and extract text directly
- Process in parallel where possible
- Report failures gracefully: "Extracted X/Y sources (Z failed)"
- Continue processing even if some extractions fail
- For YouTube URLs: Call
Phase 2: Analyze & Cluster
Unified analysis
- Analyze ALL content together:
- Extracted transcripts and articles
- User's original notes
- Context from markdown structure (headings, sections)
- Analyze ALL content together:
Identify learning clusters
- Look for topic patterns and themes
- Group related sources together
- Consider user's notes as strong signals for clustering
- Create proposed clusters with:
- Suggested cluster name
- List of URLs belonging to cluster
- List of user notes related to cluster
- Rationale for grouping
Phase 3: Interactive Approval
Present clusters one by one
- For each cluster, show:
Cluster: "[Suggested Name]" Sources: - YouTube: "[Title]" (transcript available) - Article: "[Title]" (from [domain]) - Your note: "[first 100 chars...]" Rationale: [Why these are grouped together] Options: 1. Approve as-is 2. Rename cluster 3. Split into multiple topics 4. Merge with another cluster 5. Exclude some sources
- For each cluster, show:
Handle user feedback
Listen for natural language responses:
- "Approve" / "looks good" → Accept cluster
- "Rename to [X]" → Change cluster name
- "Split - [reason]" → Divide cluster
- "Merge with cluster N" → Combine clusters
- "Remove [source]" → Exclude specific item
Apply changes immediately and confirm
Continue to next cluster
Keep track of all decisions
Final confirmation
- Show summary of all approved clusters
- Confirm: "Ready to create N learning paths in 3_Resources/?"
- Wait for explicit approval
Phase 4: Create Learning Paths
Check for existing paths
- For each cluster, check if
3_Resources/[topic-name]/exists - If exists: This is a MERGE operation (add to existing path)
- If new: This is a CREATE operation
- For each cluster, check if
Create folder structure
For NEW paths:
3_Resources/[topic-name]/ ├── README.md # Ship-Learn-Next plan ├── sources/ # Extracted content │ ├── [source-1].md │ └── [source-2].md └── notes/ # User's notes └── [note].mdFor MERGE operations:
- Add new source files to
sources/ - Add new notes to
notes/ - Update README.md with new content
- Add new source files to
Generate Ship-Learn-Next plan
Use the template from
ship-learn-next-template.mdFill in:
- Title: Cluster name
- Overview: Brief description of learning path
- Ship section: 3-5 practical projects to build
- Learn section: Links to all sources and notes
- Next section: Advanced topics and next steps
- Topics tags: Extracted keywords
- Status: "seedling" for new paths
For MERGE: Update existing sections intelligently:
- Add new items to Ship/Learn sections
- Update "Last Updated" date
- Preserve existing progress tracking
Save extracted content
For each source, create markdown file in
sources/:--- source: [original URL] type: [youtube/article/pdf] title: [extracted title] extracted: [date] --- # [Title] [Extracted content]For user notes, create file in
notes/:--- from: [original inbox file] extracted: [date] --- [User's note content]
Handle multi-topic sources
- If a source belongs to multiple clusters:
- Save full content in PRIMARY cluster (user specified during approval)
- Add reference link in SECONDARY clusters:
## Related Resources See also: [[../[primary-topic]/sources/[file]|[Title]]]
- If a source belongs to multiple clusters:
Phase 5: Cleanup & Tracking
Update inbox file
- Move processed items to "## Processed (DATE)" section
- Mark with
[x]checkboxes - Add path reference:
→ [topic-name] - Example:
## Processed (2025-11-22) - [x] https://youtube.com/watch?v=abc → kubernetes-networking - [x] My notes about service mesh → kubernetes-networking - Preserve unprocessed items in original location
Update resources index
- Add new learning paths to
3_Resources/index.md - Format:
- [[kubernetes-networking/README|Kubernetes Networking]] 🌱 seedling - For merged paths: Update "Last Updated" timestamp
- Add new learning paths to
Generate summary report
✅ Processing Complete! Created 2 new learning paths: - 3_Resources/kubernetes-networking/ (3 sources, 1 note) - 3_Resources/rust-async/ (2 sources, 2 notes) Merged into 1 existing path: - 3_Resources/llm-agents/ (+2 sources) Processed: 7/8 sources Failed: 1 (paywalled article - saved URL for manual review) Next steps: - Review learning plans in 3_Resources/ - Start with "Ship" sections for hands-on learning - Update progress as you learn
Error Handling
Extraction Failures
If YouTube transcript unavailable:
- Report in summary
- Save URL in learning path with note: "⚠️ Transcript unavailable - watch manually"
- Continue processing
If article blocked/paywalled:
- Report in summary
- Save URL with note: "⚠️ Manual extraction needed"
- Continue processing
If PDF unreadable:
- Report in summary
- Save file path with note: "⚠️ Text extraction failed"
- Continue processing
Clustering Issues
If sources too diverse (no clear clusters):
- Report: "Sources are too diverse for automatic clustering"
- Offer: "Create individual learning paths for each source?" or "Group all into 'Mixed Topics' for manual organization?"
- Let user decide
If only 1-2 sources:
- Still create learning path but note it's minimal
- Suggest: "This is a small learning path - consider collecting more resources before studying"
Ambiguous Classifications
- If source could fit multiple topics equally:
- Present during approval: "This resource covers both X and Y equally - which should be primary?"
- Wait for user decision
- Apply primary/secondary reference strategy
Existing Path Collisions
- ALWAYS merge into existing paths
- Report: "Merged X new sources into existing [topic-name]/"
- Show what was added in summary
Best Practices
- Process regularly: Run weekly or when you have 5+ resources collected
- Add context: Include your thoughts in the inbox - helps clustering
- Review plans: The generated Ship-Learn-Next plans are starting points - refine them
- Update progress: Check off items as you learn, update completion %
- Merge related paths: If you later realize two paths should be one, manually merge folders
- Archive completed: Move finished learning paths to
4_Archives/resources/
Technical Notes
- Depends on:
youtube-transcriptandarticle-extractorskills - Creates folders with kebab-case naming (e.g.,
kubernetes-networking) - Uses Obsidian wikilinks for cross-references
- Compatible with Dataview queries for tracking
- Preserves frontmatter for metadata management
- Status progression: seedling 🌱 → sapling 🌿 → evergreen 🌳 (update manually as path matures)
Example Session
User: process learning from AI/Inbox.md