Obsidian Vault Operations
Overview
Direct file system management for Obsidian project documentation. Enforces YYYY-MM-DD-name.md naming, generates frontmatter, maintains wikilinks, organizes into projects/<name>/ and _inbox/.
For project linking features (CLAUDE.local.md integration, dual locations, automatic startup), see the project-linking skill.
Configuration
Vault path: Look for "Primary vault:" in conversation context (from CLAUDE.md).
- •Use the most recent occurrence if multiple are present (user override takes precedence)
- •Default:
~/Obsidian/vaultif not specified - •Expand
~to user's home directory before using
When to Use
User triggers:
- •"Save this" / "create project" / "save to inbox"
- •"Create a [design/plan/brainstorm] doc for [project]"
- •"Promote that note to a project"
- •"Update [doc] in [project]"
- •"List projects" / "show me what's in [project]"
Use this skill for: Project documentation, design docs, brainstorms, plans, retrospectives Don't use for: Code documentation (use project CLAUDE.md), one-off notes outside vault
Note: If session has CLAUDE.local.md with project linking, use project-linking skill instead for advanced features.
Quick Reference
| Operation | Command Pattern | Result |
|---|---|---|
| New project | "save as new project" | projects/<name>/YYYY-MM-DD-<type>.md |
| Save inbox | "save to inbox" | projects/_inbox/YYYY-MM-DD-<desc>.md |
| Add to project | "create [type] doc for [project]" | New doc + wikilinks to related |
| Update doc | "update [doc] in [project]" | Edit + updated: YYYY-MM-DD frontmatter |
| Promote inbox | "promote to project" | Move + update frontmatter + rename |
| List projects | "list projects" | Show all with status (skip _inbox) |
| Show contents | "what's in [project]" | List docs chronologically |
| Update status | "mark [project] as active" | Update all doc frontmatter |
| Validate | "check frontmatter" | Report missing/invalid fields |
Conventions:
- •Filename:
YYYY-MM-DD-descriptive-name.md(lowercase, hyphens) - •Links: Wikilinks
[[filename]](no .md, no path if same folder) - •Always add
## Related Documentssection to project docs
Frontmatter
Required fields:
--- project: project-name # Matches folder name or "inbox" status: planning # planning|active|paused|completed|archived type: brainstorm # brainstorm|design|plan|notes|retrospective created: YYYY-MM-DD # File creation date ---
Optional fields:
- •
updated: YYYY-MM-DD- Added when document revised (filename stays same) - •
promoted: YYYY-MM-DD- Added when moved from inbox to project
Valid values:
- •status: planning, active, paused, completed, archived
- •type: brainstorm, design, plan, notes, retrospective
Core Operations
Create New Project
Trigger: "save this as a new project"
- •Determine vault path from conversation context
- •Ask for project name → validate (lowercase, hyphens, no spaces)
- •Create
<vault-path>/projects/<project-name>/ - •Infer doc type from conversation (brainstorming → brainstorm, planning → plan)
- •Generate filename:
YYYY-MM-DD-<type>.md - •Write frontmatter with
status: planning - •Add
## Related Documentssection - •Confirm: "Created projects/<name>/YYYY-MM-DD-<type>.md"
Save to Inbox
Trigger: "save to inbox" / "quick idea"
- •Determine vault path from conversation context
- •Create in
<vault-path>/projects/_inbox/ - •Use descriptive filename from content
- •Frontmatter:
project: inbox,status: planning,type: notes - •Confirm creation
Add Document to Existing Project
Trigger: "create a [design/plan] doc for [project-name]"
- •Search
projects/for matching folder - •If not found → ask to clarify or create new project
- •If multiple matches → present options
- •Create new doc in project folder
- •Search vault for related docs
- •Add inline wikilinks where relevant
- •Add
## Related Documentssection with links:[[YYYY-MM-DD-filename]] - •Confirm creation + report links added
Update Existing Document
Trigger: "update the [doc] in [project]"
- •Find document in project folder
- •Read current contents
- •Make requested updates
- •Add/update
updated: YYYY-MM-DDin frontmatter - •Preserve filename (creation date unchanged)
- •Confirm what changed
Promote from Inbox
Trigger: "promote that note to a project" / "make this a proper project"
- •Identify inbox note from conversation context
- •Search
_inbox/for related notes (similar topics, keywords) - •Present related notes → ask which to include
- •Ask for project name
- •Create
projects/<project-name>/ - •Move selected files → rename if needed (e.g., -idea.md → -initial-brainstorm.md)
- •Update frontmatter:
- •
project: inbox→project: <project-name> - •Add
promoted: YYYY-MM-DD - •Update
typeif needed (ask user or infer)
- •
- •Confirm with list of moved files
List Projects
Trigger: "list projects" / "show me all projects"
- •Determine vault path from conversation context
- •Read
<vault-path>/projects/(skip_inbox/) - •For each project, read one doc to get status
- •Sort by status: active → planning → paused → completed → archived
- •Show count of documents per project
Output:
Active Projects: - project-name (3 docs) Planning: - another-project (1 doc)
Show Project Contents
Trigger: "what's in [project]" / "show me [project]"
- •Find project folder
- •List all documents with types and statuses from frontmatter
- •Present chronologically
Output:
project-name (status: active): - 2025-11-07-initial-brainstorm.md (brainstorm) - 2025-11-10-design-doc.md (design)
Update Project Status
Trigger: "mark [project] as active" / "set status to completed"
- •Find project folder
- •Read all documents
- •Update
statusfield in all frontmatter - •Confirm count of documents updated
Validate Frontmatter
Trigger: "check [project] frontmatter" / "validate frontmatter"
- •Find project folder → read all documents
- •Check each has: project, status, type, created
- •Verify
projectmatches folder name - •Verify
statusin valid values - •Verify
typein valid values - •Verify dates are YYYY-MM-DD format
- •Report issues found
Auto-validate before creating any file.
Structure & Naming
Directory:
<vault-path>/projects/
_inbox/ # Quick captures
project-name/ # One folder per project
YYYY-MM-DD-desc.md
Naming rules:
- •Files:
YYYY-MM-DD-descriptive-name.md(lowercase, hyphens, concise) - •Projects:
project-name(lowercase, hyphens, matches folder) - •No spaces or underscores
Examples:
- •
obsidian-integration/2025-11-07-initial-brainstorm.md - •
api-refactoring/2025-11-08-design-doc.md
Linking
Internal: [[YYYY-MM-DD-filename]] (no .md, no path if same folder)
External: [text](url)
Always add to project docs:
## Related Documents - [[YYYY-MM-DD-brainstorm]] - Brief description - [[YYYY-MM-DD-design]] - Brief description
Auto-linking:
- •Add inline wikilinks where contextually relevant
- •Search vault when creating new docs
- •Link to related project docs in Related Documents section
Pre-flight Checks
Before ANY file operation:
- • Path exists or can be created
- • Filename matches
YYYY-MM-DD-name.md - • Frontmatter has: project, status, type, created
- • Dates are
YYYY-MM-DDformat - • Status/type are valid values
Before updates:
- • File exists → read current contents
- • Preserve creation date in filename (only update frontmatter)
Common Mistakes
| Problem | Solution |
|---|---|
| Project not found | Search partial matches → offer to create → list available |
| Invalid frontmatter | Report issue → fix before proceeding |
| File exists | Ask to update in-place or use different filename |
| Permission denied | Report error → suggest checking vault path in ~/.claude/CLAUDE.md |
| Vault path not found | Check for "Primary vault:" in context → use default ~/Obsidian/vault |
| Wrong date in filename | Preserve creation date (filename) when updating → only change updated |
Example
User: "Save this brainstorm as a new project called obsidian-integration"
You: Create projects/obsidian-integration/2025-11-07-initial-brainstorm.md with frontmatter
User: "Create a design doc for obsidian-integration"
You: Create 2025-11-08-architecture-design.md, link to [[2025-11-07-initial-brainstorm]]
User: "Promote that git-worktrees note from inbox to a project" You:
- •Found
_inbox/2025-11-07-git-worktrees-idea.md - •Create
projects/git-worktrees/ - •Move and rename →
2025-11-07-initial-brainstorm.md - •Update frontmatter:
project: git-worktrees, addpromoted: 2025-11-08