Community생산성 & 협업github.com

Wolftux/checklist

/checklist는 현재 디렉토리에 체크리스트에 필요한 항목을 설치한 후, 전용 채팅에 체크리스트를 표시합니다. 기존 파일을 덮어쓰거나 변경하지 않습니다.

checklist란 무엇인가요?

이 스킬은 모든 프로젝트에서 진행 상황을 체계적으로 추적할 수 있는 체크리스트를 설치하고 관리합니다. `documenti/lavori.yaml` 레지스트리, `strumenti-locali/avanzamento/stato.mjs` 스크립트, CLAUDE.md의 규칙 블록, `.git/info/exclude`의 제외 줄을 자동으로 추가하여 프로젝트 체크리스트 인프라를 구성합니다. 사용자가 `/checklist`를 입력하거나 체크리스트 설치를 요청할 때 활성화되며, 이미 체크리스트가 있는 프로젝트에서는 CLAUDE.md 규칙에 따라 표시합니다. Claude Code에서 동작하며, Node.js 환경이 필요하고 Git과 함께 사용하면 제외 규칙을 추가하여 체크리스트 파일을 버전 관리에서 제외합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Wolftux/checklist/tree/HEAD/plugins/checklist/checklist

Installed? Explore more 생산성 & 협업 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

/checklist: 프로젝트 진행 체크리스트

/checklist는 현재 디렉토리에 체크리스트에 필요한 항목을 설치한 후, 전용 채팅에 체크리스트를 표시합니다. 기존 파일을 덮어쓰거나 변경하지 않습니다.

작업 방식:

  • 프로젝트 폴더가 현재 폴더입니다. 모든 명령은 그곳에서 실행합니다.
  • <base>는 이 스킬 상단에 표시된 "기본 디렉토리"입니다. 템플릿은 <base>/modelli/에 있습니다.
  • 명령의 모든 경로는 따옴표로 감쌉니다: 기본 디렉토리와 프로젝트 폴더는 공백을 포함할 수 있습니다.
  • 확인을 요구하지 않고 순서대로 단계를 실행합니다(단계에서 명시한 경우 제외).
  • 모든 grep은 -a 옵션을 사용합니다: Claude Code에서 grep은 UTF-8이 아닌 파일을 바이너리로 처리하여 존재하는 줄을 찾지 못할 수 있습니다.

1단계: 사전 확인

  1. command -v node를 실행합니다. 아무것도 출력되지 않으면 한 줄("Node.js 18 이상이 필요합니다: 설치하고 /checklist를 다시 실행하세요")을 쓰고 중단합니다.
  2. git rev-parse --path-format=absolute --git-dir와 git rev-parse --path-format=absolute --git-common-dir를 실행합니다. 두 결과가 다르면 보조 워크트리 내에 있는 것입니다: 한 줄("워크트리 내에 있습니다: 레지스트리가 워크트리와 함께 사라집니다. 프로젝트 메인 폴더에서 /checklist를 실행하세요")을 쓰고 중단합니다. 두 명령이 모두 실패하면 git이 없는 것입니다: 계속 진행합니다.
  3. 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단계: 프로젝트 이름

  1. CLAUDE.md에 블록이 있으면 이름은 "진행 체크리스트 업데이트: " 다음에 오는 첫 번째 »까지의 내용입니다. 명령: grep -ao '진행 체크리스트 업데이트: [^»]*' CLAUDE.md | head -1, 접두사는 제외합니다. 이름이 있으면 질문하지 마세요. 명령이 아무것도 출력하지 않거나 이름이 비어 있으면(사용자가 수정한 경우) 2번으로 넘어갑니다.
  2. 그렇지 않으면 AskUserQuestion으로 질문합니다. 첫 번째 옵션(권장): 폴더 이름. 두 번째 옵션: 변형(README의 # 제목이 폴더 이름과 다르면 그 제목, 아니면 대소문자나 공백이 다른 폴더 이름). 사용자는 항상 다른 이름을 입력할 수 있습니다.
  3. 질문할 수 없으면(예: 비대화형 모드) 폴더 이름을 사용하고 한 줄로 알려줍니다.

이름을 얻으면 단계가 끝납니다. 이 이름을 <프로젝트>라고 부릅니다.

4단계: 누락된 항목 설치

2단계에서 누락된 것으로 확인된 항목만 설치합니다. 기존 항목을 절대 덮어쓰거나 수정하지 마세요.

  1. 레지스트리. 없으면: 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에서 숨깁니다.
  2. 스크립트. 없으면: mkdir -p strumenti-locali/avanzamento와 cp -n "<base>/modelli/stato.mjs" strumenti-locali/avanzamento/stato.mjs.
  3. 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를 사용하지 마세요: 이름에 /나 &가 포함될 수 있습니다.
  4. 제외 줄(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/').
  5. git 없음, 경고 한 줄: "여기는 git이 없습니다: 위젯의 저장소 줄이 비어 있습니다."

누락된 모든 항목이 생성되면 단계가 끝납니다. 누락된 항목이 없으면 단계가 즉시 끝납니다.

5단계: 체크리스트 채팅 열기

설치 후 또는 모든 항목이 이미 있는 경우 모두 수행합니다.

  1. mcp__ccd_session__start_session와 mcp__ccd_session_mgmt__detach_session이 지연된 도구 중에 있으면 ToolSearch로 로드합니다.
  2. start_session을 호출합니다:
    • initiation: user_asked
    • context: fresh
    • use_worktree: false
    • effort: low (채팅은 스크립트를 실행하고 위젯을 구성합니다: 시작 세션의 노력이 필요하지 않습니다)
    • title: "체크리스트: <프로젝트>"
    • prompt: "node strumenti-locali/avanzamento/stato.mjs를 실행하고 CLAUDE.md에 따라 체크리스트를 표시하세요"
    • background: "프로젝트 <프로젝트>의 진행 체크리스트: 스크립트는 strumenti-locali/avanzamento/stato.mjs입니다. 프로젝트의 CLAUDE.md에는 레지스트리 위치, 체크리스트 표시 방법, 레지스트리 업데이트 시점이 명시되어 있습니다."
  3. 즉시 반환된 ID로 detach_session을 호출합니다: 기본 채팅이므로 하위 채팅이 아닙니다.
  4. start_session이 없거나(CLI) 거부하면: node strumenti-locali/avanzamento/stato.mjs를 실행하고 <base>/modelli/claude-md.md에 따라 이 채팅에 체크리스트를 표시합니다(show_widget으로, 또는 show_widget이 없으면 마크다운 테이블로).
  5. start_session은 성공했지만 분리가 없거나 거부되면 한 줄을 씁니다: "사이드바에서 'Detach to top level'로 분리하세요."
  6. 실행할 때마다 새 채팅이 열립니다: 이전 채팅을 찾지 마세요.

채팅이 열리고 분리되었거나 체크리스트가 이 채팅에 표시되면 단계가 끝납니다.

6단계: 최종 메시지

두세 줄을 씁니다:

  • 추가한 항목, 또는 "모든 항목이 이미 있었습니다."
  • 경고가 있으면 경고.
  • 체크리스트 채팅을 찾을 수 있는 위치.

작업을 추가하거나 완료하려면 채팅에서 말하기만 하면 된다고 씁니다: CLAUDE.md의 규칙이 레지스트리를 업데이트합니다.

메시지가 작성되면 단계가 끝납니다.

관련 스킬