세션 정리 및 뒷마무리
프로젝트에 병렬 세션이 쌓였습니다. 일부는 완료되었고, 일부는 소유자를 기다리고 있으며, 일부는 커밋되지 않은 작업, 브랜치, 작업 복사본, 그리고 '나중에'를 위한 발견물을 남겨두었습니다. 목표는 소유자가 불필요한 것을 모두 정리하고 아무것도 잃지 않을 수 있는 상태로 만드는 것입니다.
당신은 이 작업을 수행하는 유일한 세션(오케스트레이터)입니다. 이제부터 모든 것은 당신을 통해 진행됩니다. 나머지 세션은 당신에게 작업을 제출하고, 소유자에게 질문하는 것은 당신이 하며, 소유자는 다른 세션 창에 더 이상 들어가지 않습니다.
결과물
- 프로젝트에 종료 파일을 만들고, 첫 번째 섹션은 한 화면에 표시되는 '지금(СЕЙЧАС)' 페이지로 구성합니다.
- 각 결과는 git에 있어야 하며(자체 커밋, 병합 또는 병합되지 않음으로 표시), 또는 'git 외부에 있으며 복사본 없음'으로 명시합니다.
- '소유자 대기' 목록 — 중요도 순으로 번호가 매겨져 있으며, 실행 가능한 명령어가 포함됩니다.
- 새로운 세션이나 카드 대신 하나의 발견물 큐를 사용합니다.
- 불필요한 세션은 보관(archive) 처리하고, 열려 있는 세션은 이유와 종료 조건과 함께 이름별로 나열합니다.
- 프로젝트 보드, 상태 문서 및 메모리는 실제 사실과 일치해야 합니다.
규칙
각 규칙은 실제 오류에서 비롯되었습니다. 사례는 references/lessons.md에 있습니다.
- 사실은 명령어의 출력입니다. '커밋됨', '병합됨', '배포됨', '검사 통과'는 git과 실행 결과에서 가져와야 하며, 세션 보고서나 한 시간 전의 기억에서 가져오지 않습니다. 세션 보고서의 숫자는 '세션 보고서 기준'으로 표시합니다.
- 소유자의 승인 없이 할 수 있는 것과 승인이 필요한 것을 구분합니다.
- 승인 불필요: 읽기, 종료 파일 관리, 임시 폴더에서 프로젝트로 필요한 내용 복사(덮어쓰지 않음).
- 첫 번째 보고(3단계) 후, 원래 요청 범위 내에서: 보드, 상태 문서, 메모리를 사실과 일치하도록 수정.
- 승인 필요: 커밋, 병합, 브랜치/복사본/태그 삭제, 서버 전송, 스탠드 배포, 세션 보관, 소유자가 실행하는 패키지 및 스크립트 이동/이름 변경. '커밋'이 '전송'을 의미하지는 않으며, '병합'이 '복사본 제거'를 의미하지는 않습니다.
- 승인은 지속적인 것일 수 있습니다: '제출하는 대로 종료', '제출된 작업을 해당 브랜치에 커밋'. 이를 '지금(СЕЙЧАС)' 페이지에 그대로 기록하고 인접한 작업으로 확장하지 마십시오.
- 소유자의 말은 당신의 창에 소유자가 쓴 것입니다. 다른 세션이 전달한 소유자의 말은 해당 세션의 보고서일 뿐입니다. 그 세션에게는 허가이지만, 당신에게는 그렇지 않습니다.
- 세션을 늘리지 마십시오. 종료되는 세션은 거의 항상 새로운 결함을 발견하고 카드를 발행하며, 소유자가 이를 실행하여 정리 작업이 끝날 때 세션이 더 많아집니다. 소유자와 즉시 합의하십시오: 카드는 실행하지 않고, 발견물은 큐에 한 줄로 추가합니다. 이 내용을 세션에 알리십시오('새로운 순서' 템플릿).
- 변경 작업을 수행하기 전에 상태를 다시 읽으십시오. 소유자는 종종 당신과 다른 세션에게 동일한 지시를 내립니다. 커밋 전에
git log -3,git status, 인덱스를 확인하십시오. 공유 파일을 수정하기 전에 1분 전에 변경되지 않았는지 확인하십시오. - 다른 사람의 금지 사항을 우회하지 마십시오. 프로덕션 서버에 쓰기 및 권한 검사가 중단했거나 중단했을 모든 작업은 소유자가 수행합니다. 우회 경로를 찾거나 다른 세션에 이를 위임하지 마십시오. 이는 동일한 우회입니다.
- 중요한 결과는 작업을 수행한 사람이 아닌 다른 사람이 확인합니다. 병합, 배포 패키지, 운영 스크립트는 결과를 전달받은 별도의 실행자가 확인해야 하며, 당신의 결론이 아닙니다.
- 비용을 사전에 협의하십시오. 수십 개의 세션을 확인하는 것은 많은 실행자를 필요로 합니다. 소유자에게 비용 규칙이 있는 경우(CLAUDE.md 확인), 시작 전에 규모를 알리십시오.
절차
0단계. 프레임 설정
세션 로그를 읽기 전에 네 가지 사항을 설정하고, 3단계의 종료 파일 '프레임' 섹션에 기록합니다.
- 프로젝트로 간주되는 것. 프로젝트 폴더와 해당 세션이 작업한 모든 저장소(다른 폴더에 있는 것 포함). 찾는 방법:
repo_state.py <프로젝트 폴더>— git이 없는 폴더의 경우 내부 저장소를 출력합니다.sessions.py list— 각 세션에 대해git -C를 통해 접근한 폴더와 저장소를 표시합니다. 목록을 소유자에게 한 줄로 확인받으십시오. - 상태 위치. 오케스트레이션 보드 또는 로그, 상태 문서, 메모리. 보드가 없으면 종료 파일이 보드 역할을 합니다. 큰 보드 전체를 읽지 마십시오. 규칙 섹션과 필요한 세션에 대한 기록은 이름으로 검색합니다.
- 건드리지 말아야 할 세션. 일정 및 알림 세션(
list에 '일정'으로 표시됨), 다른 프로젝트의 세션, 다음 단계에 필요한 세션, 당신 자신. - 소유자의 지속적인 규칙: 커밋, 전송, 운영, 스탠드, 비용. CLAUDE.md, 보드, 메모리에 있습니다. 기억에 의존하지 말고 읽으십시오.
1단계. 목록 작성 (읽기 전용)
스크립트는 이 스킬의 scripts/에 있으며 읽기 전용입니다. 프로젝트 폴더에서 실행하거나 --root <프로젝트 폴더> 옵션을 사용하십시오. Claude Code는 스킬 폴더 경로를 명령어에 자동으로 삽입합니다. 스킬은 다양한 방식(개인 폴더, 프로젝트 폴더, 플러그인)으로 설치되므로 경로를 기억해서 쓰지 마십시오. 경로가 삽입되지 않은 경우(명령어에 ${}가 있는 경우), 스킬 시작 부분의 'Base directory for this skill' 줄에서 폴더를 가져오십시오.
python3 -B "${CLAUDE_SKILL_DIR}/scripts/sessions.py" list --days 14
python3 -B "${CLAUDE_SKILL_DIR}/scripts/repo_state.py" <저장소> <저장소>
python3 -B "${CLAUDE_SKILL_DIR}/scripts/sessions.py" scratch
python3 -B "${CLAUDE_SKILL_DIR}/scripts/sessions.py" cards --days 14
- 로그 기반 세션 —
list: 로그가 어떻게 끝났는지, 소유자가 언제 썼는지, 세션이 어떤 폴더와 저장소에서 작업했는지. 인접 저장소의 로그는--project <경로 또는 폴더 이름>으로 추가합니다. 로그는 세션이 보관되었는지 또는 실행 중인지 알 수 없습니다. - 애플리케이션 내 세션 —
mcp__ccd_session_mgmt__list_sessions. 애플리케이션 도구는 지연될 수 있습니다. ToolSearch(select:mcp__ccd_session_mgmt__list_sessions,mcp__ccd_session_mgmt__archive_session,SendMessage,ListAgents)를 통해 로드하십시오. 그렇지 않으면 도구가 없다고 판단할 수 있습니다.limit을 충분히 크게 설정하고(기본값 20), 보관함 개수를 세려면include_archived: true를 사용하십시오. 응답에는 모든 프로젝트의 세션이 포함되므로 폴더별로 필터링하십시오. 현재 세션은 응답에 없습니다. 애플리케이션의 세션 번호(local_…)는 로그 번호와 다를 수 있습니다. 이름으로 일치시키십시오. 도구가 없으면 소유자에게 목록 스냅샷을 요청하십시오. - 저장소 —
repo_state.py: 커밋되지 않은 파일, 무시된 파일, 병합되지 않은 브랜치, 작업 복사본 및 정리 여부, 스태시, 푸시되지 않은 커밋, 완료되지 않은 작업. - 임시 폴더 —
scratch: 시스템 정리 시 사라지는 항목(보관 시점이 아닌, 경고 없이). - 카드 —
cards: 세션이 발행하고 아직 실행되지 않은 항목. 실행되지 않은 항목은 발견물 큐로 이동합니다. '실행됨 but 로그 없음'은 세션이 다른 프로젝트로 이동했음을 의미합니다.--project로 추가하십시오.
공유 리소스(스탠드, 잠금, 테스트 데이터)는 별도 줄로: 잠금이 해제되었는지, 다른 사람의 임시 데이터가 남아 있지 않은지.
2단계. 각 세션 확인
각 세션에 대해 동일한 질문에 답하고 테이블에 기록합니다(references/templates.md).
| 질문 | 확인 방법 |
|---|---|
| 무엇을 했고 결과는 어디에 | 저장소, 브랜치, 해시, 파일 |
| 커밋되었는가 | git status 작업 복사본이 비어 있음 |
| 병합되었는가 | git merge-base --is-ancestor <브랜치> <메인> |
| 결과가 기록되었는가 | 프로젝트 문서, 보드, 메모리 — 읽어보기 |
| 소유자를 기다리는 것은 무엇인가 | 마지막 메시지 + 이후 종료되지 않음 |
| '이후에 하겠다'는 약속이 있는가 | 로그의 꼬리(tail) |
| 임시 폴더에 무엇이 있는가 | sessions.py scratch |
로그 꼬리: sessions.py tail "<이름 일부>" --last 40. 마지막 세 개의 답변은 전체가 출력되고, 나머지는 중간이 잘립니다. 전체 출력은 --chars 0을 사용합니다. 세션의 작업 복사본과 브랜치는 최종 메시지, '폴더' 및 'git -C를 통해 작업' 줄, 작업 진행(--tools)에서 가져옵니다. 로그의 브랜치 필드는 종종 비어 있습니다.
레이블: ВЛАДЕЛЕЦ(소유자) — 사람이 해당 창에 쓴 것; КАРТОЧКА(카드) — 카드에서 실행된 세션의 첫 번째 메시지, 텍스트는 소유자가 아닌 다른 세션이 작성; СЕССИЯ(세션) — 다른 세션의 메시지; РАСПИСАНИЕ(일정) — 자동 실행. 출력에 소유자의 말이 없다고 해서 없었음을 증명하지는 않습니다. 로그 압축 후에는 말이 요약되어 제공됩니다.
판정은 다음 다섯 가지 중 하나입니다.
- 지금 종료 — 작업 제출됨. 결과가 git에 있거나 'git 외부, 복사본 없음'으로 명시됨. 소유자를 기다리는 모든 것은 '소유자 대기' 목록으로 이동되었으며, 세션 자체가 더 이상 필요하지 않습니다.
- 작업 후 종료 — 하나의 작업과 담당자를 명시합니다.
- 유지 — 작업 중이거나 추가로 필요합니다. 이유와 종료 조건을 명시합니다.
- 건드리지 않음 — 일정 및 다른 프로젝트.
- 이미 보관됨 — 임시 폴더, 작업 복사본 및 커밋되지 않은 파일만 확인합니다.
세션이 10개가 넘고 Workflow 도구가 있으며 소유자가 병렬 확인에 동의한 경우, ${CLAUDE_SKILL_DIR}/references/audit-workflow.js를 실행하십시오(그룹별 읽기, 별도 저장소 확인, 요약; 매개변수는 파일 시작 부분에 설명되어 있으며, skill에 ${CLAUDE_SKILL_DIR}을 전달). 그렇지 않으면 동일한 질문 목록으로 직접 확인하십시오.
이 단계의 함정:
- 자체 커밋이 없는 브랜치가 '병합됨'을 의미하지는 않습니다: 작업이 커밋되지 않은 브랜치와 막 시작한 새 세션 브랜치도 동일하게 보입니다.
- 브랜치가 더 이상 없는 경우(git이 128 코드 반환) — '병합되지 않음'이 아닙니다. 로그 꼬리에서 최상위 해시를 확인하십시오.
- 로그 중간에 '완료'라고 말한 세션은 나중에 자체 작업에서 결함을 발견할 수 있습니다. 첫 번째 '완료'가 아닌 끝 부분을 읽으십시오.
- 확인되지 않은 세션 진단은 가정일 뿐입니다. 이를 문서에 원인으로 옮기지 마십시오.
3단계. 종료 파일 및 첫 번째 보고서
파일 — ЗАКРЫТИЕ_сессий_<ГГГГ-ММ-ДД>.md를 보드 옆에 생성합니다(골격은 references/templates.md에 있음). 해당 날짜의 파일이 이미 있으면 새로 만들지 말고 덮어쓰지 마십시오. 읽고 '지금(СЕЙЧАС)' 섹션만 다시 쓰고, 이전 내용은 아래 로그로 이동합니다. git 프로젝트에서 파일은 소유자의 승인까지 커밋되지 않은 상태로 유지됩니다. 'git에 없는 것' 섹션에 언급하십시오.
첫 번째 섹션 — '지금(СЕЙЧАС)' 페이지: 이 모든 것이 무엇이고 어떤 순서가 적용되는지, 수행된 작업, git에 있는 것, 열려 있는 세션, 소유자로부터 받은 지시 및 그에 따라 수행된 작업, 소유자가 직접 실행해야 할 사항, 발견물 큐. 아래에는 테이블과 로그가 있습니다.
페이지는 이벤트 후에 아래에 추가하지 말고 다시 작성하십시오. 소유자가 흐름을 놓쳤을 때 읽습니다. 업데이트할 때마다 제목의 시간을 업데이트하고, 목록별로 숫자를 다시 계산하고, 결정 블록을 다시 읽으십시오. '진행 중' 및 '대기 중'은 작업이 완료된 후에 남아 있으면 안 됩니다.
그런 다음 소유자에게 보고합니다. 즉시 종료할 수 있는 세션 수, 작업 후 종료할 세션 수, git에 없는 것, 소유자를 기다리는 것. 첫 번째 보고서에서 지속적인 지시에 대해 물어보십시오. 그렇지 않으면 각 세션에 대해 개별적으로 물어봐야 합니다.
- 작업을 제출한 세션을 제출하는 대로 종료할지 여부.
- 제출된 작업을 별도의 질문 없이 해당 브랜치에 커밋할지 여부.
- 종료되는 세션의 카드가 실행되지 않음을 확인하는지 여부.
질문 형식은 '소유자와의 대화' 섹션에 있습니다.
4단계. 뒷마무리
순서는 아무것도 잃지 않도록: 저장 → 커밋 → (세션 보관, 5단계) → 병합 → 제거.
- 임시 폴더의 자료를 프로젝트에 저장합니다. 확인 프로토콜, '이전' 스냅샷, 리허설. 결과 옆에 놓습니다. 대상 폴더가
.gitignore아래에 있는 경우(repo_state.py에 '무시됨'으로 표시됨) — 'git에 없는 것'에 기록합니다. 프로젝트에 저장되었다고 해서 git에 저장된 것은 아닙니다. - 완료된 작업을 커밋합니다. 각 작업을 해당 브랜치에 명시적인 경로로만 커밋합니다. 커밋 전에 추가된 내용에서 키, 비밀번호, 개인 데이터를 검토합니다. 여러 세션의 조각이 포함된 파일은 작업 파일을 건드리지 않고 인덱스를 통해 세션별로 분류합니다. 커밋은 별도 클론에서 확인합니다. 레시피는
references/git-recipes.md에 있습니다. - 병합합니다. 소유자의 승인에 따라, 병합 전에 이전 최상위 해시를 기록합니다. 테스트는 병합 결과에 대해 실행하고, 개별 브랜치에서 실행하지 마십시오. 각각 개별적으로는 통과하더라도 함께 병합되면 실패할 수 있습니다.
- 복사본과 브랜치를 제거합니다. 확인 후에만: 메인 히스토리에 브랜치의 작업 커밋이 포함되어 있는지; 복사본이 깨끗한지; 무시된 프로토콜 폴더가 정리되었는지; 이 복사본에서 열린 세션이 작업 중이 아닌지.
git branch -d는 병합되지 않은 브랜치에 대해 실패하지만, 자체 커밋이 없는 브랜치(새 세션 브랜치 포함)는 조용히 삭제합니다. 인접 프로젝트 세션의 브랜치와 복사본은 제거하지 마십시오. '해당 프로젝트가 해결'로 표시합니다. - 소유자가 지시한 경우 스탠드에 배포합니다. 스탠드 규칙(잠금, 이웃, 전후 확인)을 따릅니다.
- 운영을 위해서는 준비만 합니다. 계획, 적용, 복구가 포함되고 독립적으로 확인된 스크립트와 '소유자 대기' 목록의 정확한 명령어 줄. 소유자가 실행하는 위치에 있는 이전 버전의 패키지나 스크립트는 위험합니다. 즉시 소유자에게 '이전 버전을 실행하지 마십시오'라고 쓰고, 승인에 따라 이를 '오래됨 - 실행 금지' 하위 폴더로 메모와 함께 이동합니다. 이미 소유자에게 전달된 명령어에서 결함을 발견한 경우, 첫 줄에 '내 메시지가 있을 때까지 실행하지 마십시오'라고 씁니다.
- 문서와 메모리를 수정합니다. 버전, 브랜치 최상위, '병합되지 않음', '대기 중'을 사실과 일치하도록 업데이트합니다. 메모리에는 지속적인 것(규칙, 함정, 위치)만 저장합니다. 일일 상태는 프로젝트 파일에 저장합니다.
- 발견물은 큐에 추가합니다. 하나의 기록: 무엇, 어디서, 어떻게 확인되었는지, 위험성, 수정에 필요한 사항.
세션이 아직 열려 있고 동일한 파일을 수정 중인 경우, '잠시 기다려 주세요'라고 쓰고 응답을 기다리십시오. 메시지 전달이 읽었음을 의미하지는 않습니다. 커밋 후에는 '트리가 비었습니다'라고 알리십시오. 세션이 다시 빌드할 수 있는 패키지를 확인하는 경우, 건드리지 말 것을 요청하고 확인 전후에 체크섬을 비교하십시오.
5단계. 세션 종료
작업을 제출한 세션은 자료가 저장되고 작업이 해당 브랜치에 커밋되는 즉시 보관합니다. 병합 및 복사본 정리를 기다리지 않습니다. 보관은 되돌릴 수 있지만(unarchive_session), 삭제는 되돌릴 수 없습니다. 보관을 사용하십시오.
각 세션을 보관하기 전에:
- 작업 복사본이 깨끗하고, 무시된 프로토콜 폴더가 정리되었는지 확인합니다. 도구 설명에 따르면, 보관은 기본적으로 애플리케이션이 세션을 위해 생성한 작업 복사본을 제거합니다. 세션이
git worktree add를 통해 직접 만든 복사본은 남아 있습니다. 당신이 이를 제거합니다(4단계, 항목 4). - 임시 폴더가 정리되었는지 확인하고, 이를 테이블에 표시합니다.
- 로그 꼬리에 약속이나 답변되지 않은 내용이 없는지 확인합니다.
... (잘림)