Obsidian Memory Keeper Skill
Description
Manages daily notes, session tracking, and knowledge base synchronization for Aaron's Obsidian vault located at ~/Documents/Obsidian/Aaron/.
Purpose
This skill provides automated daily note creation, session summaries, and bidirectional synchronization between CLAUDE.md and Obsidian vault content. It ensures Aaron's personal knowledge base stays current and organized.
When to Invoke
Auto-Invoke (proactive):
- Daily note doesn't exist for today
- Session summary requested
- After significant development milestones
- Weekly review periods (Sundays)
Manual Invoke (explicit):
- User types
/daily-notecommand - User requests Obsidian integration
- User asks to "update daily notes", "sync Obsidian", or similar
Core Capabilities
1. Daily Note Management
Create or update daily notes in Obsidian vault following the Daily-Note template:
Location: ~/Documents/Obsidian/Aaron/Daily/YYYY-MM-DD.md
Template Structure:
# YYYY-MM-DD
## Morning Review
- [ ] Check CLAUDE.md status
- [ ] Review active projects
- [ ] Plan today's priorities
## Session Notes
### Session 1: [Time]
**Project**:
**Focus**:
### Session 2: [Time]
**Project**:
**Focus**:
## Accomplishments
-
## Learnings
-
## Tomorrow
- [ ]
- [ ]
## Links
- [[Projects]]
- [[CLAUDE.md]]
---
Tags: #daily-note #YYYY #MM
Daily Note Creation Rules:
- Create new daily note at first session of the day
- Use ISO 8601 date format (YYYY-MM-DD)
- Auto-link to related project notes in Aaron vault
- Add session summaries as conversations occur
- Timestamp each session entry
- Include tags for searchability
2. Session Tracking
Track Claude Code sessions with context:
What to Capture:
- Session start/end time
- Working directory / project
- Key tasks completed
- Files modified (from git status if available)
- Significant decisions or insights
- Errors encountered and solutions
How to Capture:
- Read git status in current working directory
- Analyze conversation history for key activities
- Extract file modifications, test results, commands
- Summarize as bullet points under session heading
- Append to today's daily note
Example Session Entry:
### Session 3: 14:30-16:15
**Project**: ~/projects/xai (PhD Dissertation)
**Focus**: Experimental validation sprint Week 2
**Completed**:
- Ran Experiment 6.1 with n=500 samples (GPU cluster)
- Fixed type errors in attribution methods (3 files)
- Updated test suite (12 new tests added)
- Compiled thesis PDF (479 pages, no errors)
**Files Modified**:
- src/attribution/methods.py (+45, -12)
- tests/test_attribution.py (+150, -0)
- outputs/thesis/chapters/chapter6.tex (+23, -8)
**Decisions**: Chose SHAP over LIME for efficiency on n=500
**Next**: Week 3 - Experiment 6.2 with demographic analysis
3. CLAUDE.md Synchronization
Bidirectional sync between CLAUDE.md and Obsidian vault:
CLAUDE.md → Obsidian:
- Extract active projects from CLAUDE.md
- Create/update project notes in
~/Documents/Obsidian/Aaron/Projects/ - Link projects to daily notes
- Sync session notes to daily notes
- Update project status in vault
Obsidian → CLAUDE.md:
- Extract insights from daily notes
- Update session notes in CLAUDE.md
- Add learnings to infrastructure/patterns
- Sync project status changes
- Preserve CLAUDE.md structure
Sync Process:
- Read both CLAUDE.md and latest daily notes
- Identify differences (new sessions, project updates, learnings)
- Apply changes bidirectionally
- Maintain consistency (Last Updated timestamp, project metrics)
- Log sync operations
4. Knowledge Base Integration
Connect daily notes to Aaron's broader knowledge base:
Auto-Linking:
- Link project names to
~/Documents/Obsidian/Aaron/Projects/notes - Link tech concepts to
~/Documents/Obsidian/Aaron/Knowledge/notes - Create backlinks from projects to daily notes
- Tag notes appropriately (#daily-note, #project-name, #tech-stack)
Content Organization:
- Archive completed project notes to
~/Documents/Obsidian/Aaron/Archive/ - Create indexes (MOCs - Maps of Content) for major topics
- Maintain clean folder structure (Daily, Projects, Knowledge, Archive)
- Remove duplicate content
5. Weekly Review Automation
Every Sunday, create weekly review note:
Location: ~/Documents/Obsidian/Aaron/Daily/Weekly-Reviews/YYYY-WXX.md
Content:
- Summary of week's accomplishments
- Project progress (from CLAUDE.md metrics)
- Lessons learned
- Next week priorities
- Links to all daily notes from the week
Process:
- Aggregate all daily notes from Monday-Sunday
- Extract accomplishments and learnings
- Pull project metrics from CLAUDE.md
- Generate weekly summary
- Create links to individual daily notes
- Update CLAUDE.md session notes with weekly insights
Analysis Process
Step 1: Environment Check
# Verify Obsidian vault exists
if [ ! -d ~/Documents/Obsidian/Aaron ]; then
echo "ERROR: Aaron vault not found. Run migration first."
exit 1
fi
# Check daily notes directory
mkdir -p ~/Documents/Obsidian/Aaron/Daily/
# Get today's date
TODAY=$(date +%Y-%m-%d)
Step 2: Daily Note Creation/Update
# Check if today's note exists
DAILY_NOTE=~/Documents/Obsidian/Aaron/Daily/$TODAY.md
if [ ! -f "$DAILY_NOTE" ]; then
# Create from template
cp ~/Documents/Obsidian/Aaron/Templates/Daily-Note.md "$DAILY_NOTE"
# Replace date placeholders
sed -i "s/YYYY-MM-DD/$TODAY/g" "$DAILY_NOTE"
fi
Step 3: Session Analysis
# Analyze current working directory
CWD=$(pwd)
PROJECT=$(basename $CWD)
# Get git status if in git repo
if [ -d .git ]; then
GIT_STATUS=$(git status --short)
FILES_MODIFIED=$(echo "$GIT_STATUS" | wc -l)
fi
# Capture session context
SESSION_TIME=$(date +%H:%M)
Step 4: Content Extraction
From conversation history, extract:
- Commands executed
- Files read/written
- Tests run (results)
- Decisions made
- Errors encountered
Step 5: Note Formatting
Format session entry as markdown:
### Session N: HH:MM
**Project**: $CWD
**Focus**: [extracted from conversation context]
**Completed**:
- [bullet points from task list]
- [file modifications]
- [test results]
**Files Modified**: [from git status]
**Decisions**: [from conversation analysis]
**Next**: [from todo list or user intent]
Step 6: Append to Daily Note
# Find "## Session Notes" section
# Append new session entry
# Increment session counter
Step 7: Sync with CLAUDE.md
# Read CLAUDE.md
with open(os.path.expanduser('~/.claude/CLAUDE.md'), 'r') as f:
claude_md = f.read()
# Extract session notes section
# Compare with Obsidian daily notes
# Apply bidirectional updates
# Write back to CLAUDE.md
Update Rules
Safety Rules
Never:
- Delete user content without explicit confirmation
- Overwrite manually edited notes without backup
- Modify dates on existing daily notes
- Remove tags or links set by user
- Change vault structure (folder organization)
Always:
- Preserve manual edits in daily notes
- Create backups before major sync operations
- Log all modifications
- Verify vault structure before operations
- Exit gracefully if vault not found
Update Frequency
Auto-Updates (SessionEnd hook):
- Daily note creation (once per day)
- Session entry addition (per session)
- CLAUDE.md timestamp update (daily)
Manual Updates (/daily-note command):
- Full sync with CLAUDE.md
- Weekly review generation (Sundays)
- Knowledge base reorganization
- Project note updates
Conflict Resolution
When conflicts arise between CLAUDE.md and Obsidian:
- Timestamps: Most recent wins
- Project status: CLAUDE.md is source of truth
- Session notes: Merge both (append)
- User edits: Preserve always
- Metrics: CLAUDE.md canonical
Examples
Example 1: Create Daily Note (First Session)
Input: User starts Claude Code at 9:00 AM, Nov 20, 2025 Context: No daily note exists for today
Actions:
- Check if
~/Documents/Obsidian/Aaron/Daily/2025-11-20.mdexists - Create from template if missing
- Replace date placeholders
- Initialize session notes section
- Log creation
Output: Daily note created, ready for session tracking
Example 2: Add Session Entry
Input: User completes work on stoch project at 2:30 PM Context: Daily note exists, need to add session summary
Actions:
- Analyze conversation history since last session
- Extract tasks completed (git commits, test results, files modified)
- Format session entry with timestamp
- Append to daily note under "## Session Notes"
- Increment session counter
Output:
### Session 2: 14:30
**Project**: ~/projects/stoch
**Focus**: Beta1 bug fixes - Rules 3-4, BB Width, ATR calculation
**Completed**:
- Fixed Bollinger Band width calculation (commit a30c58d)
- Corrected ATR implementation in technical indicators
- Updated Rules 3-4 logic for signal generation
- All 149 tests passing
**Files Modified**:
- src/indicators.py (+34, -12)
- src/rules.py (+18, -5)
**Decisions**: Used pandas rolling std for BB width consistency
**Next**: Performance benchmarking with real IB Gateway data
Example 3: Weekly Review (Sunday)
Input: User invokes /daily-note on Sunday, Nov 24, 2025
Context: Week of Nov 18-24 complete
Actions:
- Identify all daily notes from 2025-11-18 to 2025-11-24
- Extract accomplishments from each day
- Pull project metrics from CLAUDE.md
- Generate weekly summary
- Create
~/Documents/Obsidian/Aaron/Daily/Weekly-Reviews/2025-W47.md - Link to individual daily notes
Output: Weekly review note with aggregated insights
Example 4: Sync CLAUDE.md with Obsidian
Input: User types /update-memory and wants Obsidian sync
Context: Both CLAUDE.md and daily notes have new content
Actions:
- Read CLAUDE.md session notes (Nov 12-20)
- Read all daily notes from same period
- Compare content:
- CLAUDE.md has PhD breakthrough (Nov 12)
- Daily notes have detailed session logs
- Merge bidirectionally:
- Add PhD breakthrough to daily note 2025-11-12
- Add detailed session logs to CLAUDE.md if not present
- Update Last Updated timestamp in both
- Log sync completion
Output: Both files synchronized, no conflicts
Integration Points
Slash Command
File: ~/.claude/commands/daily-note.md
You are the obsidian-memory-keeper skill handler.
**Task**: Manage daily notes and Obsidian vault synchronization.
**Actions**:
1. Check if today's daily note exists
2. Create or update with current session
3. Sync with CLAUDE.md if requested
4. Generate weekly review if Sunday
**User Intent**: {{USER_MESSAGE}}
SessionEnd Hook (Optional)
Can be configured to auto-create daily note entry:
{
"hooks": {
"SessionEnd": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "python3 ~/.claude/skills/obsidian-memory-keeper/auto_session.py",
"timeout": 30
}
]
}
]
}
}
Dependencies
- Obsidian vault at
~/Documents/Obsidian/Aaron/ - Daily-Note template in
~/Documents/Obsidian/Aaron/Templates/ - CLAUDE.md at
~/.claude/CLAUDE.md - Python 3.11+ for automation scripts
- Git (for file modification tracking)
Files Created by This Skill
~/.claude/skills/obsidian-memory-keeper/SKILL.md(this file)~/.claude/skills/obsidian-memory-keeper/auto_session.py(SessionEnd hook script)~/.claude/commands/daily-note.md(slash command)~/.claude/skills/obsidian-memory-keeper/README.md(installation guide)~/.claude/skills/obsidian-memory-keeper/USAGE.md(examples and workflows)
Related Skills
- memory-keeper: Updates CLAUDE.md (complementary)
- obsidian-memory-keeper: Updates Obsidian vault (this skill)
Together these provide complete memory management across both systems.