14 KiB
Claude Code – Vault Orientation
Who I Am
I'm Claude Code, acting as Vadym's AI partner for all Oliver Agency projects. This vault is my persistent memory. I read it at the start of every session and update it after every meaningful change.
Model for Logging
Always use claude-haiku-4-5-20251001 (Haiku) for all Obsidian logging and note-writing operations. This keeps costs low and responses fast for pure logging tasks.
Vault Structure
VadymSamoilenko/
├── raw/ ← YOUR inbox — dump source material here (articles, PDFs, clips)
│ └── _processed/ ← Compiled files move here (don't delete)
├── wiki/ ← LLM's domain — Karpathy-style knowledge base (see Wiki System below)
│ ├── _master-index.md ← LLM's table of contents — read this first for any query
│ ├── log.md ← Append-only build log
│ ├── concepts/ ← Atomic knowledge articles (+ _index.md)
│ ├── connections/ ← Cross-cutting insights (+ _index.md)
│ └── qa/ ← Filed query answers (+ _index.md)
├── output/ ← Query results, reports, slide decks
│ └── slide-decks/
├── 01 Projects/ ← One folder per project (matches disk: /Volumes/SSD/Projects/Oliver/)
│ ├── {project}/ ← Each project has one .md note
│ ├── Dashboard.md ← Live Dataview dashboard
│ ├── Projects.base ← Obsidian Bases view
│ └── Projects Index.md
├── 02 Areas/
│ ├── Pending Commands.md ← ⚠️ IMPORTANT: track all server commands given to Vadym
│ └── Work Tasks.md
├── 03 Resources/
│ ├── Infrastructure/ ← SSH Servers, Deploy guides, cheatsheets
│ └── SOPs/
├── 04 Archive/ ← Completed/abandoned projects
├── 05 Aimpress LTD/ ← Personal company (credentials at ~/.secrets/)
├── 99 Daily/ ← Daily session logs (YYYY-MM-DD.md)
└── Templates/
obsidian-skills
Five official skills from Kepano are installed in .agents/skills/ and symlinked to .claude/skills/:
- obsidian-cli — CLI commands for reading/writing notes (requires Obsidian open with CLI enabled)
- obsidian-markdown — Obsidian Flavored Markdown syntax reference
- obsidian-bases — Creating and editing
.basefiles - json-canvas — Creating canvas files
- defuddle — Extract clean markdown from web pages
Project Notes – What to Track
Each project note lives at 01 Projects/{project-dir}/{Project Name}.md and must contain:
- frontmatter: name, client, status, tech, local_path, deploy, url, tags
- Overview: what the project does
- Tech Stack: frontend / backend / db / infra
- Deployment: how to run it, where it lives
- Sessions: reverse-chronological log (latest first)
- Change Log: table of date / requested / changed / files
- Related: wikilinks to connected notes
Frontmatter Standard
name: "Human-readable name"
client: "Client Name" # or "Oliver Internal"
status: active # active | production | paused | archived
tech: [Python, FastAPI, Docker] # array
local_path: /Users/ai_leed/Documents/Projects/Oliver/{dirname}
deploy: "docker compose up --build"
url: https://... # if deployed
server: GCP | optical-web-1 | TBD
tags:
- project
- client/ford # see Tag Taxonomy below
created: YYYY-MM-DD
Tag Taxonomy
Use these tags consistently across all notes:
# Client tags
client/3m, client/barclays, client/ferrero, client/ford,
client/hm, client/loreal, client/lusa, client/pimco,
client/solventum, client/dowjones
# Status tags
status/active, status/production, status/paused, status/archived
# Tech tags
tech/fastapi, tech/react, tech/docker, tech/nextjs,
tech/gemini, tech/claude, tech/python, tech/node
# Type tags
type/project, type/dashboard, type/sop, type/reference,
type/daily, type/review, type/meeting
# Domain tags
domain/ai, domain/accessibility, domain/devops, domain/analytics
Project Status Lifecycle
active— currently being developed or maintainedproduction— deployed and stable, not under active developmentpaused— on hold, may resumearchived— completed or abandoned
Archival workflow
When a project moves to archived:
- Update frontmatter
status: archived - Move folder from
01 Projects/{name}/→04 Archive/{name}/ - Update Projects Index.md to remove or annotate the entry
Session Protocol — MANDATORY
Start of every session:
- Check
01 Projects/{project}/— the relevant project note (pre-loaded via SessionStart hook) - Check
02 Areas/Pending Commands.md— any server commands still outstanding? - If the project note is a stub (never had a real session) → read the project's code first and fill in Overview, Tech Stack, Deployment before starting work
During every session:
- If I give Vadym a command to run on a server or locally → immediately add to
02 Areas/Pending Commands.mdunder Pending - Once Vadym confirms it ran → move to Done with result
- If any service is installed, removed, or renamed on any homelab server → before marking the task done, check that
/opt/services/glance/config/glance.ymlis up to date: bookmarks URLs, monitor entries, Reference page. Update if anything is missing or stale.
End of every session:
- Append to the project's Sessions section (latest first): date, what was requested, what was done
- Update Change Log table: date / requested / changed / files
- Update frontmatter if status/tech/url/server changed
- The Stop hook auto-writes a timestamp to
99 Daily/YYYY-MM-DD.md - PostCompact hook auto-writes structured entries on context compaction
Rule: NEVER skip logging
Even if the session is short. Even if just answering a question. Log it.
All Code Projects Location
/Users/ai_leed/Documents/Projects/Oliver/ — this is where all code lives on disk.
Key Facts
- Vadym = developer at Oliver Agency, building internal tools and client solutions
- Stack preferences: Python/FastAPI for backends, Docker for deployment, vanilla JS+Tailwind or React for frontends
- Language for notes: English
- Date format: YYYY-MM-DD everywhere
- Credentials are NOT tracked in vault git — stored at
~/.secrets/locally~/.secrets/mailgun.env— Mailgun shared infra defaults02 Areas/credentials.mdis gitignored (iCloud-only, never pushed to GitHub)
Two-Tier Daily Log System
The system maintains two separate daily log streams — do not confuse them:
| Location | Written by | Read by | Purpose |
|---|---|---|---|
~/.claude/memory-compiler/daily/YYYY-MM-DD.md |
flush.py (SessionEnd hook) |
compile.py (nightly) |
Source material for wiki compilation |
99 Daily/YYYY-MM-DD.md |
obsidian-session-log.py (Stop hook) |
Human (you) | Human-readable session log |
compile.py reads ONLY from memory-compiler/daily/. It never reads 99 Daily/.
Both logs cover the same sessions but in different formats.
raw/ Inbox — How to Use
Drop any source material into raw/ and say "compile raw":
- Articles, PDFs, transcripts, research notes
- Screenshots of config files or error messages (describe them as text)
- Architecture diagrams (describe as text)
Claude will extract knowledge into the correct wiki/ folder, update _index.md, and move the file to raw/_processed/.
SessionStart auto-detection: At the start of each session, Claude checks raw/*.md for unprocessed files. If any exist, it will notify and offer to process them automatically — no need to say "compile raw" manually.
Do NOT put credentials or sensitive data in raw/.
Multi-Device Setup
When setting up a new machine, run this sequence:
# 1. Clone memory-compiler
git clone <repo> ~/.claude/memory-compiler
# 2. Copy scripts from vault (they sync via iCloud)
# Scripts live in vault at: 00 Automation/ (if set up)
# OR copy from another machine's ~/.claude/
# 3. Install dependencies
cd ~/.claude/memory-compiler && uv sync
# 4. Create ~/.secrets/ with credentials
mkdir -p ~/.secrets
# Copy mailgun.env and other secrets from 1Password / secure source
# 5. Register LaunchAgents (edit paths for new machine username first)
cp ~/path/to/LaunchAgents/*.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.claude.memory-compiler.plist
launchctl load ~/Library/LaunchAgents/com.vadym.icloud-dedup.plist
# 6. Update settings.json hooks (replace ai_leed with new username)
sed -i '' 's|/Users/ai_leed/|/Users/NEW_USERNAME/|g' ~/.claude/settings.json
Note: All hook commands in settings.json use hardcoded /Users/ai_leed/ paths.
When working on a different machine, update these paths. A machine-agnostic setup
(using $HOME) is a future improvement.
Wiki System — You Are the Librarian
wiki/ is YOUR domain. You write and maintain everything in it. I rarely edit wiki files directly.
Vault Structure (3 zones)
| Zone | Path | Owner | Purpose |
|---|---|---|---|
| Inbox | raw/ |
Me (human) | Dump source material here — articles, PDFs, transcripts |
| Wiki | wiki/ |
You (LLM) | Compile, maintain, cross-link all knowledge |
| Output | output/ |
You (LLM) | Query results, reports, slide decks |
Wiki File Structure (Karpathy RAG format)
wiki/
├── _master-index.md ← LLM's table of contents — ALWAYS keep current
├── log.md ← Append-only build log
├── {topic}/ ← One folder per knowledge topic
│ ├── _index.md ← Lists all articles in this topic
│ └── {article}.md ← Individual knowledge article
├── concepts/ ← Session-derived atomic knowledge
├── connections/ ← Cross-cutting insights
└── qa/ ← Filed query answers
Navigation Pattern (3 hops — no RAG needed)
When answering any question against the wiki:
- Read
wiki/_master-index.md— "what topics exist?" - Read that topic's
_index.md— "what articles exist?" - Read the specific 1–3 articles
- Synthesize the answer
Compiling (when I say "compile" or add files to raw/)
For each file in raw/:
- Read it and identify the core topic
- Create or find the right topic subfolder in
wiki/ - Write a wiki article with key takeaways and
[[wikilinks]]to related concepts - Update that topic's
_index.md - Update
wiki/_master-index.md - If raw file spans multiple topics — create articles in both, cross-link
- Move processed file to a
raw/_processed/subfolder (don't delete)
Article Conventions
- File names: lowercase with hyphens (
ai-agent-patterns.md) - Always use
[[wikilinks]]when referencing other notes - Keep articles concise — bullet points over paragraphs
- Every article must have a
## Key Takeawayssection - Every article must link to at least 2 other articles
Auditing (when I say "audit" or "lint")
Review the wiki for:
- Inconsistent or contradictory information across articles
- Missing cross-links between related concepts
- Orphan articles (no one links to them)
- Topics mentioned but without dedicated articles
- Suggest 3–5 new articles that would strengthen the knowledge base
- Do NOT make changes without confirmation — just report
Q&A Auto-Save Protocol
When answering a complex technical question during a session (debugging, architecture, how-to), save the answer to wiki/qa/:
- Create
wiki/qa/{topic-slug}.mdwith the question as H1, answer as body,## Key Takeawayssection, and## Relatedwikilinks - Add entry to
wiki/qa/_index.md - Update
wiki/_master-index.mdcount
Threshold for saving: The answer involves non-obvious reasoning, debugging steps, or knowledge that would take >5 minutes to rediscover. Don't save answers to questions with obvious answers.
Slug format: {problem}-{resolution}.md e.g. fastapi-cors-docker-fix.md, azure-ad-403-wrong-flow.md
Auto-compilation from Sessions
Sessions are captured automatically via Claude Code hooks and compiled to wiki/concepts/, wiki/connections/, and wiki/qa/ after 21:00 (9 PM).
Query command:
cd ~/.claude/memory-compiler && uv run python scripts/query.py "your question"
Manual compile:
cd ~/.claude/memory-compiler && uv run python scripts/compile.py
Automation Hooks
Five hooks fire automatically via Claude Code settings (global, from any project):
| Event | Script | Purpose |
|---|---|---|
| SessionStart | obsidian-session-start.py | Loads project note + pending commands + check raw/ inbox |
| SessionStart | memory-compiler/hooks/session-start.py | Injects wiki/index.md + current-state.md + recent daily log |
| PreCompact | memory-compiler/hooks/pre-compact.py | Captures transcript → saves current-state.md → spawns flush.py |
| SessionEnd | memory-compiler/hooks/session-end.py | Captures session transcript → knowledge flush → daily log |
| Stop | time_tracker.py + cc-collector.py + obsidian-session-log.py | Time tracking + CC dashboard + daily note timestamp |
Data flow:
PreCompact → flush.py (background) → daily/YYYY-MM-DD.md
→ current-state.md ← next SessionStart reads this → context restored
Session ends → SessionEnd hook → flush.py → daily/YYYY-MM-DD.md
↓ (after 21:00)
compile.py → wiki/concepts/ (Obsidian vault)
MCP Servers
| MCP | When to use |
|---|---|
context7 |
Live docs for FastAPI, Next.js, React, etc. — use instead of searching Google |
basic-memory |
Store a decision or insight mid-session (create_entities) / recall from past sessions (search_nodes) — writes .md files directly into this vault |
postgres |
Direct SQL queries to project DBs without writing scripts |
redis |
Redis operations for cc-dashboard, ai-cost-tracker, video-accessibility |
sequential-thinking |
Complex multi-step architectural decisions |
My Role
- Log work clearly so context is never lost between sessions
- Keep notes accurate and up-to-date — no stale info
- Link related projects with wikilinks
- Never create a note for something already documented — update existing notes
- Use tag taxonomy consistently
- Move completed/abandoned projects to 04 Archive