세션 정리은(는) 무엇을 하나요?
먼저 감사하고, 그 다음에 삭제하며, 대상 검사 후에만 삭제합니다. 목표는 소유자가 아무것도 실행 중이지 않고, 아무것도 손실되지 않았으며, 오래된 항목이 남겨지지 않았다는 것을 확인하고 세션을 떠날 수 있도록 하는 것입니다. 놓친 남은 항목은 대가가 적지만, 푸시되지 않은 커밋을 삭제하는 것은 그렇지 않습니다. 확실하지 않은 경우, 발견 항목은 ASK로 분류하고 절대 AUTO-CLEAN으로 분류하지 않습니다.
모든 Git 저장소에서 작동합니다. Lanes 하네스, Beads 및 Vercel 부분은 해당 항목이 존재할 때만 활성화되며, 그렇지 않으면 자동으로 건너뜁니다.
1단계: 감사 (읽기 전용)
저장소(모든 워크트리)에서 번들 감사 스크립트를 실행합니다. 운영 체제에 맞는 스크립트를 사용하십시오. 스킬 폴더는 ~/.claude/skills/, ~/.codex/skills/ 또는 ~/.agents/skills/ 아래에 있을 수 있습니다:
# Linux 및 macOS
bash <skill-dir>/scripts/audit.sh # 오프라인 시 --no-fetch 추가
# Windows (PowerShell 5.1 또는 7)
powershell -NoProfile -ExecutionPolicy Bypass -File <skill-dir>\scripts\audit.ps1 # 오프라인 시 -NoFetch 추가
두 스크립트 모두 영역당 하나의 섹션(CONTEXT, WORKING_TREE, SYNC, WORKTREES, BRANCHES, STASHES, LANES, PROCESSES, ARTIFACTS, TRACKER, DEPLOY, SESSION_LOG)을 출력합니다. 유일한 쓰기 작업은 일반 git fetch입니다(--prune 절대 사용 안 함). .env 파일을 읽거나 프로세스 환경을 출력하지 않습니다.
"이 세션"을 결정하는 방법 (모든 분류에 중요):
- 프로세스:
owner=this_session은 이 세션(또는 이 세션이 시작한 것)이 프로세스를 시작했음을 의미합니다. Linux에서는 상속된CLAUDE_CODE_SESSION_ID로 증명되며, 이는nohup이후에도 유지됩니다. macOS와 Windows는 다른 프로세스의 환경을 숨기므로, 이는 "Claude 프로세스의 하위 프로세스"(CLAUDE_PID)를 의미합니다. 분리되어 다시 부모가 지정된 프로세스는 대신started_during_session으로 표시되며, 이 대화에서 추적할 수 없는 경우 ASK입니다.owner=harness_do_not_kill은 Claude Code 자체의 MCP 서버 및 플러그인입니다: 절대 건드리지 마십시오.other_session_or_user는 다른 사용자의 것입니다. - 파일, 브랜치, 스태시:
this_session/pre_session은 타임스탬프를session_start(이 세션 대화록의 첫 번째 타임스탬프)와 비교합니다. 타임스탬프는 힌트일 뿐 증거는 아닙니다: 세션 기간 동안 생성된 항목이 병렬 세션에서 왔을 수 있습니다. 타임스탬프가 그렇다고 말하고 그리고 이 대화에서 추적할 수 있을 때만(항목을 생성한 명령을 실행한 경우) 이 세션의 항목으로 취급합니다. 그렇지 않으면 ASK입니다.
Claude Code 외부(예: Codex)에서는 CLAUDE_CODE_SESSION_ID 또는 CLAUDE_PID가 없으므로 session_id는 unknown이고 모든 항목은 pre_session으로 태그되며 프로세스는 in_repo로만 일치됩니다. 세션 시작 시간을 알고 있으면 --since <ISO 시간>(Windows에서는 -Since)을 전달하고, 그렇지 않으면 이 대화의 명령으로 추적할 수 없는 한 파일과 프로세스를 ASK로 취급합니다.
그런 다음 스크립트가 볼 수 없는 격차를 가능한 병렬로 채웁니다:
- 자신의 백그라운드 작업. 이 대화에서 시작했고 여전히 실행 중인 백그라운드 Bash 작업, 모니터, 하위 에이전트 및 예약된 웨이크업을 나열합니다. 완료되었거나 유휴 상태인 것은 시작한 도구(TaskStop, Monitor stop 등)로 중지합니다.
- 요청 남은 항목. 대화에서 소유자가 나중에 삭제하거나 임시로만 유지하도록 요청한 항목(업로드 폴더, 디버그 플래그, 테스트 계정, 임시 파일)을 검색합니다. 여전히 존재하는지 확인합니다.
- 배포 상태 (DEPLOY에 플랫폼이 표시된 경우에만). 최신 프로덕션 배포의 커밋 SHA를 가져와
main_tip과 비교합니다. Vercel의 경우:vercel ls --prod로 최신 프로덕션 배포를 찾은 다음vercel inspect <url>(또는 Vercel MCP / 대시보드)로 Git 커밋을 확인합니다. SHA를 얻을 수 없으면 이유와 함께 "deploy: unverified"를 보고합니다. 타임스탬프에서 일치를 유추하지 마십시오. - 저장소 외부의 세션이 건드린 모든 것(다른 저장소의 워크트리, 전역 설치). 보고하되 수정하지 마십시오.
2단계: 각 발견 항목 분류
AUTO-CLEAN (안전하고 복구 가능; 실행 후 보고):
- main에 완전히 병합된 로컬 브랜치(
git branch -d, 절대-D사용 안 함), main, 현재 브랜치 및 워크트리에서 체크아웃된 브랜치 제외. - 폴더가 이미 사라진 정리 가능한 워크트리 레코드(
git worktree prune). - 브랜치가 main에 병합되었고 앞선 커밋이 없는 이 저장소 내 정리된 연결된 워크트리(
git worktree remove <path>,--force없음, 그런 다음git branch -d). Lanes 하네스가 소유한 경우 대신 하네스 스크립트를 사용하십시오(아래 참조). - 해당 레인 또는 브랜치가 더 이상 존재하지 않고 열린 프로세스가 없는 임시 폴더(
open_handles=0; 삭제 직전에lsof +D <dir>로 재확인). owner=this_session이며 이 대화에서 추적할 수 있고 유휴 상태이거나 더 이상 필요하지 않은 프로세스(dev 서버, 감시자, 헤드리스 브라우저). PID로만 종료합니다(Linux/macOS에서는kill <pid>, Windows에서는Stop-Process -Id <pid>).- Git에서 무시되는 오래된 빌드 유형 캐시(
.next/types,.next/dev/types). 다음 빌드에서 재생성됩니다. - 이 세션의 스크래치패드 폴더에 있는 자체 스크래치 파일 및 저장소의 추적되지 않은 정크(
*.orig,*.rej, 유휴 로그)로,this_session이고 사용자가 실행한 명령으로 추적 가능한 것.
ASK (작업 손실 가능성 있음, 또는 이 세션의 것으로 증명 불가능):
- 병합되지 않은 브랜치 또는 main에 없는 커밋.
PATCHES_ALREADY_IN_main으로 표시된 브랜치는 스쿼시 또는 리베이스 병합되었을 가능성이 높습니다: 그렇게 말하되,-D전에 여전히 물어보십시오. - 더티 워크트리(
dirty_files > 0), 스태시, 증거로 필요할 수 있는coverage/및test-results/. other_session_or_user또는started_during_session프로세스 및 추적할 수 없는 모든 프로세스.- 모든
pre_session항목 및 사용자가 생성하지 않은 모든 추적되지 않은 파일.
REPORT ONLY (소유자가 조치하거나 정보 제공):
- main과 origin 간의 차이(푸시되지 않았거나 뒤쳐짐). 푸시 또는 풀을 권장하되 정리 작업의 일부로 수행하지 마십시오.
- 배포 불일치 또는 "unverified" 배포 상태.
- 활성 작업이 없는 열린 추적기 항목(beads
in_progress, tasks.md WIP) 및 작업이 아직 열려 있는 완료된 작업. 항목 이름과 발견한 내용을 명시하십시오. - 이 저장소 외부의 워크트리 또는 폴더 및 고유 커밋이 아직 있는
upstream_gone브랜치.
안전 규칙
재생성할 수 없는 작업을 보호합니다. 각 규칙은 명백한 지름길이 이전에 작업을 파괴했기 때문에 존재합니다.
- 삭제 전 검사. 각 폴더에 대해 내용과 크기를 먼저 나열하십시오. 각 브랜치에 대해 먼저
git log --oneline main..<branch>를 표시하십시오. 그 증거를 보고서에 포함하십시오. - 이 대화에서 소유자의 명시적 승인 없이 병합되지 않은 커밋, 더티 워크트리 또는 스태시를 절대 삭제하지 마십시오. 한 항목에 대한 승인이 다음 항목을 포함하지 않습니다.
- PID로만 프로세스를 종료하고,
owner=this_session이고 사용자가 시작했음을 확인한 후에만 수행하십시오. 절대pkill,killall, 첫 시도에kill -9를 사용하거나 포트만으로 종료하지 마십시오. - 절대 베어
git stash,git reset --hard,git clean -fdx(또는 모든git clean -f) 또는 글로브와 함께rm -rf를 사용하지 마십시오. 이러한 작업은 실행 취소가 불가능합니다. 명명된 경로를 한 번에 하나씩 삭제하십시오. git branch -D,git stash drop및git worktree remove --force는 소유자가 승인한 단일 항목에 대해서만, 잃을 것이 무엇인지(커밋, diff stat) 보여준 후에 실행하십시오. 복원할 수 있도록 브랜치 팁 SHA를 보고서에 기록하십시오..env파일, 키 또는 자격 증명을 절대 읽거나, 인쇄하거나, 이동하거나 삭제하지 마십시오. 정크처럼 보이더라도 경로로만 보고하십시오.- 이 저장소 내에 머무르십시오. 다른 앱의 워크트리, 분리된 체크아웃 또는 공유
/tmp폴더는 보고만 하고 건드리지 마십시오./tmp에서 글로브 삭제를 절대 수행하지 마십시오. - 절대
harness_do_not_kill프로세스 또는 Claude 프로세스 자체를 종료하지 마십시오.
Lanes 하네스가 있는 경우
LANES 섹션에 상태 디렉토리가 표시되는 경우에만 해당합니다. 그렇지 않으면 이 블록을 건너뜁니다.
- 레인 워크트리, 레인 임시 디렉토리, 릴레이 작업 디렉토리 및
lanes.tsv행을 하네스 자체 스크립트로 제거하고rm으로 절대 제거하지 마십시오: 병합된 레인의 경우bash ~/.claude/skills/lanes/lane/cleanup.sh <lane-dir> <branch>를 실행한 다음bash ~/.claude/skills/lanes/lane/cleanup.sh --sweep을 실행하십시오. 메인 워크트리에서 실행하십시오. WORKTREE_MISSING및BRANCH_MERGED행은 스윕을 통해 처리됩니다. 병합되지 않은 레인의 행은 ASK입니다.- 여전히 실행 중인 릴레이 작업(
rc파일 없음)은 REPORT ONLY입니다. Lanes 감시자가 소유합니다. /lanes세션에서 메인 레인이 통합됩니다. 작업이 아직 origin/main에 병합되지 않은 레인 브랜치를 삭제하지 마십시오.
하네스가 없으면 .claude/worktrees/ 아래의 워크트리(예: Claude Code의 EnterWorktree에서)는 위의 일반 Git 규칙을 따릅니다.
3단계: 보고서
정확히 이 구조를 사용하십시오. 훑어보기 쉽게 유지하십시오. 소유자가 긴 세션 끝에 읽습니다.
## 세션 정리
**이미 정리됨:** 작업 트리, 동기화, 워크트리, 브랜치, 스태시, 프로세스, 아티팩트, 추적기, 배포
(통과한 영역만 나열)
**정리됨**
- `feat/login-form` 브랜치: a1b2c3d에서 main에 병합됨, 앞선 커밋 0개. `git branch -d`로 삭제됨(복원: `git branch feat/login-form a1b2c3d`).
- `python3 -m http.server 3000` (PID 170308): 이 세션에서 미리보기용으로 시작, 유휴 상태. 중지됨.
- `.next/types` (1.2M): git 무시됨, 빌드 시 재생성됨.
**결정 필요**
- `feat/wip` 브랜치: main에 없는 커밋 1개("wip: draft parser"), 마지막 커밋 2시간 전, 연결된 작업 bd-42 in_progress.
재개(유지) 또는 폐기(`git branch -D feat/wip`)?
- `stash@{0}` "On main: sc test stash", 5일 전. 적용 또는 삭제?
**보고 전용**
- main이 origin/main보다 2커밋 앞서 있음(푸시되지 않음). 푸시 권장.
- 프로덕션 배포: 확인되지 않음(vercel CLI에 로그인되지 않음).
**다음 작업**
- `git worktree list` 실행, 메인 워크트리만 예상.
- `git status --short` 실행, 출력 없음 예상.
보고서 규칙:
- 모든 "정리됨" 줄은 무엇인지, 크기(파일 및 폴더의 경우) 및 안전한 이유를 명시합니다. 브랜치의 경우 복원할 수 있도록 팁 SHA를 포함하십시오.
- 모든 "결정 필요" 항목은 결정에 필요한 사실(기간, 커밋 수, 커밋 제목, 연결된 작업)과 두 가지 구체적인 옵션을 제공합니다.
- 감사 또는 이 세션의 명령이 표시하지 않는 한 영역이 깨끗하다고 말하지 마십시오. 검사가 건너뛰어진 경우(오프라인, CLI 누락, 권한 없음) 보고 전용 아래에 명시하십시오.
- 다음 작업에는 항상 예상 출력과 함께 하나 이상의 확인 명령이 포함됩니다.
소유자가 ASK 항목에 응답한 후, 정확히 승인한 대로 수행하고 관련 감사 섹션을 다시 실행한 후 결과를 보고하십시오.
로깅
저장소에 세션 로그 폴더가 있는 경우(SESSION_LOG에 _sessions/ 또는 유사한 항목 표시), 짧은 정리 항목(날짜, 정리된 내용, 소유자를 기다리는 내용)을 추가하십시오. 프로젝트 규칙에서 세션 로그 커밋을 허용하는 경우에만 커밋하십시오. CLAUDE.md 또는 폴더의 무시 상태를 확인하십시오(ignored=yes는 커밋하지 않음을 의미).
범위 외
리팩토링, 린트 수정, 데드코드 제거 및 종속성 업그레이드는 범위를 벗어납니다. 발견하면 백로그 항목(메모리 또는 추적기)으로 기록하고 한 줄로 언급하십시오. 푸시, 풀 및 배포도 범위를 벗어납니다: 권장만 하고 수행하지 마십시오.