Back to Notes

CLAUDE.md

Schema for LLM wiki maintenance. Obsidian is the IDE; Claude is the programmer; this vault is the codebase.

What This Repo Is

Obsidian personal knowledge base ("second brain") backed by Git. Not software project — no build steps, tests, package managers. Content in Markdown, synced to GitHub via Obsidian Git plugin (auto timestamped backup commits).

Remote: git@github.com:vatsal30/Obsidian_backup.git

Content Organization

Top-level dirs map to technical domains:

DirectoryPurpose
AI & ML/LLMs, Langchain, MCP notes
DSA/Data structures, algorithms, interview prep
SQL/SQL interview prep — joins, window functions, CTEs, indexes
FrontEnd/JavaScript, React
Python/Core Python, libraries
System Design/Backend patterns, architecture diagrams
Go/Go language docs
AWS/Cloud services
Work/Work-related learning (WebdriverIO, etc.)
Private/Personal roadmap, investments, interview prep (not synced publicly)
Site Content/Homepage content for "Vatsal's Notebook"
Uncategorized/Notes not yet categorized

Private/ Sub-structure

Private/Project_2026/ — active personal tracking:

  • Daily Tracker/ — daily notes/logs
  • Weekly Tracker/ — weekly review notes
  • Monthly Tracker/ — monthly review notes
  • Personal/ — investment tracker, personal goals
  • Work/Projects/ — work project notes (e.g., Personal Portfolio)

Private/Archive/ — old task lists, roadmaps, completed sprint notes moved here when superseded.

File Conventions

Frontmatter — all notes use YAML frontmatter:

---
title: "Title"
category: "Category"
date: "YYYY-MM-DD"
tags: ["tag1", "tag2"]
---

Naming — Title Case or PascalCase (e.g., Dynamic Programming.md, JavaScript.md). Diagrams use Excalidraw format (.excalidraw.md).

.gitignore excludes .obsidian/workspace.json, .obsidian/workspace-mobile.json, .trash/, .DS_Store.

Git Workflow

  • Obsidian Git auto-commits with messages like vault backup: YYYY-MM-DD HH:MM:SS
  • Manual commits: chore: ..., feat: ...
  • Don't amend automated backup commits

Mermaid Diagrams

  • Use <br/> for line breaks inside node labels — never \n
  • Example: Node[Line 1<br/>Line 2] ✅ — Node[Line 1\nLine 2]

Installed Community Plugins

  • obsidian-tasks-plugin — tasks use - [ ] syntax with due dates (📅 YYYY-MM-DD)
  • obsidian-excalidraw-plugin — diagrams as .excalidraw.md files
  • obsidian-local-rest-api — vault via local HTTP API (port 27123 default)
  • calendar — daily/weekly notes integration
  • table-editor-obsidian — GFM table editing
  • obsidian-importer — import from other formats; no ongoing structural impact
  • vscode-editor — VS Code keybindings in Obsidian
  • obsidian-style-settings — theme customization; no content impact

Three-Layer Wiki Architecture

Layer 1 — Raw Sources (raw/): Immutable. Web clips, articles, papers, PDFs. LLM reads, never modifies. Frontmatter: source_url, date_clipped, ingested: true/false.

Layer 2 — Wiki (domain dirs + synthesis/): LLM-owned. Domain notes (Go/, DSA/, etc.) + cross-domain synthesis pages. LLM creates and updates. Human reads.

Layer 3 — Schema (this file): Conventions + workflows. Human + LLM co-evolve over time.

Navigation files (always update):

  • index.md — catalog of all pages, one-line summary per page. Read first when querying.
  • log.md — append-only operation history. Format: ## [YYYY-MM-DD] action | description.

Operations

Ingest

When user drops a source in raw/ and says "process this":

  1. Read source file
  2. Discuss key takeaways with user
  3. Write summary page in appropriate domain dir (or synthesis/ if cross-domain)
  4. Update relevant existing pages (add cross-refs, update synthesis pages)
  5. Set ingested: true in source frontmatter
  6. Update index.md — add new page, increment page_count
  7. Append to log.md: ## [date] ingest | Source Title

One source may touch 5–15 wiki pages. That's expected.

Query

When user asks a question against the wiki:

  1. Read index.md first — find relevant pages
  2. Read those pages
  3. Synthesize answer with [[page]] citations
  4. If answer is valuable (comparison, analysis, new connection) → file it as new wiki page
  5. Update index.md if new page created
  6. Append to log.md: ## [date] query | Question summary

Lint

When user says "lint the wiki" or "health check": Check for:

  • Orphan pages (no inbound [[links]])
  • Stale claims superseded by newer content
  • Concepts mentioned across pages but lacking own page
  • Missing cross-references between related pages
  • DSA/SD gaps vs job switch plan milestones
  • Synthesis pages that need updating from new domain content

Append to log.md: ## [date] lint | Issues found: N


Wiki Page Frontmatter

Domain pages (Go/, DSA/, etc.):

---
title: "Title"
category: "Category"
date: "YYYY-MM-DD"
tags: ["tag1", "tag2"]
---

Synthesis pages (synthesis/):

---
title: "Title"
type: "synthesis"
category: "synthesis"
date: "YYYY-MM-DD"
last_updated: "YYYY-MM-DD"
tags: ["synthesis", "topic1", "topic2"]
source_count: N
---

Raw sources (raw/):

---
title: "Article Title"
type: "source"
source_url: "https://..."
source_type: "article|paper|podcast|video"
date_clipped: "YYYY-MM-DD"
ingested: false
wiki_pages_updated: []
---

Directory Map (updated)

DirectoryOwnerPurpose
raw/Human adds, LLM readsImmutable source documents
raw/assets/Auto (Obsidian)Downloaded images from clipped articles
synthesis/LLMCross-domain synthesis pages
AI & ML/LLMLLMs, Langchain, MCP notes
DSA/LLMData structures, algorithms, interview prep
SQL/LLMSQL interview prep — joins, window functions, CTEs, indexes
FrontEnd/LLMJavaScript, React
Python/LLMCore Python, libraries
System Design/LLMBackend patterns, architecture diagrams
Go/LLMGo language docs
AWS/LLMCloud services
Work/LLMWork-related learning (WebdriverIO, etc.)
Uncategorized/Human drops, LLM filesNotes not yet categorized
Private/HumanPersonal trackers, private goals (not LLM-maintained)
Site Content/HumanHomepage content for vectorbuilds.dev

Synthesis Pages

LLM-maintained cross-domain pages. Update when domain content changes.

PageWhen to update
synthesis/Job Switch Hub.mdNew DSA pattern, SD problem, weekly review done
synthesis/Interview Prep Hub.mdDSA progress, new SD problem, behavioral stories
synthesis/Tech Stack Overview.mdNew skill added, cert achieved, project shipped
synthesis/Concurrency Deep Dive.mdNew Go/Python concurrency notes
synthesis/LLM & AI Stack.mdNew AI/ML content, work experience notes

LLM Ownership Rules

LLM owns: synthesis/, domain dirs (Go/, DSA/, System Design/, etc.), index.md updates, log.md appends.

Human owns: Private/, raw/ (source selection), this CLAUDE.md schema.

LLM never modifies: Files in raw/ (except setting ingested: true), Private/ content, .obsidian/, .gitignore.

On every write — MANDATORY, NO EXCEPTIONS:

  1. Append to log.md: ## [YYYY-MM-DD] action | description — do this LAST, after all other writes
  2. Check if index.md needs updating (new page → add entry + increment page_count)
  3. Check if any synthesis pages need updating

Exemptions (no log required): writes to log.md itself, CLAUDE.md, raw/, Private/.

Enforcement: A PostToolUse hook fires after every Edit/Write and blocks with a reminder if log.md was not updated. Do not finish a task without logging.