doc-vault-project
Vault Project
Manage multi-note research projects in an Obsidian vault with phased subdirectory structure.
Prerequisites
| Skill | Required | Purpose |
|---|---|---|
| doc-obsidian | Yes | Vault CRUD via notesmd-cli + search via qmd |
Directory Structure
projects/{project-slug}/
├── _index.md # MOC: status, component links, linked research
├── concept/ # Problem definition, threat models, requirements
├── research/ # Deep dives per component, tech evaluation
├── design/ # Architecture, API design, data models
└── implementation/ # Build plans, code refs, test plans
Projects live in projects/ (top-level). Separate from research/ (knowledge).
Four phases are always created. Empty dirs signal "not started yet."
Step 0: Setup
Run before every operation:
VAULT=$(notesmd-cli print-default --path-only)
qmd status
If either fails, stop and tell the user to set up doc-obsidian first.
Commands
init — Scaffold New Project
Trigger: "create project {name}", "new project {name}", "project init {name}"
Workflow
- Parse project name → kebab-case slug (max 40 chars)
- Check if
projects/{slug}/exists — if yes, abort and show existing project - Create directory structure:
VAULT=$(notesmd-cli print-default --path-only)
mkdir -p "$VAULT/projects/{slug}/concept"
mkdir -p "$VAULT/projects/{slug}/research"
mkdir -p "$VAULT/projects/{slug}/design"
mkdir -p "$VAULT/projects/{slug}/implementation"
- Load
references/index-template.mdandreferences/frontmatter-schemas.md - Build
_index.mdwith project frontmatter and empty status table - Write
_index.md:
# Use Write tool → "$VAULT/projects/{slug}/_index.md"
- Re-index:
qmd update && qmd embed - Confirm:
Created: [[{slug}]]
Path: projects/{slug}/
Phases: concept/ research/ design/ implementation/
Components: 0
add — Add Component Note
Trigger: "add {note} to project {name}", "project add {note} to {phase}"
Workflow
- Identify project slug and target phase (concept/research/design/implementation)
- If phase not specified, infer from content:
- Problem/threat/requirement →
concept - Deep dive/evaluation/comparison →
research - Architecture/API/data model →
design - Plan/code/test/deploy →
implementation
- Problem/threat/requirement →
- If ambiguous, ask the user
- Generate note slug (kebab-case, max 60 chars)
- Check for duplicates in the phase directory
- Load frontmatter schema from
references/frontmatter-schemas.md - Build component note with
type: project-componentfrontmatter - Save:
VAULT=$(notesmd-cli print-default --path-only)
# Write tool → "$VAULT/projects/{project-slug}/{phase}/{note-slug}.md"
- Update
_index.md:- Add wikilink under the correct phase section
- Update status table counts
- Update
components:andupdated:in frontmatter
- Re-index:
qmd update && qmd embed - Confirm:
Added: [[{note-slug}]]
Path: projects/{project-slug}/{phase}/{note-slug}
Phase: {phase}
Status: pending
Project components: {N}
status — Show Project Status
Trigger: "project status", "project status {name}", "how is project {name}"
Workflow
- If no project specified, list all projects:
VAULT=$(notesmd-cli print-default --path-only)
ls "$VAULT/projects/"
- For a specific project, read
_index.mdfrontmatter and list components:
VAULT=$(notesmd-cli print-default --path-only)
# Read _index.md for project metadata
# List files in each phase directory
# Read frontmatter status from each component
- Display:
Project: {name}
Status: {project-status}
Updated: {date}
| Phase | Component | Status |
|-------|-----------|--------|
| concept | [[threat-model]] | complete |
| concept | [[gap-analysis]] | in-progress |
| research | [[endpoint-security]] | pending |
| design | — | — |
| implementation | — | — |
Progress: 1/3 complete
link — Link Existing Research
Trigger: "link research to project {name}", "project link {note} to {name}"
Workflow
- Identify project and target research notes
- If no specific notes given, search for related research:
qmd vsearch "{project topic}" --json -n 10
- Filter results: only notes in
research/, exclude score < 0.3 - Present candidates with scores, let user pick
- Read project
_index.md - Add wikilinks under
### Linked Researchsection:
### Linked Research
- [[existing-note]] — {brief relevance}
- Do NOT move files — research stays in
research/ - Update
updated:in frontmatter - Re-index:
qmd update && qmd embed - Confirm:
Linked to [[{project}]]:
- [[note-1]] — {relevance}
- [[note-2]] — {relevance}
promote — Promote Research Topic to Project
Trigger: "promote {topic} to project", "make {topic} a project"
Workflow
- Find existing research notes on the topic:
qmd vsearch "{topic}" --json -n 15
- Present candidates, let user confirm which notes relate
- Run
initto scaffold the project - Run
linkto wikilink the existing research notes - Optionally create initial component notes in
concept/if the research already covers problem definition - Confirm:
Promoted: {topic} → [[{project}]]
Linked research: {N} notes
Components: {N} created
Promote does NOT move existing notes. It creates a project that references them.
Constraints
DO:
- Always run Step 0 first
- Always use fixed four phases (concept/research/design/implementation)
- Always update
_index.mdafter adding/linking components - Always re-index after changes
- Resolve vault path dynamically via
notesmd-cli print-default --path-only - Keep research notes in
research/— link, don't move - Read notes before editing
DON'T:
- Create custom phases or skip phase directories
- Move existing research notes into project directories
- Create projects without
_index.md - Skip re-indexing
- Hardcode vault paths
- Auto-trigger — only respond to explicit project commands
References
references/frontmatter-schemas.md— Frontmatter for _index.md and component notes, field rules, status transitionsreferences/index-template.md— _index.md scaffold template, status table update rules, linked research format