My Obsidian Γ Claude Γ Quartz Workflow
Iβve wired Claude Code directly into my Obsidian vault so it actively helps maintain structure and consistency, rather than just being a chatbot I open when something breaks.
The goal: write and think in Obsidian, publish to Quartz automatically, and have Claude handle the boring maintenance work passively through hooks and skills.
Hereβs how it all fits together.
CLAUDE.md β The Control Center
Everything starts with CLAUDE.md at the vault root. Claude Code reads this first β think of it as the constitution for how Claude behaves in this vault.
## Style rules
- Writing inside `00 Blogs/`: blog writing style
- Writing notes (01 Atlas/, 02 Calendar/, etc.): notes style
- Conversational replies in terminal: caveman mode
## Pipeline
/obsidian-refine β /obsidian-cleanup β /obsidian-index β /backup-vaultThe key insight here: context-aware style switching. Claude doesnβt apply the same voice everywhere β it adapts based on where the file lives. Writing a blog post vs jotting an inbox note vs replying in the terminal all get completely different treatment.
Writing Styles
Three distinct modes, each defined as a rule file in .claude/rules/:
Caveman Mode (Terminal Replies)
All conversational output in the Claude Code terminal uses stripped-down caveman grammar. Short sentences. Big words swapped for small ones. No filler.
The reason is token efficiency. Long, polished terminal responses eat context window fast. Caveman mode keeps the back-and-forth snappy without losing the actual information β turns out βME FIX CODE! UGH old code bad.β gets the point across just fine π
Blog Writing Style
For anything inside 00 Blogs/, Claude writes like me β casual but technical, personal but not rambling. The style guide enforces:
- Standard structure:
## Introduction+## Table of Contentson every_index.md - WikiLink paths without
00 Blogs/prefix (Quartz-compatible) - No passive voice, no marketing speak
- Personal asides in italics, blockquotes for key insights
- Emojis sparingly β warmth, not decoration
Notes Style
For 01 Atlas/, 02 Calendar/, 03 Efforts/, 04 Inbox/ β dense, scannable, reference-first. No narrative intro, just structured knowledge. One idea per bullet. Think internal wiki, not blog post.
Hooks β Passive Automation
The real unlock is PostToolUse hooks in .claude/settings.json. These fire automatically after every Write or Edit β I donβt have to remember to run anything.
Blog Index Enforcement
{
"matcher": "Write",
"hooks": [{ "command": "python3 scripts/enforce-blog-index.py" }]
}After every file write inside 00 Blogs/, enforce-blog-index.py runs and:
- Creates a stub
_index.mdif a folder is missing one - Adds new posts to their folderβs Table of Contents automatically
- Updates the parent folderβs TOC when new subfolders appear
Why this matters for tokens: without this hook, Iβd need to ask Claude to re-scan the whole 00 Blogs/ directory at the start of every session to understand what exists. The hook keeps every _index.md current passively β so Claude reads the index and immediately has an accurate map of the blog structure without re-exploring.
Inbox Threshold Alert
When 04 Inbox/ hits 5+ unprocessed notes, the hook surfaces a reminder to run the cleanup pipeline. Keeps the inbox from silently bloating between pipeline runs.
Note-taking Pipeline
The second brain pipeline runs in four phases, each a slash command:
/obsidian-refine β /obsidian-cleanup β /obsidian-index β /backup-vault
/obsidian-refine β Standardise
Fixes frontmatter across all inbox notes: normalises dates, corrects tags, sanitises formatting. Notes land in 04 Inbox/ from wherever (quick capture, phone, Telegram) and come out with consistent structure.
/obsidian-cleanup β Categorise
Routes notes from 04 Inbox/ to the right vault section based on tags:
conceptsβ01 Atlas/(evergreen knowledge)projects/*β03 Efforts/(active work)- Calendar entries β
02 Calendar/
This is where CLAUDE.mdβs tag conventions pay off β concepts, projects/homelab, projects/<name> are the routing keys for the entire system. Consistent tagging at capture time means zero manual sorting.
/obsidian-index β Map of Contents
Regenerates _index.md files across the vault. This is the sparse retrieval layer β instead of loading the entire vault into context, Claude reads the index first and drills down only where needed. Keeps sessions fast and focused.
/backup-vault β Publish
Commits and pushes everything to the iujinwee-vault Git repo. The Quartz garden at garden.iujinwee.cc picks up changes from there automatically.
Weekly: /state-of-brain
Once a week I run /state-of-brain β Claude reads across the vault, identifies emergent themes, contradiction clusters, and stale knowledge, then writes a report to 02 Calendar/Obsidian/[YYYY_WW].md.
Itβs weirdly useful. Patterns surface that Iβd never notice day-to-day when Iβm heads-down in individual notes.
The Quartz Connection
00 Blogs/ syncs directly to the Quartz site. WikiLinks resolve to Quartz URLs β which is why all links in blog posts drop the 00 Blogs/ prefix. Quartz treats that folder as its content root, so paths like [[Home Lab π±/architecture|Core Architecture]] map cleanly to the published URL structure.
The whole system is designed so writing in Obsidian feels natural, publishing is automatic, and Claude is an active collaborator β not a tool I open when something breaks π
Thanks for reading β if youβre building something similar Iβd love to hear about it. Reach me at code.iujinwee.cc