@jjlabsio/claude-crew 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.
@@ -11,7 +11,7 @@
11
11
  "name": "claude-crew",
12
12
  "source": "./",
13
13
  "description": "오케스트레이터 + PM, 플래너, 개발, QA, 마케팅 에이전트 팀으로 단일 제품의 개발과 마케팅을 통합 관리",
14
- "version": "0.1.9",
14
+ "version": "0.1.11",
15
15
  "author": {
16
16
  "name": "Jaejin Song",
17
17
  "email": "wowlxx28@gmail.com"
@@ -28,5 +28,5 @@
28
28
  "category": "workflow"
29
29
  }
30
30
  ],
31
- "version": "0.1.9"
31
+ "version": "0.1.11"
32
32
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-crew",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "1인 SaaS 개발자를 위한 멀티 에이전트 오케스트레이션 — 개발, 마케팅, 일정을 한 대화에서 통합 관리",
5
5
  "author": {
6
6
  "name": "Jaejin Song",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlabsio/claude-crew",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "1인 SaaS 개발자를 위한 멀티 에이전트 오케스트레이션 — 개발, 마케팅, 일정을 한 대화에서 통합 관리",
5
5
  "author": "Jaejin Song <wowlxx28@gmail.com>",
6
6
  "license": "MIT",
@@ -51,10 +51,10 @@ async function main() {
51
51
  settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
52
52
  }
53
53
 
54
- // Check if statusLine is already set to crew HUD
54
+ // Check if statusLine is already set to the *current* plugin path
55
55
  const currentCommand = settings.statusLine?.command || '';
56
- if (currentCommand.includes('crew') && currentCommand.includes('hud/index.mjs')) {
57
- // Already configured
56
+ if (currentCommand === hudCommand) {
57
+ // Already configured with this exact version
58
58
  console.log(JSON.stringify({ continue: true }));
59
59
  return;
60
60
  }
@@ -121,16 +121,23 @@ brief.md, spec.md, analysis.md는 읽지 않는다.
121
121
 
122
122
  ## 작업 순서
123
123
  1. plan.md의 유저 스토리와 태스크 목록을 확인한다.
124
- 2. 코드베이스를 탐색한다 (Glob, Grep, Read로 관련 파일 파악).
125
- 3. 유저 스토리 단위로 순차 구현한다.
126
- 4. 유저 스토리 완료 dev-log.md에 진행상황을 기록한다.
127
- 5. 모든 구현 완료 자체 검증을 실행한다:
124
+ 2. plan.md의 `## 테스트 전략` 섹션을 확인한다.
125
+ 3. 코드베이스를 탐색한다 (Glob, Grep, Read로 관련 파일 파악).
126
+ 4. 유저 스토리 단위로 순차 구현한다.
127
+ - **TDD인 경우**: 태스크에서 반드시 RED→GREEN→REFACTOR 순서를 따른다.
128
+ 1. RED: 실패하는 테스트를 먼저 작성하고 실행하여 FAIL을 확인한다.
129
+ 2. GREEN: 테스트를 통과하는 최소한의 코드를 작성한다.
130
+ 3. REFACTOR: 코드 품질을 개선한다 (필요시).
131
+ - **Tests-after인 경우**: 구현을 먼저 완료한 후, plan.md에 명시된 테스트 태스크를 수행한다.
132
+ - **None인 경우**: 현재와 동일하게 구현한다.
133
+ 5. 각 유저 스토리 완료 후 dev-log.md에 진행상황을 기록한다.
134
+ 6. 모든 구현 완료 후 자체 검증을 실행한다:
128
135
  - 빌드 성공 확인
129
136
  - 린트 통과 확인
130
137
  - 타입 체크 통과 확인
131
138
  - 기존 테스트 스위트 통과 확인
132
139
  - lint-staged 검증: `npx lint-staged --dry-run` 실행 (설정이 있는 경우에만)
133
- 6. 자체 검증이 모두 통과하면 완료를 선언한다.
140
+ 7. 자체 검증이 모두 통과하면 완료를 선언한다.
134
141
  자체 검증이 실패하면 직접 수정하여 통과시킨다.
135
142
 
136
143
  ## 출력
@@ -140,6 +147,7 @@ brief.md, spec.md, analysis.md는 읽지 않는다.
140
147
  - plan.md에 없는 것을 구현하지 않는다 (스코프 크리프 금지).
141
148
  - 자체 검증 5개(빌드/린트/타입/테스트/lint-staged) 모두 PASS 해야 완료를 선언할 수 있다.
142
149
  - 기존 코드베이스의 컨벤션을 따른다.
150
+ - TDD 전략인 경우, 테스트를 먼저 작성하지 않고 프로덕션 코드를 작성하지 않는다.
143
151
  ```
144
152
 
145
153
  **retry 시 에이전트 프롬프트**:
@@ -242,13 +250,17 @@ contract.md, brief.md, spec.md는 읽지 않는다.
242
250
  2. 린트 검증
243
251
  3. 타입 체크 검증
244
252
  4. 테스트 스위트 검증
245
- 5. E2E / 통합 검증 plan.md의 테스트 시나리오 기반
253
+ 5. 테스트 전략 준수 검증 (TDD 또는 Tests-after인 경우)
254
+ - plan.md에 명시된 테스트 파일이 실제로 존재하는가?
255
+ - 해당 테스트가 실행되고 통과하는가?
256
+ - None인 경우 이 항목을 PASS로 처리한다.
257
+ 6. E2E / 통합 검증 — plan.md의 테스트 시나리오 기반
246
258
 
247
259
  ## 출력
248
260
  .crew/plans/{task-id}/qa-report.md 를 작성하라.
249
261
 
250
262
  ## 판정 규칙
251
- - 항목 1-5 중 하나라도 FAIL → 전체 FAIL
263
+ - 항목 1-6 중 하나라도 FAIL → 전체 FAIL
252
264
  - 모든 항목 PASS → 전체 PASS
253
265
 
254
266
  ## 규칙
@@ -115,13 +115,18 @@ PM 에이전트가 요구사항 정의에 실패했습니다.
115
115
  ## 서브에이전트 호출
116
116
  - Explorer (Haiku): 코드베이스 탐색. 항상 호출. 병렬 2-3개로 호출하라.
117
117
  Agent(description="코드베이스 탐색", model="haiku", prompt="...")
118
+ **필수 탐색 항목**: 테스트 인프라도 반드시 탐색한다. Explorer 중 1개는 다음을 확인:
119
+ - 테스트 프레임워크 설정 파일 (jest.config.*, vitest.config.*, pytest.ini 등)
120
+ - 대표적인 테스트 파일 2-3개의 패턴
121
+ - 커버리지 설정 여부
122
+ - 테스트 실행 스크립트 (package.json scripts 등)
118
123
  - Researcher (Sonnet): 외부 리서치. 필요시만 호출.
119
124
  Agent(description="외부 리서치", model="sonnet", prompt="...")
120
125
 
121
126
  ## 출력
122
127
  .crew/plans/{task-id}/analysis.md 를 작성하라.
123
128
 
124
- analysis.md 필수 섹션: 요구사항 보완, 코드베이스 맥락(관련 파일/기존 패턴/테스트 구조), 아키텍처 방향(권장+대안), 엣지 케이스/리스크, 가드레일(Must/Must NOT), 외부 리서치(해당 시).
129
+ analysis.md 필수 섹션: 요구사항 보완, 코드베이스 맥락(관련 파일/기존 패턴/테스트 구조), 아키텍처 방향(권장+대안), 엣지 케이스/리스크, 가드레일(Must/Must NOT), 테스트 인프라(프레임워크/패턴/유무), 외부 리서치(해당 시).
125
130
 
126
131
  ## 규칙
127
132
  - 요구사항에 빈틈이 있으면 AskUserQuestion으로 유저에게 직접 질문하라.
@@ -132,6 +137,48 @@ analysis.md 필수 섹션: 요구사항 보완, 코드베이스 맥락(관련
132
137
 
133
138
  ---
134
139
 
140
+ ### Step 3.5 — 테스트 전략 결정 (오케스트레이터 직접)
141
+
142
+ TechLead의 analysis.md에서 테스트 인프라 섹션을 확인한 후, 오케스트레이터가 유저에게 테스트 전략을 질문한다.
143
+
144
+ **테스트 인프라가 있는 경우**:
145
+
146
+ ```
147
+ 테스트 인프라가 감지되었습니다: {프레임워크명}
148
+ 테스트 전략을 선택하세요:
149
+ [1] TDD — 각 태스크를 RED(실패 테스트) → GREEN(최소 구현) → REFACTOR로 구성
150
+ [2] Tests-after — 구현 태스크 완료 후 테스트 태스크 추가
151
+ [3] None — 자동화 테스트 없음 (QA 에이전트 검증만)
152
+ ```
153
+
154
+ **테스트 인프라가 없는 경우**:
155
+
156
+ ```
157
+ 테스트 인프라가 감지되지 않았습니다.
158
+ 테스트 전략을 선택하세요:
159
+ [1] TDD — 테스트 인프라 셋업 후 RED → GREEN → REFACTOR로 구현
160
+ [2] Tests-after — 테스트 인프라 셋업 후 구현 완료 뒤 테스트 추가
161
+ [3] None — 자동화 테스트 없음 (QA 에이전트 검증만)
162
+ ```
163
+
164
+ [1] 또는 [2] 선택 시 인프라가 없으면 추가 질문:
165
+
166
+ ```
167
+ 테스트 프레임워크를 선택하세요:
168
+ [1] vitest [2] jest [3] bun test [4] pytest [5] 기타 (직접 입력)
169
+ ```
170
+
171
+ **결과 기록**: 선택된 테스트 전략을 analysis.md 하단에 추가한다:
172
+
173
+ ```markdown
174
+ ## 테스트 전략
175
+ - 결정: {TDD | Tests-after | None}
176
+ - 프레임워크: {기존 감지된 프레임워크 또는 유저 선택}
177
+ - 인프라 셋업 필요: {YES | NO}
178
+ ```
179
+
180
+ ---
181
+
135
182
  ### Step 4 — Planner 에이전트 실행
136
183
 
137
184
  **모델**: opus
@@ -153,6 +200,27 @@ brief.md는 읽지 않는다.
153
200
 
154
201
  plan.md 필수 구조: 유저 스토리(US-N) 단위. 각 유저 스토리에 구현 태스크 + 테스트 시나리오(최소 2개: 정상+에러). 위험 요소 섹션. 검증 시나리오 섹션(조건/행위/기대 결과 — contract.md에 그대로 포함됨).
155
202
 
203
+ ## 테스트 전략
204
+ analysis.md의 `## 테스트 전략` 섹션을 확인하고, 결정에 따라 태스크 구조를 달리한다.
205
+
206
+ ### TDD인 경우
207
+ - 인프라 셋업이 필요하면 첫 번째 태스크로 "테스트 인프라 셋업"을 추가한다.
208
+ - 각 유저 스토리의 구현 태스크를 다음 순서로 구성한다:
209
+ 1. RED — 실패하는 테스트 작성 (테스트 파일 경로 명시)
210
+ 2. GREEN — 테스트를 통과하는 최소한의 코드 작성
211
+ 3. REFACTOR — 코드 품질 개선 (필요시)
212
+ - 각 태스크의 수용 기준에 포함: `테스트 파일: {경로}`, `테스트 실행 결과: PASS`
213
+
214
+ ### Tests-after인 경우
215
+ - 인프라 셋업이 필요하면 첫 번째 태스크로 "테스트 인프라 셋업"을 추가한다.
216
+ - 구현 태스크를 먼저 나열한 후, 별도의 테스트 작성 태스크를 추가한다.
217
+ - 테스트 태스크의 수용 기준에 포함: `테스트 파일: {경로}`, `테스트 실행 결과: PASS`
218
+
219
+ ### None인 경우
220
+ - 현재와 동일. 자동화 테스트 태스크 없이 검증 시나리오만 포함한다.
221
+
222
+ plan.md 최상단에 `## 테스트 전략` 섹션을 두어 결정 사항을 명시한다.
223
+
156
224
  ## 규칙
157
225
  - 코드를 작성하지 않는다.
158
226
  - analysis.md의 아키텍처 방향과 가드레일을 따른다.
@@ -211,9 +279,13 @@ plan.md 최상단에 "이전 피드백 반영" 섹션을 추가한다.
211
279
  [ ] E2. 요구사항 정합성 — 수용 기준이 전부 태스크로 커버되는가?
212
280
  [ ] E3. 코드 참조 사실 여부 — 언급한 파일/모듈이 존재하는가? (Explorer 서브에이전트 호출)
213
281
  [ ] E4. 실행 가능성 — 구현자가 바로 시작할 수 있는 수준인가?
282
+ [ ] E5. 테스트 전략 정합성 — analysis.md의 테스트 전략 결정과 plan.md의 태스크 구조가 일치하는가?
283
+ - TDD: 각 구현 태스크가 RED→GREEN→REFACTOR 순서로 구성되어 있는가? 테스트 파일 경로가 명시되어 있는가?
284
+ - Tests-after: 구현 태스크 뒤에 테스트 작성 태스크가 있는가? 테스트 파일 경로가 명시되어 있는가?
285
+ - None: 이 항목을 YES로 처리한다.
214
286
 
215
287
  ## 판정 규칙
216
- - 4개 항목 모두 YES → PASS
288
+ - 5개 항목 모두 YES → PASS
217
289
  - 하나라도 NO → FAIL
218
290
  - "아마 의도했을 것"이라고 추측하지 않는다. 모호하면 NO.
219
291
 
@@ -261,6 +333,11 @@ review.md가 정상적으로 작성되었고 판정이 PASS임을 확인한다.
261
333
  ### Must NOT
262
334
  - {analysis.md에서 추출}
263
335
 
336
+ ## 테스트 전략
337
+ - 결정: {TDD | Tests-after | None}
338
+ - 프레임워크: {프레임워크명}
339
+ - 인프라 셋업 필요: {YES | NO}
340
+
264
341
  ## 검증 시나리오
265
342
  {plan.md의 검증 시나리오 섹션을 그대로 복사}
266
343
 
@@ -1,189 +0,0 @@
1
- ---
2
- name: crew
3
- description: crew-plan과 crew-dev를 연결하는 오케스트레이터 — 유저 요청을 받아 PR 생성까지
4
- ---
5
-
6
- ## 역할
7
-
8
- 유저 요청을 받아 crew-plan(계획)과 crew-dev(구현)를 순차 실행하여 PR을 생성한다.
9
- 코드를 작성하지 않는다. 에이전트에게 위임한다.
10
-
11
- ---
12
-
13
- ## 절대 금지
14
-
15
- - 코드를 직접 작성, 수정, 검토하지 않는다.
16
- - 기획, 계획, 검증을 직접 수행하지 않는다. 해당 에이전트에게 위임한다.
17
- - 에이전트가 FAIL을 냈을 때 합리화하여 통과시키지 않는다.
18
-
19
- ---
20
-
21
- ## 실행 순서
22
-
23
- ### Step 1 — 초기 셋업
24
-
25
- `.crew/` 폴더가 없으면 생성한다.
26
-
27
- ```bash
28
- mkdir -p .crew/plans
29
- ```
30
-
31
- ### Step 2 — 의도 분류
32
-
33
- 유저 요청을 2가지로 분류한다:
34
-
35
- | 유형 | 기준 | PM 관여 | 예시 |
36
- |------|------|---------|------|
37
- | **유저 가치** | 유저가 변화를 인지함 | O | 기능 추가, UI 변경, 플로우 수정 |
38
- | **엔지니어링** | 유저가 변화를 인지하지 못함 | X | 리팩토링, 마이그레이션, 버그 수정, 인프라, 성능, 테스트 |
39
-
40
- 분류 기준: **"이 작업의 결과를 유저(사용자)가 인지하는가?"**
41
-
42
- 애매하면 유저에게 물어본다.
43
-
44
- ### Step 3 — task-id 생성
45
-
46
- task-id를 생성한다. 형식: `{간결한-영문-슬러그}` (예: `add-search-filter`, `fix-auth-timeout`)
47
-
48
- ```bash
49
- mkdir -p .crew/plans/{task-id}
50
- ```
51
-
52
- ### Step 4 — crew-plan 실행
53
-
54
- crew-plan 파이프라인을 실행한다.
55
-
56
- 오케스트레이터가 crew-plan에 전달할 정보:
57
- - task-id
58
- - 의도 유형 (유저 가치 / 엔지니어링)
59
- - 유저 요청 원문 (brief.md 작성용)
60
-
61
- crew-plan의 반환을 확인한다:
62
- - **COMPLETE** → contract.md 경로를 확인하고 Step 5로 진행
63
- - **ESCALATE** → 유저에게 에스컬레이션 내용을 전달하고, 유저 응답에 따라 재시도 또는 보류
64
-
65
- ### Step 5 — crew-dev 실행
66
-
67
- crew-dev 파이프라인을 실행한다.
68
-
69
- 오케스트레이터가 crew-dev에 전달할 정보:
70
- - task-id
71
-
72
- crew-dev의 반환을 확인한다:
73
- - **COMPLETE** → PR URL을 유저에게 전달
74
- - **ESCALATE** → 유저에게 에스컬레이션 내용을 전달하고, 유저 응답에 따라 재시도 또는 보류
75
-
76
- ### Step 6 — 완료 보고
77
-
78
- 유저에게 최종 결과를 보고한다:
79
- - task-id
80
- - PR URL
81
- - 주요 변경 사항 요약
82
-
83
- ---
84
-
85
- ## 에스컬레이션 처리
86
-
87
- 에스컬레이션은 유저에게 선택지를 제시하고 응답을 기다린다.
88
- 유저 응답에 따라:
89
-
90
- - **재시도**: 해당 파이프라인의 실패 지점부터 재실행
91
- - **수정**: 유저가 직접 파일을 수정한 후 재실행
92
- - **보류**: 상태를 BLOCKED으로 갱신하고 종료
93
-
94
- ---
95
-
96
- ## 산출물 파일 구조
97
-
98
- ```
99
- .crew/plans/{task-id}/
100
- # crew-plan 산출물
101
- brief.md # 오케스트레이터: 유저 원본 요청
102
- spec.md # PM: 수용 기준, 스코프 (유저 가치 유형만)
103
- analysis.md # TechLead: 사전 분석 결과
104
- plan.md # Planner: 구현 계획
105
- review.md # PlanEvaluator: 검증 결과 (최신)
106
- plan-{n}.md # 실패한 계획 아카이브
107
- review-{n}.md # 실패한 리뷰 아카이브
108
- contract.md # 최종 계약 (PASS 시만 생성)
109
- .loop_count # 계획 루프 카운터
110
-
111
- # crew-dev 산출물
112
- dev-log.md # Dev: 구현 진행 로그
113
- review-report.md # CodeReviewer: 코드 리뷰 결과 (최신)
114
- qa-report.md # QA: 실행 검증 결과 (최신)
115
- review-report-{n}.md # FAIL 시 아카이브
116
- qa-report-{n}.md # FAIL 시 아카이브
117
- .dev_loop_count # 개발 루프 카운터
118
- ```
119
-
120
- ---
121
-
122
- ## contract.md 구조
123
-
124
- PlanEvaluator PASS 후 crew-plan이 생성한다.
125
-
126
- ```markdown
127
- # 스프린트 계약: {task-id}
128
-
129
- 생성일: {date}
130
- 유형: {유저 가치 | 엔지니어링}
131
-
132
- ## 목표
133
- {한 문장}
134
-
135
- ## 수용 기준
136
- - [ ] {testable 기준 1}
137
- - [ ] {testable 기준 2}
138
-
139
- ## 가드레일
140
- ### Must
141
- - {TechLead가 정의한 필수 사항}
142
-
143
- ### Must NOT
144
- - {TechLead가 정의한 금지 사항}
145
-
146
- ## 검증 시나리오
147
-
148
- ### {시나리오 1 제목}
149
- - 조건: {사전 상태}
150
- - 행위: {실행할 것}
151
- - 기대 결과: {검증할 것}
152
-
153
- ## 참조 문서
154
- - 사전 분석: .crew/plans/{task-id}/analysis.md
155
- - 구현 계획: .crew/plans/{task-id}/plan.md
156
-
157
- ## 검증 이력
158
- PlanEvaluator PASS — review.md 참조
159
-
160
- ## 상태
161
- ACTIVE
162
- ```
163
-
164
- ---
165
-
166
- ## 에이전트 라인업
167
-
168
- ### crew-plan
169
- | 에이전트 | subagent_type | 모델 | 역할 |
170
- |----------|--------------|------|------|
171
- | PM | pm | Opus | 유저 인터뷰, spec.md 작성 (유저 가치만) |
172
- | TechLead | techlead | Opus | 사전 분석, 아키텍처 방향, 가드레일 |
173
- | Planner | planner | Opus | 계획 문서 작성 |
174
- | PlanEvaluator | plan-evaluator | Sonnet | E1-E4 하드 임계값 검증 |
175
-
176
- ### crew-dev
177
- | 에이전트 | subagent_type | 모델 | 역할 |
178
- |----------|--------------|------|------|
179
- | Dev | dev | Opus | 코드 구현 + 자체 검증 |
180
- | CodeReviewer | code-reviewer | Opus | 코드 품질 + 가드레일 위반 판정 |
181
- | QA | qa | Sonnet | 실행 검증 (빌드/테스트/E2E) |
182
-
183
- ### 공유 서브에이전트
184
- | 에이전트 | subagent_type | 모델 | 역할 |
185
- |----------|--------------|------|------|
186
- | Explorer | explorer | Haiku | 코드베이스 탐색 (병렬, Read-only) |
187
- | Researcher | researcher | Sonnet | 외부 정보 조사 (필요시만, Read-only) |
188
-
189
- **중요**: 모든 에이전트 호출 시 반드시 `subagent_type` 파라미터를 지정해야 한다. HUD에서 에이전트 타입을 식별하는 데 사용된다.