kdyupdate - CLAUDE.md 카탈로그 동기화
CLAUDE.md의 3가지 등록 영역(스킬 테이블, 에이전트 테이블, 폴더 구조)을 디스크 실제 상태와 빠르게 동기화하는 경량 스킬입니다.
/inception과의 차이
| 구분 | /inception | /kdyupdate |
|---|---|---|
| 대상 파일 | _COMPONENT_MAP.md + CLAUDE.md | CLAUDE.md만 |
| 분석 깊이 | 관계 추출, 연쇄 체인 검증, 의존성 매트릭스 | 등록 여부 + 설명 일치 (카탈로그 수준) |
| 실행 시간 | 무거움 (SKILL.md 본문 전체 + 관계 분석) | 가벼움 (frontmatter만 파싱) |
| 사용 시점 | 대규모 구조 변경 후 | 스킬/에이전트 추가·삭제 후 빠른 동기화 |
인수 처리
사용자가 제공한 인수: $ARGUMENTS
| 인수 | 설명 |
|---|---|
| (없음) | 전체 스캔 + 사용자 확인 후 갱신 |
--scan-only | Phase 1~3만 실행, 리포트 출력 후 종료 |
--auto | 사용자 확인 없이 전체 갱신 |
--skills-only | 스킬 테이블 + 폴더 구조의 스킬 섹션만 갱신 |
--agents-only | 에이전트 테이블 + 폴더 구조의 에이전트 섹션만 갱신 |
기본 경로
BASE 결정 순서:
1. 환경변수 GENERAL_PRO_PATH
2. CWD가 00-general-pro* 내부이면 해당 루트
3. ~/{develop,dev}/00-general-pro-web 존재 탐색
4. 실패 시 AskUserQuestion: "00-general-pro-web 경로를 입력해주세요"
BASE = {결정된 경로}
CLAUDE_MD = $BASE/CLAUDE.md
SKILLS_DIR = $BASE/03-skills
AGENTS_DIR = $BASE/04-agents
Phase 1: 디스크 인벤토리 수집
디스크에서 실제 스킬과 에이전트 목록을 수집합니다.
1.1 스킬 수집
Glob: 03-skills/*/SKILL.md
발견된 각 SKILL.md에서 YAML frontmatter만 파싱하여 name과 description을 추출합니다.
SKILL.md가 없는 디렉토리 처리:
00-community-reference/같은 비스킬 디렉토리는 무시- SKILL.md가 있어야 할 디렉토리에 없는 경우 INCOMPLETE 플래그
1.2 에이전트 수집
Glob: 04-agents/*.md
README.md를 제외한 모든 .md 파일에서 frontmatter의 name, model(또는 파일 상단 설정), description을 추출합니다. frontmatter가 없으면 파일명에서 에이전트명 추출, 파일 첫 단락에서 설명 추출합니다.
1.3 수집 결과 표시
## 디스크 인벤토리
### 스킬 (N개)
| # | 디렉토리 | name | description | 상태 |
|---|----------|------|-------------|------|
| 1 | cs | cs | 세션 종료 프로토콜... | OK |
| 2 | kdyclean | kdyclean | 프로젝트 정리... | OK |
| ... | ... | ... | ... | ... |
### 에이전트 (N개)
| # | 파일 | name | model | description |
|---|------|------|-------|-------------|
| 1 | code-reviewer.md | code-reviewer | sonnet | 코드 품질... |
| ... | ... | ... | ... | ... |
Phase 2: CLAUDE.md 등록 상태 파싱
Read: CLAUDE.md
CLAUDE.md를 읽고 다음 3개 영역을 파싱합니다:
2.1 ## 주요 스킬 테이블
마크다운 테이블에서 {스킬명: 설명} 맵을 추출합니다.
파싱 패턴: | `/스킬명` | 설명 |
결과: { "cs": "세션 종료 4단계 프로토콜 ...", "inception": "5대 시스템 스캔 ...", ... }
2.2 ## 에이전트 테이블
마크다운 테이블에서 {에이전트명: {모델, 용도}} 맵을 추출합니다.
파싱 패턴: | `에이전트명` | 모델 | 용도 |
결과: { "code-reviewer": { model: "sonnet", desc: "코드 품질/보안/성능 리뷰" }, ... }
2.3 ## 폴더 구조 코드 블록
코드 블록 내 03-skills/와 04-agents/ 하위 항목을 파싱합니다.
파싱 패턴: │ ├── 디렉토리명/ → 설명
결과: { "cs/": "세션 종료 프로토콜 (4단계)", "kdyclean/": null, ... }
→ 뒤에 설명이 없는 항목은 null로 기록 (MISSING_DESC 후보).
Phase 3: 차이 분석
Phase 1(디스크)과 Phase 2(CLAUDE.md 등록) 데이터를 비교하여 5가지로 분류합니다.
3.1 분류 기준
| 분류 | 조건 | 액션 |
|---|---|---|
| NEW | 디스크에만 존재 (CLAUDE.md에 미등록) | 등록 필요 |
| REMOVED | CLAUDE.md에만 존재 (디스크에 없음) | 삭제 필요 |
| CHANGED | 양쪽 존재하나 설명이 다름 | 업데이트 필요 |
| MISSING_DESC | 폴더 구조에 항목은 있으나 → 설명이 없음 | 설명 추가 필요 |
| OK | 일치 | 액션 불필요 |
3.2 비교 수행
3가지 영역 각각에 대해 비교:
- 스킬 테이블 비교: 디스크 스킬 목록 vs
## 주요 스킬테이블 - 에이전트 테이블 비교: 디스크 에이전트 목록 vs
## 에이전트테이블 - 폴더 구조 비교: 디스크 디렉토리 vs
## 폴더 구조트리의03-skills/,04-agents/항목
3.3 출력 형식
## 차이 분석 결과
### 요약
| 분류 | 스킬 | 에이전트 | 폴더 구조 |
|------|------|---------|----------|
| NEW | 2 | 0 | 2 |
| REMOVED | 0 | 1 | 0 |
| CHANGED | 1 | 0 | 0 |
| MISSING_DESC | 5 | 0 | 5 |
| OK | 12 | 5 | 10 |
### 상세 변경사항
#### 스킬 테이블
| 스킬 | 분류 | 현재(CLAUDE.md) | 디스크(SKILL.md) |
|------|------|----------------|-----------------|
| kdyupdate | NEW | - | CLAUDE.md 카탈로그 동기화... |
| kdyweb | CHANGED | "웹 구조 관리" | "웹 페이지 구조 관리 (6모드)" |
#### 에이전트 테이블
| 에이전트 | 분류 | 현재(CLAUDE.md) | 디스크 |
|---------|------|----------------|-------|
| (변경 없음) | | | |
#### 폴더 구조 (03-skills/)
| 디렉토리 | 분류 | 현재 설명 | 디스크 설명 |
|----------|------|----------|-----------|
| kdyclean/ | MISSING_DESC | (없음) | 프로젝트 정리... |
| kdyextract/ | MISSING_DESC | (없음) | 범용 코드 추출... |
#### 폴더 구조 (04-agents/)
| 파일 | 분류 | 현재 설명 | 디스크 설명 |
|------|------|----------|-----------|
| (변경 없음) | | | |
--scan-only 인수 시: 이 리포트를 출력하고 여기서 종료합니다.
Phase 4: 사용자 확인
AskUserQuestion을 사용하여 갱신 범위를 선택받습니다.
4.1 선택지
| 선택지 | 설명 |
|---|---|
| 전체 갱신 | 스킬 테이블 + 에이전트 테이블 + 폴더 구조 모두 |
| 테이블만 | 스킬/에이전트 테이블만 갱신 (폴더 구조 미수정) |
| 폴더 구조만 | 폴더 구조 트리만 갱신 (테이블 미수정) |
| 리포트만 | Phase 3 리포트 출력 후 종료 (파일 수정 없음) |
4.2 --auto 모드
--auto 인수가 있으면 사용자 확인 없이 전체 갱신을 실행합니다.
4.3 --skills-only / --agents-only 모드
해당 영역만 필터링하여 갱신합니다.
Phase 5: 적용 및 보고
승인된 변경 사항을 CLAUDE.md에 반영합니다.
5.1 스킬 테이블 갱신
Edit를 사용하여 ## 주요 스킬 테이블 수정:
- NEW: 알파벳 순서를 유지하며 새 행 추가
- 형식:
| \/스킬명` | 설명 (60자 이내 요약) |`
- 형식:
- REMOVED: 해당 행 삭제
- CHANGED: 설명 컬럼을 디스크 값으로 업데이트 (60자 이내 요약)
5.2 에이전트 테이블 갱신
Edit를 사용하여 ## 에이전트 테이블 수정:
- NEW: 새 행 추가
- 형식:
| \에이전트명` | 모델 | 용도 (60자 이내 요약) |`
- 형식:
- REMOVED: 해당 행 삭제
- CHANGED: 해당 컬럼 업데이트
5.3 폴더 구조 갱신
Edit를 사용하여 ## 폴더 구조 코드 블록 수정:
- NEW: 적절한 위치에 항목 추가
03-skills/하위:│ ├── 디렉토리명/ → 설명04-agents/하위:│ ├── 파일명.md → 설명
- REMOVED: 해당 항목 삭제
- MISSING_DESC: 기존 항목에
→ 설명추가 - 형식 보존: 기존 트리 문자(
├──,└──,│) 및 들여쓰기 유지 - 마지막 항목에는
└──사용
5.4 비파괴적 갱신 원칙
다음 섹션은 절대 수정하지 않음:
## 프로젝트 개요## Claude Code 확장 리소스## 코드 추출 이력## 세션 관리## 관련 문서
5.5 최종 보고서
## kdyupdate 갱신 완료
### 갱신 통계
| 항목 | 수량 |
|------|------|
| 스킬 테이블 추가/수정/삭제 | +N / ~N / -N |
| 에이전트 테이블 추가/수정/삭제 | +N / ~N / -N |
| 폴더 구조 추가/설명추가/삭제 | +N / ~N / -N |
### 수동 확인 필요 항목
- [ ] INCOMPLETE 스킬: {디렉토리명} (SKILL.md 없음)
- [ ] 설명 60자 초과로 자동 요약된 항목: {스킬명}
주의사항
- 비파괴적 갱신: 스킬/에이전트/폴더 구조 3개 영역만 수정, 나머지 섹션 절대 미수정
- 설명 60자 요약: 테이블 설명은 디스크 description을 60자 이내로 요약
- 폴더 구조 형식 보존: 기존 트리 문자 및 들여쓰기 패턴 유지
- INCOMPLETE 스킬 미등록: SKILL.md가 없는 디렉토리는 테이블에 등록하지 않음 (폴더 구조에만 반영)
- 자기 등록: kdyupdate 자체도 등록 대상에 포함
- 멱등성: 같은 상태에서 여러 번 실행해도 동일한 결과
- 알파벳 순서: 스킬 테이블은 기존 순서를 유지하되, 새 항목은 알파벳순 적절한 위치에 삽입
사용 예시
# 전체 스캔 + 사용자 확인 후 갱신
/kdyupdate
# 스캔만 (변경 없이 차이 리포트)
/kdyupdate --scan-only
# 확인 없이 전체 자동 갱신
/kdyupdate --auto
# 스킬 관련만 갱신
/kdyupdate --skills-only
# 에이전트 관련만 갱신
/kdyupdate --agents-only
관련 스킬
| 스킬/에이전트 | 연동 시나리오 |
|---|---|
/inception | 의존성 맵 + CLAUDE.md 전체 갱신 (무거움). kdyupdate는 카탈로그만 경량 동기화 |
/kdygenesis | 프로젝트 생성 후 스킬/에이전트가 추가되면 kdyupdate로 빠른 등록 |
/manage-skills | verify-* 스킬 관리. kdyupdate는 스킬 카탈로그 관리 |
/kdyselfreflection | 새 스킬/에이전트 생성 후 카탈로그 동기화 |
/cs | 세션 종료 전 CLAUDE.md 동기화 추천 |
doc-updater | 문서 동기화 에이전트. kdyupdate는 CLAUDE.md 카탈로그에 특화 |