adopt

SKILL.md

Adopt Skill

Bring Your Own Vault (BYOV) — install the Claude PKM system onto an existing Obsidian vault.

Usage

/adopt    # Run from the root of your existing Obsidian vault

When to Use

  • You have an existing Obsidian vault and want to add the Claude PKM system
  • You don't want to start from the vault template
  • You want to keep your current folder structure

Phase 1: Scan Vault Structure

Analyze the existing vault to understand its organization.

Steps

  1. List top-level directories using ls, excluding system dirs (.obsidian, .git, .claude, .trash, .claude-plugin)

  2. For each directory, gather signals:

    • Count .md files (using Glob)
    • Check for date-named files (YYYY-MM-DD*.md) — indicates daily notes
    • Grep for goal/review/template keywords in filenames and content
    • Check for existing CLAUDE.md in subdirs — indicates projects
  3. Detect organization method based on signals:

    • PARA: Folders named Projects, Areas, Resources, Archives
    • Zettelkasten: Numeric-prefixed notes, heavy wiki-linking, flat structure
    • Johnny Decimal: 00-09, 10-19 style folder names
    • LYT (Linking Your Thinking): Folders named Atlas, Calendar, Cards, Extras, Sources
    • Flat: Few folders, most files at root
    • Custom: None of the above patterns match
  4. Present findings to the user:

    Vault scan complete!
    
    Found 342 notes across 8 folders:
      Daily/           → 180 notes (date-named — likely daily notes)
      Projects/        → 45 notes (has CLAUDE.md files — likely projects)
      Goals/           → 12 notes (contains goal keywords)
      Templates/       → 8 notes (contains template keywords)
      Archive/         → 67 notes
      Inbox/           → 15 notes
      Resources/       → 10 notes
      Meeting Notes/   → 5 notes
    
    Detected method: PARA-like structure
    

Phase 2: Map Folders to Roles

Use AskUserQuestion to confirm or correct the detected mappings.

Roles to Map

Each role maps a PKM function to a folder in the user's vault:

Role Purpose Detection Signal
Daily Notes Daily journal entries Date-named files (YYYY-MM-DD)
Goals Goal cascade (3-year → weekly) Files with goal/review keywords
Projects Active projects Subdirs with CLAUDE.md or project keywords
Templates Reusable note structures Files with template keywords or in Templates/
Archives Completed/inactive content Folder named Archive(s) or with old dates
Inbox Uncategorized captures Folder named Inbox, or files tagged #inbox

Interactive Mapping

For each role, ask the user to confirm or correct:

Question format (use AskUserQuestion):

  • "Which folder holds your daily notes?"
  • Options: detected candidate(s), "I don't have one (create it)", "Skip — I don't use this"
  • For optional roles (Inbox), include "Skip" as a default

Edge cases:

  • Existing CLAUDE.md at root: Ask the user — back up as CLAUDE.md.backup or merge content
  • No candidate for a role: Offer to create the folder
  • Multiple candidates: Present all and let the user choose

Save Mappings

Store the folder mapping for use in later phases:

dailyNotes → "Daily"
goals → "Goals"
projects → "Projects"
templates → "Templates"
archives → "Archive"
inbox → "Inbox"     (or null if skipped)

Phase 3: Personalize Preferences

Ask the same 4 questions as /onboard:

Question 1: Your name

  • "What should I call you?"
  • Used for personalized prompts and greetings

Question 2: Preferred review day

  • "What day do you prefer for your weekly review?"
  • Options: Sunday (Recommended), Saturday, Monday, Friday
  • Used by /review auto-detection and session-init nudges

Question 3: Primary goal areas

  • "Which areas are most important to you right now? (Pick 2-4)"
  • Options: Career & Professional, Health & Wellness, Relationships, Personal Growth
  • Also offer: Financial, Creativity & Fun, Learning, Other
  • multiSelect: true
  • Used to customize goal template suggestions

Question 4: Work style

  • "How do you prefer Claude to interact?"
  • Options: Direct and concise (Recommended), Coaching and challenging, Detailed and thorough, Minimal — just do the task
  • Sets output style preference

Phase 4: Generate Configuration

4a. Write settings.json

Write .claude/settings.json with permissions scoped to the user's actual folders:

{
  "permissions": {
    "allow": [
      "Read",
      "Write **/{mapped-daily}/**",
      "Write **/{mapped-goals}/**",
      "Write **/{mapped-projects}/**",
      "Write **/{mapped-templates}/**",
      "Edit **/{mapped-daily}/**",
      "Edit **/{mapped-goals}/**",
      "Edit **/{mapped-projects}/**",
      "Glob",
      "Grep"
    ]
  }
}

Replace {mapped-*} with actual folder names from Phase 2.

4b. Write root CLAUDE.md

Generate a root CLAUDE.md that describes the user's actual vault structure. Use the same format as the template's CLAUDE.md but with:

  • Their folder names in the Directory Structure table
  • Their goal areas in the System Purpose section
  • Their actual skills table (same as template)
  • Cascade section adapted to their folder names

If the user had an existing CLAUDE.md, merge their content into the appropriate sections (preserve their mission statement, custom conventions, etc.).

4c. Write vault-config.json

Write vault-config.json in the vault root:

{
  "name": "User's name",
  "reviewDay": "Sunday",
  "goalAreas": ["Career & Professional", "Health & Wellness"],
  "workStyle": "Direct and concise",
  "setupDate": "2026-02-17",
  "version": "3.1",
  "adoptedVault": true,
  "folderMapping": {
    "dailyNotes": "Daily",
    "goals": "Goals",
    "projects": "Projects",
    "templates": "Templates",
    "archives": "Archive",
    "inbox": "Inbox"
  }
}

4d. Set Environment Variables

Write or update CLAUDE.local.md with env var exports for hooks:

## Environment Overrides

These env vars allow hooks and scripts to find your folders:

<!--
Export these in your shell profile or they'll be set by session-init:
-->
DAILY_NOTES_DIR={mapped daily notes folder}
GOALS_DIR={mapped goals folder}
PROJECTS_DIR={mapped projects folder}
TEMPLATES_DIR={mapped templates folder}
INBOX_DIR={mapped inbox folder}
ARCHIVES_DIR={mapped archives folder}

Also create .claude/hooks/adopt-env.sh that exports these variables:

#!/bin/bash
# Environment variables for adopted vault folder mapping
# Generated by /adopt — edit vault-config.json and re-run /adopt to update

export DAILY_NOTES_DIR="{mapped daily notes}"
export GOALS_DIR="{mapped goals}"
export PROJECTS_DIR="{mapped projects}"
export TEMPLATES_DIR="{mapped templates}"
export INBOX_DIR="{mapped inbox}"
export ARCHIVES_DIR="{mapped archives}"

Then add a source line to session-init.sh if not already present:

# Source adopted vault env vars if present
ADOPT_ENV="$VAULT_PATH/.claude/hooks/adopt-env.sh"
if [ -f "$ADOPT_ENV" ]; then
    source "$ADOPT_ENV"
fi

Phase 5: Scaffold Missing Pieces

Check what's missing and offer to create it. Always ask before creating.

5a. Goal Cascade Files

If the goals folder is empty or newly created:

  • "Your goals folder is empty. Want me to create the goal cascade? (3-year vision, yearly goals, monthly goals, weekly review)"
  • If yes: copy the standard templates, adapting paths to the user's folder names
  • If no: skip

5b. Templates

If the templates folder is empty or newly created:

  • "Want me to add standard templates? (Daily, Weekly Review, Project)"
  • If yes: copy templates, adapting internal links to the user's folder names
  • If no: skip

5c. CLAUDE.local.md.template

If CLAUDE.local.md.template doesn't exist:

  • Copy it from the standard template
  • Adapt any folder references

5d. Claude Config Directories

Ensure these directories exist (create silently):

  • .claude/skills/ (for future skill additions)
  • .claude/rules/
  • .claude/hooks/
  • .claude/agents/

Copy standard rules files if .claude/rules/ is empty:

  • markdown-standards.md
  • productivity-workflow.md
  • project-management.md
  • task-tracking.md

Phase 6: Verify & Next Steps

6a. Validation

Run quick checks:

  • vault-config.json is valid JSON (read it back)
  • All mapped folders exist
  • CLAUDE.md is present and non-empty
  • .claude/hooks/adopt-env.sh is present and executable

6b. Summary

Present a summary:

Adoption complete!

Vault: /path/to/vault
Method: PARA-like (preserved your existing structure)
Mapped folders:
  Daily Notes → Daily/
  Goals       → Goals/
  Projects    → Projects/
  Templates   → Templates/
  Archives    → Archive/
  Inbox       → Inbox/

Created:
  ✓ CLAUDE.md (vault context)
  ✓ vault-config.json (preferences)
  ✓ .claude/hooks/adopt-env.sh (folder mapping)
  ✓ Goal cascade files (4 files)
  ✓ Standard templates (3 files)

Your vault structure is unchanged — only configuration files were added.

6c. Next Steps

Suggest what to do next:

  • "Try /daily to create today's note using your vault's structure"
  • "Try /review for a guided weekly review"
  • "Run /push to commit these changes to git"
  • "Edit CLAUDE.local.md for private preferences (not committed to git)"

Error Handling

  • Not in a vault: If no .obsidian directory found, warn: "This doesn't look like an Obsidian vault. Continue anyway?"
  • Already adopted: If vault-config.json exists with adoptedVault: true, ask: "This vault was already adopted. Re-run adoption? (This will regenerate config files.)"
  • Permission errors: If .claude/ can't be written, suggest checking permissions
  • Empty vault: If no .md files found, suggest using /onboard with the template instead

Integration

Works with:

  • /onboard — adopt replaces onboard for existing vaults
  • /daily — uses mapped daily notes folder
  • /weekly — uses mapped goals folder
  • /review — respects adopted vault structure
  • /push — commits adoption changes
  • All hooks — read env vars from adopt-env.sh
Weekly Installs
6
GitHub Stars
1.2K
First Seen
14 days ago
Installed on
opencode6
codex6
gemini-cli5
github-copilot5
amp5
cline5