Turn a project spec into a
navigable Obsidian vault.

A Claude Skill that atomizes a software-project spec into a PARA-style Obsidian vault — folders, Bases, templates, an AGENTS.md briefing for future AI sessions — in one command. Zero copy-paste.

claude skill install obsidian-vault-scaffolder.skill
Download skill ↓ View on GitHub

Requires Claude Code, Claude Desktop, or any Claude environment that supports skills.

What it does

A 1500-line spec.md is a write-once, read-never artifact. The same content split into atomic notes with queryable frontmatter? Navigable, linkable, AI-friendly.

Before — your spec.md
spec.md
└── 1,847 lines of headings,
    code blocks, tables,
    open questions buried
    on line 1,432, risks on
    line 1,609, and the
    whole thing has been
    untouched since you
    wrote it 3 months ago.
After — your Obsidian vault
vault/
├── 00_Index/
│   ├── HOME.md
│   ├── AGENTS.md
│   └── MOCs/Project MOC.md
├── 10_Projects/Project/
│   ├── Project Charter.md
│   ├── Architecture/ (3)
│   ├── Brief/ (4)
│   ├── Specs/ (9)
│   ├── Open Questions/ (6)
│   ├── Risks/ (5)
│   └── Plans/ (6)
└── _Bases/
    ├── Open Questions.base
    ├── Risks.base
    └── Project Tracker.base

The flow

Give Claude (with this skill installed) a project spec — or just a one-liner about a project you're about to start.

I'm starting a project called Reservoir — a queue/stream broker meant to compete with Redpanda at the low end. The v0.1 spec is at ~/specs/reservoir.md. Set me up an Obsidian vault for it. No follow-ups, just defaults. Reading the skill... reading the spec... Running scaffold_vault.py... 45 paths created. Atomizing the spec into discrete notes... ✓ 9 spec sections ✓ 6 open questions ✓ 5 risks ✓ 4 architecture notes ✓ Project Charter populated from Executive Context Verifying... all 47 notes have valid type: frontmatter. ✓ Vault is at ~/Documents/Obsidian/Reservoir. Open: ~/Documents/Obsidian/Reservoir/00_Index/HOME.md

Four modes, sharply distinguished

The skill handles the full range of "I have something to start with" cases — from a formal spec down to a single sentence.

ModeTriggerOutput
spec-driven Markdown / Word / PDF spec ~50 atomized notes. Charter populated.
brief-driven Slack post / transcript / multi-paragraph brief ~20 atomized notes. Charter populated from brief.
one-liner A sentence ("a self-hosted Vercel for Node services") Scaffold only. Charter seeded with the description.
skeleton Truly no description provided Empty Charter shell. Rare.

Tested, benchmarked, iterated

Two iterations of the skill across three test cases. Six gaps surfaced in iteration 1; every one fixed with a concrete change traceable to subagent feedback.

47
atomized notes from a 286-line spec, in one shot
6→0
skill gaps closed between iteration 1 and iteration 2
100%
of notes have valid frontmatter (verified by the bundled verify subcommand)

v1 → v2, by test case

Test casev1 baselinev2 (current)
spec-driven
286-line technical spec
46 notes, ad-hoc layout, Charter left blank 55 notes, full PARA atomization, Charter populated from Executive Context
one-liner
no spec, sentence-only
Defaulted to skeleton mode, dropped the user's pitch Charter seeded with the user's description via charter_seed
existing vault
add 2nd project
HOME.md / AGENTS.md edited manually with regex patches Script auto-splices HOME, rewrites AGENTS as project-agnostic

What independent subagents said, before and after

Same test (existing-vault add-second-project), independent subagent runs, v1 vs. v2:

v1 baseline

"v1's only existing-vault behavior is skip files that exist. Every add-project-to-existing-vault use ends up requiring manual sed/python patches to splice the new project into Active Projects + MOC list + AGENTS. AGENTS is fundamentally single-project shaped."

v2 with skill

"Script reported ~ HOME.md (Updated HOME.md with Tessellate). Inspection shows both wikilinks added under Active Projects and Maps of Content, with existing entries preserved verbatim. Script reported ~ AGENTS.md (rewritten as project-agnostic). All paths now read 10_Projects/<Project>/... instead of being hardcoded."

Install

Three ways to use it, depending on how you work.

1

As a Claude Skill (recommended)

Download obsidian-vault-scaffolder.skill from Releases and install with claude skill install. Then ask Claude to scaffold a vault for your next project.

2

From source

Clone the repo, point your Claude config at the directory. Useful if you want to customize the templates or extend the atomization playbook.

3

Standalone Python script

The scaffolder works without Claude. python3 scripts/scaffold_vault.py --config config.json produces the folder layout, Bases, and templates. The atomization is the part you'd lose.

The conventions, briefly

Five rules that make the vault queryable, navigable, and AI-friendly. Full docs in the repo.