jun-claude-code 0.0.11 → 0.0.13
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/README.md +122 -83
- package/dist/cli.js +40 -0
- package/dist/copy.js +92 -11
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/init-context.d.ts +4 -0
- package/dist/init-context.js +143 -0
- package/dist/init-project.js +4 -4
- package/dist/validate.d.ts +4 -0
- package/dist/validate.js +105 -0
- package/package.json +2 -2
- package/{.claude → templates/global}/CLAUDE.md +50 -21
- package/{.claude → templates/global}/agents/architect.md +23 -11
- package/{.claude → templates/global}/agents/code-reviewer.md +17 -7
- package/{.claude → templates/global}/agents/code-writer.md +27 -15
- package/{.claude → templates/global}/agents/context-collector.md +11 -3
- package/{.claude → templates/global}/agents/context-manager.md +21 -9
- package/{.claude → templates/global}/agents/designer.md +32 -20
- package/{.claude → templates/global}/agents/director.md +43 -31
- package/{.claude → templates/global}/agents/explore.md +13 -5
- package/{.claude → templates/global}/agents/git-manager.md +39 -22
- package/{.claude → templates/global}/agents/impact-analyzer.md +17 -7
- package/{.claude → templates/global}/agents/qa-tester.md +22 -8
- package/{.claude → templates/global}/agents/simple-code-writer.md +13 -5
- package/{.claude → templates/global}/agents/task-planner.md +18 -10
- package/{.claude → templates/global}/hooks/skill-forced.sh +56 -56
- package/{.claude → templates/global}/hooks/workflow-enforced.sh +49 -31
- package/{.claude → templates/global}/skills/Backend/SKILL.md +38 -9
- package/{.claude → templates/global}/skills/Coding/SKILL.md +69 -29
- package/{.claude → templates/global}/skills/Director/SKILL.md +9 -5
- package/{.claude → templates/global}/skills/Documentation/SKILL.md +68 -1
- package/{.claude → templates/global}/skills/Git/SKILL.md +8 -4
- package/{.claude → templates/global}/skills/Git/git.md +60 -28
- package/{.claude → templates/global}/skills/Git/pr-apply.md +18 -6
- package/{.claude → templates/global}/skills/Git/pr-review.md +4 -0
- package/templates/global/skills/PromptStructuring/SKILL.md +67 -0
- package/templates/global/skills/PromptStructuring/positive-phrasing.md +206 -0
- package/templates/global/skills/PromptStructuring/xml-tags.md +330 -0
- package/{.claude → templates/global}/skills/React/SKILL.md +28 -8
- package/{.claude → templates/global}/skills/React/react-hook-form.md +20 -12
- package/{.claude → templates/global}/skills/React/tailwind-styled.md +29 -7
- package/{.claude → templates/global}/skills/React/tanstack-router.md +21 -9
- package/templates/project/agents/context-generator.md +66 -0
- package/{.claude → templates/project}/agents/project-task-manager.md +19 -7
- package/templates/project/skills/ContextGeneration/SKILL.md +160 -0
- package/templates/project/workflows/context-gen.yml +75 -0
- /package/{.claude → templates/global}/settings.json +0 -0
- /package/{.claude → templates/project}/hooks/task-loader.sh +0 -0
- /package/{.claude → templates/project}/project.env.example +0 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: PromptStructuring
|
|
3
|
+
description: "Claude Code 프롬프트의 XML 태그 구조화 및 긍정 표현 전환 가이드"
|
|
4
|
+
keywords: [prompt, xml-tags, positive-phrasing, structuring, 프롬프트, 구조화, 긍정표현, XML]
|
|
5
|
+
estimated_tokens: 800
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 프롬프트 구조화 스킬
|
|
9
|
+
|
|
10
|
+
## 개요
|
|
11
|
+
|
|
12
|
+
프롬프트의 **형식과 표현 방식**은 LLM 출력 품질에 직접적인 영향을 준다.
|
|
13
|
+
|
|
14
|
+
- **형식**: 동일한 내용이라도 XML 태그로 의미를 구분하면 모델이 역할/지시/규칙을 명확히 구분
|
|
15
|
+
- **표현**: 부정 표현("~금지") 대신 긍정 표현("~한다")을 사용하면 의도한 행동을 직접 유도
|
|
16
|
+
|
|
17
|
+
### 연구 근거
|
|
18
|
+
|
|
19
|
+
| 연구 | 핵심 발견 | 시사점 |
|
|
20
|
+
|------|----------|--------|
|
|
21
|
+
| Sclar et al. (2023) | 동일 내용, 형식만 변경해도 최대 76%p 성능 차이 | 프롬프트 구조가 정확도에 직결 |
|
|
22
|
+
| Voronov et al. (2024) | 프롬프트 포맷팅이 Few-shot 성능에 체계적 영향 | 일관된 태그 구조가 안정적 성능 보장 |
|
|
23
|
+
| Anthropic 공식 가이드 | XML 태그 사용을 공식 권장 | Claude 모델에 최적화된 구조화 방식 |
|
|
24
|
+
|
|
25
|
+
## 핵심 원칙
|
|
26
|
+
|
|
27
|
+
### 1. XML 태그로 의미 구분
|
|
28
|
+
|
|
29
|
+
마크다운 제목(`##`) 대신 XML 태그로 역할/지시/규칙/제약을 구분한다.
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
마크다운만 사용 -> XML 태그로 의미 구분
|
|
33
|
+
|
|
34
|
+
## 역할 -> <role>
|
|
35
|
+
## 지시사항 -> <instructions>
|
|
36
|
+
## 규칙 -> <rules>
|
|
37
|
+
## 제약사항 -> <constraints>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 2. 긍정 표현으로 행동 유도
|
|
41
|
+
|
|
42
|
+
부정 명령 대신 긍정 행동을 명시한다.
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
부정 표현 -> 긍정 표현
|
|
46
|
+
|
|
47
|
+
"코드 직접 수정 금지" -> "모든 코드 수정은 code-writer에 위임"
|
|
48
|
+
"git add -A 금지" -> "수정한 파일만 개별 지정하여 git add"
|
|
49
|
+
"과도한 추상화 금지" -> "필요한 만큼만 추상화"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 3. `->` 흐름 기호 활용
|
|
53
|
+
|
|
54
|
+
단계, 변환, 위임을 나타낼 때 `->` 기호를 사용한다.
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
단계: 계획 -> 구현 -> 검증
|
|
58
|
+
변환: 부정 표현 -> 긍정 표현
|
|
59
|
+
위임: 코드 수정 -> code-writer Agent
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 관련 문서
|
|
63
|
+
|
|
64
|
+
| 문서 | 설명 |
|
|
65
|
+
|------|------|
|
|
66
|
+
| `xml-tags.md` | XML 태그 표준 목록, 파일 유형별 권장 조합, Before/After 예시 |
|
|
67
|
+
| `positive-phrasing.md` | 부정 -> 긍정 전환 패턴, 카테고리별 변환 테이블, 체크리스트 |
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Positive Phrasing Guide"
|
|
3
|
+
description: "프롬프트의 부정 표현을 긍정 표현으로 전환하는 가이드"
|
|
4
|
+
keywords: [positive-phrasing, prompt-optimization, negation-removal, 긍정표현, 부정제거]
|
|
5
|
+
estimated_tokens: 2000
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 긍정 표현 전환 가이드
|
|
9
|
+
|
|
10
|
+
## 왜 긍정 표현인가
|
|
11
|
+
|
|
12
|
+
부정 명령("~하지 마", "~금지")은 LLM이 **금지 대상을 먼저 인식**하게 만든다.
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
"코드를 직접 수정하지 마세요"
|
|
16
|
+
-> 모델이 "코드를 직접 수정" 개념을 활성화한 후 억제 시도
|
|
17
|
+
-> 의도치 않은 활성화 가능성 존재
|
|
18
|
+
|
|
19
|
+
"모든 코드 수정은 code-writer에 위임하세요"
|
|
20
|
+
-> 모델이 "code-writer에 위임" 행동을 직접 활성화
|
|
21
|
+
-> 원하는 행동을 바로 유도
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
긍정 표현은 **원하는 행동 자체를 명시**하므로 모델이 바로 올바른 방향으로 행동한다.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 전환 패턴
|
|
29
|
+
|
|
30
|
+
### 카테고리 1: 금지/제한 패턴
|
|
31
|
+
|
|
32
|
+
| 부정 표현 | -> | 긍정 표현 |
|
|
33
|
+
|----------|-----|----------|
|
|
34
|
+
| "~금지" | -> | "~전담/전용" |
|
|
35
|
+
| "절대 ~않는다" | -> | "항상 ~한다" |
|
|
36
|
+
| "NEVER ~" | -> | "ALWAYS ~" |
|
|
37
|
+
| "~하지 마세요" | -> | "~하세요" (원하는 행동) |
|
|
38
|
+
| "~을 사용하지 않는다" | -> | "~을 사용한다" (대안 명시) |
|
|
39
|
+
|
|
40
|
+
**예시:**
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
"git add -A 금지"
|
|
44
|
+
-> "수정한 파일만 개별 지정하여 git add"
|
|
45
|
+
|
|
46
|
+
"구체 클래스 직접 의존 금지"
|
|
47
|
+
-> "인터페이스/추상화에 의존한다"
|
|
48
|
+
|
|
49
|
+
"전역 상태 직접 접근 금지 (Presentational에서)"
|
|
50
|
+
-> "props로 의존성을 전달한다"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 카테고리 2: 확인 패턴
|
|
54
|
+
|
|
55
|
+
| 부정 표현 | -> | 긍정 표현 |
|
|
56
|
+
|----------|-----|----------|
|
|
57
|
+
| "~없는지 확인" | -> | "~인지 확인" |
|
|
58
|
+
| "에러가 발생하지 않는지 확인" | -> | "정상 동작하는지 확인" |
|
|
59
|
+
| "누락된 것이 없는지 점검" | -> | "모든 항목이 포함되었는지 점검" |
|
|
60
|
+
|
|
61
|
+
**예시:**
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
"순환 의존이 발생하지 않는가?"
|
|
65
|
+
-> "의존 방향이 단방향인가?"
|
|
66
|
+
|
|
67
|
+
"빌드 에러가 발생하지 않는 상태 유지"
|
|
68
|
+
-> "빌드 가능 상태를 유지"
|
|
69
|
+
|
|
70
|
+
"누락된 엣지케이스 없는지 점검"
|
|
71
|
+
-> "모든 엣지케이스가 처리되었는지 점검"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 카테고리 3: 과도 방지 패턴
|
|
75
|
+
|
|
76
|
+
| 부정 표현 | -> | 긍정 표현 |
|
|
77
|
+
|----------|-----|----------|
|
|
78
|
+
| "과도한 X 금지" | -> | "필요한 만큼만 X" |
|
|
79
|
+
| "불필요한 X 금지" | -> | "필요한 X만 포함" |
|
|
80
|
+
| "복잡한 X 피하기" | -> | "단순한 X 유지" |
|
|
81
|
+
|
|
82
|
+
**예시:**
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
"과도한 추상화 금지"
|
|
86
|
+
-> "필요한 만큼만 추상화"
|
|
87
|
+
|
|
88
|
+
"불필요한 파일 생성 금지"
|
|
89
|
+
-> "기존 파일 수정을 우선"
|
|
90
|
+
|
|
91
|
+
"주석 과다 금지"
|
|
92
|
+
-> "코드가 자명할 때는 주석 생략"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 카테고리 4: 위임 패턴
|
|
96
|
+
|
|
97
|
+
| 부정 표현 | -> | 긍정 표현 |
|
|
98
|
+
|----------|-----|----------|
|
|
99
|
+
| "직접 수행 금지" | -> | "Subagent에 위임" |
|
|
100
|
+
| "Main Agent에서 직접 X 금지" | -> | "X는 [Agent명]이 전담" |
|
|
101
|
+
| "직접 수정하지 않는다" | -> | "[Agent명]에 위임한다" |
|
|
102
|
+
|
|
103
|
+
**예시:**
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
"Main Agent에서 직접 코드 수정 금지"
|
|
107
|
+
-> "모든 코드 수정은 code-writer가 전담"
|
|
108
|
+
|
|
109
|
+
"Main Agent에서 직접 Git 명령어 실행 금지"
|
|
110
|
+
-> "모든 Git 작업은 git-manager에 위임"
|
|
111
|
+
|
|
112
|
+
"Main Agent에서 직접 여러 파일 탐색 금지"
|
|
113
|
+
-> "파일 탐색은 explore Agent가 전담"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 파일 유형별 자주 등장하는 전환
|
|
119
|
+
|
|
120
|
+
### Agent 파일
|
|
121
|
+
|
|
122
|
+
| 부정 표현 | -> | 긍정 표현 |
|
|
123
|
+
|----------|-----|----------|
|
|
124
|
+
| "코드 직접 수정 금지" | -> | "모든 코드 수정은 code-writer에 위임" |
|
|
125
|
+
| "여러 기능을 동시에 구현하지 않는다" | -> | "한 번에 하나의 기능만 구현한다" |
|
|
126
|
+
| "import 경로가 올바르지 않은 상태로 두지 않는다" | -> | "각 파일 작성 후 import 경로가 올바른지 확인한다" |
|
|
127
|
+
|
|
128
|
+
### Skill 파일
|
|
129
|
+
|
|
130
|
+
| 부정 표현 | -> | 긍정 표현 |
|
|
131
|
+
|----------|-----|----------|
|
|
132
|
+
| "중첩 요소 사용 금지" | -> | "단일 수준 구조를 유지한다" |
|
|
133
|
+
| "장황한 설명 금지" | -> | "테이블과 코드 예제로 압축한다" |
|
|
134
|
+
| "1000줄 초과 금지" | -> | "500줄 이내로 유지하고, 초과 시 파일을 분리한다" |
|
|
135
|
+
|
|
136
|
+
### Hook 파일
|
|
137
|
+
|
|
138
|
+
| 부정 표현 | -> | 긍정 표현 |
|
|
139
|
+
|----------|-----|----------|
|
|
140
|
+
| "Phase를 건너뛰지 마세요" | -> | "모든 Phase를 순서대로 완료한다" |
|
|
141
|
+
| "검증 없이 진행하지 않는다" | -> | "검증을 통과한 후에만 다음 단계로 진행한다" |
|
|
142
|
+
| "계획 없이 코드를 작성하지 않는다" | -> | "계획을 확인한 후 코드를 작성한다" |
|
|
143
|
+
|
|
144
|
+
### CLAUDE.md 파일
|
|
145
|
+
|
|
146
|
+
| 부정 표현 | -> | 긍정 표현 |
|
|
147
|
+
|----------|-----|----------|
|
|
148
|
+
| "git add -A 금지" | -> | "수정한 파일만 개별 지정하여 git add" |
|
|
149
|
+
| "자동으로 커밋/푸시하지 않는다" | -> | "사용자가 명시적으로 요청할 때만 커밋/푸시한다" |
|
|
150
|
+
| "3개 이상 파일 수정 금지" | -> | "파일 수정은 Subagent에 위임한다" |
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## 전환 시 주의사항
|
|
155
|
+
|
|
156
|
+
### 맥락을 보존한다
|
|
157
|
+
|
|
158
|
+
부정 표현을 긍정으로 바꿀 때 원래 의도가 손실되지 않도록 한다.
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
원문: "Presentational 컴포넌트에서 API 호출, 전역 상태 접근 금지"
|
|
162
|
+
|
|
163
|
+
나쁜 전환: "Presentational 컴포넌트에서 작업한다"
|
|
164
|
+
-> 원래 의도(제한 사항)가 사라짐
|
|
165
|
+
|
|
166
|
+
좋은 전환: "Presentational 컴포넌트는 UI 렌더링만 전담한다. 데이터는 props로 전달받는다"
|
|
167
|
+
-> 허용 범위를 명시하여 제한 의도를 보존
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 대안을 함께 명시한다
|
|
171
|
+
|
|
172
|
+
"~하지 마"만 긍정으로 바꾸면 모호해질 수 있다. **대안 행동**을 함께 제시한다.
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
나쁜 전환: "try-catch 대신 다른 것을 사용한다"
|
|
176
|
+
-> "다른 것"이 모호
|
|
177
|
+
|
|
178
|
+
좋은 전환: "Promise 처리 시 then-catch 패턴을 사용한다"
|
|
179
|
+
-> 구체적 대안 제시
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 정량적 기준이 있으면 유지한다
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
원문: "1000줄 초과 금지"
|
|
186
|
+
좋은 전환: "500줄 이내로 유지하고, 초과 시 파일을 분리한다"
|
|
187
|
+
-> 수치 기준을 유지하면서 긍정형으로 전환
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 체크리스트
|
|
193
|
+
|
|
194
|
+
<checklist>
|
|
195
|
+
- [ ] 파일 내에 "금지", "~하지 마", "절대", "NEVER" 문자열이 없는가?
|
|
196
|
+
- [ ] 모든 규칙이 "~한다", "~해야 한다" 형태의 긍정문인가?
|
|
197
|
+
- [ ] 제약사항이 "~만 한다", "~전용", "~전담" 형태로 표현되었는가?
|
|
198
|
+
- [ ] 부정 -> 긍정 전환 시 원래 의도가 보존되었는가?
|
|
199
|
+
- [ ] 대안 행동이 구체적으로 명시되었는가?
|
|
200
|
+
- [ ] 정량적 기준(줄 수, 파일 수 등)이 유지되었는가?
|
|
201
|
+
</checklist>
|
|
202
|
+
|
|
203
|
+
<reference>
|
|
204
|
+
- `SKILL.md` - 프롬프트 구조화 개요 및 핵심 원칙
|
|
205
|
+
- `xml-tags.md` - XML 태그 표준 및 사용 가이드
|
|
206
|
+
</reference>
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "XML Tags Guide"
|
|
3
|
+
description: "Claude Code 프롬프트용 XML 태그 표준 및 사용 가이드"
|
|
4
|
+
keywords: [xml, tags, structuring, prompt-format, XML태그, 프롬프트형식]
|
|
5
|
+
estimated_tokens: 2500
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# XML 태그 가이드
|
|
9
|
+
|
|
10
|
+
## 표준 태그 목록
|
|
11
|
+
|
|
12
|
+
| 태그 | 용도 | 대상 파일 |
|
|
13
|
+
|------|------|----------|
|
|
14
|
+
| `<role>` | Agent 정체성/책임 정의 | Agent |
|
|
15
|
+
| `<instructions>` | 절차/단계 가이드 | Agent, Skill |
|
|
16
|
+
| `<rules>` | 필수 준수 규칙 | 전체 |
|
|
17
|
+
| `<constraints>` | 경계/제약 (긍정 표현) | Agent, CLAUDE.md |
|
|
18
|
+
| `<output_format>` | 출력 구조 정의 | Agent |
|
|
19
|
+
| `<examples>` / `<example type="good/bad">` | 예시 | Skill |
|
|
20
|
+
| `<checklist>` | 검증 항목 | 전체 |
|
|
21
|
+
| `<workflow>` | 다단계 프로세스 | CLAUDE.md, Hook |
|
|
22
|
+
| `<phase name="...">` | 워크플로우 단계 | Hook |
|
|
23
|
+
| `<delegation_rules>` | Subagent 위임 규칙 | CLAUDE.md, Hook |
|
|
24
|
+
| `<reference>` | 문서 상호참조 | 전체 |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 파일 유형별 권장 태그 조합
|
|
29
|
+
|
|
30
|
+
### Agent 파일
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
필수: <role>, <instructions>, <constraints>, <output_format>
|
|
34
|
+
선택: <rules>, <examples>, <reference>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Agent는 **정체성 -> 절차 -> 제약 -> 출력** 순서로 구성한다.
|
|
38
|
+
|
|
39
|
+
### Skill 파일
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
필수: <instructions>, <rules>, <checklist>
|
|
43
|
+
선택: <examples>, <constraints>, <reference>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Skill은 **절차 -> 규칙 -> 예시 -> 검증** 순서로 구성한다.
|
|
47
|
+
|
|
48
|
+
### CLAUDE.md
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
필수: <workflow>, <delegation_rules>, <constraints>
|
|
52
|
+
선택: <rules>, <reference>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
CLAUDE.md는 **워크플로우 -> 위임 규칙 -> 제약** 순서로 구성한다.
|
|
56
|
+
|
|
57
|
+
### Hook 파일
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
필수: <phase name="...">, <checklist>
|
|
61
|
+
선택: <delegation_rules>, <rules>, <reference>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Hook은 **Phase별 단계 -> 검증 체크리스트** 순서로 구성한다.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Before/After 예시
|
|
69
|
+
|
|
70
|
+
### 예시 1: Agent - 역할 설명
|
|
71
|
+
|
|
72
|
+
**Before** (마크다운만 사용):
|
|
73
|
+
|
|
74
|
+
```markdown
|
|
75
|
+
# Code Writer Agent
|
|
76
|
+
|
|
77
|
+
## 역할
|
|
78
|
+
|
|
79
|
+
코드를 작성하는 전문 Agent입니다.
|
|
80
|
+
|
|
81
|
+
## 해야 할 일
|
|
82
|
+
|
|
83
|
+
1. task-planner의 계획에 따라 코드 작성
|
|
84
|
+
2. 프로젝트 규칙 준수
|
|
85
|
+
3. 작은 단위로 구현
|
|
86
|
+
|
|
87
|
+
## 출력
|
|
88
|
+
|
|
89
|
+
작성한 파일 목록과 변경 내용을 정리하여 출력합니다.
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**After** (XML 태그로 의미 구분):
|
|
93
|
+
|
|
94
|
+
```markdown
|
|
95
|
+
# Code Writer Agent
|
|
96
|
+
|
|
97
|
+
<role>
|
|
98
|
+
task-planner의 계획에 따라 실제 코드를 작성하는 전문 Agent
|
|
99
|
+
</role>
|
|
100
|
+
|
|
101
|
+
<instructions>
|
|
102
|
+
1. task-planner의 계획에 따라 코드 작성
|
|
103
|
+
2. 프로젝트 규칙 준수
|
|
104
|
+
3. 작은 단위로 구현하여 빌드 가능 상태 유지
|
|
105
|
+
</instructions>
|
|
106
|
+
|
|
107
|
+
<output_format>
|
|
108
|
+
## 작성한 파일
|
|
109
|
+
|
|
110
|
+
### 1. [파일 경로]
|
|
111
|
+
- 변경 유형: 신규 생성 / 수정
|
|
112
|
+
- 주요 내용: ...
|
|
113
|
+
</output_format>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**개선 포인트**: `<role>`로 정체성, `<instructions>`로 절차, `<output_format>`으로 출력 구조를 명확히 분리
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### 예시 2: Skill - 규칙 목록
|
|
121
|
+
|
|
122
|
+
**Before** (마크다운만 사용):
|
|
123
|
+
|
|
124
|
+
```markdown
|
|
125
|
+
# 코딩 규칙
|
|
126
|
+
|
|
127
|
+
## 규칙
|
|
128
|
+
|
|
129
|
+
- 하나의 모듈은 하나의 책임만 가진다
|
|
130
|
+
- 순환 의존을 만들지 않는다
|
|
131
|
+
- Promise 처리 시 then-catch 패턴을 사용한다
|
|
132
|
+
|
|
133
|
+
## 확인
|
|
134
|
+
|
|
135
|
+
- 이 파일의 책임은 하나인가?
|
|
136
|
+
- 순환 의존이 없는가?
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**After** (XML 태그로 의미 구분):
|
|
140
|
+
|
|
141
|
+
```markdown
|
|
142
|
+
# 코딩 규칙
|
|
143
|
+
|
|
144
|
+
<rules>
|
|
145
|
+
- 하나의 모듈은 하나의 책임만 가진다 (SRP)
|
|
146
|
+
- 모듈 간 의존 방향은 단방향으로 유지한다
|
|
147
|
+
- Promise 처리 시 then-catch 패턴을 사용한다
|
|
148
|
+
</rules>
|
|
149
|
+
|
|
150
|
+
<checklist>
|
|
151
|
+
- [ ] 이 파일의 책임은 하나인가?
|
|
152
|
+
- [ ] 의존 방향이 단방향인가?
|
|
153
|
+
- [ ] then-catch 패턴을 사용했는가?
|
|
154
|
+
</checklist>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**개선 포인트**: `<rules>`와 `<checklist>`를 분리하여 "따라야 할 것"과 "검증할 것"을 명확히 구분
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
### 예시 3: Hook - Phase 구분
|
|
162
|
+
|
|
163
|
+
**Before** (마크다운만 사용):
|
|
164
|
+
|
|
165
|
+
```markdown
|
|
166
|
+
# Pre-commit Hook
|
|
167
|
+
|
|
168
|
+
## 단계 1: 계획 확인
|
|
169
|
+
|
|
170
|
+
계획이 있는지 확인합니다. 계획이 없으면 중단합니다.
|
|
171
|
+
|
|
172
|
+
## 단계 2: 코드 검증
|
|
173
|
+
|
|
174
|
+
lint와 type check를 실행합니다.
|
|
175
|
+
|
|
176
|
+
## 단계 3: 커밋
|
|
177
|
+
|
|
178
|
+
변경사항을 커밋합니다.
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**After** (XML 태그로 Phase 구분):
|
|
182
|
+
|
|
183
|
+
```markdown
|
|
184
|
+
# Pre-commit Hook
|
|
185
|
+
|
|
186
|
+
<workflow>
|
|
187
|
+
|
|
188
|
+
<phase name="계획 확인">
|
|
189
|
+
계획이 존재하는지 확인한다. 계획이 있을 때만 다음 Phase로 진행한다.
|
|
190
|
+
</phase>
|
|
191
|
+
|
|
192
|
+
<phase name="코드 검증">
|
|
193
|
+
lint와 type check를 실행한다. 모든 검증을 통과할 때만 다음 Phase로 진행한다.
|
|
194
|
+
</phase>
|
|
195
|
+
|
|
196
|
+
<phase name="커밋">
|
|
197
|
+
변경사항을 커밋한다.
|
|
198
|
+
</phase>
|
|
199
|
+
|
|
200
|
+
</workflow>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**개선 포인트**: `<workflow>` > `<phase>` 구조로 단계 간 경계와 진행 조건을 명확히 표현
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## `->` 기호 사용 가이드
|
|
208
|
+
|
|
209
|
+
`->` 기호는 **방향성이 있는 흐름**을 간결하게 표현할 때 사용한다.
|
|
210
|
+
|
|
211
|
+
### 단계 표현
|
|
212
|
+
|
|
213
|
+
순서가 있는 프로세스를 나타낸다.
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
계획 -> 구현 -> 검증 -> 리뷰
|
|
217
|
+
Context 수집 -> TaskList 생성 -> 코드 수정 계획
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### 변환 표현
|
|
221
|
+
|
|
222
|
+
입력이 출력으로 바뀌는 과정을 나타낸다.
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
부정 표현 -> 긍정 표현
|
|
226
|
+
마크다운 제목 -> XML 태그
|
|
227
|
+
"~금지" -> "~전담/전용"
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### 위임 표현
|
|
231
|
+
|
|
232
|
+
작업이 특정 Agent로 전달됨을 나타낸다.
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
코드 수정 -> code-writer Agent
|
|
236
|
+
Git 작업 -> git-manager Agent
|
|
237
|
+
코드베이스 탐색 -> explore Agent
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### 테이블에서 사용
|
|
241
|
+
|
|
242
|
+
변환 관계를 테이블로 정리할 때도 `->` 를 활용한다.
|
|
243
|
+
|
|
244
|
+
```markdown
|
|
245
|
+
| Before | -> | After |
|
|
246
|
+
|--------|-----|-------|
|
|
247
|
+
| "~금지" | -> | "~전담" |
|
|
248
|
+
| `## 역할` | -> | `<role>` |
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 주의사항
|
|
254
|
+
|
|
255
|
+
### XML 태그는 마크다운을 보완한다
|
|
256
|
+
|
|
257
|
+
XML 태그는 마크다운을 대체하는 것이 아니라 **의미 계층을 추가**하는 것이다.
|
|
258
|
+
|
|
259
|
+
```markdown
|
|
260
|
+
<rules>
|
|
261
|
+
## 네이밍 규칙
|
|
262
|
+
|
|
263
|
+
| 대상 | 규칙 | 예시 |
|
|
264
|
+
|------|------|------|
|
|
265
|
+
| 변수 | camelCase | `userName` |
|
|
266
|
+
| 상수 | UPPER_SNAKE | `MAX_COUNT` |
|
|
267
|
+
|
|
268
|
+
## 구조 규칙
|
|
269
|
+
|
|
270
|
+
- 한 파일에 한 컴포넌트만 정의한다
|
|
271
|
+
- index.ts를 통해 export한다
|
|
272
|
+
</rules>
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
태그 내부에서 `##`, 테이블, 코드블록을 정상적으로 사용한다.
|
|
276
|
+
|
|
277
|
+
### 태그 중첩은 2단계까지
|
|
278
|
+
|
|
279
|
+
```markdown
|
|
280
|
+
<!-- 허용: 2단계 -->
|
|
281
|
+
<workflow>
|
|
282
|
+
<phase name="계획">...</phase>
|
|
283
|
+
</workflow>
|
|
284
|
+
|
|
285
|
+
<!-- 지양: 3단계 이상 -->
|
|
286
|
+
<workflow>
|
|
287
|
+
<phase name="계획">
|
|
288
|
+
<sub-step>...</sub-step> <!-- 과도한 중첩 -->
|
|
289
|
+
</phase>
|
|
290
|
+
</workflow>
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
3단계 이상 중첩이 필요하면 마크다운 제목(`###`)이나 리스트로 대체한다.
|
|
294
|
+
|
|
295
|
+
### 닫는 태그를 반드시 포함한다
|
|
296
|
+
|
|
297
|
+
```markdown
|
|
298
|
+
<!-- 올바름 -->
|
|
299
|
+
<role>
|
|
300
|
+
Agent의 역할 설명
|
|
301
|
+
</role>
|
|
302
|
+
|
|
303
|
+
<!-- 오류 -->
|
|
304
|
+
<role>
|
|
305
|
+
Agent의 역할 설명
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
모든 XML 태그는 여는 태그와 닫는 태그를 쌍으로 작성한다.
|
|
309
|
+
|
|
310
|
+
### 태그 이름은 표준 목록에서 선택한다
|
|
311
|
+
|
|
312
|
+
이 가이드의 **표준 태그 목록**에 정의된 태그만 사용한다. 커스텀 태그가 필요한 경우 기존 태그로 대체할 수 있는지 먼저 검토한다.
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## 체크리스트
|
|
317
|
+
|
|
318
|
+
<checklist>
|
|
319
|
+
- [ ] 파일 유형(Agent/Skill/CLAUDE.md/Hook)에 맞는 태그 조합을 사용했는가?
|
|
320
|
+
- [ ] 태그 내부에서 마크다운 문법(제목, 테이블, 코드블록)을 정상 활용하는가?
|
|
321
|
+
- [ ] 태그 중첩이 2단계 이하인가?
|
|
322
|
+
- [ ] 모든 태그에 닫는 태그가 포함되어 있는가?
|
|
323
|
+
- [ ] 표준 태그 목록에 정의된 태그만 사용했는가?
|
|
324
|
+
- [ ] `->` 기호를 단계/변환/위임 표현에 활용했는가?
|
|
325
|
+
</checklist>
|
|
326
|
+
|
|
327
|
+
<reference>
|
|
328
|
+
- `SKILL.md` - 프롬프트 구조화 개요 및 핵심 원칙
|
|
329
|
+
- `positive-phrasing.md` - 부정 -> 긍정 전환 패턴
|
|
330
|
+
</reference>
|
|
@@ -43,6 +43,8 @@ src/
|
|
|
43
43
|
| Layout | 페이지 레이아웃 구조 | Header, Sidebar, Footer |
|
|
44
44
|
| Page | 라우트에 매핑되는 페이지 | HomePage, LoginPage |
|
|
45
45
|
|
|
46
|
+
<rules>
|
|
47
|
+
|
|
46
48
|
## 필수 준수 사항
|
|
47
49
|
|
|
48
50
|
### 컴포넌트 작성
|
|
@@ -58,20 +60,22 @@ src/
|
|
|
58
60
|
|
|
59
61
|
| 규칙 | 설명 |
|
|
60
62
|
|------|------|
|
|
61
|
-
| 상태 최소화 | 파생 가능한 값은
|
|
63
|
+
| 상태 최소화 | 파생 가능한 값은 계산으로 처리 |
|
|
62
64
|
| 상태 위치 | 필요한 가장 가까운 공통 조상에 배치 |
|
|
63
|
-
| 불변성 유지 | 상태
|
|
65
|
+
| 불변성 유지 | 상태 업데이트 시 새 객체/배열을 생성 |
|
|
64
66
|
| 복잡한 상태 | useReducer 또는 상태 관리 라이브러리 사용 |
|
|
65
67
|
|
|
66
68
|
### Hooks 규칙
|
|
67
69
|
|
|
68
70
|
| 규칙 | 설명 |
|
|
69
71
|
|------|------|
|
|
70
|
-
| 최상위에서만 호출 | 조건문, 반복문
|
|
71
|
-
| 의존성 배열 정확히 | useEffect, useMemo, useCallback의 deps
|
|
72
|
+
| 최상위에서만 호출 | 조건문, 반복문 바깥의 최상위 레벨에서 호출 |
|
|
73
|
+
| 의존성 배열 정확히 | useEffect, useMemo, useCallback의 deps를 빠짐없이 명시 |
|
|
72
74
|
| 커스텀 훅 추출 | 재사용 가능한 로직은 커스텀 훅으로 분리 |
|
|
73
75
|
| 훅 네이밍 | `use` 접두사 필수 (예: `useAuth`, `useFetch`) |
|
|
74
76
|
|
|
77
|
+
</rules>
|
|
78
|
+
|
|
75
79
|
## 성능 최적화
|
|
76
80
|
|
|
77
81
|
### 메모이제이션
|
|
@@ -87,6 +91,8 @@ const expensiveValue = useMemo(() => computeExpensive(a, b), [a, b]);
|
|
|
87
91
|
const handleClick = useCallback(() => doSomething(id), [id]);
|
|
88
92
|
```
|
|
89
93
|
|
|
94
|
+
<rules>
|
|
95
|
+
|
|
90
96
|
### 최적화 적용 기준
|
|
91
97
|
|
|
92
98
|
| 상황 | 적용 |
|
|
@@ -96,10 +102,16 @@ const handleClick = useCallback(() => doSomething(id), [id]);
|
|
|
96
102
|
| 비용이 큰 계산 | `useMemo` 사용 |
|
|
97
103
|
| 자식에게 전달하는 콜백 | `useCallback` 사용 |
|
|
98
104
|
|
|
99
|
-
|
|
105
|
+
<constraints>
|
|
106
|
+
|
|
107
|
+
### 최적화 시 주의사항
|
|
108
|
+
|
|
109
|
+
- memo는 측정 결과 리렌더링이 잦은 컴포넌트에만 적용 (React DevTools Profiler 사용)
|
|
110
|
+
- 성능 측정 후 필요한 곳에만 최적화 적용
|
|
100
111
|
|
|
101
|
-
|
|
102
|
-
|
|
112
|
+
</constraints>
|
|
113
|
+
|
|
114
|
+
</rules>
|
|
103
115
|
|
|
104
116
|
## useEffect 패턴
|
|
105
117
|
|
|
@@ -128,6 +140,8 @@ useEffect(() => {
|
|
|
128
140
|
| 렌더링 중 상태 업데이트 | 조건부 렌더링 또는 useMemo |
|
|
129
141
|
| 불필요한 Effect | 이벤트 핸들러로 처리 |
|
|
130
142
|
|
|
143
|
+
<checklist>
|
|
144
|
+
|
|
131
145
|
## 체크리스트
|
|
132
146
|
|
|
133
147
|
### 컴포넌트 작성 시
|
|
@@ -147,9 +161,13 @@ useEffect(() => {
|
|
|
147
161
|
|
|
148
162
|
### 성능
|
|
149
163
|
- [ ] 리스트에 적절한 key가 사용되었는가?
|
|
150
|
-
- [ ] 불필요한 리렌더링이
|
|
164
|
+
- [ ] 불필요한 리렌더링이 있는가? (있다면 memo 검토)
|
|
151
165
|
- [ ] 메모이제이션이 적절히 사용되었는가?
|
|
152
166
|
|
|
167
|
+
</checklist>
|
|
168
|
+
|
|
169
|
+
<reference>
|
|
170
|
+
|
|
153
171
|
## 관련 문서
|
|
154
172
|
|
|
155
173
|
| 문서 | 설명 |
|
|
@@ -157,3 +175,5 @@ useEffect(() => {
|
|
|
157
175
|
| `tanstack-router.md` | TanStack Router 파일 기반 라우팅 패턴 |
|
|
158
176
|
| `react-hook-form.md` | React Hook Form + Zod 폼 검증 패턴 |
|
|
159
177
|
| `tailwind-styled.md` | tailwind-styled-components DOM depth 최소화 |
|
|
178
|
+
|
|
179
|
+
</reference>
|