pre-compact-save.sh
컨텍스트 압축 전 현재 Git 상태(브랜치, 변경 파일, 최근 커밋)를 자동 저장하여 작업 손실을 방지한다.
Trigger
PreCompact
Source Code
1#!/bin/bash
2# PreCompact Hook: 컴팩트 전 현재 작업 상태 자동 저장
3# OMC 패턴 차용 - 장시간 작업 시 컨텍스트 유실 방지
4
5STATE_DIR="$CLAUDE_PROJECT_DIR/.claude/memory"
6STATE_FILE="$STATE_DIR/compact-state.json"
7
8mkdir -p "$STATE_DIR"
9
10# 현재 git 상태 스냅샷 저장
11BRANCH=$(git -C "$CLAUDE_PROJECT_DIR" branch --show-current 2>/dev/null || echo "unknown")
12CHANGED=$(git -C "$CLAUDE_PROJECT_DIR" diff --name-only 2>/dev/null | head -20)
13STAGED=$(git -C "$CLAUDE_PROJECT_DIR" diff --cached --name-only 2>/dev/null | head -20)
14LAST_COMMIT=$(git -C "$CLAUDE_PROJECT_DIR" log -1 --oneline 2>/dev/null || echo "none")
15
16python3 -c "
17import json, datetime
18
19state = {
20 'timestamp': datetime.datetime.now().isoformat(),
21 'branch': '$BRANCH',
22 'last_commit': '$LAST_COMMIT',
23 'changed_files': '''$CHANGED'''.strip().split('\n') if '''$CHANGED'''.strip() else [],
24 'staged_files': '''$STAGED'''.strip().split('\n') if '''$STAGED'''.strip() else []
25}
26
27with open('$STATE_FILE', 'w') as f:
28 json.dump(state, f, indent=2, ensure_ascii=False)
29" 2>/dev/null
30
31echo "[PreCompact] 작업 상태 저장됨: branch=$BRANCH"
32