
Learning Vault
- 73 installs
- 339 repo stars
- Updated August 4, 2026
- glebis/claude-skills
Generate a structured Obsidian learning vault for a certification, course, or study goal with domains, concepts, scenarios, MoCs, and Dataview dashboards.
About
Runs an interactive setup to capture the goal, domains, and self-assessment, then builds a full Obsidian vault with templated notes, wikilinks, tasks, and a working bundled Dataview plugin. A developer uses it to spin up a certification-prep or study knowledge base with priority ordering and progress queries.
- Ships a preconfigured Dataview plugin so queries work on first open
- Self-assessment drives study priority and a phased study plan
Learning Vault by the numbers
- 73 all-time installs (skills.sh)
- Ranked #713 of 1,879 Documentation skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/glebis/claude-skills --skill learning-vaultAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 73 |
|---|---|
| repo stars | ★ 339 |
| Last updated | August 4, 2026 |
| Repository | glebis/claude-skills ↗ |
What it does
Generate a structured Obsidian learning vault for a certification, course, or study goal with domains, concepts, scenarios, MoCs, and Dataview dashboards.
Files
Learning Vault Generator
Create a fully structured Obsidian vault for any learning goal — certification exams, courses, skill acquisition, or research programs.
Trigger Phrases
- "create a learning vault for X"
- "build a study vault"
- "set up a certification vault"
- "learning vault for [topic]"
- "/learning-vault"
Interactive Setup
Ask the user these questions (use AskUserQuestion):
1. Subject & Goal
- What is the learning goal? (certification, course, skill, research)
- What is the subject? (e.g., "AWS Solutions Architect", "Rust programming", "Machine Learning")
- Is there a specific exam or assessment? If yes, get: format, passing score, domains/topics, timeline
2. Structure
- How many main topics/domains? (auto-detect from curriculum if URL provided)
- Are there courses to track? (get URLs, lesson counts)
- Are there scenarios/practice areas?
3. Self-Assessment
- For each domain/topic, ask: "How confident are you?" (expert/strong/moderate/needs-work/no-experience)
- This drives the study priority ordering
4. Configuration
- Vault location (default: ~/Brains/{subject-slug}/)
- Daily notes? (yes/no)
- Dataview plugin assumed? (yes — required for queries)
Vault Architecture
Based on the genome vault pattern at ~/Brains/genome/:
{vault}/
├── Dashboard.md — central hub with dataview queries
├── MoC - Courses.md — course progress tracker
├── MoC - Domains.md — domain/topic overview
├── MoC - Concepts.md — key concepts by domain
├── MoC - Scenarios.md — practice scenarios (if applicable)
├── Action Items.md — dataview task aggregator
├── Question Index.md — navigate by question type
├── Key Pitfalls.md — common mistakes to avoid
├── Exam Cheat Sheet.md — last-minute review card
├── Courses/ — one note per course
│ └── {Course Name}.md
├── Domains/ — one note per domain/topic
│ └── {Domain Name}.md
├── Concepts/ — atomic knowledge units
│ └── {Concept Name}.md
├── Scenarios/ — practice scenarios
│ └── {Scenario Name}.md
├── Lessons/ — individual lesson notes
│ └── Lesson - {Name}.md
├── Resources/ — links, study plans
│ ├── Official Links.md
│ └── Study Plan.md
├── Templates/ — note templates
│ ├── _Course.md
│ ├── _Lesson.md
│ ├── _Concept.md
│ ├── _Scenario.md
│ └── _Domain.md
└── .obsidian/
├── app.json
├── community-plugins.json
└── plugins/
└── dataview/
├── main.js — copy from reference vault
├── manifest.json
├── styles.css
└── data.json — enable DataviewJS, inline queries, HTMLDataview Plugin Setup
The vault MUST include a working Dataview plugin — not just config, but the actual plugin binary. During generation:
1. Copy the bundled plugin from this skill's directory:
SKILL_DIR="$(dirname "$0")" # or resolve from ~/.claude/skills/learning-vault/
mkdir -p {vault}/.obsidian/plugins/dataview
cp ~/.claude/skills/learning-vault/dataview-plugin/* {vault}/.obsidian/plugins/dataview/The dataview-plugin/ directory inside this skill contains: main.js, manifest.json, styles.css, data.json — a complete, pre-configured Dataview plugin. 2. Register in `community-plugins.json`: ["dataview"]
No manual plugin installation needed — Dataview works on first vault open.
Frontmatter Schema
All Notes
type: course | domain | concept | scenario | lesson | resource | moc | meta | dashboard
created_date: 'YYYY-MM-DD'
tags: []Course
status: not-started | in-progress | completed
priority: 1-5
lessons_total: 0
lessons_done: 0
exam_weight: ""
difficulty: easy | moderate | hard
domains: [] # wikilinksConcept
domain: "[[Domain Name]]"
status: not-started | in-progress | completed
confidence: low | medium | high
importance: critical | high | medium | lowScenario
number: 1-N
domains: [] # wikilinks
difficulty: easy | moderate | hardLesson
course: "[[Course Name]]"
section: ""
status: not-started | in-progress | completed
concepts: [] # wikilinksGeneration Rules
1. Every concept note gets a - [ ] #review Can I explain this without notes? task 2. Every scenario note gets a - [ ] #practice Build a mini-project for this scenario task 3. Every lesson note gets a - [ ] #review Review this lesson before exam task 4. Wikilinks everywhere — concepts link to domains, scenarios link to concepts, courses link to both 5. Question Index maps common questions to concept notes (like genome vault's "search by concern, not gene") 6. Key Pitfalls lists wrong answers the exam loves to test (attractive distractors) 7. Study Plan generates phases based on: easy stuff first → gaps second → big course → practice → review
Dataview Queries Used
The vault uses these Dataview query patterns:
TABLEfrom folders with filters on status, priority, confidenceTASKaggregation from all notes with tag filters (#review, #practice)GROUP BYfor domain-level summariesSORTby priority, weight, confidence levelLISTfor filtered views (not-started, in-progress, completed)
Self-Assessment → Priority Mapping
| Self-Assessment | Confidence | Study Priority |
|---|---|---|
| no-experience | low | 1 (study first) |
| needs-work | low | 2 |
| moderate | medium | 3 |
| strong | medium-high | 4 (review only) |
| expert | high | 5 (quick check) |
Higher exam weight × lower confidence = higher study priority.
Study Plan Generation
Phases are generated based on: 1. Quick wins: courses with few lessons + high confidence → build momentum 2. Gap-filling: domains with low confidence + high exam weight 3. The big course: the largest course by lesson count 4. Practice: scenarios, hands-on projects 5. Final review: cheat sheet, pitfalls, low-confidence concepts
Example Usage
User: "Create a learning vault for the AWS Solutions Architect Associate exam"
→ Ask: domains, courses (e.g., Udemy course URL), timeline, self-assessment → Generate: vault at ~/Brains/aws-saa/ with domains (Compute, Storage, Networking, Security, etc.), concepts per domain, practice scenarios, course tracking, dataview-powered progress dashboard
Reference Implementation
The CCAF vault at ~/Brains/ccaf/ is the canonical example:
- 88 files, 462 wikilinks
- 5 domains, 31 concepts, 8 scenarios, 7 courses, 21 lessons
- Full dataview integration
- Multiple navigation paths: by domain, by concept, by scenario, by question type
{
"renderNullAs": "\\-",
"taskCompletionTracking": true,
"taskCompletionUseEmojiShorthand": true,
"taskCompletionText": "completion",
"taskCompletionDateFormat": "yyyy-MM-dd",
"recursiveSubTaskCompletion": true,
"warnOnEmptyResult": true,
"refreshEnabled": true,
"refreshInterval": 2500,
"defaultDateFormat": "MMMM dd, yyyy",
"defaultDateTimeFormat": "h:mm a - MMMM dd, yyyy",
"maxRecursiveRenderDepth": 4,
"tableIdColumnName": "File",
"tableGroupColumnName": "Group",
"showResultCount": true,
"allowHtml": true,
"inlineQueryPrefix": "=",
"inlineJsQueryPrefix": "$=",
"inlineQueriesInCodeblocks": true,
"enableInlineDataview": true,
"enableDataviewJs": true,
"enableInlineDataviewJs": true,
"prettyRenderInlineFields": true,
"prettyRenderInlineFieldsInLivePreview": true,
"dataviewJsKeyword": "dataviewjs"
}
{
"id": "dataview",
"name": "Dataview",
"version": "0.5.66",
"minAppVersion": "0.13.11",
"description": "Complex data views for the data-obsessed.",
"author": "Michael Brenan <blacksmithgu@gmail.com>",
"authorUrl": "https://github.com/blacksmithgu",
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
"isDesktopOnly": false
}
/** Live Preview padding fixes, specifically for DataviewJS custom HTML elements. */
.is-live-preview .block-language-dataviewjs > p, .is-live-preview .block-language-dataviewjs > span {
line-height: 1.0;
}
.block-language-dataview {
overflow-y: auto;
}
/*****************/
/** Table Views **/
/*****************/
/* List View Default Styling; rendered internally as a table. */
.table-view-table {
width: 100%;
}
.table-view-table > thead > tr, .table-view-table > tbody > tr {
margin-top: 1em;
margin-bottom: 1em;
text-align: left;
}
.table-view-table > tbody > tr:hover {
background-color: var(--table-row-background-hover);
}
.table-view-table > thead > tr > th {
font-weight: 700;
font-size: larger;
border-top: none;
border-left: none;
border-right: none;
border-bottom: solid;
max-width: 100%;
}
.table-view-table > tbody > tr > td {
text-align: left;
border: none;
font-weight: 400;
max-width: 100%;
}
.table-view-table ul, .table-view-table ol {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Rendered value styling for any view. */
.dataview-result-list-root-ul {
padding: 0em !important;
margin: 0em !important;
}
.dataview-result-list-ul {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Generic grouping styling. */
.dataview.result-group {
padding-left: 8px;
}
/*******************/
/** Inline Fields **/
/*******************/
.dataview.inline-field-key {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-primary-alt);
color: var(--text-nav-selected);
}
.dataview.inline-field-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--text-nav-selected);
}
.dataview.inline-field-standalone-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--text-nav-selected);
}
/***************/
/** Task View **/
/***************/
.dataview.task-list-item, .dataview.task-list-basic-item {
margin-top: 3px;
margin-bottom: 3px;
transition: 0.4s;
}
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
background-color: var(--text-selection);
box-shadow: -40px 0 0 var(--text-selection);
cursor: pointer;
}
/*****************/
/** Error Views **/
/*****************/
div.dataview-error-box {
width: 100%;
min-height: 150px;
display: flex;
align-items: center;
justify-content: center;
border: 4px dashed var(--background-secondary);
}
.dataview-error-message {
color: var(--text-muted);
text-align: center;
}
/*************************/
/** Additional Metadata **/
/*************************/
.dataview.small-text {
font-size: smaller;
color: var(--text-muted);
margin-left: 3px;
}
.dataview.small-text::before {
content: "(";
}
.dataview.small-text::after {
content: ")";
}