세션 종료 시 백업
Stop중급Hook 타입: stop
세션 종료 시 백업은 Stop 이벤트에 연결되어 세션이 종료되기 전에 포괄적인 백업을 생성합니다. 세션 중 수정된 모든 파일 목록을 캡처하고, commit되지 않은 변경 사항이 있으면 git stash를 생성하며, 수행한 작업의 간략한 요약을 생성하고, 모든 것을 타임스탬프가 포함된 디렉터리에 저장합니다. 이를 통해 세션 간에 작업이 손실되지 않으며 중단된 곳에서 쉽게 재개할 수 있습니다. 백업은 설정 가능한 보존 기간 이후 정리됩니다.
백업세션복구git stash영속성
Hook 코드
#!/bin/bash
# Session Backup on Stop Hook
# Saves session context when Claude Code stops
BACKUP_DIR="${HOME}/.claude/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
SESSION_DIR="$BACKUP_DIR/session_$TIMESTAMP"
RETENTION_DAYS=14
mkdir -p "$SESSION_DIR"
# Record modified files
echo "=== Session Backup: $TIMESTAMP ===" > "$SESSION_DIR/summary.md"
echo "" >> "$SESSION_DIR/summary.md"
# List recently modified files (last 2 hours)
echo "## Modified Files" >> "$SESSION_DIR/summary.md"
find . -name '*.ts' -o -name '*.tsx' -o -name '*.js' -o -name '*.py' | xargs stat -f "%m %N" 2>/dev/null | sort -rn | head -20 | awk '{print "- " $2}' >> "$SESSION_DIR/summary.md"
# Save git status and diff
echo "" >> "$SESSION_DIR/summary.md"
echo "## Git Status" >> "$SESSION_DIR/summary.md"
git status --short >> "$SESSION_DIR/summary.md" 2>/dev/null
# Save full diff of uncommitted changes
git diff > "$SESSION_DIR/uncommitted.diff" 2>/dev/null
git diff --cached > "$SESSION_DIR/staged.diff" 2>/dev/null
# Create stash if there are uncommitted changes
if [ -n "$(git status --porcelain 2>/dev/null)" ]; then
STASH_MSG="claude-session-backup-$TIMESTAMP"
git stash push -m "$STASH_MSG" --keep-index 2>/dev/null
echo "Stashed uncommitted changes: $STASH_MSG"
git stash pop --quiet 2>/dev/null
fi
# Prune old backups
find "$BACKUP_DIR" -maxdepth 1 -name "session_*" -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; 2>/dev/null
echo "Session backup saved to $SESSION_DIR"
exit 0
이 Hook을 Claude Code 설정 또는 .claude/settings.json에 추가하면 활성화됩니다.
실행 미리보기
세션 종료 시 백업
세션 종료 시 백업에 대해
Claude Code Hooks는 Claude 작업 중 특정 이벤트에 반응하여 커스텀 셸 명령을 자동으로 실행합니다. 세션 종료 시 백업은(는) 중급 수준의 Stop Hook으로, 개발 워크플로우의 핵심 시점에서 작업을 자동화하여 수동 단계를 줄이고 팀 전체의 일관성을 유지합니다.