nikolas.sapa
April 16, 2026

11 — Obsidian Vault

A well-structured vault is shared memory between you and Claude. Session starts, context loads, work begins — no re-explaining who you are or what you're building.


Why a vault

Claude's context window is stateless. Every session, you start from zero unless you inject context explicitly. An Obsidian vault solves this: markdown files on disk, readable by any tool, structured to load exactly the right context at the right time.

The vault becomes the single source of truth for your business context, project status, and working memory.


Vault structure (PARA-style)

vault/
├── CLAUDE.md                    ← Claude's working memory (updated each /wrap-up)
├── 01-Areas/                    ← Ongoing responsibilities, never "done"
│   ├── _context/                ← Canonical business docs — load before any content work
│   │   ├── brand-voice.md
│   │   ├── icp.md
│   │   ├── positioning.md
│   │   └── products.md
│   ├── marketing-growth.md
│   ├── dev-infrastructure.md
│   └── content-writing.md
├── 02-Projects/                 ← Active work with a defined end state
│   ├── Claude Sessions/         ← Auto-saved session handoffs
│   ├── my-product/              ← index.md, BACKLOG.md, Handoffs/
│   └── client-project/          ← index.md, BACKLOG.md
├── 03-Resources/                ← Reference material, concepts, connections
├── 04-Archives/                 ← Completed or paused work
└── 05-Daily-Logs/               ← Daily knowledge log

Project folder template:

02-Projects/project-name/
├── index.md          ← overview, current status, wikilinks
├── BACKLOG.md        ← Kanban (To Do / In Progress / Done)
└── Handoffs/         ← per-session end notes

_context/ — canonical business docs

This subfolder is the highest-value part of the vault. Load it before any content, copy, or positioning work. One source of truth — never duplicated.

FileContents
brand-voice.mdTone, personality, writing style, words to use and avoid
icp.mdIdeal customer — who you're building for, what they struggle with
positioning.mdMarket position, differentiators, one-liners per product
products.mdProduct summaries, stack, current status

When Claude reads these before writing copy, the output sounds like you. Without them, it sounds like everyone else.


@-imports in CLAUDE.md

The cleanest way to auto-load vault context at session start is to declare @-import paths at the top of your project's CLAUDE.md:

@~/vault/01-Areas/_context/brand-voice.md
@~/vault/01-Areas/_context/icp.md
@~/vault/02-Projects/my-product/index.md

Claude Code evaluates these on startup. The files are injected into context before the first message. No manual loading, no re-explaining.

Scope imports to the project. A marketing project pulls brand voice and ICP. A dev project pulls dev-infrastructure.md and the relevant index.md. Keep the context budget tight.


Session rituals

/resume

Reads CLAUDE.md + the latest session handoff + active project indexes. Returns precise current state — what's done, what's next, what to open. Start every session with this instead of re-explaining from scratch.

/wrap-up

  • Summarizes the session
  • Updates CLAUDE.md with current handoff state
  • Writes a handoff note into 02-Projects/Claude Sessions/
  • Links new files created during the session

These two commands make the vault a living document rather than a static reference.


Note conventions

Wikilinks: [[note-slug]] — filename without .md. Use for all internal cross-references.

YAML frontmatter: Required on every note.

---
title: Note Title
type: context | area | project | concept
status: active | paused | archived
updated: YYYY-MM-DD
tags: [tag1, tag2]
---

Consistent frontmatter makes pattern search reliable — you can filter by type: context or status: active without opening every file.


Tool routing

The vault is just markdown files on disk. You don't need the Obsidian MCP to read them — whatever context layer you run (a caching MCP, a direct file reader, or plain shell commands) reads the same files. The Obsidian MCP adds a round-trip through the server; direct file access is faster.

Route accordingly:

TaskApproach
Search vault by keywordPattern search on the vault directory
Read a specific noteDirect file read
Map vault structureDirectory tree (depth 2–3)
List area or project filesTree on the target subdirectory

Keep the tool consistent. Mixing the Obsidian MCP with direct reads on the same files can produce stale results from the MCP's own cache.


Context loading order

When starting work on any project:

  1. Check the project's CLAUDE.md for @path imports — if present, context is already loaded
  2. If not, search the vault by project name to locate relevant notes
  3. Load 01-Areas/_context/ canonical docs for content or positioning work
  4. Read 02-Projects/[project]/index.md for current status

Never ask for information that may already be in the vault. Search first.


Knowledge capture (optional automation)

If you run session-end hooks, you can automate knowledge extraction into the vault:

Session ends
     │
     ▼
SessionEnd hook → extraction script
     │  Pulls concepts + connections from session transcript
     ▼
daily/YYYY-MM-DD.md  (raw daily log)
     │
     ▼  (compile step — runs nightly or on demand)
knowledge/concepts/  +  knowledge/connections/
     │
     ▼  (symlinks into vault)
03-Resources/Concepts/  ←→  Obsidian
03-Resources/Connections/ ←→ Obsidian
05-Daily-Logs/ ←→ Obsidian

Without automation, a manual /wrap-up achieves the same goal — just slower. The vault compounds in value either way. What matters is writing the handoff, not how it gets written.