/checklist: 프로젝트 진행 체크리스트
/checklist는 현재 디렉토리에 체크리스트에 필요한 항목을 설치한 후, 전용 채팅에 체크리스트를 표시합니다. 기존 파일을 덮어쓰거나 변경하지 않습니다.
작업 방식:
- 프로젝트 폴더가 현재 폴더입니다. 모든 명령은 그곳에서 실행합니다.
<base>는 이 스킬 상단에 표시된 "기본 디렉토리"입니다. 템플릿은<base>/modelli/에 있습니다.- 명령의 모든 경로는 따옴표로 감쌉니다: 기본 디렉토리와 프로젝트 폴더는 공백을 포함할 수 있습니다.
- 확인을 요구하지 않고 순서대로 단계를 실행합니다(단계에서 명시한 경우 제외).
- 모든
grep은-a옵션을 사용합니다: Claude Code에서grep은 UTF-8이 아닌 파일을 바이너리로 처리하여 존재하는 줄을 찾지 못할 수 있습니다.
1단계: 사전 확인
command -v node를 실행합니다. 아무것도 출력되지 않으면 한 줄("Node.js 18 이상이 필요합니다: 설치하고 /checklist를 다시 실행하세요")을 쓰고 중단합니다.git rev-parse --path-format=absolute --git-dir와git rev-parse --path-format=absolute --git-common-dir를 실행합니다. 두 결과가 다르면 보조 워크트리 내에 있는 것입니다: 한 줄("워크트리 내에 있습니다: 레지스트리가 워크트리와 함께 사라집니다. 프로젝트 메인 폴더에서 /checklist를 실행하세요")을 쓰고 중단합니다. 두 명령이 모두 실패하면 git이 없는 것입니다: 계속 진행합니다.pwd -P와(cd ~ && pwd -P)를 실행합니다. 결과가 같으면 홈 폴더에 있는 것입니다: 한 줄("홈 폴더에 있습니다: CLAUDE.md의 블록이 모든 프로젝트에 적용됩니다. 프로젝트 폴더에서 /checklist를 실행하세요")을 쓰고 중단합니다.
Node가 있고 폴더가 보조 워크트리도 홈 폴더도 아니면 단계가 끝납니다.
2단계: 네 가지 구성 요소 확인
아무것도 쓰지 마세요. 각 항목이 있는지 없는지 기록합니다:
- 레지스트리:
documenti/lavori.yaml파일이 존재합니다. - 스크립트:
strumenti-locali/avanzamento/stato.mjs파일이 존재합니다. - 블록:
grep -aqx '## 진행 체크리스트' CLAUDE.md명령이 성공합니다(CLAUDE.md가 없으면 블록이 없는 것입니다). - 제외 줄(git만 해당,
git rev-parse --is-inside-work-tree가true를 출력):git rev-parse --git-path info/exclude가 출력한 파일에**/documenti/lavori.yaml와**/strumenti-locali/avanzamento/줄이 정확히 포함되어 있습니다. 스킬의 파일만 해당합니다. 프로젝트의 다른documenti/폴더는 git에 계속 표시됩니다. 각 줄은grep -aqxF '**/documenti/lavori.yaml' "<제외 파일>"와grep -aqxF '**/strumenti-locali/avanzamento/' "<제외 파일>"로 확인합니다. 파일이 없으면 두 줄 모두 없는 것입니다.
누락된 구성 요소를 알게 되면 단계가 끝납니다.
3단계: 프로젝트 이름
CLAUDE.md에 블록이 있으면 이름은 "진행 체크리스트 업데이트: " 다음에 오는 첫 번째»까지의 내용입니다. 명령:grep -ao '진행 체크리스트 업데이트: [^»]*' CLAUDE.md | head -1, 접두사는 제외합니다. 이름이 있으면 질문하지 마세요. 명령이 아무것도 출력하지 않거나 이름이 비어 있으면(사용자가 수정한 경우) 2번으로 넘어갑니다.- 그렇지 않으면 AskUserQuestion으로 질문합니다. 첫 번째 옵션(권장): 폴더 이름. 두 번째 옵션: 변형(README의
#제목이 폴더 이름과 다르면 그 제목, 아니면 대소문자나 공백이 다른 폴더 이름). 사용자는 항상 다른 이름을 입력할 수 있습니다. - 질문할 수 없으면(예: 비대화형 모드) 폴더 이름을 사용하고 한 줄로 알려줍니다.
이름을 얻으면 단계가 끝납니다. 이 이름을 <프로젝트>라고 부릅니다.
4단계: 누락된 항목 설치
2단계에서 누락된 것으로 확인된 항목만 설치합니다. 기존 항목을 절대 덮어쓰거나 수정하지 마세요.
- 레지스트리. 없으면:
mkdir -p documenti와[ -e documenti/lavori.yaml ] || sed "s/<오늘>/$(date +%F)/g" "<base>/modelli/lavori.yaml" > documenti/lavori.yaml(가드가 2단계의 오류에도 기존 레지스트리를 보호합니다). 스크립트가 이미 있으면 프로젝트에 다른 레지스트리(예:lavori.json)를 읽는 자체 체크리스트가 있을 수 있습니다: 먼저 AskUserQuestion으로documenti/lavori.yaml을 생성할지 묻습니다. 첫 번째 옵션(권장): 생성하지 않습니다. 답변이 '아니오'이거나 질문할 수 없으면 생성하지 않고 한 줄로 알린 후 제외 줄(4번)도 건너뜁니다. 제외 줄은 프로젝트 체크리스트 파일을 git에서 숨깁니다. - 스크립트. 없으면:
mkdir -p strumenti-locali/avanzamento와cp -n "<base>/modelli/stato.mjs" strumenti-locali/avanzamento/stato.mjs. - CLAUDE.md의 블록. 없으면:
<base>/modelli/claude-md.md를 읽고 모든<프로젝트>를 이름으로 바꿉니다.mktemp -d를 실행하고 파일 쓰기 도구를 사용하여 이미 바뀐 블록을<tmp>/blocco.md에 씁니다(<tmp>는 출력된 폴더).CLAUDE.md가 존재하고 비어 있지 않으면 다음 두 명령으로 꼬리를 준비합니다(파일을 읽거나 다시 쓰지 마세요):if [ -s CLAUDE.md ] && [ -n "$(tail -c1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(마지막 줄바꿈이 없으면 추가)if [ -s CLAUDE.md ] && [ -n "$(tail -n1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(마지막 줄이 비어 있지 않으면 빈 줄 추가)- 블록을 추가합니다:
cat "<tmp>/blocco.md" >> CLAUDE.md(파일이 없으면 생성). 사용자 텍스트는 절대 다시 쓰지 않습니다. sed를 사용하지 마세요: 이름에/나&가 포함될 수 있습니다.
- 제외 줄(git만 해당).
<제외>는git rev-parse --git-path info/exclude가 출력한 경로입니다.mkdir -p "$(dirname "<제외>")".- 마지막 줄바꿈이 없으면 추가:
if [ -s "<제외>" ] && [ -n "$(tail -c1 "<제외>")" ]; then printf '\n' >> "<제외>"; fi. - 누락된 각 줄(
**/documenti/lavori.yaml와**/strumenti-locali/avanzamento/)에 대해:printf '%s\n' '**/documenti/lavori.yaml' >> "<제외>"(또는'**/strumenti-locali/avanzamento/').
- git 없음, 경고 한 줄: "여기는 git이 없습니다: 위젯의 저장소 줄이 비어 있습니다."
누락된 모든 항목이 생성되면 단계가 끝납니다. 누락된 항목이 없으면 단계가 즉시 끝납니다.
5단계: 체크리스트 채팅 열기
설치 후 또는 모든 항목이 이미 있는 경우 모두 수행합니다.
mcp__ccd_session__start_session와mcp__ccd_session_mgmt__detach_session이 지연된 도구 중에 있으면 ToolSearch로 로드합니다.start_session을 호출합니다:initiation:user_askedcontext:freshuse_worktree:falseeffort:low(채팅은 스크립트를 실행하고 위젯을 구성합니다: 시작 세션의 노력이 필요하지 않습니다)title: "체크리스트: <프로젝트>"prompt: "node strumenti-locali/avanzamento/stato.mjs를 실행하고 CLAUDE.md에 따라 체크리스트를 표시하세요"background: "프로젝트 <프로젝트>의 진행 체크리스트: 스크립트는strumenti-locali/avanzamento/stato.mjs입니다. 프로젝트의 CLAUDE.md에는 레지스트리 위치, 체크리스트 표시 방법, 레지스트리 업데이트 시점이 명시되어 있습니다."
- 즉시 반환된 ID로
detach_session을 호출합니다: 기본 채팅이므로 하위 채팅이 아닙니다. start_session이 없거나(CLI) 거부하면:node strumenti-locali/avanzamento/stato.mjs를 실행하고<base>/modelli/claude-md.md에 따라 이 채팅에 체크리스트를 표시합니다(show_widget으로, 또는show_widget이 없으면 마크다운 테이블로).start_session은 성공했지만 분리가 없거나 거부되면 한 줄을 씁니다: "사이드바에서 'Detach to top level'로 분리하세요."- 실행할 때마다 새 채팅이 열립니다: 이전 채팅을 찾지 마세요.
채팅이 열리고 분리되었거나 체크리스트가 이 채팅에 표시되면 단계가 끝납니다.
6단계: 최종 메시지
두세 줄을 씁니다:
- 추가한 항목, 또는 "모든 항목이 이미 있었습니다."
- 경고가 있으면 경고.
- 체크리스트 채팅을 찾을 수 있는 위치.
작업을 추가하거나 완료하려면 채팅에서 말하기만 하면 된다고 씁니다: CLAUDE.md의 규칙이 레지스트리를 업데이트합니다.
메시지가 작성되면 단계가 끝납니다.