@jjlabsio/claude-crew 0.1.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.
@@ -0,0 +1,396 @@
1
+ ---
2
+ name: crew-plan
3
+ description: PM + TechLead + Planner + PlanEvaluator 계획 파이프라인 — contract.md를 생성한다
4
+ ---
5
+
6
+ ## 역할
7
+
8
+ 오케스트레이터로부터 task-id, brief, 의도 유형(유저 가치/엔지니어링)을 받아 `contract.md`를 생성한다.
9
+ `contract.md`가 생성되어야 crew-dev가 시작할 수 있다.
10
+
11
+ 에이전트 간 소통은 파일을 통해서만 이루어진다. 에이전트의 추론 과정은 다른 에이전트에게 전달되지 않는다.
12
+
13
+ ---
14
+
15
+ ## 절대 금지
16
+
17
+ - 코드를 작성하지 않는다.
18
+ - PlanEvaluator가 FAIL을 냈을 때 합리화하여 통과시키지 않는다.
19
+ - brief.md를 Planner, PlanEvaluator에게 전달하지 않는다 (유저 가치 유형 시).
20
+ - 오케스트레이터가 요구사항을 판단하거나 보완하지 않는다.
21
+
22
+ ---
23
+
24
+ ## 파일 구조
25
+
26
+ ```
27
+ .crew/plans/{task-id}/
28
+ brief.md # 오케스트레이터: 유저 원본 요청
29
+ spec.md # PM: 수용 기준, 스코프 (유저 가치 유형만)
30
+ analysis.md # TechLead: 사전 분석 결과
31
+ plan.md # Planner: 구현 계획 (항상 최신)
32
+ review.md # PlanEvaluator: 검증 결과 (항상 최신)
33
+ plan-{n}.md # 실패한 계획 아카이브
34
+ review-{n}.md # 실패한 리뷰 아카이브
35
+ contract.md # 최종 계약 (PASS 시만 생성)
36
+ .loop_count # 계획 루프 카운터
37
+ ```
38
+
39
+ ---
40
+
41
+ ## 실행 순서
42
+
43
+ ### Step 1 — brief.md 작성 (오케스트레이터 직접)
44
+
45
+ `.crew/plans/{task-id}/brief.md`를 작성한다.
46
+
47
+ - 유저 요청 원문 + 관련 컨텍스트만 기록한다.
48
+ - 요구사항 판단/보완/해석 금지. 원문 그대로.
49
+
50
+ **게이트**: brief.md 작성 완료 후 파일이 존재하고 비어 있지 않음을 확인한다.
51
+ 실패 시 즉시 에스컬레이션:
52
+
53
+ ```
54
+ brief.md가 없거나 비어 있습니다. 계획 파이프라인을 시작할 수 없습니다.
55
+ [1] brief.md를 직접 작성하여 재시도
56
+ [2] 이 태스크를 보류
57
+ ```
58
+
59
+ ---
60
+
61
+ ### Step 2 — PM 에이전트 실행 (유저 가치 유형만)
62
+
63
+ **모델**: opus
64
+ **건너뛰기 조건**: 엔지니어링 유형이면 이 단계를 건너뛴다.
65
+
66
+ 에이전트 프롬프트:
67
+
68
+ ```
69
+ 당신은 PM 에이전트다. 유저와 직접 대화하여 요구사항을 확정한다.
70
+
71
+ ## 입력
72
+ .crew/plans/{task-id}/brief.md 를 읽어라.
73
+
74
+ ## 출력
75
+ .crew/plans/{task-id}/spec.md 를 작성하라.
76
+
77
+ spec.md 필수 섹션: 목표, 스코프 경계(In/Out), 수용 기준(3-7개, 테스트 가능한 구체적 행동), 전제 조건, 미결사항.
78
+
79
+ ## 규칙
80
+ - 정보가 부족하면 AskUserQuestion으로 유저에게 직접 질문하라.
81
+ - 추측으로 빈칸을 채우지 않는다.
82
+ - 수용 기준에 모호한 표현("잘 작동한다", "빠르다") 금지.
83
+ - 스코프가 "하루 작업"을 초과하면 분리를 권고하라.
84
+ ```
85
+
86
+ **실패 조건**: spec.md가 없거나 수용 기준이 비어 있으면 즉시 에스컬레이션.
87
+
88
+ ```
89
+ PM 에이전트가 요구사항 정의에 실패했습니다.
90
+ [1] brief.md를 보완하여 재시도
91
+ [2] spec.md를 직접 작성
92
+ [3] 이 태스크를 보류
93
+ ```
94
+
95
+ ---
96
+
97
+ ### Step 3 — TechLead 에이전트 실행
98
+
99
+ **모델**: opus
100
+ **실행 조건**: 항상 (양쪽 유형 모두)
101
+
102
+ 에이전트 프롬프트:
103
+
104
+ ```
105
+ 당신은 TechLead 에이전트다. 사전 분석을 수행하고 아키텍처 방향을 판단한다.
106
+
107
+ ## 입력
108
+ {유저 가치 유형}: .crew/plans/{task-id}/spec.md 를 읽어라.
109
+ {엔지니어링 유형}: .crew/plans/{task-id}/brief.md 를 읽어라.
110
+
111
+ ## 서브에이전트 호출
112
+ - Explorer (Haiku): 코드베이스 탐색. 항상 호출. 병렬 2-3개로 호출하라.
113
+ Agent(description="코드베이스 탐색", model="haiku", prompt="...")
114
+ - Researcher (Sonnet): 외부 리서치. 필요시만 호출.
115
+ Agent(description="외부 리서치", model="sonnet", prompt="...")
116
+
117
+ ## 출력
118
+ .crew/plans/{task-id}/analysis.md 를 작성하라.
119
+
120
+ analysis.md 필수 섹션: 요구사항 보완, 코드베이스 맥락(관련 파일/기존 패턴/테스트 구조), 아키텍처 방향(권장+대안), 엣지 케이스/리스크, 가드레일(Must/Must NOT), 외부 리서치(해당 시).
121
+
122
+ ## 규칙
123
+ - 요구사항에 빈틈이 있으면 AskUserQuestion으로 유저에게 직접 질문하라.
124
+ - 탐색(양)은 서브에이전트에게, 판단(질)은 직접.
125
+ ```
126
+
127
+ **실패 조건**: analysis.md가 없거나 가드레일 섹션이 비어 있으면 즉시 에스컬레이션.
128
+
129
+ ---
130
+
131
+ ### Step 4 — Planner 에이전트 실행
132
+
133
+ **모델**: opus
134
+
135
+ **첫 번째 실행 시 에이전트 프롬프트**:
136
+
137
+ ```
138
+ 당신은 Planner 에이전트다. 구현 계획을 작성한다.
139
+
140
+ ## 입력
141
+ .crew/plans/{task-id}/analysis.md 를 읽어라.
142
+ {유저 가치 유형 시}: .crew/plans/{task-id}/spec.md 도 읽어라.
143
+ brief.md는 읽지 않는다.
144
+
145
+ ## 출력
146
+ .crew/plans/{task-id}/plan.md 를 작성하라.
147
+
148
+ plan.md 필수 구조: 유저 스토리(US-N) 단위. 각 유저 스토리에 구현 태스크 + 테스트 시나리오(최소 2개: 정상+에러). 위험 요소 섹션. 검증 시나리오 섹션(조건/행위/기대 결과 — contract.md에 그대로 포함됨).
149
+
150
+ ## 규칙
151
+ - 코드를 작성하지 않는다.
152
+ - analysis.md의 아키텍처 방향과 가드레일을 따른다.
153
+ - 태스크 하나가 4시간 초과 시 분해한다.
154
+ - "나중에 결정" 금지. 모르면 위험 요소에 기록.
155
+ - 필요시 Explorer 서브에이전트를 호출할 수 있다.
156
+ ```
157
+
158
+ **retry 시 에이전트 프롬프트**:
159
+
160
+ ```
161
+ 이번은 이전 계획이 리뷰에서 FAIL을 받은 후 재작성하는 것이다.
162
+
163
+ ## 입력
164
+ .crew/plans/{task-id}/analysis.md 를 읽어라.
165
+ {유저 가치 유형 시}: .crew/plans/{task-id}/spec.md 도 읽어라.
166
+ .crew/plans/{task-id}/review-{n}.md 를 읽어라.
167
+ brief.md는 읽지 않는다.
168
+
169
+ ## 필수 선행 작업
170
+ review-{n}.md를 먼저 읽어라. 이전 plan이 왜 FAIL을 받았는지 확인하고, 지적된 항목을 명시적으로 수정하라.
171
+
172
+ ## 출력
173
+ .crew/plans/{task-id}/plan.md 를 새로 작성하라.
174
+ plan.md 최상단에 "이전 피드백 반영" 섹션을 추가한다.
175
+
176
+ ## 규칙
177
+ - analysis.md의 아키텍처 방향과 가드레일을 따른다.
178
+ - 피드백을 무시하거나 같은 내용으로 작성하지 않는다.
179
+ ```
180
+
181
+ **실패 조건**: plan.md가 없거나 태스크 목록이 비어 있으면 즉시 에스컬레이션.
182
+
183
+ ---
184
+
185
+ ### Step 5 — PlanEvaluator 에이전트 실행
186
+
187
+ **모델**: sonnet (하드 임계값 판정에서 Opus 합리화 방지)
188
+
189
+ 에이전트 프롬프트:
190
+
191
+ ```
192
+ 당신은 PlanEvaluator 에이전트다. 계획을 검증한다.
193
+
194
+ ## 입력
195
+ {유저 가치 유형}: .crew/plans/{task-id}/spec.md + .crew/plans/{task-id}/analysis.md + .crew/plans/{task-id}/plan.md
196
+ {엔지니어링 유형}: .crew/plans/{task-id}/brief.md + .crew/plans/{task-id}/analysis.md + .crew/plans/{task-id}/plan.md
197
+ 이 파일만 읽는다. 유저 가치 유형에서 brief.md는 읽지 않는다.
198
+
199
+ ## 검증 항목 (하드 임계값)
200
+ 아래 각 항목에 YES 또는 NO로만 답한다. 부분 점수 없음.
201
+
202
+ [ ] E1. 검증 시나리오 완성도 — 모든 태스크에 검증 방법이 명시되어 있는가?
203
+ [ ] E2. 요구사항 정합성 — 수용 기준이 전부 태스크로 커버되는가?
204
+ [ ] E3. 코드 참조 사실 여부 — 언급한 파일/모듈이 존재하는가? (Explorer 서브에이전트 호출)
205
+ [ ] E4. 실행 가능성 — 구현자가 바로 시작할 수 있는 수준인가?
206
+
207
+ ## 판정 규칙
208
+ - 4개 항목 모두 YES → PASS
209
+ - 하나라도 NO → FAIL
210
+ - "아마 의도했을 것"이라고 추측하지 않는다. 모호하면 NO.
211
+
212
+ ## FAIL 시 근본 원인 분류 (필수)
213
+ - spec 결함 (수용 기준 자체가 문제) → 오케스트레이터에 알린다
214
+ - plan 결함 (계획 구성/표현 문제) → Planner 재시도 가능
215
+
216
+ ## E3 코드 참조 확인
217
+ Explorer 서브에이전트를 호출하여 plan.md에서 참조하는 파일/모듈이 존재하는지 확인하라.
218
+ Agent(description="코드 참조 확인", model="haiku", prompt="plan.md에서 참조하는 다음 파일/모듈이 존재하는지 확인하라: {파일 목록}")
219
+
220
+ ## 출력
221
+ .crew/plans/{task-id}/review.md 를 작성하라.
222
+ review.md 형식: 판정(PASS/FAIL), 항목별 결과(E1-E4 YES/NO + 근거), FAIL 상세(NO 항목의 문제+수정 방향), 근본 원인 분류(FAIL 시).
223
+ ```
224
+
225
+ ---
226
+
227
+ ### Step 6 — PASS 처리
228
+
229
+ PlanEvaluator PASS이면:
230
+
231
+ **6a. review.md 확인**
232
+
233
+ review.md가 정상적으로 작성되었고 판정이 PASS임을 확인한다.
234
+
235
+ **6b. contract.md 작성 (오케스트레이터 직접)**
236
+
237
+ ```markdown
238
+ # 스프린트 계약: {task-id}
239
+
240
+ 생성일: {date}
241
+ 유형: {유저 가치 | 엔지니어링}
242
+
243
+ ## 목표
244
+ {spec.md 또는 brief.md에서 추출한 한 문장}
245
+
246
+ ## 수용 기준
247
+ - [ ] {spec.md의 수용 기준을 그대로 복사 (유저 가치) 또는 brief.md에서 도출 (엔지니어링)}
248
+
249
+ ## 가드레일
250
+ ### Must
251
+ - {analysis.md에서 추출}
252
+
253
+ ### Must NOT
254
+ - {analysis.md에서 추출}
255
+
256
+ ## 검증 시나리오
257
+ {plan.md의 검증 시나리오 섹션을 그대로 복사}
258
+
259
+ ### {시나리오 1 제목}
260
+ - 조건: {사전 상태}
261
+ - 행위: {실행할 것}
262
+ - 기대 결과: {검증할 것}
263
+
264
+ ## 참조 문서
265
+ - 사전 분석: .crew/plans/{task-id}/analysis.md
266
+ - 구현 계획: .crew/plans/{task-id}/plan.md
267
+
268
+ ## 검증 이력
269
+ PlanEvaluator PASS — review.md 참조
270
+
271
+ ## 상태
272
+ ACTIVE
273
+ ```
274
+
275
+ **6c. .loop_count 정리**
276
+
277
+ `.loop_count` 파일이 존재하면 삭제한다.
278
+
279
+ **6d. 완료 반환**
280
+
281
+ ```
282
+ 상태: COMPLETE
283
+ task-id: {task-id}
284
+ contract.md 경로: .crew/plans/{task-id}/contract.md
285
+ ```
286
+
287
+ ---
288
+
289
+ ### Step 7 — FAIL 처리 (피드백 보존 루프)
290
+
291
+ PlanEvaluator FAIL이면:
292
+
293
+ **7a. FAIL 원인 분류**
294
+
295
+ PlanEvaluator가 review.md에 기록한 근본 원인 분류를 확인한다.
296
+
297
+ - **spec 결함** (수용 기준 자체가 문제):
298
+ - Planner를 재시도해도 고칠 수 없다.
299
+ - 즉시 에스컬레이션:
300
+
301
+ ```
302
+ PlanEvaluator가 spec 결함을 이유로 FAIL을 냈습니다.
303
+ Planner 재시도로는 해결할 수 없습니다.
304
+ [1] PM 에이전트를 재실행하여 spec.md를 재작성
305
+ [2] spec.md를 직접 수정
306
+ [3] 이 태스크를 보류
307
+ ```
308
+
309
+ - **plan 결함** (계획 구성/표현 문제):
310
+ - 피드백 보존 루프를 진행한다.
311
+
312
+ **7b. 루프 카운터 읽기**
313
+
314
+ `.crew/plans/{task-id}/.loop_count` 파일을 읽는다.
315
+ - 파일이 없으면 카운터 = 0 (첫 번째 FAIL)
316
+ - 파일이 있으면 파일 내용(정수)이 카운터 값
317
+
318
+ **7c. 에스컬레이션 판단**
319
+
320
+ 카운터 값 >= 4이면 즉시 에스컬레이션:
321
+
322
+ ```
323
+ 계획 파이프라인이 5회 반복 후에도 수렴하지 않았습니다.
324
+ 현재 review.md의 FAIL 사유를 첨부합니다.
325
+ [1] 스코프를 좁혀서 재시도
326
+ [2] 수용 기준을 직접 수정
327
+ [3] 이 태스크를 보류
328
+ ```
329
+
330
+ 에스컬레이션 시 `.loop_count` 파일을 삭제한다.
331
+
332
+ **7d. 피드백 아카이브**
333
+
334
+ `n = 카운터 + 1` (이번 회차 번호)
335
+
336
+ ```
337
+ plan.md → plan-{n}.md 로 이름 변경
338
+ review.md → review-{n}.md 로 이름 변경
339
+ ```
340
+
341
+ **7e. 루프 카운터 증가 저장**
342
+
343
+ `카운터 + 1`을 `.loop_count` 파일에 저장한다.
344
+
345
+ **7f. Step 4로 돌아감 (retry)**
346
+
347
+ Step 4(Planner)로 돌아간다. retry 프롬프트의 `{n}`에 Step 7d에서 계산한 값을 대입한다.
348
+ TechLead는 재실행하지 않는다 — 기술적 사실은 변하지 않으므로 analysis.md를 재사용한다.
349
+
350
+ ---
351
+
352
+ ## 루프 카운터 (.loop_count) 생명주기
353
+
354
+ | 이벤트 | 동작 |
355
+ |--------|------|
356
+ | 첫 번째 진입 | 파일 없음 (카운터 = 0) |
357
+ | 첫 번째 FAIL 처리 후 | 파일 생성, 내용: `1` |
358
+ | n번째 FAIL 처리 후 | 파일 갱신, 내용: `n` |
359
+ | PASS | 파일 삭제 |
360
+ | 에스컬레이션 | 파일 삭제 |
361
+
362
+ Planner + PlanEvaluator 사이클은 최대 5회 (초기 1회 + retry 최대 4회).
363
+
364
+ ---
365
+
366
+ ## 에이전트 호출 컨텍스트 규칙
367
+
368
+ | 에이전트 | 모델 | 주입할 파일 | 차단할 파일 |
369
+ |----------|------|------------|------------|
370
+ | PM | opus | brief.md | — |
371
+ | TechLead | opus | spec.md (유저 가치) 또는 brief.md (엔지니어링) | — |
372
+ | Planner (첫 번째) | opus | spec.md (유저 가치 시) + analysis.md | brief.md |
373
+ | Planner (retry) | opus | spec.md (유저 가치 시) + analysis.md + review-{n}.md | brief.md |
374
+ | PlanEvaluator | sonnet | spec.md/brief.md + analysis.md + plan.md | brief.md (유저 가치 시) |
375
+
376
+ ---
377
+
378
+ ## 오케스트레이터 반환 스키마
379
+
380
+ **COMPLETE**:
381
+ ```json
382
+ {
383
+ "status": "COMPLETE",
384
+ "task_id": "{task-id}",
385
+ "contract_path": ".crew/plans/{task-id}/contract.md"
386
+ }
387
+ ```
388
+
389
+ **ESCALATE**:
390
+ ```json
391
+ {
392
+ "status": "ESCALATE",
393
+ "phase": "brief-gate" | "pm-fail" | "techlead-fail" | "planner-fail" | "evaluator-spec-defect" | "loop-overflow",
394
+ "reason": "자유형 텍스트"
395
+ }
396
+ ```
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: crew-setup
3
+ description: claude-crew 플러그인 초기 설정 — HUD statusline 설치
4
+ ---
5
+
6
+ ## 역할
7
+
8
+ claude-crew 플러그인의 HUD statusline을 사용자 환경에 설치한다.
9
+
10
+ ## 절차
11
+
12
+ 1. `~/.claude/settings.json`을 읽는다.
13
+ 2. `statusLine` 필드를 crew HUD 스크립트로 설정한다:
14
+ ```json
15
+ "statusLine": {
16
+ "type": "command",
17
+ "command": "node \"$CLAUDE_PLUGIN_ROOT/hud/index.mjs\""
18
+ }
19
+ ```
20
+ - `$CLAUDE_PLUGIN_ROOT`는 Claude Code가 플러그인 루트 경로로 자동 치환한다.
21
+ - 기존 statusLine이 있으면 덮어쓴다.
22
+ 3. 결과를 사용자에게 알린다:
23
+ - 성공 시: "CREW HUD가 설치되었습니다. 다음 세션부터 statusline에 표시됩니다."
24
+ - 실패 시: 에러 내용을 알린다.
25
+
26
+ ## 주의
27
+
28
+ - `settings.json`의 다른 필드는 절대 수정하지 않는다.
29
+ - statusLine만 교체한다.