jun-claude-code 0.6.1 → 0.6.3
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/package.json +1 -1
- package/templates/global/CLAUDE.md +4 -2
- package/templates/global/agents/code-reviewer.md +169 -6
- package/templates/global/agents/plan-verifier.md +1 -1
- package/templates/global/agents/task-planner.md +1 -1
- package/templates/global/skills/Git/git.md +6 -4
- package/templates/global/skills/Planning/SKILL.md +329 -0
- package/templates/global/skills/PromptStructuring/SKILL.md +14 -4
- package/templates/global/skills/PromptStructuring/skills-frontmatter.md +64 -0
package/package.json
CHANGED
|
@@ -146,13 +146,15 @@ Plan 파일의 Context 섹션에 위 내용을 명시하여 작업 목적이 희
|
|
|
146
146
|
|
|
147
147
|
### Step 1.5.5: Plan 문서 생성 -- 필수
|
|
148
148
|
|
|
149
|
+
> **`Planning` Skill (`skills/Planning/SKILL.md`)의 템플릿을 따라 작성한다.**
|
|
150
|
+
|
|
149
151
|
계획이 확정되면 프로젝트의 `.claude/plan/` 폴더에 3가지 문서를 생성하세요:
|
|
150
152
|
|
|
151
|
-
- [ ] `.claude/plan/plan.md` -- 전체 계획 (목적, 설계,
|
|
153
|
+
- [ ] `.claude/plan/plan.md` -- 전체 계획 (목적, DB/API/FE 설계, 설계 결정과 차선책, TaskList 요약)
|
|
152
154
|
- [ ] `.claude/plan/context.md` -- 맥락 (사용자 요청 원문, 비즈니스/기술적 배경, 탐색한 코드, 결정 사항)
|
|
153
155
|
- [ ] `.claude/plan/checklist.md` -- 실행 체크리스트 (Phase별 체크리스트, Task별 세부 작업)
|
|
154
156
|
|
|
155
|
-
각 문서에는 frontmatter(name, description, created)를 포함하세요.
|
|
157
|
+
각 문서에는 frontmatter(name, description, created, status)를 포함하세요.
|
|
156
158
|
이 문서들은 구현 중 맥락 유실 방지와 진행 추적에 활용됩니다.
|
|
157
159
|
|
|
158
160
|
### Step 1.6: 사용자 Confirm -- 필수
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-reviewer
|
|
3
|
-
description: 코드
|
|
4
|
-
keywords: [코드리뷰, 체크리스트, lint, 규칙검증, 품질검사, Critical, Warning,
|
|
3
|
+
description: 코드 품질 검토 및 GitHub PR line-level comment 게시. CLAUDE.md/Skills 규칙 준수 확인, Critical/Warning 분류, lint 실행, PR 리뷰 코멘트 작성.
|
|
4
|
+
keywords: [코드리뷰, 체크리스트, lint, 규칙검증, 품질검사, Critical, Warning, 수정제안, PR리뷰, GitHub, comment, 라인코멘트]
|
|
5
5
|
model: opus
|
|
6
6
|
color: yellow
|
|
7
7
|
disallowedTools: [Edit, Write, NotebookEdit]
|
|
@@ -13,12 +13,13 @@ memory: project
|
|
|
13
13
|
|
|
14
14
|
<role>
|
|
15
15
|
|
|
16
|
-
작성된 코드가 프로젝트 규칙을 준수하는지
|
|
16
|
+
작성된 코드가 프로젝트 규칙을 준수하는지 검토하고, PR 리뷰 시 GitHub에 line-level comment를 게시하는 전문 Agent입니다.
|
|
17
17
|
|
|
18
18
|
1. **규칙 준수 확인**: CLAUDE.md, 프로젝트 체크리스트 기준 검토
|
|
19
19
|
2. **코드 품질 검사**: 가독성, 유지보수성, 일관성
|
|
20
20
|
3. **Lint 실행**: lint 실행 및 결과 확인
|
|
21
21
|
4. **개선 제안**: 발견된 문제에 대한 수정 방안 제시
|
|
22
|
+
5. **PR 리뷰 코멘트**: GitHub PR에 파일/라인별 review comment 게시
|
|
22
23
|
|
|
23
24
|
</role>
|
|
24
25
|
|
|
@@ -28,7 +29,16 @@ memory: project
|
|
|
28
29
|
|
|
29
30
|
## 검토 프로세스
|
|
30
31
|
|
|
31
|
-
### Step 1:
|
|
32
|
+
### Step 1: 리뷰 모드 판별
|
|
33
|
+
|
|
34
|
+
호출 시 전달받은 정보로 리뷰 모드를 결정합니다.
|
|
35
|
+
|
|
36
|
+
| 조건 | 모드 | 동작 |
|
|
37
|
+
|------|------|------|
|
|
38
|
+
| PR 번호가 주어짐 | **PR 리뷰 모드** | diff 분석 → 코드 검토 → GitHub PR에 line-level comment 게시 |
|
|
39
|
+
| PR 번호 없음 | **로컬 리뷰 모드** | 코드 검토 → 터미널에 결과 출력 |
|
|
40
|
+
|
|
41
|
+
### Step 2: 공통 체크리스트
|
|
32
42
|
|
|
33
43
|
| 항목 | 확인 |
|
|
34
44
|
|------|------|
|
|
@@ -39,11 +49,11 @@ memory: project
|
|
|
39
49
|
| 불필요한 코드 없음 | ☐ |
|
|
40
50
|
| 네이밍 컨벤션 준수 | ☐ |
|
|
41
51
|
|
|
42
|
-
### Step
|
|
52
|
+
### Step 3: 프로젝트별 체크리스트
|
|
43
53
|
|
|
44
54
|
프로젝트의 `.claude/skills/` 에 정의된 체크리스트 확인
|
|
45
55
|
|
|
46
|
-
### Step
|
|
56
|
+
### Step 4: Lint 실행
|
|
47
57
|
|
|
48
58
|
```bash
|
|
49
59
|
# 프로젝트에 맞는 lint 명령어 실행
|
|
@@ -52,6 +62,130 @@ npm run lint
|
|
|
52
62
|
yarn lint
|
|
53
63
|
```
|
|
54
64
|
|
|
65
|
+
### Step 5: PR 리뷰 코멘트 게시 (PR 리뷰 모드 전용)
|
|
66
|
+
|
|
67
|
+
PR 리뷰 모드에서는 발견된 이슈를 GitHub PR에 line-level review comment로 게시합니다.
|
|
68
|
+
|
|
69
|
+
#### 5-1. PR diff 수집
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# PR의 변경된 파일과 diff 확인
|
|
73
|
+
gh pr diff {PR_NUMBER}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
#### 5-2. 이슈별 comment 데이터 구성
|
|
77
|
+
|
|
78
|
+
각 이슈를 아래 형식으로 수집합니다:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"path": "src/example.ts",
|
|
83
|
+
"line": 42,
|
|
84
|
+
"body": "**[Critical]** 설명\n\n수정 방안: ..."
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
- `path`: 리포지토리 루트 기준 상대 경로
|
|
89
|
+
- `line`: diff에서 변경된 라인 번호 (새 파일 기준)
|
|
90
|
+
- `body`: Markdown 형식의 코멘트 본문
|
|
91
|
+
|
|
92
|
+
**여러 라인에 걸친 이슈**는 `start_line`과 `line`을 함께 사용합니다:
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"path": "src/example.ts",
|
|
97
|
+
"start_line": 10,
|
|
98
|
+
"line": 15,
|
|
99
|
+
"body": "**[Warning]** 설명"
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### 5-3. comment body 작성 규칙
|
|
104
|
+
|
|
105
|
+
심각도에 따라 접두사를 붙입니다:
|
|
106
|
+
|
|
107
|
+
| 심각도 | 접두사 | 예시 |
|
|
108
|
+
|--------|--------|------|
|
|
109
|
+
| Critical | `🔴 **[Critical]**` | `🔴 **[Critical]** any 타입 사용 — 구체적 타입으로 변경 필요` |
|
|
110
|
+
| Warning | `🟡 **[Warning]**` | `🟡 **[Warning]** 매직 넘버 사용 — 상수로 추출 권장` |
|
|
111
|
+
| Info | `🔵 **[Info]**` | `🔵 **[Info]** Optional chaining으로 간소화 가능` |
|
|
112
|
+
|
|
113
|
+
본문 구성:
|
|
114
|
+
|
|
115
|
+
```markdown
|
|
116
|
+
{접두사} 이슈 제목
|
|
117
|
+
|
|
118
|
+
**문제**: 구체적인 문제 설명
|
|
119
|
+
**수정 방안**:
|
|
120
|
+
\`\`\`typescript
|
|
121
|
+
// 수정 예시 코드
|
|
122
|
+
\`\`\`
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
#### 5-4. GitHub PR Review Comment 게시
|
|
126
|
+
|
|
127
|
+
수집한 comment들을 개별 review comment로 게시합니다.
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# owner/repo 확인
|
|
131
|
+
gh repo view --json nameWithOwner -q '.nameWithOwner'
|
|
132
|
+
|
|
133
|
+
# 최신 commit SHA 확인
|
|
134
|
+
gh pr view {PR_NUMBER} --json headRefOid -q '.headRefOid'
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**단일 라인 comment 게시:**
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
gh api repos/{owner}/{repo}/pulls/{PR_NUMBER}/comments \
|
|
141
|
+
--method POST \
|
|
142
|
+
-f path="src/example.ts" \
|
|
143
|
+
-F line=42 \
|
|
144
|
+
-f side="RIGHT" \
|
|
145
|
+
-f commit_id="{COMMIT_SHA}" \
|
|
146
|
+
-f body="코멘트 내용"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**여러 라인 comment 게시:**
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
gh api repos/{owner}/{repo}/pulls/{PR_NUMBER}/comments \
|
|
153
|
+
--method POST \
|
|
154
|
+
-f path="src/example.ts" \
|
|
155
|
+
-F start_line=10 \
|
|
156
|
+
-F line=15 \
|
|
157
|
+
-f start_side="RIGHT" \
|
|
158
|
+
-f side="RIGHT" \
|
|
159
|
+
-f commit_id="{COMMIT_SHA}" \
|
|
160
|
+
-f body="코멘트 내용"
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### 5-5. 전체 요약 comment 게시
|
|
164
|
+
|
|
165
|
+
모든 line comment 게시 후, PR에 전체 요약을 일반 comment로 남깁니다.
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
gh pr comment {PR_NUMBER} --body "$(cat <<'EOF'
|
|
169
|
+
# Code Review 결과 요약
|
|
170
|
+
|
|
171
|
+
- **검토 파일**: N개
|
|
172
|
+
- **발견 이슈**: Critical N개, Warning N개, Info N개
|
|
173
|
+
- **전체 평가**: 통과 / 수정 필요 / 재작업 필요
|
|
174
|
+
|
|
175
|
+
## diff 범위 밖 이슈
|
|
176
|
+
- `path/to/file.ts:100` - 설명 (해당되는 경우만)
|
|
177
|
+
|
|
178
|
+
## 다음 단계
|
|
179
|
+
- ...
|
|
180
|
+
EOF
|
|
181
|
+
)"
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
#### 5-6. 주의사항
|
|
185
|
+
|
|
186
|
+
- **diff에 포함된 라인만 comment 가능**: 변경되지 않은 라인에는 comment를 달 수 없음 → diff 범위 밖 이슈는 요약 comment에 포함
|
|
187
|
+
- **이슈가 없으면 요약 comment만 게시**: line comment 없이 "이슈 없음" 요약만 남김
|
|
188
|
+
|
|
55
189
|
</instructions>
|
|
56
190
|
|
|
57
191
|
---
|
|
@@ -70,6 +204,8 @@ yarn lint
|
|
|
70
204
|
|
|
71
205
|
<output_format>
|
|
72
206
|
|
|
207
|
+
## 로컬 리뷰 모드 출력
|
|
208
|
+
|
|
73
209
|
```markdown
|
|
74
210
|
# Code Review 결과
|
|
75
211
|
|
|
@@ -116,6 +252,32 @@ yarn lint
|
|
|
116
252
|
- 이슈 없음: 최종 검증 진행
|
|
117
253
|
```
|
|
118
254
|
|
|
255
|
+
## PR 리뷰 모드 출력
|
|
256
|
+
|
|
257
|
+
```markdown
|
|
258
|
+
# PR Review 완료
|
|
259
|
+
|
|
260
|
+
## 1. 요약
|
|
261
|
+
- **PR**: #{PR_NUMBER}
|
|
262
|
+
- **검토 파일**: N개
|
|
263
|
+
- **게시된 comment**: N개 (Critical N, Warning N, Info N)
|
|
264
|
+
|
|
265
|
+
## 2. 게시된 comment 목록
|
|
266
|
+
|
|
267
|
+
| 파일 | 라인 | 심각도 | 이슈 |
|
|
268
|
+
|------|------|--------|------|
|
|
269
|
+
| `src/example.ts` | L42 | Critical | 설명 |
|
|
270
|
+
| `src/util.ts` | L10-15 | Warning | 설명 |
|
|
271
|
+
|
|
272
|
+
## 3. diff 범위 밖 이슈 (요약 comment에 포함)
|
|
273
|
+
- `path/to/file.ts:100` - 설명
|
|
274
|
+
|
|
275
|
+
## 4. Lint 결과
|
|
276
|
+
```
|
|
277
|
+
[lint 출력]
|
|
278
|
+
```
|
|
279
|
+
```
|
|
280
|
+
|
|
119
281
|
</output_format>
|
|
120
282
|
|
|
121
283
|
---
|
|
@@ -125,5 +287,6 @@ yarn lint
|
|
|
125
287
|
- **실제 문제만 지적**: 코드에 실질적 영향이 있는 부분만 리뷰
|
|
126
288
|
- **대안 제시 필수**: 문제 지적 시 해결책도 함께 제시
|
|
127
289
|
- **컨텍스트 고려**: 프로젝트 상황에 맞게 유연하게 판단
|
|
290
|
+
- **diff 범위 준수**: PR comment는 diff에 포함된 라인에만 게시 (범위 밖 이슈는 요약 comment에 기재)
|
|
128
291
|
|
|
129
292
|
</constraints>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plan-verifier
|
|
3
3
|
description: Plan 수립 후 구현 전에 Plan 품질을 검증하는 Agent. 목적 정합성, 완전성, 논리적 일관성, 실현 가능성, 스코프 초과 여부를 코드베이스 탐색을 통해 능동적으로 검증.
|
|
4
|
-
skills: [Reporting]
|
|
4
|
+
skills: [Planning, Reporting]
|
|
5
5
|
keywords: [Plan검증, 목적정합성, 완전성, 논리적일관성, 실현가능성, 스코프검증, PlanReview]
|
|
6
6
|
model: opus
|
|
7
7
|
color: cyan
|
|
@@ -144,13 +144,15 @@ grep -r "import.*변경된함수명" --include="*.ts" --include="*.tsx"
|
|
|
144
144
|
|
|
145
145
|
## 🔄 주요 변경사항
|
|
146
146
|
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
> 파일별이 아닌 **기능/목적 단위**로 묶어서 설명합니다.
|
|
148
|
+
|
|
149
|
+
### [기능/변경 목적 1]
|
|
149
150
|
- 변경 내용 설명
|
|
151
|
+
- 관련 파일: `file1.ts`, `file2.ts`
|
|
150
152
|
|
|
151
|
-
### [
|
|
152
|
-
**파일:** `path/to/file.ts`
|
|
153
|
+
### [기능/변경 목적 2]
|
|
153
154
|
- 변경 내용 설명
|
|
155
|
+
- 관련 파일: `file3.ts`
|
|
154
156
|
|
|
155
157
|
## ⚠️ 사이드 이펙트
|
|
156
158
|
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Planning
|
|
3
|
+
description: 개발 계획 문서(plan.md, context.md, checklist.md) 작성 템플릿. DB/API/FE 설계와 의사결정 근거 포함.
|
|
4
|
+
keywords: [plan, 계획, DB설계, API구성, FE플로우, 의사결정, 차선책, planning, 마이그레이션]
|
|
5
|
+
user-invocable: true
|
|
6
|
+
context: fork
|
|
7
|
+
agent: task-planner
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 개발 계획 문서 작성 스킬
|
|
11
|
+
|
|
12
|
+
> `.claude/plan/` 폴더에 작성하는 3개 문서의 템플릿과 작성 규칙을 정의한다.
|
|
13
|
+
|
|
14
|
+
## Plan 문서 개요
|
|
15
|
+
|
|
16
|
+
| 문서 | 역할 | 핵심 내용 |
|
|
17
|
+
|------|------|----------|
|
|
18
|
+
| `plan.md` | 전체 설계 문서 | 목적, DB/API/FE 설계, 설계 결정, TaskList |
|
|
19
|
+
| `context.md` | 맥락 기록 | 사용자 요청 원문, 비즈니스/기술 배경, 탐색한 코드 |
|
|
20
|
+
| `checklist.md` | 실행 추적 | Phase별 체크리스트, Task별 세부 작업 |
|
|
21
|
+
|
|
22
|
+
### 문서 생명주기
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
draft → confirmed → in-progress → done
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
| 상태 | 의미 | 전환 시점 |
|
|
29
|
+
|------|------|----------|
|
|
30
|
+
| `draft` | 초안 작성 중 | 문서 생성 시 |
|
|
31
|
+
| `confirmed` | 사용자 승인 완료 | 사용자 Confirm 후 |
|
|
32
|
+
| `in-progress` | 구현 진행 중 | Phase 3 시작 시 |
|
|
33
|
+
| `done` | 작업 완료 | 모든 Task 완료 시 |
|
|
34
|
+
|
|
35
|
+
> Stop Hook에서 `plan.md`와 `checklist.md`를 참조하여 진행 상황을 추적한다.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
<instructions>
|
|
40
|
+
|
|
41
|
+
## plan.md 템플릿
|
|
42
|
+
|
|
43
|
+
> 전체 설계를 담는 핵심 문서. 목적, 설계 결정, TaskList를 한 곳에 정리한다.
|
|
44
|
+
|
|
45
|
+
### Frontmatter
|
|
46
|
+
|
|
47
|
+
```yaml
|
|
48
|
+
---
|
|
49
|
+
name: [작업명]-plan
|
|
50
|
+
description: [작업명] 개발 계획
|
|
51
|
+
created: YYYY-MM-DD
|
|
52
|
+
status: draft # draft | confirmed | in-progress | done
|
|
53
|
+
---
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 전체 구조
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
# [작업명] Plan
|
|
60
|
+
|
|
61
|
+
## 목적 (Why)
|
|
62
|
+
- 목적: [이 작업을 왜 하는가]
|
|
63
|
+
- 문제: [어떤 문제를 해결하는가]
|
|
64
|
+
- 방법: [어떻게 해결할 것인가]
|
|
65
|
+
|
|
66
|
+
## DB 수정 계획
|
|
67
|
+
### 테이블 변경
|
|
68
|
+
| 테이블 | 변경 유형 | 컬럼 | 타입 | 설명 |
|
|
69
|
+
|--------|----------|------|------|------|
|
|
70
|
+
| users | ADD | role | varchar(20) | 사용자 역할 |
|
|
71
|
+
|
|
72
|
+
### 마이그레이션 순서
|
|
73
|
+
1. [첫 번째 마이그레이션]
|
|
74
|
+
2. [두 번째 마이그레이션]
|
|
75
|
+
|
|
76
|
+
### 설계 결정
|
|
77
|
+
- **선택:** [채택한 방안]
|
|
78
|
+
- **이유:** [왜 이 방안을 선택했는지]
|
|
79
|
+
- **차선책:** [고려했지만 선택하지 않은 방안]
|
|
80
|
+
- **차선책 미채택 이유:** [왜 차선책을 선택하지 않았는지]
|
|
81
|
+
|
|
82
|
+
## API 구성
|
|
83
|
+
### 엔드포인트 목록
|
|
84
|
+
| Method | Path | 설명 | Request | Response |
|
|
85
|
+
|--------|------|------|---------|----------|
|
|
86
|
+
| POST | /api/users | 사용자 생성 | CreateUserDto | UserResponse |
|
|
87
|
+
|
|
88
|
+
### 각 API 상세
|
|
89
|
+
#### POST /api/users
|
|
90
|
+
- Request Body: ...
|
|
91
|
+
- Response: ...
|
|
92
|
+
- 에러 케이스: ...
|
|
93
|
+
|
|
94
|
+
### 설계 결정
|
|
95
|
+
- **선택:** [채택한 방안]
|
|
96
|
+
- **이유:** [왜 이 방안을 선택했는지]
|
|
97
|
+
- **차선책:** [고려했지만 선택하지 않은 방안]
|
|
98
|
+
- **차선책 미채택 이유:** [왜 차선책을 선택하지 않았는지]
|
|
99
|
+
|
|
100
|
+
## FE 페이지 Flow
|
|
101
|
+
### 화면 목록
|
|
102
|
+
| 페이지 | 경로 | 설명 |
|
|
103
|
+
|--------|------|------|
|
|
104
|
+
| 사용자 목록 | /users | 사용자 리스트 조회 |
|
|
105
|
+
|
|
106
|
+
### 페이지 흐름도
|
|
107
|
+
[목록] -> [상세] -> [수정]
|
|
108
|
+
↓
|
|
109
|
+
[삭제 확인 모달]
|
|
110
|
+
|
|
111
|
+
### 컴포넌트 구조
|
|
112
|
+
UserListPage
|
|
113
|
+
├── UserTable
|
|
114
|
+
│ └── UserRow
|
|
115
|
+
├── UserSearchBar
|
|
116
|
+
└── Pagination
|
|
117
|
+
|
|
118
|
+
### 설계 결정
|
|
119
|
+
- **선택:** [채택한 방안]
|
|
120
|
+
- **이유:** [왜 이 방안을 선택했는지]
|
|
121
|
+
- **차선책:** [고려했지만 선택하지 않은 방안]
|
|
122
|
+
- **차선책 미채택 이유:** [왜 차선책을 선택하지 않았는지]
|
|
123
|
+
|
|
124
|
+
## 설계 결정 요약
|
|
125
|
+
| 영역 | 결정 | 이유 | 차선책 |
|
|
126
|
+
|------|------|------|--------|
|
|
127
|
+
|
|
128
|
+
## TaskList 요약
|
|
129
|
+
| Task | 설명 | 의존성 |
|
|
130
|
+
|------|------|--------|
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
</instructions>
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
<instructions>
|
|
138
|
+
|
|
139
|
+
## context.md 템플릿
|
|
140
|
+
|
|
141
|
+
> 작업의 맥락을 기록하여 구현 중 목적 희석을 방지한다.
|
|
142
|
+
|
|
143
|
+
### Frontmatter
|
|
144
|
+
|
|
145
|
+
```yaml
|
|
146
|
+
---
|
|
147
|
+
name: [작업명]-context
|
|
148
|
+
description: [작업명] 작업 맥락
|
|
149
|
+
created: YYYY-MM-DD
|
|
150
|
+
---
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 전체 구조
|
|
154
|
+
|
|
155
|
+
```markdown
|
|
156
|
+
# [작업명] Context
|
|
157
|
+
|
|
158
|
+
## 사용자 요청 원문
|
|
159
|
+
> (원문 그대로 인용)
|
|
160
|
+
|
|
161
|
+
## 비즈니스 배경
|
|
162
|
+
- 왜 이 작업이 필요한가
|
|
163
|
+
- 비즈니스 제약 조건
|
|
164
|
+
|
|
165
|
+
## 기술적 배경
|
|
166
|
+
- 현재 아키텍처 상태
|
|
167
|
+
- 관련 기존 코드/모듈
|
|
168
|
+
|
|
169
|
+
## 탐색한 코드
|
|
170
|
+
| 파일 | 관련 내용 |
|
|
171
|
+
|------|----------|
|
|
172
|
+
|
|
173
|
+
## 결정 사항
|
|
174
|
+
| 결정 | 근거 | 일시 |
|
|
175
|
+
|------|------|------|
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
</instructions>
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
<instructions>
|
|
183
|
+
|
|
184
|
+
## checklist.md 템플릿
|
|
185
|
+
|
|
186
|
+
> Phase별 진행 상황을 추적하고, Task별 세부 작업을 관리한다.
|
|
187
|
+
|
|
188
|
+
### Frontmatter
|
|
189
|
+
|
|
190
|
+
```yaml
|
|
191
|
+
---
|
|
192
|
+
name: [작업명]-checklist
|
|
193
|
+
description: [작업명] 실행 체크리스트
|
|
194
|
+
created: YYYY-MM-DD
|
|
195
|
+
---
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### 전체 구조
|
|
199
|
+
|
|
200
|
+
```markdown
|
|
201
|
+
# [작업명] Checklist
|
|
202
|
+
|
|
203
|
+
## Phase 1: 계획
|
|
204
|
+
- [x] 목적 확인
|
|
205
|
+
- [x] Context 수집
|
|
206
|
+
- [x] Plan 문서 작성
|
|
207
|
+
|
|
208
|
+
## Phase 2: 검증
|
|
209
|
+
- [ ] Code Flow 분석
|
|
210
|
+
- [ ] UserFlow 분석
|
|
211
|
+
- [ ] Breaking Change 확인
|
|
212
|
+
|
|
213
|
+
## Phase 3: 구현
|
|
214
|
+
### Task 1: [제목]
|
|
215
|
+
- [ ] 세부 작업 1
|
|
216
|
+
- [ ] 세부 작업 2
|
|
217
|
+
- [ ] 커밋
|
|
218
|
+
|
|
219
|
+
### Task 2: [제목]
|
|
220
|
+
- [ ] 세부 작업 1
|
|
221
|
+
- [ ] 세부 작업 2
|
|
222
|
+
- [ ] 커밋
|
|
223
|
+
|
|
224
|
+
## Phase 4: 리뷰
|
|
225
|
+
- [ ] 전체 요구사항 충족 확인
|
|
226
|
+
- [ ] 엣지케이스 점검
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
</instructions>
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
<rules>
|
|
234
|
+
|
|
235
|
+
## 설계 결정(Decision) 작성 규칙
|
|
236
|
+
|
|
237
|
+
> 모든 설계 결정에는 "왜 이것을 선택했고, 왜 다른 것을 선택하지 않았는가"를 명시한다.
|
|
238
|
+
|
|
239
|
+
### 필수 항목
|
|
240
|
+
|
|
241
|
+
| 항목 | 설명 | 필수 |
|
|
242
|
+
|------|------|------|
|
|
243
|
+
| 선택 (What) | 무엇을 채택했는가 | 필수 |
|
|
244
|
+
| 이유 (Why) | 왜 이것을 선택했는가 | 필수 |
|
|
245
|
+
| 차선책 (Alternative) | 어떤 대안을 검토했는가 | 필수 |
|
|
246
|
+
| 차선책 미채택 이유 (Why Not) | 왜 차선책을 선택하지 않았는가 | 필수 |
|
|
247
|
+
| 트레이드오프 (Tradeoff) | 현재 선택의 단점은 무엇인가 | 선택 |
|
|
248
|
+
|
|
249
|
+
### 작성 형식
|
|
250
|
+
|
|
251
|
+
```markdown
|
|
252
|
+
- **선택:** JSON 컬럼 대신 별도 테이블로 분리
|
|
253
|
+
- **이유:** 검색/인덱싱 성능과 스키마 변경 유연성 확보
|
|
254
|
+
- **차선책:** JSON 컬럼으로 저장
|
|
255
|
+
- **차선책 미채택 이유:** 복잡한 쿼리 시 성능 저하, 타입 안정성 부족
|
|
256
|
+
- **트레이드오프:** JOIN 비용 증가 (캐싱으로 완화 가능)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### 적용 범위
|
|
260
|
+
|
|
261
|
+
> DB, API, FE 모든 영역의 설계 결정에 이 형식을 동일하게 적용한다.
|
|
262
|
+
|
|
263
|
+
| 영역 | 설계 결정 예시 |
|
|
264
|
+
|------|--------------|
|
|
265
|
+
| DB | 테이블 구조, 인덱스 전략, 정규화 수준 |
|
|
266
|
+
| API | 엔드포인트 설계, 인증 방식, 에러 처리 전략 |
|
|
267
|
+
| FE | 상태 관리 방식, 컴포넌트 구조, 라우팅 전략 |
|
|
268
|
+
|
|
269
|
+
</rules>
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
<rules>
|
|
274
|
+
|
|
275
|
+
## 선택적 섹션 규칙
|
|
276
|
+
|
|
277
|
+
> 모든 프로젝트에 DB/API/FE가 모두 존재하는 것은 아니다. 해당 영역이 있는 섹션만 선택하여 작성한다.
|
|
278
|
+
|
|
279
|
+
### 최소 필수 섹션
|
|
280
|
+
|
|
281
|
+
| 섹션 | 필수 여부 | 설명 |
|
|
282
|
+
|------|----------|------|
|
|
283
|
+
| 목적 (Why) | 필수 | 항상 포함 |
|
|
284
|
+
| 설계 결정 요약 | 필수 | 항상 포함 |
|
|
285
|
+
| TaskList 요약 | 필수 | 항상 포함 |
|
|
286
|
+
| DB 수정 계획 | 선택 | DB 변경이 있을 때만 |
|
|
287
|
+
| API 구성 | 선택 | API 변경이 있을 때만 |
|
|
288
|
+
| FE 페이지 Flow | 선택 | FE 변경이 있을 때만 |
|
|
289
|
+
|
|
290
|
+
### 영역별 선택 기준
|
|
291
|
+
|
|
292
|
+
```
|
|
293
|
+
DB 변경 있음 → DB 수정 계획 섹션 포함
|
|
294
|
+
API 변경 있음 → API 구성 섹션 포함
|
|
295
|
+
FE 변경 있음 → FE 페이지 Flow 섹션 포함
|
|
296
|
+
해당 없음 → 섹션 생략
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
</rules>
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
<checklist>
|
|
304
|
+
|
|
305
|
+
## Plan 문서 작성 시 검증
|
|
306
|
+
|
|
307
|
+
- [ ] plan.md에 목적(Why) 섹션이 있는가?
|
|
308
|
+
- [ ] 각 설계 결정에 이유와 차선책이 명시되어 있는가?
|
|
309
|
+
- [ ] context.md에 사용자 요청 원문이 인용되어 있는가?
|
|
310
|
+
- [ ] checklist.md에 Task별 세부 작업이 있는가?
|
|
311
|
+
- [ ] status 필드가 올바르게 설정되어 있는가?
|
|
312
|
+
- [ ] 선택적 섹션이 프로젝트에 맞게 포함/생략되어 있는가?
|
|
313
|
+
- [ ] 설계 결정에 트레이드오프가 기록되어 있는가? (선택 사항이지만 권장)
|
|
314
|
+
|
|
315
|
+
</checklist>
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
<reference>
|
|
320
|
+
|
|
321
|
+
## 관련 문서
|
|
322
|
+
|
|
323
|
+
| 문서 | 설명 |
|
|
324
|
+
|------|------|
|
|
325
|
+
| `CLAUDE.md` 워크플로우 | Plan 문서 생성 시점 (Step 1.5.5) |
|
|
326
|
+
| `.claude/skills/Documentation/SKILL.md` | 문서 작성 공통 규칙 |
|
|
327
|
+
| `.claude/skills/PromptStructuring/SKILL.md` | XML 태그 구조화 가이드 |
|
|
328
|
+
|
|
329
|
+
</reference>
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: PromptStructuring
|
|
3
|
-
description: "
|
|
4
|
-
keywords: [prompt, xml-tags, positive-phrasing, output-optimization, 프롬프트, 구조화, 긍정표현, XML,
|
|
3
|
+
description: ".claude/skills/ 또는 .claude/agents/ 하위 파일을 생성·수정할 때 반드시 이 Skill을 읽고 규칙을 적용한다. XML 태그 구조화, 긍정 표현, 출력 최적화, Skills 2.0 frontmatter(context:fork, agent, hooks, skills preload) 스펙 포함."
|
|
4
|
+
keywords: [prompt, xml-tags, positive-phrasing, output-optimization, 프롬프트, 구조화, 긍정표현, XML, 출력최적화, frontmatter, SKILL.md, agent.md, skills-2.0, hooks, context-fork, skills-preload]
|
|
5
5
|
user-invocable: false
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# 프롬프트 구조화 스킬
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
> Skill, Agent, Hook 파일 작성/수정 시 이 스킬의 규칙을 적용한다.
|
|
11
11
|
|
|
12
12
|
## 핵심 원칙
|
|
13
13
|
|
|
@@ -17,4 +17,14 @@ user-invocable: false
|
|
|
17
17
|
| 2. 긍정 표현 | "~금지" 대신 "~한다"로 행동 직접 유도 | `positive-phrasing.md` |
|
|
18
18
|
| 3. 흐름 기호 | 단계/변환/위임에 `->` 사용: 계획 -> 구현 -> 검증 | - |
|
|
19
19
|
| 4. 출력 최적화 | 반복 제거, 테이블 > 산문, Hook 출력 150줄 이내 | `output-optimization.md` |
|
|
20
|
-
| 5. Frontmatter | Skill/Agent YAML frontmatter
|
|
20
|
+
| 5. Skills 2.0 Frontmatter | Skill/Agent YAML frontmatter 필드, context:fork + agent 조합, hooks, skills preload | `skills-frontmatter.md` |
|
|
21
|
+
|
|
22
|
+
## 적용 시점
|
|
23
|
+
|
|
24
|
+
| 상황 | 참조할 문서 |
|
|
25
|
+
|------|-----------|
|
|
26
|
+
| Skill SKILL.md 새로 작성 | `skills-frontmatter.md` (frontmatter) + `xml-tags.md` (구조) |
|
|
27
|
+
| Agent .md 새로 작성 | `skills-frontmatter.md` (frontmatter) + `xml-tags.md` (구조) |
|
|
28
|
+
| Hook 스크립트 출력 작성 | `output-optimization.md` (줄 수 제한) |
|
|
29
|
+
| 기존 프롬프트 개선 | `positive-phrasing.md` + `xml-tags.md` |
|
|
30
|
+
| Skill ↔ Agent 연결 설계 | `skills-frontmatter.md` (양방향 연결 패턴) |
|
|
@@ -17,6 +17,7 @@ SKILL.md와 Agent .md 파일의 YAML frontmatter 필드 가이드.
|
|
|
17
17
|
|------|------|--------|------|
|
|
18
18
|
| `name` | string | 디렉토리명 | 스킬 이름. `/slash-command`가 됨. 소문자+하이픈, 최대 64자 |
|
|
19
19
|
| `description` | string | 첫 단락 | 용도 및 트리거 조건. Claude가 자동 호출 판단에 사용 |
|
|
20
|
+
| `keywords` | array | - | 검색/매칭용 키워드. 영문+한글 혼용 권장. 예: `[plan, 계획, DB설계]` |
|
|
20
21
|
| `argument-hint` | string | - | 자동완성 시 인자 힌트. 예: `[PR-number]` |
|
|
21
22
|
| `disable-model-invocation` | boolean | `false` | `true` -> Claude 자동 호출 차단. description이 컨텍스트에 로딩되지 않아 토큰 절약 |
|
|
22
23
|
| `user-invocable` | boolean | `true` | `false` -> `/` 메뉴에서 숨김. Claude만 자동 호출 가능 |
|
|
@@ -71,6 +72,7 @@ argument-hint: "[PR-number]"
|
|
|
71
72
|
|------|------|--------|------|
|
|
72
73
|
| `name` | string | **필수** | Agent 이름. 소문자+하이픈 |
|
|
73
74
|
| `description` | string | **필수** | 위임 판단 기준. 언제 이 Agent를 사용하는지 명시 |
|
|
75
|
+
| `keywords` | array | - | 검색/매칭용 키워드. 영문+한글 혼용 권장 |
|
|
74
76
|
| `disallowedTools` | array | - | 명시적 거부 도구 목록 |
|
|
75
77
|
| `model` | string | `inherit` | `sonnet`, `opus`, `haiku`, 모델 ID |
|
|
76
78
|
| `permissionMode` | string | `default` | 권한 모드 |
|
|
@@ -108,6 +110,68 @@ skills: [Git]
|
|
|
108
110
|
|
|
109
111
|
-> hook으로 "Skill을 먼저 읽으세요"라고 안내하는 간접 방식 대신, frontmatter로 자동 주입.
|
|
110
112
|
|
|
113
|
+
## Skill ↔ Agent 연결 패턴
|
|
114
|
+
|
|
115
|
+
> Skill(무엇을 할지) + Agent(어떻게/누가 할지) + Context 격리(어디서 할지)를 조합한다.
|
|
116
|
+
|
|
117
|
+
### 패턴 1: 참조 Skill (인라인 주입)
|
|
118
|
+
|
|
119
|
+
Agent가 Skill을 배경 지식으로 preload. 메인 컨텍스트에서 실행.
|
|
120
|
+
|
|
121
|
+
```yaml
|
|
122
|
+
# Agent frontmatter
|
|
123
|
+
skills: [Coding, Backend] # Agent 시작 시 Skill 전체 내용 주입
|
|
124
|
+
|
|
125
|
+
# Skill frontmatter
|
|
126
|
+
user-invocable: false # 직접 호출 불가, Agent에 의해서만 사용
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
적용 예: Coding, Backend, React, Reporting
|
|
130
|
+
|
|
131
|
+
### 패턴 2: 작업 Skill (격리 실행)
|
|
132
|
+
|
|
133
|
+
Skill 호출 시 fork된 Agent에서 독립 실행. 메인 컨텍스트와 격리.
|
|
134
|
+
|
|
135
|
+
```yaml
|
|
136
|
+
# Skill frontmatter
|
|
137
|
+
context: fork # 격리된 subagent에서 실행
|
|
138
|
+
agent: task-planner # 사용할 agent 타입 지정
|
|
139
|
+
user-invocable: true # /slash-command로 호출 가능
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
적용 예: Planning, pr-review, deploy
|
|
143
|
+
|
|
144
|
+
### 패턴 3: 양방향 연결
|
|
145
|
+
|
|
146
|
+
Skill과 Agent가 서로를 참조. 사용자 직접 호출과 Agent preload 모두 지원.
|
|
147
|
+
|
|
148
|
+
```yaml
|
|
149
|
+
# Planning Skill
|
|
150
|
+
context: fork
|
|
151
|
+
agent: task-planner # /planning → fork된 task-planner에서 실행
|
|
152
|
+
user-invocable: true
|
|
153
|
+
|
|
154
|
+
# task-planner Agent
|
|
155
|
+
skills: [Planning, Reporting] # Agent 시작 시 Planning Skill preload
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
사용자 /planning → fork(task-planner) → Planning 템플릿에 따라 plan 문서 생성
|
|
160
|
+
Main Agent → task-planner 호출 → Planning Skill 자동 preload → 동일 품질 보장
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### 패턴 선택 기준
|
|
164
|
+
|
|
165
|
+
| 기준 | 참조 Skill | 작업 Skill | 양방향 |
|
|
166
|
+
|------|:-:|:-:|:-:|
|
|
167
|
+
| 규칙/가이드 제공 | O | - | O |
|
|
168
|
+
| 독립 실행 필요 | - | O | O |
|
|
169
|
+
| 사용자 직접 호출 | - | O | O |
|
|
170
|
+
| Agent preload | O | - | O |
|
|
171
|
+
| 컨텍스트 격리 | - | O | O |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
111
175
|
## Hooks in Skills/Agents
|
|
112
176
|
|
|
113
177
|
Skill과 Agent의 frontmatter에 `hooks` 필드를 정의하면 해당 컴포넌트가 활성화된 동안에만 실행된다.
|