DEV Community

tommy
tommy

Posted on

Claude Code + Obsidian: Turn AI Conversations into a Persistent Knowledge Base

"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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Step 2: Configure WSL

Edit /etc/wsl.conf:

sudo nano /etc/wsl.conf
Enter fullscreen mode Exit fullscreen mode

Add:

[boot]
systemd=true

[automount]
mountFsTab=true
options="metadata,umask=022,fmask=111"
Enter fullscreen mode Exit fullscreen mode

Step 3: Set up auto-mount

Edit /etc/fstab:

sudo nano /etc/fstab
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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 |
Enter fullscreen mode Exit fullscreen mode

Start a new Claude Code session with:

"Read ~/projects/vault/Projects/MyProject/status.md and continue where we left off"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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.


References

Top comments (0)