jun-claude-code 0.0.12 → 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 +30 -12
- package/dist/cli.js +22 -0
- package/dist/init-context.js +25 -3
- package/dist/validate.d.ts +4 -0
- package/dist/validate.js +105 -0
- package/package.json +1 -1
- package/templates/global/CLAUDE.md +50 -21
- package/templates/global/agents/architect.md +23 -11
- package/templates/global/agents/code-reviewer.md +17 -7
- package/templates/global/agents/code-writer.md +27 -15
- package/templates/global/agents/context-collector.md +11 -3
- package/templates/global/agents/context-manager.md +20 -8
- package/templates/global/agents/designer.md +32 -20
- package/templates/global/agents/director.md +43 -31
- package/templates/global/agents/explore.md +12 -4
- package/templates/global/agents/git-manager.md +39 -22
- package/templates/global/agents/impact-analyzer.md +17 -7
- package/templates/global/agents/qa-tester.md +22 -8
- package/templates/global/agents/simple-code-writer.md +12 -4
- package/templates/global/agents/task-planner.md +18 -10
- package/templates/global/hooks/skill-forced.sh +49 -39
- package/templates/global/hooks/workflow-enforced.sh +49 -31
- package/templates/global/skills/Backend/SKILL.md +38 -9
- package/templates/global/skills/Coding/SKILL.md +69 -29
- package/templates/global/skills/Director/SKILL.md +9 -5
- package/templates/global/skills/Documentation/SKILL.md +68 -1
- package/templates/global/skills/Git/SKILL.md +8 -4
- package/templates/global/skills/Git/git.md +60 -28
- package/templates/global/skills/Git/pr-apply.md +18 -6
- package/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/templates/global/skills/React/SKILL.md +28 -8
- package/templates/global/skills/React/react-hook-form.md +20 -12
- package/templates/global/skills/React/tailwind-styled.md +29 -7
- package/templates/global/skills/React/tanstack-router.md +21 -9
- package/templates/project/agents/project-task-manager.md +19 -7
- package/templates/{global → project}/skills/ContextGeneration/SKILL.md +20 -12
- package/templates/project/workflows/context-gen.yml +30 -7
- /package/templates/{global → project}/agents/context-generator.md +0 -0
|
@@ -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>
|
|
@@ -26,6 +26,8 @@ src/features/auth/
|
|
|
26
26
|
└── useLoginMutation.ts # TRPC mutation 훅
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
+
<rules>
|
|
30
|
+
|
|
29
31
|
## 필수 준수 사항
|
|
30
32
|
|
|
31
33
|
| 규칙 | 올바른 예 | 잘못된 예 |
|
|
@@ -35,6 +37,8 @@ src/features/auth/
|
|
|
35
37
|
| 에러 표시 | `formState.errors` 사용 | 커스텀 에러 상태 |
|
|
36
38
|
| 로딩 상태 | `mutation.isPending` 사용 | 별도 loading 상태 |
|
|
37
39
|
|
|
40
|
+
</rules>
|
|
41
|
+
|
|
38
42
|
## 스키마 정의 패턴
|
|
39
43
|
|
|
40
44
|
```typescript
|
|
@@ -199,24 +203,28 @@ const formValues = watch()
|
|
|
199
203
|
{watchedEmail && <p>입력된 이메일: {watchedEmail}</p>}
|
|
200
204
|
```
|
|
201
205
|
|
|
206
|
+
<checklist>
|
|
207
|
+
|
|
202
208
|
## 체크리스트
|
|
203
209
|
|
|
204
210
|
### 스키마 설정
|
|
205
|
-
- [ ] 스키마를 별도 파일(*FormSchema.ts)로
|
|
206
|
-
- [ ] z.infer로 타입
|
|
207
|
-
- [ ] 에러
|
|
211
|
+
- [ ] 스키마를 별도 파일(*FormSchema.ts)로 분리했는가?
|
|
212
|
+
- [ ] z.infer로 타입 추론을 사용하는가?
|
|
213
|
+
- [ ] 에러 메시지를 한글화했는가?
|
|
208
214
|
|
|
209
215
|
### 폼 구현
|
|
210
|
-
- [ ] zodResolver
|
|
211
|
-
- [ ] defaultValues
|
|
212
|
-
- [ ] register로
|
|
216
|
+
- [ ] zodResolver를 사용하는가?
|
|
217
|
+
- [ ] defaultValues를 설정했는가?
|
|
218
|
+
- [ ] register로 필드를 등록했는가?
|
|
213
219
|
|
|
214
220
|
### 에러 처리
|
|
215
|
-
- [ ] formState.errors로
|
|
216
|
-
- [ ] 서버 에러는 setError로
|
|
217
|
-
- [ ] 필드별 에러
|
|
221
|
+
- [ ] formState.errors로 에러를 표시하는가?
|
|
222
|
+
- [ ] 서버 에러는 setError로 처리하는가?
|
|
223
|
+
- [ ] 필드별 에러 메시지를 표시하는가?
|
|
218
224
|
|
|
219
225
|
### TRPC 연동
|
|
220
|
-
- [ ] useMutation
|
|
221
|
-
- [ ] isPending으로 로딩
|
|
222
|
-
- [ ] onSuccess/onError
|
|
226
|
+
- [ ] useMutation을 사용하는가?
|
|
227
|
+
- [ ] isPending으로 로딩 상태를 표시하는가?
|
|
228
|
+
- [ ] onSuccess/onError 핸들러를 구현했는가?
|
|
229
|
+
|
|
230
|
+
</checklist>
|
|
@@ -7,11 +7,13 @@ estimated_tokens: ~350
|
|
|
7
7
|
|
|
8
8
|
# tailwind-styled-components 스킬
|
|
9
9
|
|
|
10
|
+
<rules>
|
|
11
|
+
|
|
10
12
|
## 핵심 원칙
|
|
11
13
|
|
|
12
14
|
**DOM depth를 최소화하라.**
|
|
13
|
-
- 불필요한 wrapper div 제거
|
|
14
|
-
-
|
|
15
|
+
- 불필요한 wrapper div를 제거
|
|
16
|
+
- 단일 수준 구조를 유지 (스타일 전용 중첩 대신)
|
|
15
17
|
- 하나의 Styled Component가 하나의 DOM 요소
|
|
16
18
|
|
|
17
19
|
## 필수 준수 사항
|
|
@@ -23,8 +25,13 @@ estimated_tokens: ~350
|
|
|
23
25
|
| `<Wrapper><Inner><Content>...</Content></Inner></Wrapper>` | `<Container>...</Container>` |
|
|
24
26
|
| `<div><div className="...">...</div></div>` | `<StyledDiv>...</StyledDiv>` |
|
|
25
27
|
|
|
28
|
+
</rules>
|
|
29
|
+
|
|
30
|
+
<examples>
|
|
31
|
+
|
|
26
32
|
### 예제: 불필요한 중첩 제거
|
|
27
33
|
|
|
34
|
+
<example type="bad">
|
|
28
35
|
```typescript
|
|
29
36
|
// ❌ Bad - 불필요한 DOM depth
|
|
30
37
|
const Card = () => (
|
|
@@ -38,7 +45,10 @@ const Card = () => (
|
|
|
38
45
|
</div>
|
|
39
46
|
</div>
|
|
40
47
|
);
|
|
41
|
-
|
|
48
|
+
```
|
|
49
|
+
</example>
|
|
50
|
+
<example type="good">
|
|
51
|
+
```typescript
|
|
42
52
|
// ✅ Good - 최소한의 DOM depth
|
|
43
53
|
const CardContainer = tw.div`
|
|
44
54
|
p-4
|
|
@@ -56,9 +66,11 @@ const Card = () => (
|
|
|
56
66
|
</CardContainer>
|
|
57
67
|
);
|
|
58
68
|
```
|
|
69
|
+
</example>
|
|
59
70
|
|
|
60
71
|
### 예제: Tailwind 디자인 변환
|
|
61
72
|
|
|
73
|
+
<example type="bad">
|
|
62
74
|
```typescript
|
|
63
75
|
// 원본 Tailwind (depth: 3)
|
|
64
76
|
<div className="p-5">
|
|
@@ -68,7 +80,10 @@ const Card = () => (
|
|
|
68
80
|
</div>
|
|
69
81
|
</div>
|
|
70
82
|
</div>
|
|
71
|
-
|
|
83
|
+
```
|
|
84
|
+
</example>
|
|
85
|
+
<example type="good">
|
|
86
|
+
```typescript
|
|
72
87
|
// ✅ 변환 후 (depth: 1)
|
|
73
88
|
const StepContent = tw.div`
|
|
74
89
|
p-5
|
|
@@ -83,6 +98,9 @@ const StepContent = tw.div`
|
|
|
83
98
|
<Title>Title</Title>
|
|
84
99
|
</StepContent>
|
|
85
100
|
```
|
|
101
|
+
</example>
|
|
102
|
+
|
|
103
|
+
</examples>
|
|
86
104
|
|
|
87
105
|
## Styled Component 네이밍
|
|
88
106
|
|
|
@@ -152,14 +170,18 @@ const Input = tw.input`
|
|
|
152
170
|
`;
|
|
153
171
|
```
|
|
154
172
|
|
|
173
|
+
<checklist>
|
|
174
|
+
|
|
155
175
|
## 체크리스트
|
|
156
176
|
|
|
157
177
|
### DOM 구조
|
|
158
|
-
- [ ]
|
|
159
|
-
- [ ] 중첩된 div를 하나로 합칠 수 있는가?
|
|
160
|
-
- [ ] depth가 3 이상인가?
|
|
178
|
+
- [ ] 스타일 전용 wrapper div가 있는가? (있다면 제거)
|
|
179
|
+
- [ ] 중첩된 div를 하나로 합칠 수 있는가? (합치기)
|
|
180
|
+
- [ ] depth가 3 이상인가? (리팩토링 고려)
|
|
161
181
|
|
|
162
182
|
### Styled Component
|
|
163
183
|
- [ ] 의미 있는 이름인가?
|
|
164
184
|
- [ ] transient props($prefix)를 사용하는가?
|
|
165
185
|
- [ ] 재사용 가능한 컴포넌트인가?
|
|
186
|
+
|
|
187
|
+
</checklist>
|
|
@@ -32,6 +32,8 @@ src/routes/
|
|
|
32
32
|
└── register.tsx # /auth/register
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
+
<rules>
|
|
36
|
+
|
|
35
37
|
## 필수 준수 사항
|
|
36
38
|
|
|
37
39
|
| 규칙 | 올바른 예 | 잘못된 예 |
|
|
@@ -41,6 +43,10 @@ src/routes/
|
|
|
41
43
|
| 루트 라우트 | `__root.tsx` (더블 언더스코어) | `root.tsx` |
|
|
42
44
|
| 네비게이션 훅 | `Route.useNavigate()` | `useNavigate()` 직접 import |
|
|
43
45
|
|
|
46
|
+
</rules>
|
|
47
|
+
|
|
48
|
+
<instructions>
|
|
49
|
+
|
|
44
50
|
## 라우트 정의 패턴
|
|
45
51
|
|
|
46
52
|
### 기본 라우트
|
|
@@ -166,19 +172,25 @@ export const Route = createFileRoute('/_admin')({
|
|
|
166
172
|
})
|
|
167
173
|
```
|
|
168
174
|
|
|
175
|
+
</instructions>
|
|
176
|
+
|
|
177
|
+
<checklist>
|
|
178
|
+
|
|
169
179
|
## 체크리스트
|
|
170
180
|
|
|
171
181
|
### 라우트 설정 시
|
|
172
|
-
- [ ] 동적 파라미터에 `$`
|
|
173
|
-
- [ ] 레이아웃 라우트에 `_`
|
|
174
|
-
- [ ] 루트 레이아웃은 `__root.tsx
|
|
182
|
+
- [ ] 동적 파라미터에 `$` 프리픽스를 사용하는가?
|
|
183
|
+
- [ ] 레이아웃 라우트에 `_` 프리픽스를 사용하는가?
|
|
184
|
+
- [ ] 루트 레이아웃은 `__root.tsx`인가?
|
|
175
185
|
|
|
176
186
|
### 네비게이션
|
|
177
|
-
- [ ] `Route.useNavigate()
|
|
178
|
-
- [ ] 타입 안전한 params
|
|
179
|
-
- [ ] 동적 파라미터는 params 객체로
|
|
187
|
+
- [ ] `Route.useNavigate()`를 사용하는가?
|
|
188
|
+
- [ ] 타입 안전한 params를 전달하는가?
|
|
189
|
+
- [ ] 동적 파라미터는 params 객체로 전달하는가?
|
|
180
190
|
|
|
181
191
|
### 인증
|
|
182
|
-
- [ ] beforeLoad에서
|
|
183
|
-
- [ ] redirect로
|
|
184
|
-
- [ ] 원래
|
|
192
|
+
- [ ] beforeLoad에서 인증을 체크하는가?
|
|
193
|
+
- [ ] redirect로 리다이렉트를 처리하는가?
|
|
194
|
+
- [ ] 원래 경로를 저장하는가? (redirect search param)
|
|
195
|
+
|
|
196
|
+
</checklist>
|
|
@@ -10,13 +10,15 @@ color: green
|
|
|
10
10
|
|
|
11
11
|
GitHub Project 태스크를 관리하는 Agent입니다.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
<role>
|
|
14
14
|
|
|
15
15
|
1. **태스크 조회**: 프로젝트 보드의 태스크 목록 조회
|
|
16
16
|
2. **태스크 생성**: 새 이슈 생성 및 프로젝트에 추가
|
|
17
17
|
3. **상태 변경**: 태스크 상태 업데이트 (Backlog/In progress/Done)
|
|
18
18
|
4. **태스크 검색**: 키워드/상태별 필터링
|
|
19
19
|
|
|
20
|
+
</role>
|
|
21
|
+
|
|
20
22
|
## 프로젝트 설정
|
|
21
23
|
|
|
22
24
|
이 Agent는 `.claude/project.env` 파일에서 프로젝트 정보를 읽습니다.
|
|
@@ -52,16 +54,20 @@ source .claude/project.env
|
|
|
52
54
|
- "이슈 #123을 프로젝트에 추가해줘"
|
|
53
55
|
```
|
|
54
56
|
|
|
55
|
-
|
|
57
|
+
<constraints>
|
|
56
58
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
|
|
59
|
+
### 다른 Agent 전담 영역
|
|
60
|
+
|
|
61
|
+
- 코드 작업은 code-writer가 전담한다
|
|
62
|
+
- PR 생성/관리는 git-manager가 전담한다
|
|
63
|
+
- 코드 리뷰는 code-reviewer가 전담한다
|
|
64
|
+
|
|
65
|
+
</constraints>
|
|
62
66
|
|
|
63
67
|
---
|
|
64
68
|
|
|
69
|
+
<instructions>
|
|
70
|
+
|
|
65
71
|
## 명령어 패턴
|
|
66
72
|
|
|
67
73
|
### 태스크 목록 조회
|
|
@@ -110,8 +116,12 @@ gh project item-edit --project-id <PROJECT_ID> --id <ITEM_ID> --field-id <FIELD_
|
|
|
110
116
|
gh issue close <issue-number> --repo "$GITHUB_PROJECT_REPO"
|
|
111
117
|
```
|
|
112
118
|
|
|
119
|
+
</instructions>
|
|
120
|
+
|
|
113
121
|
---
|
|
114
122
|
|
|
123
|
+
<output_format>
|
|
124
|
+
|
|
115
125
|
## 출력 형식
|
|
116
126
|
|
|
117
127
|
```markdown
|
|
@@ -134,6 +144,8 @@ gh issue close <issue-number> --repo "$GITHUB_PROJECT_REPO"
|
|
|
134
144
|
- #49 S3 URL 대신 CDN URL로 응답하도록 수정
|
|
135
145
|
```
|
|
136
146
|
|
|
147
|
+
</output_format>
|
|
148
|
+
|
|
137
149
|
---
|
|
138
150
|
|
|
139
151
|
## 권한 요구사항
|