#!/bin/sh # 2026-05-06: Claude Code auto-memory 시스템이 사용하는 외부 디렉터리(~/.claude/projects//memory)를 # 이 저장소의 .claude/memory 로 향하는 symlink로 만들어 주는 스크립트. # # 배경: # - Claude Code는 working directory 경로를 인코딩(슬래시→하이픈)해서 ~/.claude/projects//memory 에 # 메모리 파일을 읽고 쓴다. 이 경로는 머신/체크아웃 위치마다 달라진다. # - 메모리 .md 파일들은 git에 커밋되어 있고, 다른 PC에서는 symlink만 새로 걸어 주면 # 기존 메모리를 그대로 활용할 수 있다. # # 사용: # sh .claude/setup-memory-symlink.sh # # 멱등성: 이미 올바른 symlink가 존재하면 아무 동작도 하지 않는다. set -eu REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" MEMORY_SRC="$REPO_ROOT/.claude/memory" # Claude Code 인코딩 규칙: 절대경로 슬래시(/)를 하이픈(-)으로 치환한 디렉터리 이름 ENCODED="$(printf '%s' "$REPO_ROOT" | sed 's|/|-|g')" TARGET_DIR="$HOME/.claude/projects/$ENCODED" TARGET_LINK="$TARGET_DIR/memory" if [ ! -d "$MEMORY_SRC" ]; then echo "[setup-memory-symlink] ERROR: $MEMORY_SRC 가 없습니다. 먼저 git pull 하세요." exit 1 fi mkdir -p "$TARGET_DIR" # 이미 같은 곳을 가리키는 symlink면 종료 if [ -L "$TARGET_LINK" ]; then CURRENT="$(readlink "$TARGET_LINK")" if [ "$CURRENT" = "$MEMORY_SRC" ]; then echo "[setup-memory-symlink] OK: 이미 연결됨 ($TARGET_LINK -> $MEMORY_SRC)" exit 0 fi echo "[setup-memory-symlink] 기존 symlink 갱신: $CURRENT -> $MEMORY_SRC" rm "$TARGET_LINK" elif [ -e "$TARGET_LINK" ]; then echo "[setup-memory-symlink] ERROR: $TARGET_LINK 가 일반 파일/디렉터리로 존재합니다." echo " 내용 백업 후 직접 정리하세요. (이 스크립트는 안전을 위해 강제 삭제하지 않습니다.)" exit 1 fi ln -s "$MEMORY_SRC" "$TARGET_LINK" echo "[setup-memory-symlink] 연결 완료: $TARGET_LINK -> $MEMORY_SRC"