"Which chat was that design decision in?"
2 AM. Claude hit its limit.
The authentication design was coming together nicely — JWT middleware, token rotation, the whole thing — and then the session cut off mid-thought. I switched to Gemini. "So this project uses JWT auth, and the middleware is structured like..." Back to square one.
Next day, back to Claude. Yesterday's Gemini conversation? Gone. Explain everything again. Third time.
I tried Notion. Logged design decisions, tech choices, remaining tasks. Lasted three days. Day four, deep in implementation, forgot to update it. A week later, opened Notion — everything was stale.
Closed it.
AI is brilliant. But conversations evaporate. Manual note-taking doesn't stick because humans don't stick with it. What I needed was a system that accumulates knowledge automatically.
This article shows how I built that with Claude Code + Obsidian.
Try PureMark — zero-click developer tools built entirely in this environment.
What This Setup Achieves
- Claude Code reads and writes Obsidian files directly
- "Read the status file and continue" fully restores context
- Dev logs, decisions, and tech notes accumulate in Obsidian automatically
- Windows Obsidian and WSL Claude Code work seamlessly together
The First Wall: WSL vs Windows
Here's the problem: Claude Code runs on WSL. Obsidian runs on Windows. Same PC, different file systems.
First attempt — symlinks:
ln -s /mnt/c/Users/<username>/Obsidian/my-vault ~/vault
Simple enough. Except Claude Code couldn't reliably write through symlinks. Reads worked, writes didn't. Useless.
The solution: bind mount. Mount the Windows folder directly via WSL's fstab. From Claude Code's perspective, it's just a regular local directory.
- Reliable reads and writes from Claude Code
- Stable paths you can reference in CLAUDE.md
- Auto-mounts on first access (zero startup cost)
Setup (~10 minutes)
Step 1: Create mount point
mkdir -p ~/projects/vault
Step 2: Configure WSL
Edit /etc/wsl.conf:
sudo nano /etc/wsl.conf
Add:
[boot]
systemd=true
[automount]
mountFsTab=true
options="metadata,umask=022,fmask=111"
Step 3: Set up auto-mount
Edit /etc/fstab:
sudo nano /etc/fstab
Add this line (replace paths):
/mnt/c/Users/<WinUser>/Obsidian/<VaultName> /home/<WslUser>/projects/vault none noauto,x-systemd.automount,bind,x-systemd.requires-mounts-for=/mnt/c 0 0
Path example:
Windows:C:\Users\taro\Obsidian\my-vault->/mnt/c/Users/taro/Obsidian/my-vault
WSL:/home/taro/projects/vault
Step 4: Restart WSL
In PowerShell:
wsl --shutdown
Step 5: Verify
# Check systemd
ps -p 1 -o comm=
# -> "systemd" means OK
# Check mount
mountpoint ~/projects/vault && echo "OK: Connected"
# Check files
ls ~/projects/vault
Step 6: Bidirectional test
# WSL -> Windows
echo "# Test from WSL" > ~/projects/vault/_test.md
# -> Should appear in Obsidian
# Windows -> WSL
# Create _test2.md in Obsidian -> check with ls
Both work? You're done. Delete the test files.
Usage Patterns
Pattern 1: Status File as Single Source of Truth
This is the most effective pattern.
One "status file" per project. Everything Claude Code needs to know lives here:
# MyProject Status
## Phase Progress
| Phase | Status | Done |
|-------|--------|------|
| Auth | Done | 03-01 |
| Dashboard | In Progress | -- |
## Remaining Tasks
- [x] JWT implementation
- [ ] Dashboard UI <- current
- [ ] E2E tests
## Decision Log
| Date | Decision | Rationale |
|------|----------|-----------|
| 03-01 | JWT | Stateless API design |
| 03-01 | Tailwind | Component-scoped styling |
Start a new Claude Code session with:
"Read ~/projects/vault/Projects/MyProject/status.md and continue where we left off"
Full context restored. Chat history gone? Knowledge stays.
I built PureMark — a suite of zero-click developer tools — entirely using this workflow. Status file + decision log + dev diary, all in Obsidian, shared with Claude Code. Consistent development across sessions from Phase 0 through Phase 4.
Pattern 2: Reference Obsidian from CLAUDE.md
Define Obsidian paths in Claude Code's CLAUDE.md:
# CLAUDE.md
## Knowledge Base
- Status: ~/projects/vault/Projects/MyProject/status.md
- Tech notes: ~/projects/vault/Notes/
- Decisions: status file "Decision Log" section
## Rules
- Update status file when completing tasks
- Log important decisions in the decision log
Claude Code will autonomously update the status file as it works.
Pattern 3: Automated Dev Logs
#!/bin/bash
DATE=$(date +%Y-%m-%d)
LOG="$HOME/projects/vault/Journal/${DATE}.md"
echo "## Dev Log - $(date '+%H:%M')" >> "$LOG"
git log --since="today" --pretty=format:"- %s" >> "$LOG"
echo "" >> "$LOG"
Have Claude Code run this daily. Dev logs accumulate with zero effort.
Troubleshooting
"Processing /etc/fstab failed"
Check for typos in paths/options. Run sudo mount -a -v for detailed errors.
Vault folder is empty
Automount triggers on first access. Just run ls ~/projects/vault.
Claude Code can't write files
Confirm it's a bind mount, not a symlink: mountpoint ~/projects/vault should say "is a mountpoint".
Windows edits not reflecting in WSL
Remount: sudo umount ~/projects/vault && ls ~/projects/vault
Before / After
Before:
- Context resets every time an AI session ends
- "I'll document it later" never happens
- Switching AIs means re-explaining everything
After:
- "Read the status file" = full context restored
- Claude Code accumulates knowledge automatically
- Everything searchable in Obsidian
10 minutes of setup turns Claude Code conversations from volatile information into compounding assets.
PureMark — zero-click developer tools, born from this workflow.
Top comments (0)