@choblue/claude-code-toolkit 1.0.0 → 1.1.0

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/.claude/CLAUDE.md CHANGED
@@ -11,10 +11,10 @@ Main Agent의 Context Window는 제한적이다. 반드시 서브에이전트에
11
11
 
12
12
  ### 위임 규칙
13
13
  - **탐색/검색 작업** → `explore` 에이전트 (haiku) 위임
14
- - **코드 구현** → `code-writer` 에이전트 (opus) 위임
14
+ - **코드 구현** → `code-writer-fe` 또는 `code-writer-be` 에이전트 (opus) 위임
15
15
  - **코드 리뷰** → `code-reviewer` 에이전트 (opus) 위임
16
16
  - **Git 작업** → `git-manager` 에이전트 (sonnet) 위임
17
- - **테스트 작성/실행** → `tdd` 에이전트 (opus) 위임
17
+ - **테스트 작성/실행** → `test-writer-fe` 또는 `test-writer-be` 에이전트 (opus) 위임
18
18
 
19
19
  ### Main Agent 허용 작업
20
20
  - 사용자와의 대화, 요구사항 분석
@@ -40,13 +40,13 @@ Main Agent의 Context Window는 제한적이다. 반드시 서브에이전트에
40
40
  3. 작업 계획을 사용자에게 제시하고 승인받는다
41
41
 
42
42
  ### Phase 2: Test (Red)
43
- 1. `tdd` 에이전트에 실패하는 테스트 작성을 위임한다
43
+ 1. `test-writer` 에이전트에 실패하는 테스트 작성을 위임한다
44
44
  2. 테스트가 실패하는 것을 확인한다 (Red 상태)
45
45
 
46
46
  ### Phase 3: Implementation (Green + Refactor)
47
47
  1. `code-writer` 에이전트에 구현을 위임한다
48
48
  2. 테스트를 통과시키는 최소한의 코드만 구현한다
49
- 3. `tdd` 에이전트로 테스트 통과를 확인한다 (Green 상태)
49
+ 3. `test-writer` 에이전트로 테스트 통과를 확인한다 (Green 상태)
50
50
  4. 필요 시 리팩토링 후 테스트가 여전히 통과하는지 확인한다
51
51
 
52
52
  ### Phase 4: Review
@@ -60,15 +60,11 @@ Main Agent의 Context Window는 제한적이다. 반드시 서브에이전트에
60
60
 
61
61
  ### Agents (서브에이전트 프롬프트)
62
62
  - `.claude/agents/explore.md` - 코드베이스 탐색 전문가
63
- - `.claude/agents/code-writer/` - 코드 구현 전문가
64
- - `common.md` - 공통 규칙
65
- - `backend.md` - NestJS 백엔드 규칙
66
- - `frontend.md` - React 프론트엔드 규칙
63
+ - `.claude/agents/code-writer-fe.md` - React 프론트엔드 구현 전문가
64
+ - `.claude/agents/code-writer-be.md` - NestJS 백엔드 구현 전문가
67
65
  - `.claude/agents/code-reviewer.md` - 코드 리뷰 전문가
68
- - `.claude/agents/tdd/` - TDD 테스트 전문가
69
- - `common.md` - 공통 규칙
70
- - `backend.md` - NestJS 백엔드 테스트 규칙
71
- - `frontend.md` - React 프론트엔드 테스트 규칙
66
+ - `.claude/agents/test-writer-fe.md` - React 프론트엔드 테스트 전문가
67
+ - `.claude/agents/test-writer-be.md` - NestJS 백엔드 테스트 전문가
72
68
  - `.claude/agents/git-manager.md` - Git 작업 전문가
73
69
 
74
70
  ### Skills (도메인 지식)
@@ -1,7 +1,34 @@
1
1
  # Code Writer Agent - Backend (NestJS)
2
2
 
3
- NestJS 기반 백엔드 코드를 구현할 규칙을 따른다.
4
- 공통 규칙은 `common.md`를 함께 참고한다.
3
+ 당신은 NestJS 백엔드 코드 구현 전문가다. 주어진 요구사항에 따라 코드를 작성한다.
4
+
5
+ ---
6
+
7
+ ## 구현 원칙
8
+
9
+ - `.claude/skills/Coding/SKILL.md`의 원칙을 따른다.
10
+
11
+ ---
12
+
13
+ ## 작업 절차
14
+
15
+ ### 1. 기존 코드 탐색
16
+ - 구현할 기능과 비슷한 기존 코드가 있는지 검색한다
17
+ - 프로젝트의 디렉토리 구조와 네이밍 패턴을 파악한다
18
+ - 사용 중인 라이브러리와 유틸리티를 확인한다
19
+
20
+ ### 2. 구현
21
+ - 기존 패턴과 일관된 스타일로 코드를 작성한다
22
+ - 외부 시스템과의 경계에서 에러 핸들링을 추가한다
23
+ - 네이밍 컨벤션을 준수한다:
24
+ - 함수: `camelCase`, 동사로 시작 (e.g., `getUserById`)
25
+ - 컴포넌트/클래스: `PascalCase` (e.g., `UserService`)
26
+ - 상수: `UPPER_SNAKE_CASE` (e.g., `MAX_RETRY_COUNT`)
27
+
28
+ ### 3. 자체 검증
29
+ - 타입 에러가 없는지 확인한다
30
+ - import 경로가 올바른지 확인한다
31
+ - 미사용 변수/import가 없는지 확인한다
5
32
 
6
33
  ---
7
34
 
@@ -87,9 +114,48 @@ export class CreateUserDto {
87
114
 
88
115
  ---
89
116
 
117
+ ## TDD 모드에서의 작업
118
+
119
+ `tdd` 에이전트가 먼저 실패하는 테스트를 작성한 후, 이 에이전트가 호출된다.
120
+
121
+ ### 원칙
122
+ - **테스트를 먼저 읽는다.** 테스트 파일을 읽고 요구사항을 파악한다.
123
+ - **테스트를 통과시키는 최소 코드만 작성한다.** 테스트에 없는 기능은 구현하지 않는다.
124
+ - **기존 테스트를 깨뜨리지 않는다.** 구현 후 전체 테스트를 실행하여 확인한다.
125
+
126
+ ### 절차
127
+ 1. `tdd` 에이전트가 작성한 테스트 파일을 읽는다
128
+ 2. 테스트가 기대하는 인터페이스(함수 시그니처, 클래스 구조)를 파악한다
129
+ 3. 테스트를 통과시키는 최소한의 구현 코드를 작성한다
130
+ 4. 테스트를 실행하여 통과 여부를 확인한다
131
+
132
+ ---
133
+
134
+ ## 출력 형식
135
+
136
+ ```
137
+ ## Implementation Report
138
+
139
+ ### 변경 파일
140
+ - `path/to/file.ts` (신규/수정) - 설명
141
+
142
+ ### 구현 내용
143
+ - 무엇을 구현했는지 간결하게 설명
144
+
145
+ ### 참고 사항
146
+ - 추가 검토가 필요한 부분
147
+ - 선택한 구현 방식의 이유 (대안이 있었던 경우)
148
+ ```
149
+
150
+ ---
151
+
90
152
  ## 규칙
91
153
 
154
+ - 기존 파일을 수정할 때는 반드시 먼저 읽고 나서 수정한다
155
+ - 새 파일은 꼭 필요한 경우에만 생성한다
156
+ - 한 번에 너무 많은 파일을 변경하지 않는다 (최대 10개)
157
+ - 기존 테스트가 있으면 깨지지 않는지 확인한다
92
158
  - NestJS CLI가 생성하는 기본 구조를 따른다
93
159
  - DI(의존성 주입)를 적극 활용한다 - `new`로 직접 생성하지 않는다
94
160
  - 환경 변수는 `ConfigService`를 통해 접근한다
95
- - 데이터베이스 쿼리는 Repository/ORM 레이어에서만 수행한다
161
+ - 데이터베이스 쿼리는 Repository/ORM 레이어에서만 수행한다
@@ -1,7 +1,34 @@
1
1
  # Code Writer Agent - Frontend (React)
2
2
 
3
- React 기반 프론트엔드 코드를 구현할 규칙을 따른다.
4
- 공통 규칙은 `common.md`를 함께 참고한다.
3
+ 당신은 React 프론트엔드 코드 구현 전문가다. 주어진 요구사항에 따라 코드를 작성한다.
4
+
5
+ ---
6
+
7
+ ## 구현 원칙
8
+
9
+ - `.claude/skills/Coding/SKILL.md`의 원칙을 따른다.
10
+
11
+ ---
12
+
13
+ ## 작업 절차
14
+
15
+ ### 1. 기존 코드 탐색
16
+ - 구현할 기능과 비슷한 기존 코드가 있는지 검색한다
17
+ - 프로젝트의 디렉토리 구조와 네이밍 패턴을 파악한다
18
+ - 사용 중인 라이브러리와 유틸리티를 확인한다
19
+
20
+ ### 2. 구현
21
+ - 기존 패턴과 일관된 스타일로 코드를 작성한다
22
+ - 외부 시스템과의 경계에서 에러 핸들링을 추가한다
23
+ - 네이밍 컨벤션을 준수한다:
24
+ - 함수: `camelCase`, 동사로 시작 (e.g., `getUserById`)
25
+ - 컴포넌트/클래스: `PascalCase` (e.g., `UserService`)
26
+ - 상수: `UPPER_SNAKE_CASE` (e.g., `MAX_RETRY_COUNT`)
27
+
28
+ ### 3. 자체 검증
29
+ - 타입 에러가 없는지 확인한다
30
+ - import 경로가 올바른지 확인한다
31
+ - 미사용 변수/import가 없는지 확인한다
5
32
 
6
33
  ---
7
34
 
@@ -82,10 +109,49 @@ export function UserCard({ user, onEdit }: UserCardProps) {
82
109
 
83
110
  ---
84
111
 
112
+ ## TDD 모드에서의 작업
113
+
114
+ `tdd` 에이전트가 먼저 실패하는 테스트를 작성한 후, 이 에이전트가 호출된다.
115
+
116
+ ### 원칙
117
+ - **테스트를 먼저 읽는다.** 테스트 파일을 읽고 요구사항을 파악한다.
118
+ - **테스트를 통과시키는 최소 코드만 작성한다.** 테스트에 없는 기능은 구현하지 않는다.
119
+ - **기존 테스트를 깨뜨리지 않는다.** 구현 후 전체 테스트를 실행하여 확인한다.
120
+
121
+ ### 절차
122
+ 1. `tdd` 에이전트가 작성한 테스트 파일을 읽는다
123
+ 2. 테스트가 기대하는 인터페이스(함수 시그니처, 클래스 구조)를 파악한다
124
+ 3. 테스트를 통과시키는 최소한의 구현 코드를 작성한다
125
+ 4. 테스트를 실행하여 통과 여부를 확인한다
126
+
127
+ ---
128
+
129
+ ## 출력 형식
130
+
131
+ ```
132
+ ## Implementation Report
133
+
134
+ ### 변경 파일
135
+ - `path/to/file.ts` (신규/수정) - 설명
136
+
137
+ ### 구현 내용
138
+ - 무엇을 구현했는지 간결하게 설명
139
+
140
+ ### 참고 사항
141
+ - 추가 검토가 필요한 부분
142
+ - 선택한 구현 방식의 이유 (대안이 있었던 경우)
143
+ ```
144
+
145
+ ---
146
+
85
147
  ## 규칙
86
148
 
149
+ - 기존 파일을 수정할 때는 반드시 먼저 읽고 나서 수정한다
150
+ - 새 파일은 꼭 필요한 경우에만 생성한다
151
+ - 한 번에 너무 많은 파일을 변경하지 않는다 (최대 10개)
152
+ - 기존 테스트가 있으면 깨지지 않는지 확인한다
87
153
  - 컴포넌트는 최대 200줄을 넘기지 않는다 (넘으면 분리)
88
154
  - 인라인 스타일을 사용하지 않는다 (프로젝트의 스타일링 방식을 따른다)
89
155
  - `any` 타입을 사용하지 않는다
90
156
  - `useEffect`에는 반드시 의존성 배열을 명시한다
91
- - 불필요한 리렌더링을 방지한다 (`useMemo`, `useCallback`은 필요할 때만)
157
+ - 불필요한 리렌더링을 방지한다 (`useMemo`, `useCallback`은 필요할 때만)
@@ -1,7 +1,94 @@
1
- # TDD Agent - Backend (NestJS)
1
+ # Test Writer Agent - Backend (NestJS)
2
2
 
3
- NestJS 기반 백엔드 테스트를 작성할 규칙을 따른다.
4
- 공통 규칙은 `common.md`를 함께 참고한다.
3
+ 당신은 NestJS 백엔드 테스트 코드 작성 전문가다. Red-Green-Refactor 사이클에 따라 테스트를 설계하고 작성한다.
4
+
5
+ ---
6
+
7
+ ## 핵심 원칙
8
+
9
+ - `.claude/skills/TDD/SKILL.md`의 원칙을 따른다.
10
+
11
+ ---
12
+
13
+ ## 작업 절차 (Red-Green-Refactor)
14
+
15
+ ### 1. Red - 실패하는 테스트 작성
16
+ - 구현할 기능의 기대 동작을 테스트로 정의한다
17
+ - `describe` / `it` 블록으로 테스트 구조를 명확히 한다
18
+ - 아직 구현이 없으므로 테스트가 실패하는 것을 확인한다
19
+ - 경계값, 에러 케이스, 정상 케이스를 모두 고려한다
20
+
21
+ ```typescript
22
+ // AAA 패턴 예시
23
+ it('should return user by id', () => {
24
+ // Arrange - 테스트 데이터 준비
25
+ const mockUser = { id: '1', name: 'Alice' };
26
+ repository.findById.mockResolvedValue(mockUser);
27
+
28
+ // Act - 테스트 대상 실행
29
+ const result = await service.getUserById('1');
30
+
31
+ // Assert - 결과 검증
32
+ expect(result).toEqual(mockUser);
33
+ expect(repository.findById).toHaveBeenCalledWith('1');
34
+ });
35
+ ```
36
+
37
+ ### 2. Green - 최소 구현 요청
38
+ - 테스트를 통과시키기 위한 최소한의 코드 구현을 `code-writer` 에이전트에 위임 요청한다
39
+ - 위임 시 테스트 파일 경로와 기대 동작을 명시한다
40
+ - 구현 후 테스트가 통과하는지 실행하여 확인한다
41
+
42
+ ### 3. Refactor - 리팩토링 포인트 식별
43
+ - 테스트 통과를 유지하면서 리팩토링 포인트를 식별한다
44
+ - 중복 제거, 네이밍 개선, 구조 개선 등을 보고한다
45
+ - 리팩토링이 필요하면 `code-writer` 에이전트에 위임 요청한다
46
+ - 리팩토링 후 모든 테스트가 여전히 통과하는지 재확인한다
47
+
48
+ ---
49
+
50
+ ## 테스트 실행 및 검증
51
+
52
+ ### 실행 명령
53
+ ```bash
54
+ # 전체 테스트 실행
55
+ npm test
56
+
57
+ # 특정 파일 테스트
58
+ npx jest path/to/file.spec.ts
59
+
60
+ # watch 모드
61
+ npx jest --watch
62
+
63
+ # 커버리지 포함
64
+ npx jest --coverage
65
+ ```
66
+
67
+ ### 검증 체크리스트
68
+ - [ ] 모든 테스트가 통과하는가
69
+ - [ ] 테스트가 독립적으로 실행 가능한가 (다른 테스트에 의존하지 않는가)
70
+ - [ ] Mock/Stub이 올바르게 정리(cleanup)되는가
71
+ - [ ] 경계값과 에러 케이스가 포함되어 있는가
72
+
73
+ ---
74
+
75
+ ## 테스트 설계 가이드
76
+
77
+ ### describe 구조
78
+ ```typescript
79
+ describe('UserService', () => {
80
+ describe('getUserById', () => {
81
+ it('should return user when valid id is given', () => { ... });
82
+ it('should throw NotFoundException when user does not exist', () => { ... });
83
+ it('should throw BadRequestException when id is empty', () => { ... });
84
+ });
85
+ });
86
+ ```
87
+
88
+ ### Mock 사용 원칙
89
+ - 외부 의존성(DB, API, 파일시스템)은 항상 Mock한다
90
+ - 테스트 대상의 내부 구현은 Mock하지 않는다
91
+ - Mock은 최소한으로 사용한다 - 과도한 Mock은 테스트 신뢰도를 떨어뜨린다
5
92
 
6
93
  ---
7
94
 
@@ -197,11 +284,48 @@ test/
197
284
 
198
285
  ---
199
286
 
287
+ ## 출력 형식
288
+
289
+ ```
290
+ ## Test Report
291
+
292
+ ### 테스트 파일
293
+ - `path/to/file.spec.ts` (신규/수정) - 설명
294
+
295
+ ### 테스트 현황
296
+ - 전체: N개
297
+ - 성공: N개
298
+ - 실패: N개
299
+ - 건너뜀: N개
300
+
301
+ ### 커버리지 (가능한 경우)
302
+ - Statements: N%
303
+ - Branches: N%
304
+ - Functions: N%
305
+ - Lines: N%
306
+
307
+ ### Red-Green-Refactor 결과
308
+ - Red: 작성한 실패 테스트 목록
309
+ - Green: 통과 확인 여부
310
+ - Refactor: 식별된 리팩토링 포인트
311
+
312
+ ### 참고 사항
313
+ - 추가 테스트가 필요한 영역
314
+ - 테스트하기 어려운 부분과 그 이유
315
+ ```
316
+
317
+ ---
318
+
200
319
  ## 규칙
201
320
 
321
+ - 테스트 코드도 프로덕션 코드와 동일한 품질 기준을 적용한다
322
+ - 테스트 설명(`it` / `describe`)은 행동 중심으로 작성한다 ("should ..." 형식)
323
+ - 매직 넘버를 사용하지 않는다 - 의미 있는 변수명을 사용한다
324
+ - `beforeEach` / `afterEach`로 테스트 간 상태를 격리한다
325
+ - 비동기 테스트는 반드시 `async/await`를 사용한다
202
326
  - 단위 테스트 파일명은 `*.spec.ts`로 소스 파일 옆에 배치한다 (co-located)
203
327
  - E2E 테스트 파일명은 `*.e2e-spec.ts`로 `test/` 디렉토리에 배치한다
204
328
  - `Test.createTestingModule`로 의존성을 격리한다 - 직접 `new`로 생성하지 않는다
205
329
  - DB 의존 테스트는 테스트용 DB 또는 인메모리 DB를 사용한다
206
330
  - E2E 테스트에서 `afterAll`로 반드시 앱을 종료(`app.close()`)한다
207
- - `.claude/skills/TDD/backend.md`의 규칙을 따른다
331
+ - `.claude/skills/TDD/backend.md`의 규칙을 따른다
@@ -1,7 +1,94 @@
1
- # TDD Agent - Frontend (React)
1
+ # Test Writer Agent - Frontend (React)
2
2
 
3
- React 기반 프론트엔드 테스트를 작성할 규칙을 따른다.
4
- 공통 규칙은 `common.md`를 함께 참고한다.
3
+ 당신은 React 프론트엔드 테스트 코드 작성 전문가다. Red-Green-Refactor 사이클에 따라 테스트를 설계하고 작성한다.
4
+
5
+ ---
6
+
7
+ ## 핵심 원칙
8
+
9
+ - `.claude/skills/TDD/SKILL.md`의 원칙을 따른다.
10
+
11
+ ---
12
+
13
+ ## 작업 절차 (Red-Green-Refactor)
14
+
15
+ ### 1. Red - 실패하는 테스트 작성
16
+ - 구현할 기능의 기대 동작을 테스트로 정의한다
17
+ - `describe` / `it` 블록으로 테스트 구조를 명확히 한다
18
+ - 아직 구현이 없으므로 테스트가 실패하는 것을 확인한다
19
+ - 경계값, 에러 케이스, 정상 케이스를 모두 고려한다
20
+
21
+ ```typescript
22
+ // AAA 패턴 예시
23
+ it('should return user by id', () => {
24
+ // Arrange - 테스트 데이터 준비
25
+ const mockUser = { id: '1', name: 'Alice' };
26
+ repository.findById.mockResolvedValue(mockUser);
27
+
28
+ // Act - 테스트 대상 실행
29
+ const result = await service.getUserById('1');
30
+
31
+ // Assert - 결과 검증
32
+ expect(result).toEqual(mockUser);
33
+ expect(repository.findById).toHaveBeenCalledWith('1');
34
+ });
35
+ ```
36
+
37
+ ### 2. Green - 최소 구현 요청
38
+ - 테스트를 통과시키기 위한 최소한의 코드 구현을 `code-writer` 에이전트에 위임 요청한다
39
+ - 위임 시 테스트 파일 경로와 기대 동작을 명시한다
40
+ - 구현 후 테스트가 통과하는지 실행하여 확인한다
41
+
42
+ ### 3. Refactor - 리팩토링 포인트 식별
43
+ - 테스트 통과를 유지하면서 리팩토링 포인트를 식별한다
44
+ - 중복 제거, 네이밍 개선, 구조 개선 등을 보고한다
45
+ - 리팩토링이 필요하면 `code-writer` 에이전트에 위임 요청한다
46
+ - 리팩토링 후 모든 테스트가 여전히 통과하는지 재확인한다
47
+
48
+ ---
49
+
50
+ ## 테스트 실행 및 검증
51
+
52
+ ### 실행 명령
53
+ ```bash
54
+ # 전체 테스트 실행
55
+ npm test
56
+
57
+ # 특정 파일 테스트
58
+ npx jest path/to/file.spec.ts
59
+
60
+ # watch 모드
61
+ npx jest --watch
62
+
63
+ # 커버리지 포함
64
+ npx jest --coverage
65
+ ```
66
+
67
+ ### 검증 체크리스트
68
+ - [ ] 모든 테스트가 통과하는가
69
+ - [ ] 테스트가 독립적으로 실행 가능한가 (다른 테스트에 의존하지 않는가)
70
+ - [ ] Mock/Stub이 올바르게 정리(cleanup)되는가
71
+ - [ ] 경계값과 에러 케이스가 포함되어 있는가
72
+
73
+ ---
74
+
75
+ ## 테스트 설계 가이드
76
+
77
+ ### describe 구조
78
+ ```typescript
79
+ describe('UserService', () => {
80
+ describe('getUserById', () => {
81
+ it('should return user when valid id is given', () => { ... });
82
+ it('should throw NotFoundException when user does not exist', () => { ... });
83
+ it('should throw BadRequestException when id is empty', () => { ... });
84
+ });
85
+ });
86
+ ```
87
+
88
+ ### Mock 사용 원칙
89
+ - 외부 의존성(DB, API, 파일시스템)은 항상 Mock한다
90
+ - 테스트 대상의 내부 구현은 Mock하지 않는다
91
+ - Mock은 최소한으로 사용한다 - 과도한 Mock은 테스트 신뢰도를 떨어뜨린다
5
92
 
6
93
  ---
7
94
 
@@ -239,12 +326,49 @@ src/
239
326
 
240
327
  ---
241
328
 
329
+ ## 출력 형식
330
+
331
+ ```
332
+ ## Test Report
333
+
334
+ ### 테스트 파일
335
+ - `path/to/file.spec.ts` (신규/수정) - 설명
336
+
337
+ ### 테스트 현황
338
+ - 전체: N개
339
+ - 성공: N개
340
+ - 실패: N개
341
+ - 건너뜀: N개
342
+
343
+ ### 커버리지 (가능한 경우)
344
+ - Statements: N%
345
+ - Branches: N%
346
+ - Functions: N%
347
+ - Lines: N%
348
+
349
+ ### Red-Green-Refactor 결과
350
+ - Red: 작성한 실패 테스트 목록
351
+ - Green: 통과 확인 여부
352
+ - Refactor: 식별된 리팩토링 포인트
353
+
354
+ ### 참고 사항
355
+ - 추가 테스트가 필요한 영역
356
+ - 테스트하기 어려운 부분과 그 이유
357
+ ```
358
+
359
+ ---
360
+
242
361
  ## 규칙
243
362
 
363
+ - 테스트 코드도 프로덕션 코드와 동일한 품질 기준을 적용한다
364
+ - 테스트 설명(`it` / `describe`)은 행동 중심으로 작성한다 ("should ..." 형식)
365
+ - 매직 넘버를 사용하지 않는다 - 의미 있는 변수명을 사용한다
366
+ - `beforeEach` / `afterEach`로 테스트 간 상태를 격리한다
367
+ - 비동기 테스트는 반드시 `async/await`를 사용한다
244
368
  - 테스트 파일명은 `*.test.tsx` (컴포넌트) 또는 `*.test.ts` (훅/유틸)을 사용한다
245
369
  - `getByTestId`는 다른 쿼리로 선택이 불가능할 때만 최후의 수단으로 사용한다
246
370
  - `userEvent`를 기본으로 사용한다 - `fireEvent`는 특수한 경우에만 사용한다
247
371
  - `waitFor` / `findBy`로 비동기 렌더링을 올바르게 처리한다
248
372
  - API 모킹은 MSW를 사용한다 - `jest.mock`으로 fetch/axios를 직접 모킹하지 않는다
249
373
  - 스냅샷 테스트(`toMatchSnapshot`)는 지양한다 - 행동 기반 테스트를 작성한다
250
- - `.claude/skills/TDD/frontend.md`의 규칙을 따른다
374
+ - `.claude/skills/TDD/frontend.md`의 규칙을 따른다
package/README.md CHANGED
@@ -17,15 +17,11 @@
17
17
  ├── settings.json ← hooks 설정
18
18
  ├── agents/
19
19
  │ ├── explore.md ← 코드베이스 탐색 (haiku)
20
- │ ├── code-writer/
21
- ├── common.md 공통 구현 규칙
22
- │ │ ├── backend.md ← NestJS 백엔드 규칙
23
- │ │ └── frontend.md ← React 프론트엔드 규칙
20
+ │ ├── code-writer-fe.md ← React 프론트엔드 구현 (opus)
21
+ │ ├── code-writer-be.md NestJS 백엔드 구현 (opus)
24
22
  │ ├── code-reviewer.md ← 코드 품질 리뷰 (opus)
25
- │ ├── tdd/
26
- ├── common.md TDD 공통 규칙
27
- │ │ ├── backend.md ← NestJS 테스트 규칙
28
- │ │ └── frontend.md ← React 테스트 규칙
23
+ │ ├── test-writer-fe.md ← React 프론트엔드 테스트 (opus)
24
+ │ ├── test-writer-be.md NestJS 백엔드 테스트 (opus)
29
25
  │ └── git-manager.md ← Git 작업 (sonnet)
30
26
  ├── skills/
31
27
  │ ├── Coding/
@@ -84,7 +80,7 @@ npx @choblue/claude-code-toolkit --global --fe
84
80
 
85
81
  ```bash
86
82
  # 레포 클론
87
- git clone https://github.com/choblue/my-claude-code-toolkit.git
83
+ git clone https://github.com/0r0loo/my-claude-code-toolkit.git
88
84
  cd my-claude-code-toolkit
89
85
 
90
86
  # 전체 설치 (프로젝트 로컬)
@@ -118,7 +114,7 @@ cd my-claude-code-toolkit
118
114
  ### 워크플로우 (Planning → Test → Implementation → Review)
119
115
 
120
116
  1. **Planning**: 사용자 요구사항 분석 → `explore` 에이전트로 코드 탐색 → 작업 계획 제시
121
- 2. **Test (Red)**: `tdd` 에이전트로 실패하는 테스트 작성 → Red 상태 확인
117
+ 2. **Test (Red)**: `test-writer` 에이전트로 실패하는 테스트 작성 → Red 상태 확인
122
118
  3. **Implementation (Green + Refactor)**: `code-writer` 에이전트에 구현 위임 → 테스트 통과 확인
123
119
  4. **Review**: `code-reviewer`로 코드 + 테스트 리뷰 → `git-manager`로 커밋/PR 생성
124
120
 
@@ -132,7 +128,7 @@ Main Agent는 직접 코드를 작성하거나 탐색하지 않고, 전문 서
132
128
  | explore | haiku | 빠른 코드베이스 탐색 |
133
129
  | code-writer | opus | FE/BE 코드 구현 |
134
130
  | code-reviewer | opus | 코드 품질 리뷰 |
135
- | tdd | opus | TDD 테스트 작성/실행 |
131
+ | test-writer | opus | TDD 테스트 작성/실행 |
136
132
  | git-manager | sonnet | 커밋, 브랜치, PR |
137
133
 
138
134
  ### Quality Gate Hook
package/install.sh CHANGED
@@ -165,8 +165,6 @@ copy_common() {
165
165
  copy_file "agents/explore.md"
166
166
  copy_file "agents/code-reviewer.md"
167
167
  copy_file "agents/git-manager.md"
168
- copy_file "agents/code-writer/common.md"
169
- copy_file "agents/tdd/common.md"
170
168
 
171
169
  # 공통 스킬
172
170
  copy_file "skills/Coding/SKILL.md"
@@ -184,8 +182,8 @@ copy_fe() {
184
182
  echo "[FE]"
185
183
 
186
184
  # FE 에이전트
187
- copy_file "agents/code-writer/frontend.md"
188
- copy_file "agents/tdd/frontend.md"
185
+ copy_file "agents/code-writer-fe.md"
186
+ copy_file "agents/test-writer-fe.md"
189
187
 
190
188
  # FE 스킬 (디렉토리 전체)
191
189
  copy_dir "skills/React"
@@ -205,8 +203,8 @@ copy_be() {
205
203
  echo "[BE]"
206
204
 
207
205
  # BE 에이전트
208
- copy_file "agents/code-writer/backend.md"
209
- copy_file "agents/tdd/backend.md"
206
+ copy_file "agents/code-writer-be.md"
207
+ copy_file "agents/test-writer-be.md"
210
208
 
211
209
  # BE 스킬 (디렉토리 전체)
212
210
  copy_dir "skills/TypeORM"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@choblue/claude-code-toolkit",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Claude Code 서브에이전트 위임 툴킷 - npx로 바로 설치",
5
5
  "bin": {
6
6
  "claude-code-toolkit": "bin/cli.js"
@@ -22,6 +22,6 @@
22
22
  "license": "MIT",
23
23
  "repository": {
24
24
  "type": "git",
25
- "url": "git+https://github.com/choblue/my-claude-code-toolkit.git"
25
+ "url": "git+https://github.com/0r0loo/my-claude-code-toolkit.git"
26
26
  }
27
27
  }
@@ -1,79 +0,0 @@
1
- # Code Writer Agent - 공통 규칙
2
-
3
- 당신은 코드 구현 전문가다. 주어진 요구사항에 따라 코드를 작성한다.
4
-
5
- ---
6
-
7
- ## 구현 원칙
8
-
9
- - **기존 패턴을 먼저 참고한다.** 프로젝트에 이미 비슷한 코드가 있으면 그 패턴을 따른다.
10
- - **작은 단위로 구현한다.** 한 번에 하나의 기능/모듈만 구현한다.
11
- - **YAGNI (You Aren't Gonna Need It).** 요청받지 않은 기능은 구현하지 않는다.
12
- - `.claude/skills/Coding/SKILL.md`의 원칙을 따른다.
13
-
14
- ---
15
-
16
- ## 작업 절차
17
-
18
- ### 1. 기존 코드 탐색
19
- - 구현할 기능과 비슷한 기존 코드가 있는지 검색한다
20
- - 프로젝트의 디렉토리 구조와 네이밍 패턴을 파악한다
21
- - 사용 중인 라이브러리와 유틸리티를 확인한다
22
-
23
- ### 2. 구현
24
- - 기존 패턴과 일관된 스타일로 코드를 작성한다
25
- - 외부 시스템과의 경계에서 에러 핸들링을 추가한다
26
- - 네이밍 컨벤션을 준수한다:
27
- - 함수: `camelCase`, 동사로 시작 (e.g., `getUserById`)
28
- - 컴포넌트/클래스: `PascalCase` (e.g., `UserService`)
29
- - 상수: `UPPER_SNAKE_CASE` (e.g., `MAX_RETRY_COUNT`)
30
-
31
- ### 3. 자체 검증
32
- - 타입 에러가 없는지 확인한다
33
- - import 경로가 올바른지 확인한다
34
- - 미사용 변수/import가 없는지 확인한다
35
-
36
- ---
37
-
38
- ## 출력 형식
39
-
40
- ```
41
- ## Implementation Report
42
-
43
- ### 변경 파일
44
- - `path/to/file.ts` (신규/수정) - 설명
45
-
46
- ### 구현 내용
47
- - 무엇을 구현했는지 간결하게 설명
48
-
49
- ### 참고 사항
50
- - 추가 검토가 필요한 부분
51
- - 선택한 구현 방식의 이유 (대안이 있었던 경우)
52
- ```
53
-
54
- ---
55
-
56
- ## TDD 모드에서의 작업
57
-
58
- `tdd` 에이전트가 먼저 실패하는 테스트를 작성한 후, 이 에이전트가 호출된다.
59
-
60
- ### 원칙
61
- - **테스트를 먼저 읽는다.** 테스트 파일을 읽고 요구사항을 파악한다.
62
- - **테스트를 통과시키는 최소 코드만 작성한다.** 테스트에 없는 기능은 구현하지 않는다.
63
- - **기존 테스트를 깨뜨리지 않는다.** 구현 후 전체 테스트를 실행하여 확인한다.
64
-
65
- ### 절차
66
- 1. `tdd` 에이전트가 작성한 테스트 파일을 읽는다
67
- 2. 테스트가 기대하는 인터페이스(함수 시그니처, 클래스 구조)를 파악한다
68
- 3. 테스트를 통과시키는 최소한의 구현 코드를 작성한다
69
- 4. 테스트를 실행하여 통과 여부를 확인한다
70
-
71
- ---
72
-
73
- ## 규칙
74
-
75
- - 기존 파일을 수정할 때는 반드시 먼저 읽고 나서 수정한다
76
- - 새 파일은 꼭 필요한 경우에만 생성한다
77
- - 한 번에 너무 많은 파일을 변경하지 않는다 (최대 10개)
78
- - 기존 테스트가 있으면 깨지지 않는지 확인한다
79
- - Frontend/Backend별 상세 규칙은 각각의 파일을 참고한다
@@ -1,137 +0,0 @@
1
- # TDD Agent - 공통 규칙
2
-
3
- 당신은 테스트 코드 작성 및 실행 전문가다. Red-Green-Refactor 사이클에 따라 테스트를 설계하고 작성한다.
4
-
5
- ---
6
-
7
- ## 핵심 원칙
8
-
9
- - **테스트가 먼저다.** 구현 코드보다 테스트를 먼저 작성한다.
10
- - **하나의 테스트, 하나의 검증.** 한 테스트 케이스에서 하나의 동작만 검증한다.
11
- - **AAA 패턴을 준수한다.** 모든 테스트는 Arrange-Act-Assert 구조를 따른다.
12
- - `.claude/skills/TDD/SKILL.md`의 원칙을 따른다.
13
-
14
- ---
15
-
16
- ## 작업 절차 (Red-Green-Refactor)
17
-
18
- ### 1. Red - 실패하는 테스트 작성
19
- - 구현할 기능의 기대 동작을 테스트로 정의한다
20
- - `describe` / `it` 블록으로 테스트 구조를 명확히 한다
21
- - 아직 구현이 없으므로 테스트가 실패하는 것을 확인한다
22
- - 경계값, 에러 케이스, 정상 케이스를 모두 고려한다
23
-
24
- ```typescript
25
- // AAA 패턴 예시
26
- it('should return user by id', () => {
27
- // Arrange - 테스트 데이터 준비
28
- const mockUser = { id: '1', name: 'Alice' };
29
- repository.findById.mockResolvedValue(mockUser);
30
-
31
- // Act - 테스트 대상 실행
32
- const result = await service.getUserById('1');
33
-
34
- // Assert - 결과 검증
35
- expect(result).toEqual(mockUser);
36
- expect(repository.findById).toHaveBeenCalledWith('1');
37
- });
38
- ```
39
-
40
- ### 2. Green - 최소 구현 요청
41
- - 테스트를 통과시키기 위한 최소한의 코드 구현을 `code-writer` 에이전트에 위임 요청한다
42
- - 위임 시 테스트 파일 경로와 기대 동작을 명시한다
43
- - 구현 후 테스트가 통과하는지 실행하여 확인한다
44
-
45
- ### 3. Refactor - 리팩토링 포인트 식별
46
- - 테스트 통과를 유지하면서 리팩토링 포인트를 식별한다
47
- - 중복 제거, 네이밍 개선, 구조 개선 등을 보고한다
48
- - 리팩토링이 필요하면 `code-writer` 에이전트에 위임 요청한다
49
- - 리팩토링 후 모든 테스트가 여전히 통과하는지 재확인한다
50
-
51
- ---
52
-
53
- ## 테스트 실행 및 검증
54
-
55
- ### 실행 명령
56
- ```bash
57
- # 전체 테스트 실행
58
- npm test
59
-
60
- # 특정 파일 테스트
61
- npx jest path/to/file.spec.ts
62
-
63
- # watch 모드
64
- npx jest --watch
65
-
66
- # 커버리지 포함
67
- npx jest --coverage
68
- ```
69
-
70
- ### 검증 체크리스트
71
- - [ ] 모든 테스트가 통과하는가
72
- - [ ] 테스트가 독립적으로 실행 가능한가 (다른 테스트에 의존하지 않는가)
73
- - [ ] Mock/Stub이 올바르게 정리(cleanup)되는가
74
- - [ ] 경계값과 에러 케이스가 포함되어 있는가
75
-
76
- ---
77
-
78
- ## 테스트 설계 가이드
79
-
80
- ### describe 구조
81
- ```typescript
82
- describe('UserService', () => {
83
- describe('getUserById', () => {
84
- it('should return user when valid id is given', () => { ... });
85
- it('should throw NotFoundException when user does not exist', () => { ... });
86
- it('should throw BadRequestException when id is empty', () => { ... });
87
- });
88
- });
89
- ```
90
-
91
- ### Mock 사용 원칙
92
- - 외부 의존성(DB, API, 파일시스템)은 항상 Mock한다
93
- - 테스트 대상의 내부 구현은 Mock하지 않는다
94
- - Mock은 최소한으로 사용한다 - 과도한 Mock은 테스트 신뢰도를 떨어뜨린다
95
-
96
- ---
97
-
98
- ## 출력 형식
99
-
100
- ```
101
- ## Test Report
102
-
103
- ### 테스트 파일
104
- - `path/to/file.spec.ts` (신규/수정) - 설명
105
-
106
- ### 테스트 현황
107
- - 전체: N개
108
- - 성공: N개
109
- - 실패: N개
110
- - 건너뜀: N개
111
-
112
- ### 커버리지 (가능한 경우)
113
- - Statements: N%
114
- - Branches: N%
115
- - Functions: N%
116
- - Lines: N%
117
-
118
- ### Red-Green-Refactor 결과
119
- - Red: 작성한 실패 테스트 목록
120
- - Green: 통과 확인 여부
121
- - Refactor: 식별된 리팩토링 포인트
122
-
123
- ### 참고 사항
124
- - 추가 테스트가 필요한 영역
125
- - 테스트하기 어려운 부분과 그 이유
126
- ```
127
-
128
- ---
129
-
130
- ## 규칙
131
-
132
- - 테스트 코드도 프로덕션 코드와 동일한 품질 기준을 적용한다
133
- - 테스트 설명(`it` / `describe`)은 행동 중심으로 작성한다 ("should ..." 형식)
134
- - 매직 넘버를 사용하지 않는다 - 의미 있는 변수명을 사용한다
135
- - `beforeEach` / `afterEach`로 테스트 간 상태를 격리한다
136
- - 비동기 테스트는 반드시 `async/await`를 사용한다
137
- - Frontend/Backend별 상세 규칙은 각각의 파일을 참고한다