Claude Code Perda de Dados de Sessão: Script de Backup para Windows e Mac

Vários usuários no r/ClaudeAI relatam que o Claude Code perde dados de sessão silenciosamente — o título da sessão permanece na barra lateral, mas ao clicar, o transcript aparece vazio. Sem aviso, erro ou possibilidade de recuperação. Isso parece ocorrer durante a compressão de contexto, saídas inesperadas ou problemas na camada de armazenamento.
A Solução de Backup
Um script criado pela comunidade faz backup de todos os dados do Claude Code (sessions, projects, plans, drafts, memory) de ~/.claude para uma pasta separada, executa diariamente via Task Scheduler (Windows) ou launchd (Mac) e mantém 7 dias de backups rotativos.
Windows (PowerShell + Task Scheduler)
Crie a pasta de backup:
mkdir C:\Users\%USERNAME%\ClaudeBackupsSalve o seguinte como backup-claude-sessions.ps1 nessa pasta:
$ErrorActionPreference = "Stop"
$source = "$env:USERPROFILE\.claude"
$backupRoot = "$env:USERPROFILE\ClaudeBackups"
$logFile = Join-Path $backupRoot "backup.log"
$keepDays = 7
$timestamp = Get-Date -Format "yyyy-MM-dd_HHmmss"
$backupDir = Join-Path $backupRoot $timestamp
$dirs = @("sessions", "projects", "plans", "drafts", "memory")
function Write-Log($msg) {
$line = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - $msg"
Add-Content -Path $logFile -Value $line -Encoding utf8
}
try {
Write-Log "=== Backup started ==="
New-Item -ItemType Directory -Path $backupDir -Force | Out-Null
foreach ($d in $dirs) {
$src = Join-Path $source $d
if (Test-Path $src) {
$dst = Join-Path $backupDir $d
Copy-Item -Path $src -Destination $dst -Recurse -Force
$count = (Get-ChildItem $dst -Recurse -File -ErrorAction SilentlyContinue | Measure-Object).Count
Write-Log " Copied $d ($count files)"
} else {
Write-Log " Skipped $d (not found)"
}
}
$size = (Get-ChildItem $backupDir -Recurse -File | Measure-Object -Property Length -Sum).Sum
Write-Log " Total backup size: $([math]::Round($size/1MB, 2)) MB"
$cutoff = (Get-Date).AddDays(-$keepDays)
Get-ChildItem $backupRoot -Directory | Where-Object { $.Name -match '^\d{4}-\d{2}-\d{2}\d{6}$' -and $.CreationTime -lt $cutoff } | ForEach-Object {
Remove-Item $.FullName -Recurse -Force -Confirm:$false
Write-Log " Rotated old backup: $($.Name)"
}
Write-Log "=== Backup completed successfully ==="
} catch {
Write-Log "!!! BACKUP FAILED: $"
exit 1
}
Crie install-schedule.ps1 e execute como Administrador uma vez:
$action = New-ScheduledTaskAction -Execute "powershell.exe"
-Argument "-ExecutionPolicy Bypass -WindowStyle Hidden -File "$env:USERPROFILE\ClaudeBackups\backup-claude-sessions.ps1""
$trigger = New-ScheduledTaskTrigger -Daily -At 8:00AM
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries
-DontStopIfGoingOnBatteries -StartWhenAvailable Register-ScheduledTask
-TaskName "ClaudeSessionsBackup" -Action $action
-Trigger $trigger -Settings $settings
-Description "Daily backup of Claude Code sessions" `
-RunLevel Limited
Write-Host "Done! Runs daily at 8:00 AM." -ForegroundColor GreenExecute o instalador:
powershell -ExecutionPolicy Bypass -File "C:\Users%USERNAME%\ClaudeBackups\install-schedule.ps1"Mac (launchd + shell script)
Crie a pasta de backup:
mkdir -p /ClaudeBackupsSalve como /ClaudeBackups/backup-claude-sessions.sh:
#!/bin/bash
set -euo pipefail
SOURCE="$HOME/.claude"
BACKUP_ROOT="$HOME/ClaudeBackups"
LOG_FILE="$BACKUP_ROOT/backup.log"
KEEP_DAYS=7
TIMESTAMP=$(date +"%Y-%m-%d_%H%M%S")
BACKUP_DIR="$BACKUP_ROOT/$TIMESTAMP"
DIRS=("sessions" "projects" "plans" "drafts" "memory")
log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"; }
log "=== Backup started ==="
mkdir -p "$BACKUP_DIR"
for d in "${DIRS[@]}"; do
src="$SOURCE/$d"
if [ -d "$src" ]; then
cp -R "$src" "$BACKUP_DIR/$d"
count=$(find "$BACKUP_DIR/$d" -type f | wc -l | tr -d ' ')
log " Copied $d ($count files)"
else
log " Skipped $d (not found)"
fi
done
size=$(du -sb "$BACKUP_DIR" | cut -f1)
log " Total backup size: $(echo "scale=2; $size/1048576" | bc) MB"
find "$BACKUP_ROOT" -maxdepth 1 -type d -name "????-??-??_??????" -mtime +$KEEP_DAYS -exec rm -rf {} + -exec log " Rotated old backup: {}" ;
log "=== Backup completed successfully ==="Torne executável e agende via launchd (veja o post original para configuração do plist).
O script é executado de forma completamente independente do Claude Code, portanto, mesmo que o Claude trave ou perca dados, os backups são preservados. Ele registra cada execução em backup.log para verificação.
📖 Leia a fonte completa: r/ClaudeAI
👀 See Also

SLayer: Uma Camada Semântica Open-Source para Agentes de IA que Aprende com Consultas
SLayer é uma camada semântica leve e incorporável que permite que agentes de IA consultem bancos de dados, gerenciem modelos e aprendam com interações via MCP, REST, CLI ou Python.

Código Aberto CLAUDE.md Mantém Agentes Claude Code Produtivos por Horas, Sem Loop
Um único arquivo CLAUDE.md de 70 linhas impede que os agentes Claude Code divaguem em narrações e entrem em loops de correções. As sessões passam de fracassos de 3 horas para ciclos produtivos completos.

Corvo do Conhecimento: Uma Plataforma de Base de Conhecimento Independente de Modelo Construída com Claude Code
Knowledge Raven é uma plataforma de base de conhecimento que permite que qualquer LLM compatível com MCP pesquise e cite documentos da empresa. Toda a plataforma foi construída com Claude Code por um fundador solo, apresentando backend Python/FastAPI, camada de ferramentas MCP e pipeline RAG agentico.

Grafo de Habilidades Transponível para Memória Persistente de Agentes de IA em Bases de Código
Um desenvolvedor criou um sistema de grafo de habilidades de três camadas que reside dentro de uma base de código, permitindo que assistentes de IA de programação mantenham memória persistente entre sessões. O sistema usa divulgação progressiva com instruções autodirigidas em vez de arquivos de contexto monolíticos.