Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PD Vault

Personal Obsidian vault for a builder running multiple projects in parallel. Combines two patterns:

Maintained jointly by the human and Claude Code.


Quick start

  1. Clone and open in Obsidian — point Obsidian at the repo root.
  2. Enable the Bases core plugin (Settings → Core plugins → Bases).
  3. Open Builder/Home.md — this is your entry point.
  4. Populate Builder/Brain/North Star.md with current focus and active projects (Claude reads this at every session start).
  5. Launch Claude Code from the repo root: cd <repo> && claude.
  6. Run /standup — your first morning kickoff.

Vault layout

pd/
├── CLAUDE.md              ← Claude Code operating manual (auto-loaded)
├── README.md              ← this file
├── .gitignore
├── .claude/               ← hooks, slash commands, scripts
│   ├── settings.json
│   ├── commands/          ← 18 slash commands
│   └── scripts/           ← session-start, classify-message, validate-write, stop-reminder
├── .obsidian/             ← Obsidian config
│
└── Builder/               ← all your content
    ├── Home.md            ← entry point with dashboard links
    ├── Brain/             ← Claude's operational memory
    │   ├── North Star.md  ← living goals document
    │   ├── Memories.md    ← topic index
    │   ├── Patterns.md
    │   ├── Gotchas.md
    │   ├── Key Decisions.md
    │   └── Skills.md      ← slash command registry
    ├── Projects/
    │   ├── active/<slug>/ ← index.md, decisions/, notes/, raw/, wiki/, log.md
    │   ├── paused/<slug>/
    │   └── archive/YYYY/<slug>/
    ├── Ideas/
    │   ├── inbox.md       ← quick-capture one-liners
    │   ├── active/        ← being explored
    │   ├── parked/        ← not now
    │   ├── shipped/       ← promoted to a project
    │   └── killed/        ← dropped with a reason
    ├── Meetings/
    │   ├── inbox/         ← drop raw transcripts, run /meeting-intake
    │   ├── 1-1/, team/, external/
    ├── People/<Name>.md
    ├── Teams/<Team>.md
    ├── Knowledge/         ← cross-cutting Karpathy wiki
    │   ├── index.md       ← TOC
    │   ├── log.md         ← append-only ingest record
    │   ├── raw/           ← immutable sources
    │   └── concepts/      ← distilled concept pages
    ├── Thinking/          ← scratchpads — promote then delete
    ├── Templates/         ← 9 note templates
    └── Bases/             ← 6 dashboards

The two layers

Operational layer — projects, ideas, meetings, people. What you're doing and with whom.

Knowledge layer — raw sources distilled into concept pages. What you're learning. Every project has its own raw/ + wiki/. Cross-cutting concepts live in Builder/Knowledge/.


Daily workflow

Morning

/standup

Reads North Star, active projects, inbox counts, stale flags, open decisions. Presents concrete priorities. Read-only — no writes.

Throughout the day

/dump <anything>

Freeform capture. Claude classifies (idea / decision / meeting / project update / person observation / gotcha) and routes to the right note with the right template.

When you have a specific need

Situation Command
New source document to distill /ingest <path>
Meeting notes piled up in Meetings/inbox/ /meeting-intake
Idea inbox crowded /idea-triage
Starting a new project /project-new <slug>
Structured ideation session /brainstorm <topic>
Prep for a meeting /meeting-prep <topic>
Prep for a 1:1 /1-1-prep <Person>
Capture a meeting /meeting-capture or /1-1-capture <Person>
Check project state /project-status <slug>
Weekly cross-project review /weekly
End of session /wrap-up
Wiki health check /wiki-lint
Full vault audit /vault-audit
Archive completed project /project-archive <slug>

Full list: Builder/Brain/Skills.md.


Examples

Example 1 — Starting a new project

You've been thinking about an idea long enough. Time to commit:

You:  /project-new auth-refactor
Claude: [asks] Project name?
You:  Auth Refactor
Claude: One-line description?
You:  Replace session-token middleware with short-lived JWT + refresh flow
Claude: North star — what does done look like?
You:  All auth flows migrated, legacy middleware deleted, zero prod incidents
       during rollout
Claude: Collaborators? (will create missing person notes)
You:  Sarah Chen, Priya Patel

Result on disk:

Builder/Projects/active/auth-refactor/
  index.md      ← hub with status, north star, collaborators, milestones
  log.md        ← "2026-04-15 — Project created. North star: ..."
  decisions/    ← empty
  notes/        ← empty
  raw/          ← drop source docs here
  wiki/         ← concept pages will land here from /ingest

Claude also links the project from Brain/North Star.md and creates People/Sarah Chen.md and People/Priya Patel.md if missing.

Example 2 — Freeform dump

You just finished a call and your head is full:

You: /dump Sarah says the rate-limiter is crashing under the new JWT flow,
     needs a decision on whether we roll back or forward-fix. She also
     mentioned her team is hiring a staff eng. And idea: what if we move
     auth entirely to edge workers instead of the app layer?

Claude splits this into 3 items and asks about each:

Routed:
- [[Projects/active/auth-refactor/decisions/rate-limiter-crash-rollback-vs-forward-fix]]
  (new decision record, status: proposed)
- [[People/Sarah Chen]] ← appended under Key moments:
  "2026-04-15 — her team hiring a staff eng"
- [[Ideas/inbox]] ← "2026-04-15 — move auth entirely to edge workers
   instead of app layer"

Every item is linked, no note is orphaned, and decisions are tracked where they belong.

Example 3 — Karpathy-style source ingest

You drop a PDF into a project's raw/:

cp ~/Downloads/jwt-best-practices-2025.pdf \
   Builder/Projects/active/auth-refactor/raw/

Then:

You: /ingest Builder/Projects/active/auth-refactor/raw/jwt-best-practices-2025.pdf

Claude reads the PDF and discusses before writing:

Claude: Extracted 8 key ideas from this source. Before I write anything:

  1. JWT claim bloat — authors argue <1KB is the practical ceiling before
     header overhead breaks proxies. Candidate for new page.
  2. Refresh token rotation — there's an existing [[token-rotation]]
     concept in Knowledge/. This source reinforces it + adds evidence.
  3. Edge-case: clock skew between issuer and verifier. No existing page.
  ...

  Proposed:
  - Create: jwt-claim-size, clock-skew-in-jwt, jwt-vs-sessions
  - Update: token-rotation (add citation), refresh-flow-patterns
  - Skip: #5 (covered adequately by existing page)

  Does this scope match what you want to capture?

Only after you confirm does Claude write the wiki pages, each with (source: raw/jwt-best-practices-2025.pdf) citations on every factual claim, and append to Knowledge/log.md (or the project's wiki log).

Example 4 — Idea capture and triage

Shower thought:

You: /idea what if the rate limiter lived in a sidecar instead of middleware

One file appended. No classification, no friction:

Captured → [[Ideas/inbox]]

A week later, your inbox has 9 items. Time to triage:

You: /idea-triage
Claude: [shows idea 1/9]
  "- 2026-04-10 — what if the rate limiter lived in a sidecar instead of middleware"

  Active (a) / Parked (p) / Killed (k) / Ship to project (s) / Skip?
You: p
Claude: Trigger condition for revisiting?
You: when we see rate limiter memory pressure in prod

Ideas end up in one of four states — none linger untriaged.

Example 5 — Prepping for a 1:1

It's 10 minutes before your 1:1 with Sarah:

You: /1-1-prep Sarah Chen

Claude reads People/Sarah Chen.md, finds the most recent 1:1 in Meetings/1-1/, scans meetings she attended since, and produces:

## 1:1 prep: Sarah Chen (2026-04-15)

**Role**: Senior Backend Engineer, Platform team
**Last 1:1**: 2026-04-01 (14 days ago)

**Open from last time**
- [ ] My commit: unblock her staging env access — DONE?
- [ ] Her commit: draft RFC on token rotation — status?

**What she's been doing**
- Projects: [[auth-refactor]] (3 meetings since last 1:1)
- Recent decision: [[rate-limiter-rollback]] — her rollback call

**Themes worth surfacing**
1. She's been leading the rate-limiter incident response — check how
   she's feeling about the on-call load
2. RFC draft is overdue; is she blocked or just busy?
3. She mentioned hiring a staff eng last dump — worth asking how her
   team composition is shaping up

**Suggested agenda**
1. Check-ins on open commits
2. Rate limiter — forward-fix vs rollback, her POV
3. RFC status & blockers
4. Her open questions

Present, don't write. The actual 1:1 note comes from /1-1-capture after the meeting.

Example 6 — End of session

You: wrapping up
Claude: [auto-invokes /wrap-up]

## Session wrap-up

**Created**: 4 files
- [[Projects/active/auth-refactor/index]]
- [[Projects/active/auth-refactor/decisions/rate-limiter-rollback]]
- [[People/Sarah Chen]]
- [[Ideas/inbox]] (1 new entry)

**Orphans fixed**: 0 (all new notes linked)

**Learnings promoted**:
- [[Brain/Key Decisions]] ← rate-limiter rollback (significant)

**Suggested North Star updates**:
- Add [[auth-refactor]] under "Active Projects" (new this session)

**Queued for next session**:
- /meeting-intake (2 inbox files)

Slash commands

18 commands, all in .claude/commands/:

Category Commands
Session standup, wrap-up, weekly
Capture dump, idea, idea-triage, brainstorm
Projects project-new, project-status, project-archive
Meetings meeting-prep, meeting-capture, meeting-intake, 1-1-prep, 1-1-capture
Knowledge ingest, wiki-lint
Maintenance vault-audit

Each command file contains: frontmatter description, step-by-step instructions, output format, and explicit rules.


Hooks (.claude/settings.json)

Run automatically — you don't invoke them.

Hook When What it does
SessionStart Session begins Injects date, North Star focus, active projects with last-touched, inbox counts, recent changes, stale-project flags
UserPromptSubmit Every message Scans for project/person name matches and signals (decision, idea, gotcha, meeting, wrap-up) → surfaces routing hints
PostToolUse After Write/Edit on .md Validates frontmatter (date, description, tags) and warns on missing wikilinks
Stop Session ends Nudges toward /wrap-up if ≥3 notes touched in the last hour

All scripts: .claude/scripts/.


Templates (Builder/Templates/)

Nine templates, each with filled-in frontmatter and section scaffolding:

  • Project Hub.md — for Projects/active/<slug>/index.md
  • Project Note.md — for Projects/active/<slug>/notes/*.md
  • Decision Record.md
  • Meeting Note.md — team / external
  • 1-1 Note.md — for 1:1s
  • Person.md — for People/*.md
  • Idea.md — for Ideas/{active,parked,killed,shipped}/*.md
  • Wiki Concept.md — Karpathy-style concept pages
  • Thinking Note.md — scratchpads

Install the Templates core plugin (or Templater) and point it at Builder/Templates/.


Bases dashboards (Builder/Bases/)

Enable the Bases core plugin. Six live dashboards:

  • Active Projects — status, started, last touched, days-since-touch
  • Stale Projects — active projects idle >14 days
  • Open Decisionsstatus: proposed across all projects
  • Idea Pipeline — grouped by status (inbox/active/parked/shipped/killed)
  • Meetings This Week — last 7 days
  • People Directory — all people, plus "haven't talked to in 30+ days" view

Click any from Home.md or embed inline with ![[Builder/Bases/Active Projects]].


Core principles

  1. Graph-first, not folder-first. A note without links is a bug. Prefer [[wikilinks]] over markdown links.
  2. Every claim cites its source (Karpathy rule): (source: raw/file.pdf).
  3. Atomicity. One concept per note. If a note has 3+ independent sections, split it.
  4. raw/ is immutable. Never modify source documents.
  5. Discuss before writing when ingesting sources. A 10-page PDF touching 15 wiki pages is normal — align on scope first.
  6. Frontmatter on every note. At minimum date, description (~150 chars), tags. Type-specific fields in CLAUDE.md.
  7. Zero data loss. Reorganize with git mv. Never delete without explicit confirmation.

Memory

Durable memory lives in Builder/Brain/ topic notes (git-tracked, linked, browsable in Obsidian). The Claude Code ~/.claude/.../MEMORY.md index is just pointers — never store content there.

When you tell Claude to "remember X":

  1. Claude finds or creates the right Builder/Brain/ topic note.
  2. Writes the knowledge there with a [[wikilink]] to context.
  3. Updates Builder/Brain/Memories.md if a new topic note was created.

Git

The repo is set up for standard Git. First-time setup:

cd <repo-root>
git init
git add .
git commit -m "Initial vault"
git remote add origin <your-repo-url>
git branch -M main
git push -u origin main

Day-to-day sync is manual. Claude will not auto-commit. Use obsidian-git plugin if you want automated syncing.

The included .gitignore excludes Obsidian workspace state, OS cruft, and common attachment types you may not want to track.


Integrations

Google Calendar (MCP)

Claude Code ships with a built-in Google Calendar MCP connector. Connect it once to give Claude read/write access to your calendar inside this vault.

Setup

  1. In Claude Code, run /mcp.
  2. Select claude.ai Google Calendar from the list.
  3. Authorize in your browser.
  4. Done — calendar tools (list events, create, search, update) are now available in every session.

How it's wired into vault workflows

Command Uses calendar for
/standup Lists today's meetings inline with project priorities
/meeting-prep Auto-detects your next meeting if no topic is given
/1-1-prep <Person> Finds the upcoming 1:1 on the calendar, matches attendees to People/ notes, and times the brief to the meeting
/weekly Includes next week's meeting load in the synthesis
SessionStart hook Can surface "next meeting in N minutes" if within the hour (opt-in — not enabled by default)

Example

You: /1-1-prep
Claude: Found upcoming 1:1 — "Sarah Chen / weekly" at 14:00 today (in 37 minutes).
        Running /1-1-prep Sarah Chen...

        [normal 1:1-prep output]

Privacy note

Calendar data is read at request time and passed into Claude's context for that session. Nothing is persisted to the vault unless you explicitly capture it (e.g., /meeting-capture after the meeting). Attendee email addresses are used only to match against People/ frontmatter — they are not written to notes.

Disconnecting

Run /mcp → select the connector → disconnect. Calendar tools disappear immediately.


Troubleshooting

Hook script not running

  • Check .claude/settings.json paths are absolute and correct.
  • Verify scripts are executable: ls -l .claude/scripts/ — should show rwx.
  • Test a script manually: bash .claude/scripts/session-start.sh.

Bases dashboard shows nothing

  • Confirm the Bases core plugin is enabled.
  • Queries use Builder/ prefix because Obsidian's vault root is the repo root. If you rename Builder/, update file.inFolder("Builder/...") in each .base file.

Wikilinks not resolving

  • Filenames are globally unique across the vault — [[North Star]] works from anywhere.
  • Path-scoped links like [[Builder/Bases/Active Projects]] are relative to the vault root.

Frontmatter warnings after editing

  • The PostToolUse hook warns on missing date, description, tags, or missing wikilinks. Fix and move on — warnings don't block.

Extending

  • Add a slash command: drop a new <name>.md in .claude/commands/ with frontmatter description: and a markdown body describing steps. Register it in Builder/Brain/Skills.md.
  • Add a Base: create a .base file in Builder/Bases/. Use file.inFolder("Builder/...") for queries. Link it from Home.md.
  • Add a template: drop a new <Type>.md in Builder/Templates/ with {{placeholder}} fields. Document it in CLAUDE.md.
  • Add a hook: write a script in .claude/scripts/, register it in .claude/settings.json under the appropriate event.

Credits & references

  • Andrej Karpathy — LLM Wiki — the raw → wiki pattern, citation discipline, discuss-before-write, append-only log.
  • obsidian-mind — atomic notes, graph-first thinking, slash commands, hooks, and the memory system pattern.
  • Obsidian — the underlying note-taking app.
  • Claude Code — the AI agent that maintains this vault alongside you.
  • Obsidian Bases — the dynamic query system powering dashboards.

See CLAUDE.md for the full agent operating manual.

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages