@kood/claude-code 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +54 -35
- package/package.json +1 -1
- package/templates/hono/docs/commands/docs-creator.md +239 -0
- package/templates/hono/docs/commands/docs-refactor.md +168 -0
- package/templates/hono/docs/commands/git-all.md +83 -0
- package/templates/hono/docs/commands/git-session.md +91 -0
- package/templates/hono/docs/commands/git.md +86 -0
- package/templates/hono/docs/commands/lint-fix.md +170 -0
- package/templates/hono/docs/commands/lint-init.md +300 -0
- package/templates/hono/docs/commands/ts-fix.md +176 -0
- package/templates/hono/docs/skills/command-creator/LICENSE.txt +202 -0
- package/templates/hono/docs/skills/command-creator/SKILL.md +245 -0
- package/templates/hono/docs/skills/command-creator/scripts/init_command.py +244 -0
- package/templates/hono/docs/skills/command-creator/scripts/package_command.py +125 -0
- package/templates/hono/docs/skills/command-creator/scripts/quick_validate.py +143 -0
- package/templates/hono/docs/skills/skill-creator/LICENSE.txt +202 -0
- package/templates/hono/docs/skills/skill-creator/SKILL.md +184 -0
- package/templates/hono/docs/skills/skill-creator/scripts/init_skill.py +303 -0
- package/templates/hono/docs/skills/skill-creator/scripts/package_skill.py +110 -0
- package/templates/hono/docs/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/templates/npx/docs/commands/docs-creator.md +239 -0
- package/templates/npx/docs/commands/docs-refactor.md +168 -0
- package/templates/npx/docs/commands/git-all.md +83 -0
- package/templates/npx/docs/commands/git-session.md +91 -0
- package/templates/npx/docs/commands/git.md +86 -0
- package/templates/npx/docs/commands/lint-fix.md +170 -0
- package/templates/npx/docs/commands/lint-init.md +300 -0
- package/templates/npx/docs/commands/ts-fix.md +176 -0
- package/templates/npx/docs/skills/command-creator/LICENSE.txt +202 -0
- package/templates/npx/docs/skills/command-creator/SKILL.md +245 -0
- package/templates/npx/docs/skills/command-creator/scripts/init_command.py +244 -0
- package/templates/npx/docs/skills/command-creator/scripts/package_command.py +125 -0
- package/templates/npx/docs/skills/command-creator/scripts/quick_validate.py +143 -0
- package/templates/npx/docs/skills/skill-creator/LICENSE.txt +202 -0
- package/templates/npx/docs/skills/skill-creator/SKILL.md +184 -0
- package/templates/npx/docs/skills/skill-creator/scripts/init_skill.py +303 -0
- package/templates/npx/docs/skills/skill-creator/scripts/package_skill.py +110 -0
- package/templates/npx/docs/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/templates/tanstack-start/docs/commands/docs-creator.md +239 -0
- package/templates/tanstack-start/docs/commands/docs-refactor.md +168 -0
- package/templates/tanstack-start/docs/commands/git-all.md +83 -0
- package/templates/tanstack-start/docs/commands/git-session.md +91 -0
- package/templates/tanstack-start/docs/commands/git.md +86 -0
- package/templates/tanstack-start/docs/commands/lint-fix.md +170 -0
- package/templates/tanstack-start/docs/commands/lint-init.md +300 -0
- package/templates/tanstack-start/docs/commands/ts-fix.md +176 -0
- package/templates/tanstack-start/docs/skills/command-creator/LICENSE.txt +202 -0
- package/templates/tanstack-start/docs/skills/command-creator/SKILL.md +245 -0
- package/templates/tanstack-start/docs/skills/command-creator/scripts/init_command.py +244 -0
- package/templates/tanstack-start/docs/skills/command-creator/scripts/package_command.py +125 -0
- package/templates/tanstack-start/docs/skills/command-creator/scripts/quick_validate.py +143 -0
- package/templates/tanstack-start/docs/skills/skill-creator/LICENSE.txt +202 -0
- package/templates/tanstack-start/docs/skills/skill-creator/SKILL.md +184 -0
- package/templates/tanstack-start/docs/skills/skill-creator/scripts/init_skill.py +303 -0
- package/templates/tanstack-start/docs/skills/skill-creator/scripts/package_skill.py +110 -0
- package/templates/tanstack-start/docs/skills/skill-creator/scripts/quick_validate.py +65 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Skill Packager - Creates a distributable zip file of a skill folder
|
|
4
|
+
|
|
5
|
+
Usage:
|
|
6
|
+
python utils/package_skill.py <path/to/skill-folder> [output-directory]
|
|
7
|
+
|
|
8
|
+
Example:
|
|
9
|
+
python utils/package_skill.py skills/public/my-skill
|
|
10
|
+
python utils/package_skill.py skills/public/my-skill ./dist
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import sys
|
|
14
|
+
import zipfile
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from quick_validate import validate_skill
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def package_skill(skill_path, output_dir=None):
|
|
20
|
+
"""
|
|
21
|
+
Package a skill folder into a zip file.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
skill_path: Path to the skill folder
|
|
25
|
+
output_dir: Optional output directory for the zip file (defaults to current directory)
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
Path to the created zip file, or None if error
|
|
29
|
+
"""
|
|
30
|
+
skill_path = Path(skill_path).resolve()
|
|
31
|
+
|
|
32
|
+
# Validate skill folder exists
|
|
33
|
+
if not skill_path.exists():
|
|
34
|
+
print(f"❌ Error: Skill folder not found: {skill_path}")
|
|
35
|
+
return None
|
|
36
|
+
|
|
37
|
+
if not skill_path.is_dir():
|
|
38
|
+
print(f"❌ Error: Path is not a directory: {skill_path}")
|
|
39
|
+
return None
|
|
40
|
+
|
|
41
|
+
# Validate SKILL.md exists
|
|
42
|
+
skill_md = skill_path / "SKILL.md"
|
|
43
|
+
if not skill_md.exists():
|
|
44
|
+
print(f"❌ Error: SKILL.md not found in {skill_path}")
|
|
45
|
+
return None
|
|
46
|
+
|
|
47
|
+
# Run validation before packaging
|
|
48
|
+
print("🔍 Validating skill...")
|
|
49
|
+
valid, message = validate_skill(skill_path)
|
|
50
|
+
if not valid:
|
|
51
|
+
print(f"❌ Validation failed: {message}")
|
|
52
|
+
print(" Please fix the validation errors before packaging.")
|
|
53
|
+
return None
|
|
54
|
+
print(f"✅ {message}\n")
|
|
55
|
+
|
|
56
|
+
# Determine output location
|
|
57
|
+
skill_name = skill_path.name
|
|
58
|
+
if output_dir:
|
|
59
|
+
output_path = Path(output_dir).resolve()
|
|
60
|
+
output_path.mkdir(parents=True, exist_ok=True)
|
|
61
|
+
else:
|
|
62
|
+
output_path = Path.cwd()
|
|
63
|
+
|
|
64
|
+
zip_filename = output_path / f"{skill_name}.zip"
|
|
65
|
+
|
|
66
|
+
# Create the zip file
|
|
67
|
+
try:
|
|
68
|
+
with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
|
|
69
|
+
# Walk through the skill directory
|
|
70
|
+
for file_path in skill_path.rglob('*'):
|
|
71
|
+
if file_path.is_file():
|
|
72
|
+
# Calculate the relative path within the zip
|
|
73
|
+
arcname = file_path.relative_to(skill_path.parent)
|
|
74
|
+
zipf.write(file_path, arcname)
|
|
75
|
+
print(f" Added: {arcname}")
|
|
76
|
+
|
|
77
|
+
print(f"\n✅ Successfully packaged skill to: {zip_filename}")
|
|
78
|
+
return zip_filename
|
|
79
|
+
|
|
80
|
+
except Exception as e:
|
|
81
|
+
print(f"❌ Error creating zip file: {e}")
|
|
82
|
+
return None
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def main():
|
|
86
|
+
if len(sys.argv) < 2:
|
|
87
|
+
print("Usage: python utils/package_skill.py <path/to/skill-folder> [output-directory]")
|
|
88
|
+
print("\nExample:")
|
|
89
|
+
print(" python utils/package_skill.py skills/public/my-skill")
|
|
90
|
+
print(" python utils/package_skill.py skills/public/my-skill ./dist")
|
|
91
|
+
sys.exit(1)
|
|
92
|
+
|
|
93
|
+
skill_path = sys.argv[1]
|
|
94
|
+
output_dir = sys.argv[2] if len(sys.argv) > 2 else None
|
|
95
|
+
|
|
96
|
+
print(f"📦 Packaging skill: {skill_path}")
|
|
97
|
+
if output_dir:
|
|
98
|
+
print(f" Output directory: {output_dir}")
|
|
99
|
+
print()
|
|
100
|
+
|
|
101
|
+
result = package_skill(skill_path, output_dir)
|
|
102
|
+
|
|
103
|
+
if result:
|
|
104
|
+
sys.exit(0)
|
|
105
|
+
else:
|
|
106
|
+
sys.exit(1)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
if __name__ == "__main__":
|
|
110
|
+
main()
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Quick validation script for skills - minimal version
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
import os
|
|
8
|
+
import re
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
def validate_skill(skill_path):
|
|
12
|
+
"""Basic validation of a skill"""
|
|
13
|
+
skill_path = Path(skill_path)
|
|
14
|
+
|
|
15
|
+
# Check SKILL.md exists
|
|
16
|
+
skill_md = skill_path / 'SKILL.md'
|
|
17
|
+
if not skill_md.exists():
|
|
18
|
+
return False, "SKILL.md not found"
|
|
19
|
+
|
|
20
|
+
# Read and validate frontmatter
|
|
21
|
+
content = skill_md.read_text()
|
|
22
|
+
if not content.startswith('---'):
|
|
23
|
+
return False, "No YAML frontmatter found"
|
|
24
|
+
|
|
25
|
+
# Extract frontmatter
|
|
26
|
+
match = re.match(r'^---\n(.*?)\n---', content, re.DOTALL)
|
|
27
|
+
if not match:
|
|
28
|
+
return False, "Invalid frontmatter format"
|
|
29
|
+
|
|
30
|
+
frontmatter = match.group(1)
|
|
31
|
+
|
|
32
|
+
# Check required fields
|
|
33
|
+
if 'name:' not in frontmatter:
|
|
34
|
+
return False, "Missing 'name' in frontmatter"
|
|
35
|
+
if 'description:' not in frontmatter:
|
|
36
|
+
return False, "Missing 'description' in frontmatter"
|
|
37
|
+
|
|
38
|
+
# Extract name for validation
|
|
39
|
+
name_match = re.search(r'name:\s*(.+)', frontmatter)
|
|
40
|
+
if name_match:
|
|
41
|
+
name = name_match.group(1).strip()
|
|
42
|
+
# Check naming convention (hyphen-case: lowercase with hyphens)
|
|
43
|
+
if not re.match(r'^[a-z0-9-]+$', name):
|
|
44
|
+
return False, f"Name '{name}' should be hyphen-case (lowercase letters, digits, and hyphens only)"
|
|
45
|
+
if name.startswith('-') or name.endswith('-') or '--' in name:
|
|
46
|
+
return False, f"Name '{name}' cannot start/end with hyphen or contain consecutive hyphens"
|
|
47
|
+
|
|
48
|
+
# Extract and validate description
|
|
49
|
+
desc_match = re.search(r'description:\s*(.+)', frontmatter)
|
|
50
|
+
if desc_match:
|
|
51
|
+
description = desc_match.group(1).strip()
|
|
52
|
+
# Check for angle brackets
|
|
53
|
+
if '<' in description or '>' in description:
|
|
54
|
+
return False, "Description cannot contain angle brackets (< or >)"
|
|
55
|
+
|
|
56
|
+
return True, "Skill is valid!"
|
|
57
|
+
|
|
58
|
+
if __name__ == "__main__":
|
|
59
|
+
if len(sys.argv) != 2:
|
|
60
|
+
print("Usage: python quick_validate.py <skill_directory>")
|
|
61
|
+
sys.exit(1)
|
|
62
|
+
|
|
63
|
+
valid, message = validate_skill(sys.argv[1])
|
|
64
|
+
print(message)
|
|
65
|
+
sys.exit(0 if valid else 1)
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Claude Code 문서 작성 가이드. CLAUDE.md, SKILL.md 등 효과적인 문서 작성 시 사용.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Docs Creator
|
|
6
|
+
|
|
7
|
+
Claude Code 문서 작성 베스트 프랙티스 가이드.
|
|
8
|
+
|
|
9
|
+
## 핵심 원칙
|
|
10
|
+
|
|
11
|
+
| 원칙 | 설명 |
|
|
12
|
+
|------|------|
|
|
13
|
+
| **간결함** | 컨텍스트 윈도우는 공공재. 모든 토큰이 비용 |
|
|
14
|
+
| **점진적 공개** | 핵심만 메인 파일에, 상세는 참조 파일로 분리 |
|
|
15
|
+
| **보편적 적용** | 모든 세션에 필요한 정보만 포함 |
|
|
16
|
+
|
|
17
|
+
## 문서 유형별 가이드
|
|
18
|
+
|
|
19
|
+
| 문서 | 권장 길이 | 용도 |
|
|
20
|
+
|------|----------|------|
|
|
21
|
+
| CLAUDE.md | 60-200줄 | 프로젝트 전역 설정, 컨벤션 |
|
|
22
|
+
| SKILL.md | 500줄 이하 | 특화 워크플로우, 도구 사용법 |
|
|
23
|
+
| references/ | 무제한 | 상세 API 문서, 스키마 등 |
|
|
24
|
+
|
|
25
|
+
**지침 개수 한계**: 150-200개 (Claude Code 자체 ~50개 사용)
|
|
26
|
+
|
|
27
|
+
## 구조 템플릿
|
|
28
|
+
|
|
29
|
+
### CLAUDE.md
|
|
30
|
+
|
|
31
|
+
```markdown
|
|
32
|
+
# 프로젝트명
|
|
33
|
+
|
|
34
|
+
## 개요
|
|
35
|
+
프로젝트 목적 (1-2문장)
|
|
36
|
+
|
|
37
|
+
## 기술 스택
|
|
38
|
+
- 프레임워크: X
|
|
39
|
+
- 언어: Y
|
|
40
|
+
- DB: Z
|
|
41
|
+
|
|
42
|
+
## 명령어
|
|
43
|
+
| 명령 | 설명 |
|
|
44
|
+
|------|------|
|
|
45
|
+
| `yarn dev` | 개발 서버 |
|
|
46
|
+
| `yarn test` | 테스트 실행 |
|
|
47
|
+
|
|
48
|
+
## 컨벤션
|
|
49
|
+
- 파일명: kebab-case
|
|
50
|
+
- 함수: const 화살표 함수
|
|
51
|
+
- 타입: interface (객체), type (유니온)
|
|
52
|
+
|
|
53
|
+
## 워크플로우
|
|
54
|
+
기능 추가 → 테스트 → 린트 → 커밋
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### SKILL.md
|
|
58
|
+
|
|
59
|
+
```markdown
|
|
60
|
+
---
|
|
61
|
+
name: skill-name
|
|
62
|
+
description: 무엇을 하는지 + 언제 사용하는지. (scope)
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
# Skill Name
|
|
66
|
+
|
|
67
|
+
스킬 목적 (2-3문장)
|
|
68
|
+
|
|
69
|
+
## 사용 시점
|
|
70
|
+
- 조건 1
|
|
71
|
+
- 조건 2
|
|
72
|
+
|
|
73
|
+
## 사용 방법
|
|
74
|
+
|
|
75
|
+
### 기본 워크플로우
|
|
76
|
+
1. 단계 1
|
|
77
|
+
2. 단계 2
|
|
78
|
+
|
|
79
|
+
### 참조
|
|
80
|
+
- 상세 API: [references/api.md](references/api.md)
|
|
81
|
+
- 스키마: [references/schema.md](references/schema.md)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Progressive Disclosure
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
project/
|
|
88
|
+
├── CLAUDE.md # 핵심만 (60-200줄)
|
|
89
|
+
├── docs/
|
|
90
|
+
│ ├── api.md # API 상세
|
|
91
|
+
│ └── architecture.md # 아키텍처
|
|
92
|
+
└── .claude/skills/
|
|
93
|
+
└── my-skill/
|
|
94
|
+
├── SKILL.md # 개요 (<500줄)
|
|
95
|
+
└── references/ # 상세 정보
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**토큰 로드 단계:**
|
|
99
|
+
|
|
100
|
+
| 단계 | 내용 | 크기 |
|
|
101
|
+
|------|------|------|
|
|
102
|
+
| 1. 메타데이터 | name + description | 30-50 토큰 |
|
|
103
|
+
| 2. 활성화 | SKILL.md 본문 | <5k 단어 |
|
|
104
|
+
| 3. 참조 | 번들 리소스 | 필요 시만 |
|
|
105
|
+
|
|
106
|
+
## 작성 규칙
|
|
107
|
+
|
|
108
|
+
### DO
|
|
109
|
+
|
|
110
|
+
- 불릿 포인트 + 짧은 문장
|
|
111
|
+
- 코드 예시 중심
|
|
112
|
+
- 표로 정보 구조화
|
|
113
|
+
- 강조: `IMPORTANT:`, `YOU MUST:`
|
|
114
|
+
- 1단계 깊이 참조 (A→B ✅, A→B→C ❌)
|
|
115
|
+
|
|
116
|
+
### DON'T
|
|
117
|
+
|
|
118
|
+
- 긴 서술형 문단
|
|
119
|
+
- Claude가 아는 것 설명
|
|
120
|
+
- 린터 역할 강요 (도구 사용)
|
|
121
|
+
- 시간 의존적 정보
|
|
122
|
+
- /init 자동 생성 의존
|
|
123
|
+
|
|
124
|
+
## Description 작성
|
|
125
|
+
|
|
126
|
+
SKILL.md의 description은 스킬 발견에 핵심.
|
|
127
|
+
|
|
128
|
+
```yaml
|
|
129
|
+
# Good - 구체적 + 트리거 포함
|
|
130
|
+
description: PDF에서 텍스트/표 추출, 폼 작성. PDF 작업 시 사용.
|
|
131
|
+
|
|
132
|
+
# Bad - 모호함
|
|
133
|
+
description: 문서 처리
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**규칙:**
|
|
137
|
+
- 3인칭 작성 (시스템 프롬프트에 주입됨)
|
|
138
|
+
- 무엇을 하는지 + 언제 사용하는지
|
|
139
|
+
- 구체적 키워드 포함
|
|
140
|
+
|
|
141
|
+
## Context 관리
|
|
142
|
+
|
|
143
|
+
| 명령어 | 용도 | 시점 |
|
|
144
|
+
|--------|------|------|
|
|
145
|
+
| `/compact` | 컨텍스트 요약 | 70% 도달 |
|
|
146
|
+
| `/clear` | 세션 초기화 | 새 기능 시작 |
|
|
147
|
+
| `/resume` | 세션 복원 | 작업 재개 |
|
|
148
|
+
|
|
149
|
+
**주의:** 마지막 20%는 복잡한 작업 피할 것
|
|
150
|
+
|
|
151
|
+
## Subagent 활용
|
|
152
|
+
|
|
153
|
+
문서 작성 시 subagent를 적극 활용하여 메인 컨텍스트 보호.
|
|
154
|
+
|
|
155
|
+
### Subagent 종류
|
|
156
|
+
|
|
157
|
+
| 타입 | 용도 | 문서 작성 활용 |
|
|
158
|
+
|------|------|---------------|
|
|
159
|
+
| `Explore` | 코드베이스 탐색 | 프로젝트 구조 파악, 패턴 분석 |
|
|
160
|
+
| `Plan` | 구현 계획 수립 | 문서 구조 설계, 섹션 계획 |
|
|
161
|
+
| `general-purpose` | 범용 조사 | 베스트 프랙티스 조사, 예시 수집 |
|
|
162
|
+
|
|
163
|
+
### 활용 시점
|
|
164
|
+
|
|
165
|
+
**CLAUDE.md 작성 시:**
|
|
166
|
+
```
|
|
167
|
+
1. Explore agent → 프로젝트 구조/기술 스택 파악
|
|
168
|
+
2. Explore agent → 기존 컨벤션/패턴 분석
|
|
169
|
+
3. 메인 에이전트 → 요약 기반 문서 작성
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**SKILL.md 작성 시:**
|
|
173
|
+
```
|
|
174
|
+
1. Explore agent → 관련 코드/워크플로우 분석
|
|
175
|
+
2. Plan agent → 스킬 구조 설계
|
|
176
|
+
3. 메인 에이전트 → 설계 기반 작성
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### 효과
|
|
180
|
+
|
|
181
|
+
| 방식 | 컨텍스트 사용 |
|
|
182
|
+
|------|--------------|
|
|
183
|
+
| 직접 탐색 | 전체 파일 내용 로드 |
|
|
184
|
+
| Subagent | 요약만 반환 → 90%+ 절약 |
|
|
185
|
+
|
|
186
|
+
### 프롬프트 예시
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
Explore agent에게:
|
|
190
|
+
"프로젝트 구조와 기술 스택을 분석하고,
|
|
191
|
+
CLAUDE.md에 포함할 핵심 정보만 요약해줘.
|
|
192
|
+
- 디렉토리 구조
|
|
193
|
+
- 주요 의존성
|
|
194
|
+
- 빌드/테스트 명령어
|
|
195
|
+
- 코드 컨벤션"
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
Plan agent에게:
|
|
200
|
+
"이 스킬의 SKILL.md 구조를 설계해줘.
|
|
201
|
+
- 스킬 목적
|
|
202
|
+
- 주요 섹션
|
|
203
|
+
- 참조 파일 분리 계획
|
|
204
|
+
- 워크플로우 단계"
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## 체크리스트
|
|
208
|
+
|
|
209
|
+
### CLAUDE.md
|
|
210
|
+
|
|
211
|
+
- [ ] 60-200줄 이내
|
|
212
|
+
- [ ] 기술 스택 명시
|
|
213
|
+
- [ ] 주요 명령어 포함
|
|
214
|
+
- [ ] 컨벤션 정리
|
|
215
|
+
- [ ] 민감 정보 제외
|
|
216
|
+
|
|
217
|
+
### SKILL.md
|
|
218
|
+
|
|
219
|
+
- [ ] 500줄 이하
|
|
220
|
+
- [ ] description 구체적 (무엇 + 언제)
|
|
221
|
+
- [ ] 3인칭 작성
|
|
222
|
+
- [ ] 참조 1단계 깊이
|
|
223
|
+
- [ ] 100줄+ 파일은 목차 포함
|
|
224
|
+
- [ ] 워크플로우에 체크리스트
|
|
225
|
+
|
|
226
|
+
### 공통
|
|
227
|
+
|
|
228
|
+
- [ ] 간결한 작성
|
|
229
|
+
- [ ] 코드 예시 포함
|
|
230
|
+
- [ ] 표로 구조화
|
|
231
|
+
- [ ] 시간 의존 정보 없음
|
|
232
|
+
- [ ] Subagent로 사전 조사 완료
|
|
233
|
+
- [ ] 테스트 완료
|
|
234
|
+
|
|
235
|
+
## 참조
|
|
236
|
+
|
|
237
|
+
- [Claude Code Best Practices](https://www.anthropic.com/engineering/claude-code-best-practices)
|
|
238
|
+
- [Using CLAUDE.MD files](https://claude.com/blog/using-claude-md-files)
|
|
239
|
+
- [Skill Best Practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices)
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Claude Code 문서 리팩토링 가이드. 기존 CLAUDE.md, SKILL.md 개선 시 사용.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Docs Refactor
|
|
6
|
+
|
|
7
|
+
기존 Claude Code 문서를 베스트 프랙티스에 맞게 개선하는 가이드.
|
|
8
|
+
|
|
9
|
+
## 리팩토링 필요 신호
|
|
10
|
+
|
|
11
|
+
| 신호 | 문제 | 우선순위 |
|
|
12
|
+
|------|------|---------|
|
|
13
|
+
| 200줄+ CLAUDE.md | 컨텍스트 과부하 | 높음 |
|
|
14
|
+
| 500줄+ SKILL.md | 로딩 지연, 품질 저하 | 높음 |
|
|
15
|
+
| Claude가 지침 무시 | 과도한 지침 (150+개) | 높음 |
|
|
16
|
+
| 중첩 참조 (A→B→C) | 불완전한 파일 읽기 | 중간 |
|
|
17
|
+
| 코드 스타일 지침 | 린터 역할 강요 | 중간 |
|
|
18
|
+
| 시간 의존 정보 | 오래된 지침 | 낮음 |
|
|
19
|
+
|
|
20
|
+
## 분석 워크플로우
|
|
21
|
+
|
|
22
|
+
### 1단계: Subagent로 현황 분석
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Explore agent에게:
|
|
26
|
+
"현재 CLAUDE.md/SKILL.md를 분석하고 보고해줘:
|
|
27
|
+
- 총 줄 수
|
|
28
|
+
- 섹션별 줄 수
|
|
29
|
+
- 지침 개수 (명령형 문장)
|
|
30
|
+
- 중첩 참조 깊이
|
|
31
|
+
- 린터 역할 지침 여부
|
|
32
|
+
- 시간 의존 정보 여부"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 2단계: 개선 계획 수립
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
Plan agent에게:
|
|
39
|
+
"분석 결과를 바탕으로 리팩토링 계획 수립:
|
|
40
|
+
- 삭제할 내용
|
|
41
|
+
- 분리할 내용 (references/)
|
|
42
|
+
- 병합할 섹션
|
|
43
|
+
- 추가할 내용"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 3단계: 리팩토링 실행
|
|
47
|
+
|
|
48
|
+
메인 에이전트가 계획 기반으로 문서 수정.
|
|
49
|
+
|
|
50
|
+
## 안티패턴 → 개선 패턴
|
|
51
|
+
|
|
52
|
+
### 길이 문제
|
|
53
|
+
|
|
54
|
+
| Before | After |
|
|
55
|
+
|--------|-------|
|
|
56
|
+
| 300줄 CLAUDE.md | 60-200줄 + docs/ 분리 |
|
|
57
|
+
| 800줄 SKILL.md | 500줄 이하 + references/ 분리 |
|
|
58
|
+
|
|
59
|
+
**분리 기준:**
|
|
60
|
+
- 모든 세션에 필요 → 메인 파일
|
|
61
|
+
- 특정 작업에만 필요 → 참조 파일
|
|
62
|
+
|
|
63
|
+
### 구조 문제
|
|
64
|
+
|
|
65
|
+
| Before | After |
|
|
66
|
+
|--------|-------|
|
|
67
|
+
| 긴 서술형 문단 | 불릿 포인트 + 짧은 문장 |
|
|
68
|
+
| 중첩 참조 (A→B→C) | 1단계 깊이 (A→B) |
|
|
69
|
+
| 목차 없는 100줄+ 파일 | 상단에 목차 추가 |
|
|
70
|
+
|
|
71
|
+
### 내용 문제
|
|
72
|
+
|
|
73
|
+
| Before | After |
|
|
74
|
+
|--------|-------|
|
|
75
|
+
| 코드 스타일 가이드 | 삭제 (Biome/ESLint 사용) |
|
|
76
|
+
| Claude가 아는 설명 | 삭제 |
|
|
77
|
+
| 시간 의존 정보 | "old patterns" 섹션으로 이동 |
|
|
78
|
+
| 너무 많은 옵션 | 기본값 + 대안 1개 |
|
|
79
|
+
|
|
80
|
+
**삭제 예시:**
|
|
81
|
+
```markdown
|
|
82
|
+
# Before - 불필요한 설명
|
|
83
|
+
PDF (Portable Document Format)는 Adobe에서 개발한
|
|
84
|
+
문서 형식으로, 텍스트와 이미지를 포함할 수 있습니다...
|
|
85
|
+
|
|
86
|
+
# After - 핵심만
|
|
87
|
+
PDF 텍스트 추출: `pdfplumber.open("file.pdf")`
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Description 문제
|
|
91
|
+
|
|
92
|
+
| Before | After |
|
|
93
|
+
|--------|-------|
|
|
94
|
+
| `description: 문서 처리` | `description: PDF 텍스트/표 추출. PDF 작업 시 사용.` |
|
|
95
|
+
| 1인칭/2인칭 | 3인칭 작성 |
|
|
96
|
+
| 트리거 없음 | 구체적 트리거 포함 |
|
|
97
|
+
|
|
98
|
+
## 분리 전략
|
|
99
|
+
|
|
100
|
+
### 참조 파일로 분리할 내용
|
|
101
|
+
|
|
102
|
+
| 내용 | 분리 위치 |
|
|
103
|
+
|------|----------|
|
|
104
|
+
| API 상세 문서 | `references/api.md` |
|
|
105
|
+
| 스키마 정의 | `references/schema.md` |
|
|
106
|
+
| 예시 모음 | `references/examples.md` |
|
|
107
|
+
| 도메인별 가이드 | `references/{domain}.md` |
|
|
108
|
+
|
|
109
|
+
### 분리 후 메인 파일 참조
|
|
110
|
+
|
|
111
|
+
```markdown
|
|
112
|
+
## API 사용
|
|
113
|
+
|
|
114
|
+
기본 호출: `api.call(params)`
|
|
115
|
+
|
|
116
|
+
**상세 API 문서**: [references/api.md](references/api.md)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Subagent 활용
|
|
120
|
+
|
|
121
|
+
| 단계 | Agent | 작업 |
|
|
122
|
+
|------|-------|------|
|
|
123
|
+
| 분석 | Explore | 현황 파악, 문제점 식별 |
|
|
124
|
+
| 계획 | Plan | 리팩토링 전략 수립 |
|
|
125
|
+
| 검증 | Explore | 개선 결과 확인 |
|
|
126
|
+
|
|
127
|
+
### 검증 프롬프트
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
Explore agent에게:
|
|
131
|
+
"리팩토링된 문서 검증:
|
|
132
|
+
- 줄 수 목표 달성?
|
|
133
|
+
- 지침 개수 150개 이하?
|
|
134
|
+
- 중첩 참조 1단계?
|
|
135
|
+
- 필수 정보 누락 없음?"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## 체크리스트
|
|
139
|
+
|
|
140
|
+
### 분석 단계
|
|
141
|
+
|
|
142
|
+
- [ ] Subagent로 현황 분석 완료
|
|
143
|
+
- [ ] 문제점 목록 작성
|
|
144
|
+
- [ ] 개선 우선순위 결정
|
|
145
|
+
|
|
146
|
+
### 리팩토링 단계
|
|
147
|
+
|
|
148
|
+
- [ ] 불필요한 설명 삭제
|
|
149
|
+
- [ ] 코드 스타일 지침 삭제
|
|
150
|
+
- [ ] 긴 내용 참조 파일로 분리
|
|
151
|
+
- [ ] 중첩 참조 1단계로 평탄화
|
|
152
|
+
- [ ] 100줄+ 파일에 목차 추가
|
|
153
|
+
- [ ] Description 개선 (3인칭, 트리거)
|
|
154
|
+
|
|
155
|
+
### 검증 단계
|
|
156
|
+
|
|
157
|
+
- [ ] CLAUDE.md 60-200줄
|
|
158
|
+
- [ ] SKILL.md 500줄 이하
|
|
159
|
+
- [ ] 지침 개수 150개 이하
|
|
160
|
+
- [ ] 참조 1단계 깊이
|
|
161
|
+
- [ ] 필수 정보 유지 확인
|
|
162
|
+
- [ ] 테스트 완료
|
|
163
|
+
|
|
164
|
+
## 참조
|
|
165
|
+
|
|
166
|
+
- [Claude Code Best Practices](https://www.anthropic.com/engineering/claude-code-best-practices)
|
|
167
|
+
- [Using CLAUDE.MD files](https://claude.com/blog/using-claude-md-files)
|
|
168
|
+
- [Skill Best Practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 모든 변경사항 커밋 후 푸시
|
|
3
|
+
allowed-tools: Bash(git:*)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
모든 변경사항을 논리적 단위로 분리하여 전부 커밋 후 푸시.
|
|
7
|
+
|
|
8
|
+
## 실행 흐름
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
1. git status + git diff (병렬 실행)
|
|
12
|
+
2. 논리적 단위로 분리하여 git add + git commit (반복)
|
|
13
|
+
3. git status (완료 확인 - 남은 변경 없어야 함)
|
|
14
|
+
4. git push
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 병렬 실행
|
|
18
|
+
|
|
19
|
+
**초기 분석 단계에서 병렬 실행 필수:**
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# 동시에 실행 (두 Bash 호출을 하나의 응답에서)
|
|
23
|
+
git status
|
|
24
|
+
git diff
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## CRITICAL: 절대 금지
|
|
28
|
+
|
|
29
|
+
| 금지 항목 |
|
|
30
|
+
|----------|
|
|
31
|
+
| "Generated with Claude Code" 포함 |
|
|
32
|
+
| "🤖" 또는 AI 관련 이모지 |
|
|
33
|
+
| "Co-Authored-By:" 헤더 |
|
|
34
|
+
| AI/봇 작성 표시 일체 |
|
|
35
|
+
| 여러 줄 커밋 메시지 |
|
|
36
|
+
| 커밋 메시지에 마침표(.) |
|
|
37
|
+
| 여러 작업 하나로 퉁치기 |
|
|
38
|
+
| 변경사항 남겨두기 |
|
|
39
|
+
|
|
40
|
+
## 커밋 규칙
|
|
41
|
+
|
|
42
|
+
**형식**: `<prefix>: <설명>` (한 줄, 본문/푸터 없음)
|
|
43
|
+
|
|
44
|
+
**핵심 원칙**: 하나의 커밋 = 하나의 논리적 변경
|
|
45
|
+
|
|
46
|
+
### Prefix
|
|
47
|
+
|
|
48
|
+
| Prefix | 용도 |
|
|
49
|
+
|--------|------|
|
|
50
|
+
| feat | 새 기능 |
|
|
51
|
+
| fix | 버그 수정 |
|
|
52
|
+
| refactor | 리팩토링 |
|
|
53
|
+
| style | 코드 스타일 |
|
|
54
|
+
| docs | 문서 수정 |
|
|
55
|
+
| test | 테스트 |
|
|
56
|
+
| chore | 빌드/설정 |
|
|
57
|
+
| perf | 성능 개선 |
|
|
58
|
+
| ci | CI/CD |
|
|
59
|
+
|
|
60
|
+
### 분리 기준
|
|
61
|
+
|
|
62
|
+
| 분리 필요 | 묶어도 됨 |
|
|
63
|
+
|----------|----------|
|
|
64
|
+
| 서로 다른 기능 | 동일 기능의 관련 파일들 |
|
|
65
|
+
| 버그 수정 + 새 기능 | 동일 기능의 타입 + 구현 |
|
|
66
|
+
| 코드 변경 + 문서 변경 | |
|
|
67
|
+
| 리팩토링 + 기능 추가 | |
|
|
68
|
+
|
|
69
|
+
## 예시
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# ✅ 올바른
|
|
73
|
+
feat: 사용자 로그인 기능 추가
|
|
74
|
+
fix: 세션 만료 오류 수정
|
|
75
|
+
refactor: 서비스 클래스 구조 개선
|
|
76
|
+
|
|
77
|
+
# ❌ 잘못된
|
|
78
|
+
사용자 인증 기능 추가함 # prefix 없음
|
|
79
|
+
feat: 사용자 인증 추가. # 마침표
|
|
80
|
+
FEAT: 사용자 인증 추가 # 대문자
|
|
81
|
+
feat(auth): 인증 추가 # scope 불필요
|
|
82
|
+
feat: 로그인, 회원가입, 프로필 # 여러 작업 퉁침
|
|
83
|
+
```
|