Document technical projects in Obsidian vault. Use when user mentions "document this", "log experiment", "update notes", "track progress", or discusses maintaining project documentation, experiment logs, or work progress in Obsidian.
This skill is limited to using the following tools:
helpers/area-mapping.mdhelpers/context-detection.mdtemplates/daily-note-template.mdtemplates/experiment-template.mdtemplates/project-template.mdThis skill helps maintain project documentation in an Obsidian vault while working with Claude Code. It automatically captures project progress, experiments, and insights into structured notes.
When activated, this skill:
Load config from ~/.claude/skills/obsidian-project-assistant/config.json:
cat ~/.claude/skills/obsidian-project-assistant/config.json
Expected format:
{
"vault_path": "/path/to/ObsidianVault",
"areas": ["Hardware", "Software", "Woodworking", "Music Synthesis"],
"auto_commit": false,
"git_enabled": true
}
If config doesn't exist, ask user for vault path and create it.
Priority order:
Explicit user statement - User says "working on [project name]"
Git repository - Check if cwd is a git repo:
git rev-parse --is-inside-work-tree 2>/dev/null && basename $(git rev-parse --show-toplevel)
Transform kebab-case → Title Case (e.g., "my-project" → "My Project")
Directory name - Current directory or parent if current is generic (src/, build/, etc.):
basename $(pwd)
Ask user - If ambiguous or unclear, ask: "What would you like to name this project?"
Check for file patterns:
# Hardware indicators
find . -maxdepth 2 -type f \( -name "*.ino" -o -name "*.cpp" -o -name "platformio.ini" -o -name "*.pcb" -o -name "*.sch" \) 2>/dev/null | head -1
# Software indicators
find . -maxdepth 2 -type f \( -name "package.json" -o -name "requirements.txt" -o -name "Cargo.toml" -o -name "go.mod" -o -name "*.py" -o -name "*.js" -o -name "*.ts" \) 2>/dev/null | head -1
# Woodworking indicators
find . -maxdepth 2 -type f \( -name "*.stl" -o -name "*.obj" -o -name "*.blend" -o -name "*.f3d" \) 2>/dev/null | head -1
# Music Synthesis indicators
find . -maxdepth 2 -type f \( -name "*.pd" -o -name "*.maxpat" -o -name "*.syx" -o -name "*.fxp" \) 2>/dev/null | head -1
Classification:
If multiple matches or unclear, ask user to confirm area.
Parse the conversation for project description:
VAULT_PATH="<from config>"
PROJECT_NAME="<detected name>"
NOTE_PATH="$VAULT_PATH/Projects/$PROJECT_NAME.md"
if [ -f "$NOTE_PATH" ]; then
echo "Project note exists, will update"
else
echo "Creating new project note"
fi
Read template from skill directory:
cat ~/.claude/skills/obsidian-project-assistant/templates/project-template.md
Replace placeholders with detected values:
{{title}} → Detected project name{{date}} → Current date in YYYY-MM-DD format (use date +%Y-%m-%d){{area}} → Detected area{{description}} → Extracted description (or leave blank)If new project: Write complete template to vault location.
If existing project:
Preserve existing content
Append to Progress Log section:
### YYYY-MM-DD
[Summary of today's work from conversation]
Update updated: field in frontmatter
Tell user:
Created/updated project note: ~/Documents/ObsidianVault/Projects/[Project Name].md
When user says "log this experiment" or discusses experimental results:
cat ~/.claude/skills/obsidian-project-assistant/templates/experiment-template.md
{{title}} → Experiment name (ask user or infer from conversation){{date}} → Current date{{area}} → Same as parent project{{project}} → Link to parent projectCreate file: $VAULT_PATH/Projects/YYYY-MM-DD - [Experiment Name].md
Or organize under project if user prefers.
If git_enabled is true in config:
cd $VAULT_PATH
git rev-parse --git-dir > /dev/null 2>&1
Unless auto_commit is true, ask user:
Would you like me to commit these changes to the vault?
- Yes, commit the changes
- No, just leave them uncommitted
cd $VAULT_PATH
git add "Projects/[Project Name].md"
git commit -m "Update [Project Name] project notes
- Added progress log entry for $(date +%Y-%m-%d)
- [Brief summary of changes]
🤖 Generated with the help of Claude Code Obsidian Project Documentation Assistant"
User: "I'm building an Arduino temperature sensor. Can you help document this project?"
Actions:
~/Documents/ObsidianVault/Projects/Arduino Temperature Sensor.mdUser: "I just got the I2C communication working. Update my project notes."
Actions:
Detect current project (from cwd or recent context)
Read existing project note
Append to Progress Log:
### 2025-12-23
Successfully implemented I2C communication for sensor readings.
Update updated: frontmatter field
Ask about git commit
User: "Log this experiment - I tested three different capacitor values for filtering"
Actions:
For detailed context detection rules, see:
helpers/context-detection.md - Full detection logichelpers/area-mapping.md - Complete file extension mappings~/Documents/ObsidianVault works from any directory