# Setup script for lucasrosati/claude-code-memory-setup on Windows (PowerShell), from https://gitmanual.com/lucasrosati/claude-code-memory-setup # Read it before you run it: the commands come from the repo's own README and files. # Run: powershell -ExecutionPolicy Bypass -File .\setup.ps1 $ErrorActionPreference = "Stop" function Write-Step($t) { Write-Host "`n==> $t" -ForegroundColor Cyan } # Windows ships a python that only opens the Microsoft Store; it doesn't count. function Have($c) { $cmd = Get-Command $c -ErrorAction SilentlyContinue; [bool]$cmd -and $cmd.Source -notlike '*\WindowsApps\*' } # New installs change PATH; pick it up without opening a new window. function Update-Path { $env:Path = [Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [Environment]::GetEnvironmentVariable("Path", "User") } # Stop when a program fails, like bash's set -e. Dot-sourced, so cd and venv activation carry on to the next step. function Invoke-Step([scriptblock]$Block) { $global:LASTEXITCODE = 0; . $Block; if ($LASTEXITCODE) { throw "Failed with exit code $LASTEXITCODE" } } Write-Step '1/3 Clone the repository' if (-not (Test-Path 'claude-code-memory-setup')) { Invoke-Step { git clone https://github.com/lucasrosati/claude-code-memory-setup.git } } Set-Location 'claude-code-memory-setup' Write-Step '2/3 Install the required tools' # Python 3 if (-not (Have 'python')) { Invoke-Step { winget install Python.Python.3.12 -e --accept-source-agreements --accept-package-agreements }; Update-Path } Write-Step '3/3 Follow the README: Setup' # Run these in Git Bash (installed with Git) or WSL — not PowerShell. Do the README instructions above first. Invoke-Step { pip install claude-conversation-extractor } Invoke-Step { mkdir -p ~/claude-exports/code ~/claude-exports/web } Invoke-Step { EXPORT_DIR="$HOME/claude-exports" } # adjust to your path Invoke-Step { VAULT_DIR="$HOME/vault" } Invoke-Step { SCRIPT_DIR="$HOME/scripts" } Invoke-Step { LOG="$SCRIPT_DIR/sync.log" } Invoke-Step { echo "[$(date)] Sync started" >> "$LOG" } Invoke-Step { claude-extract --all --output "$EXPORT_DIR/code" 2>> "$LOG" } Invoke-Step { python3 "$SCRIPT_DIR/claude_to_obsidian.py" \ } Invoke-Step { --export-dir "$EXPORT_DIR" \ } Invoke-Step { --vault-dir "$VAULT_DIR" \ } Invoke-Step { --move 2>> "$LOG" } Invoke-Step { echo "[$(date)] Sync completed" >> "$LOG" } # (needs Git Bash or WSL on Windows) chmod +x ~/scripts/sync_claude_obsidian.sh Invoke-Step { (crontab -l 2>/dev/null; echo "0 22 * * * $HOME/scripts/sync_claude_obsidian.sh") | crontab - } Write-Host 'Set up lucasrosati/claude-code-memory-setup.' Write-Host 'Manual: https://gitmanual.com/lucasrosati/claude-code-memory-setup'