@jjlabsio/claude-crew 0.1.32 → 0.1.33

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.32",
14
+ "version": "0.1.33",
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.32"
31
+ "version": "0.1.33"
32
32
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-crew",
3
- "version": "0.1.32",
3
+ "version": "0.1.33",
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.32",
3
+ "version": "0.1.33",
4
4
  "description": "1인 SaaS 개발자를 위한 멀티 에이전트 오케스트레이션 — 개발, 마케팅, 일정을 한 대화에서 통합 관리",
5
5
  "author": "Jaejin Song <wowlxx28@gmail.com>",
6
6
  "license": "MIT",
@@ -34,20 +34,44 @@ description: 유저 요구사항을 인터뷰하여 개발 가능한 수준의 s
34
34
 
35
35
  ## 실행 순서
36
36
 
37
- PM 판단/질문/spec 작성 단계도 provider 설정 대상이다. 오케스트레이터는 `pm` 설정을 해석한 아래 인터뷰 로직을 PM 작업 프롬프트로 구성하여 `runAgent(role="pm", ...)`로 실행한다.
37
+ PM 판단/질문/spec 작성 단계, Explorer 호출, Researcher 호출은 모두 provider 설정 대상이다. 오케스트레이터는 **반드시 Phase 1a에서 provider 설정을 먼저 해석한 뒤**, 단계의 디스패치를 분기한다. 문서의 `runAgent(role, ...)` 표기는 모두 의사코드이며, 실제로는 Phase 1a의 해석 테이블과 메타 섹션의 분기 규칙대로 `Agent` 또는 `Bash(crew-codex-companion)`를 직접 호출한다.
38
38
 
39
- - PM이 Claude provider이면 기존처럼 `AskUserQuestion`, Read/Write를 사용할 수 있다.
40
- - PM이 Codex provider이면 직접 질문하거나 `.crew/` 파일을 쓰지 않는다. 질문이 필요하면 `blocked_on_user`, 추가 탐색이 필요하면 `needs_agent`, 최종 spec은 `complete.artifact`로 반환한다.
39
+ - PM이 Claude provider이면 오케스트레이터가 인터뷰 로직을 직접 수행하면서 `AskUserQuestion`, Read/Write를 사용한다.
40
+ - PM이 Codex provider이면 인터뷰 로직 자체를 codex companion task로 위임한다. Codex는 직접 질문하거나 `.crew/` 파일을 쓰지 않는다. 질문이 필요하면 `blocked_on_user`, 추가 탐색이 필요하면 `needs_agent`, 최종 spec은 `complete.artifact`로 반환한다.
41
41
  - Codex PM의 `artifact`는 오케스트레이터가 `.crew/plans/{task-id}/spec.md`로 저장한다.
42
42
 
43
43
  ### Phase 1 — 초기화 (자동)
44
44
 
45
- **1a. task-id 생성 + brief.md 작성**
45
+ **1a. Provider 설정 로드**
46
+
47
+ 이 단계를 건너뛰지 않는다. 어떤 단계든 에이전트 호출 직전에 1a의 해석 테이블이 출력되어 있어야 한다.
48
+
49
+ cascading 해석:
50
+
51
+ 1. `${CLAUDE_PLUGIN_ROOT}/data/provider-catalog.json`을 읽어 `agent_defaults`와 `agent_runtime`을 로드한다.
52
+ 2. `~/.claude/crew/config.json`이 있으면 `providers.{role}` 필드로 user-level 오버라이드를 적용한다.
53
+ 3. `{projectRoot}/.crew/config.json`이 있으면 `providers.{role}` 필드로 project-level 오버라이드를 다시 적용한다 (최우선).
54
+ 4. 본 스킬의 적용 대상 role은 `pm`, `explorer`, `researcher` 세 개다. 각 role의 `{provider, model, reasoning?, codex_sandbox}` 값을 결정한다.
55
+
56
+ Codex 가용성 확인: 해석 결과 중 codex provider가 하나라도 있으면 `which codex`(또는 `bash -lc 'command -v codex'`)로 가용성을 확인한다. codex가 없으면 해당 role을 catalog default(claude/{model})로 폴백하고 경고를 출력한다.
57
+
58
+ 해석 테이블 출력 (필수): 해석 결과를 다음 형식으로 stdout에 인쇄한다. 이 테이블이 출력되지 않은 채 1b 이후로 진행하지 않는다.
59
+
60
+ ```
61
+ provider 해석:
62
+ - pm: {provider} / {model}{reasoning이 있으면 / {reasoning}} ({codex_sandbox})
63
+ - explorer: {provider} / {model}{...}
64
+ - researcher: {provider} / {model}{...}
65
+ ```
66
+
67
+ 이후 Phase 1/2/3/4의 디스패치는 이 테이블의 값을 기준으로 한다. PM provider가 codex이면 인터뷰 로직 전체를 codex companion task로 한 번에 위임하고, claude이면 오케스트레이터가 직접 수행한다.
68
+
69
+ **1b. task-id 생성 + brief.md 작성**
46
70
 
47
71
  유저 요청 원문을 `.crew/plans/{task-id}/brief.md`에 저장한다.
48
72
  task-id는 요청 내용에서 키워드를 추출하여 kebab-case로 생성한다.
49
73
 
50
- **1b. Explorer 호출 (병렬)**
74
+ **1c. Explorer 호출 (병렬)**
51
75
 
52
76
  Explorer 서브에이전트를 병렬로 호출하여 프로젝트 구조를 파악한다.
53
77
 
@@ -62,7 +86,7 @@ runAgent(role="explorer", description="프로젝트 구조 탐색", prompt="..."
62
86
 
63
87
  탐색 결과는 오케스트레이터가 내부적으로 보유한다. 파일로 저장하지 않는다.
64
88
 
65
- **1c. 체크리스트 첫 평가**
89
+ **1d. 체크리스트 첫 평가**
66
90
 
67
91
  유저 요청 + Explorer 결과를 기반으로 체크리스트 5개 항목을 첫 평가한다.
68
92
 
@@ -305,7 +329,7 @@ spec.md를 작성했습니다. 검토해주세요.
305
329
 
306
330
  ## 에이전트 호출 규칙
307
331
 
308
- 오케스트레이터는 모든 에이전트를 `runAgent(role, prompt, providerConfig)` 규칙으로 호출한다.
332
+ 메타 규칙은 Phase 1a의 해석 결과를 기준으로 적용한다. 본 문서의 `runAgent(role, prompt, providerConfig)` 표기는 의사코드이며, 실제 호출은 항상 Phase 1a의 해석 테이블에서 해당 role의 provider를 확인한 뒤 아래 분기 규칙에 따라 `Agent` 또는 `Bash`로 직접 디스패치한다.
309
333
 
310
334
  - Claude provider: `Agent(subagent_type="{role}", model="{model}", description="...", prompt="...")`
311
335
  - Codex provider: `node "${CLAUDE_PLUGIN_ROOT}/scripts/crew-codex-companion.mjs" task --json --expect-crew-result --model {model} --effort {reasoning} --prompt-file {promptFile}`
@@ -314,7 +338,7 @@ spec.md를 작성했습니다. 검토해주세요.
314
338
 
315
339
  | 에이전트 | subagent_type | 기본 provider/model | 용도 | 호출 시점 |
316
340
  |----------|--------------|------|------|----------|
317
- | Explorer | explorer | `agent_defaults.explorer` | 코드베이스 탐색 (read-only) | Phase 1b (필수), Phase 2d (필요 시) |
341
+ | Explorer | explorer | `agent_defaults.explorer` | 코드베이스 탐색 (read-only) | Phase 1c (필수), Phase 2d (필요 시) |
318
342
  | Researcher | researcher | `agent_defaults.researcher` | 외부 조사 (WebSearch) | Phase 2 중 필요 시 |
319
343
 
320
344
  **중요**: provider/model은 `.crew/config.json`, `~/.claude/crew/config.json`, `data/provider-catalog.json`의 `agent_defaults` 순서로 해석한다.
@@ -40,13 +40,41 @@ crew-interview가 생성한 spec.md를 입력으로 받아 **HOW(어떻게 만
40
40
 
41
41
  ## 실행 순서
42
42
 
43
- TechLead, Planner, PlanEvaluator는 모두 provider 설정 대상이다. 오케스트레이터는 각 단계에서 `runAgent(role, prompt, providerConfig)`를 사용한다.
43
+ TechLead, Planner, PlanEvaluator, Explorer, Researcher는 모두 provider 설정 대상이다. 오케스트레이터는 **반드시 Step 1a에서 provider 설정을 먼저 해석한 뒤**, 단계의 디스패치를 분기한다. 본 문서에 등장하는 `runAgent(role, prompt, providerConfig)` 표기는 모두 의사코드이며, 실제로는 Step 1a의 해석 테이블과 각 Step의 분기 규칙대로 `Agent` 또는 `Bash(crew-codex-companion)`를 직접 호출한다.
44
44
 
45
45
  - Claude provider이면 기존 Claude Code `Agent` 호출을 사용한다.
46
46
  - Codex provider이면 read-only companion task를 사용하고, 산출물은 `<crew-agent-result>.artifact`로 반환받아 오케스트레이터가 `.crew/` 파일에 저장한다.
47
47
  - Codex TechLead/Planner가 Explorer/Researcher가 필요하면 직접 호출하지 않고 `needs_agent`를 반환한다. 오케스트레이터가 요청된 에이전트를 실행한 뒤 결과를 원래 Codex thread에 `--resume-last`로 주입한다.
48
48
 
49
- ### Step 1 — spec.md 유효성 검사 (오케스트레이터 직접)
49
+ ### Step 1 — 환경 준비 (오케스트레이터 직접)
50
+
51
+ **1a. Provider 설정 로드**
52
+
53
+ 이 단계를 건너뛰지 않는다. 어떤 단계든 에이전트 호출 직전에 1a의 해석 테이블이 출력되어 있어야 한다.
54
+
55
+ cascading 해석:
56
+
57
+ 1. `${CLAUDE_PLUGIN_ROOT}/data/provider-catalog.json`을 읽어 `agent_defaults`와 `agent_runtime`을 로드한다.
58
+ 2. `~/.claude/crew/config.json`이 있으면 `providers.{role}` 필드로 user-level 오버라이드를 적용한다.
59
+ 3. `{projectRoot}/.crew/config.json`이 있으면 `providers.{role}` 필드로 project-level 오버라이드를 다시 적용한다 (최우선).
60
+ 4. 본 스킬의 적용 대상 role은 `techlead`, `planner`, `plan-evaluator`, `explorer`, `researcher` 다섯 개다. 각 role의 `{provider, model, reasoning?, codex_sandbox}` 값을 결정한다.
61
+
62
+ Codex 가용성 확인: 해석 결과 중 codex provider가 하나라도 있으면 `which codex`(또는 `bash -lc 'command -v codex'`)로 가용성을 확인한다. codex가 없으면 해당 role을 catalog default(claude/{model})로 폴백하고 경고를 출력한다.
63
+
64
+ 해석 테이블 출력 (필수): 해석 결과를 다음 형식으로 stdout에 인쇄한다. 이 테이블이 출력되지 않은 채 1b 이후로 진행하지 않는다.
65
+
66
+ ```
67
+ provider 해석:
68
+ - techlead: {provider} / {model}{reasoning이 있으면 / {reasoning}} ({codex_sandbox})
69
+ - planner: {provider} / {model}{...}
70
+ - plan-evaluator: {provider} / {model}{...}
71
+ - explorer: {provider} / {model}{...}
72
+ - researcher: {provider} / {model}{...}
73
+ ```
74
+
75
+ 이후 Step 2/3/4의 디스패치는 이 테이블의 값을 기준으로 한다.
76
+
77
+ **1b. spec.md 유효성 검사**
50
78
 
51
79
  `.crew/plans/{task-id}/spec.md`를 확인한다.
52
80
 
@@ -64,15 +92,23 @@ spec.md가 없거나 비어 있습니다. crew-interview를 먼저 실행해야
64
92
 
65
93
  ### Step 2 — TechLead 에이전트 실행
66
94
 
67
- **provider/model**: 설정 resolver가 결정한다 (기본값: `agent_defaults.techlead`).
95
+ **provider/model**: Step 1a의 해석 테이블에서 `techlead`의 값을 사용한다. catalog default는 `agent_defaults.techlead`(claude/opus)이지만, user/project config가 우선한다.
68
96
 
69
- Claude provider 호출 예:
97
+ 해석 테이블의 provider 값에 따라 분기 디스패치한다:
70
98
 
71
- ```
72
- Agent(subagent_type="techlead", description="TechLead: {task-id} 사전 분석", prompt="...")
73
- ```
99
+ - **claude**:
100
+ ```
101
+ Agent(subagent_type="techlead", model="{model}", description="TechLead: {task-id} 사전 분석", prompt="...")
102
+ ```
103
+ - **codex**:
104
+ ```bash
105
+ node "${CLAUDE_PLUGIN_ROOT}/scripts/crew-codex-companion.mjs" task --json --expect-crew-result --model {model} --effort {reasoning} --prompt-file {promptFile}
106
+ ```
107
+ - `agent_runtime.techlead.codex_sandbox`가 `workspace-write`인 경우에만 `--write`를 추가한다 (plan 단계 에이전트는 모두 read-only).
108
+ - Codex는 `.crew/`에 직접 접근하지 않으므로, `spec.md` 내용을 `{promptFile}`에 인라인 주입한다.
109
+ - 마지막 `<crew-agent-result>` 블록의 `artifact`를 추출하여 Step 2 결과 저장에 사용한다.
74
110
 
75
- 에이전트 프롬프트:
111
+ 에이전트 프롬프트 (claude/codex 공통, codex의 경우 `{promptFile}`에 그대로 주입):
76
112
 
77
113
  ```
78
114
  당신은 TechLead 에이전트다. 사전 분석을 수행하고 아키텍처 방향을 판단한다.
@@ -158,13 +194,21 @@ TechLead의 analysis.md에서 테스트 인프라 섹션을 확인한 후, 오
158
194
 
159
195
  ### Step 3 — Planner 에이전트 실행
160
196
 
161
- **provider/model**: 설정 resolver가 결정한다 (기본값: `agent_defaults.planner`).
197
+ **provider/model**: Step 1a의 해석 테이블에서 `planner`의 값을 사용한다. catalog default는 `agent_defaults.planner`(claude/opus)이지만, user/project config가 우선한다.
162
198
 
163
- Claude provider 호출 예:
199
+ 해석 테이블의 provider 값에 따라 분기 디스패치한다:
164
200
 
165
- ```
166
- Agent(subagent_type="planner", description="Planner: {task-id} 구현 계획", prompt="...")
167
- ```
201
+ - **claude**:
202
+ ```
203
+ Agent(subagent_type="planner", model="{model}", description="Planner: {task-id} 구현 계획", prompt="...")
204
+ ```
205
+ - **codex**:
206
+ ```bash
207
+ node "${CLAUDE_PLUGIN_ROOT}/scripts/crew-codex-companion.mjs" task --json --expect-crew-result --model {model} --effort {reasoning} --prompt-file {promptFile}
208
+ ```
209
+ - `agent_runtime.planner.codex_sandbox`가 `workspace-write`인 경우에만 `--write` 추가 (Planner는 read-only).
210
+ - 첫 번째 실행 시 `spec.md` + `analysis.md`를 `{promptFile}`에 인라인 주입한다. retry 시 추가로 `review-{n}.md`를 주입한다.
211
+ - Planner는 plan.md 작성을 직접 수행해야 하나, codex provider는 `.crew/`에 쓰지 않으므로 `artifact`로 plan.md 본문 텍스트를 반환받아 오케스트레이터가 저장한다.
168
212
 
169
213
  **첫 번째 실행 시 에이전트 프롬프트**:
170
214
 
@@ -264,13 +308,21 @@ plan.md 최상단에 "이전 피드백 반영" 섹션을 추가한다.
264
308
 
265
309
  ### Step 4 — PlanEvaluator 에이전트 실행
266
310
 
267
- **provider/model**: 설정 resolver가 결정한다 (기본값: `agent_defaults.plan-evaluator`).
311
+ **provider/model**: Step 1a의 해석 테이블에서 `plan-evaluator`의 값을 사용한다. catalog default는 `agent_defaults.plan-evaluator`(claude/sonnet)이지만, user/project config가 우선한다.
268
312
 
269
- Claude provider 호출 예:
313
+ 해석 테이블의 provider 값에 따라 분기 디스패치한다:
270
314
 
271
- ```
272
- Agent(subagent_type="plan-evaluator", description="PlanEvaluator: {task-id} 계획 검증", prompt="...")
273
- ```
315
+ - **claude**:
316
+ ```
317
+ Agent(subagent_type="plan-evaluator", model="{model}", description="PlanEvaluator: {task-id} 계획 검증", prompt="...")
318
+ ```
319
+ - **codex**:
320
+ ```bash
321
+ node "${CLAUDE_PLUGIN_ROOT}/scripts/crew-codex-companion.mjs" task --json --expect-crew-result --model {model} --effort {reasoning} --prompt-file {promptFile}
322
+ ```
323
+ - PlanEvaluator는 read-only이므로 `--write`를 붙이지 않는다.
324
+ - `spec.md` + `analysis.md` + `plan.md`를 `{promptFile}`에 인라인 주입한다.
325
+ - 마지막 `<crew-agent-result>` 블록의 `artifact`를 추출하여 Step 4 결과 저장(`review.md`)에 사용한다.
274
326
 
275
327
  에이전트 프롬프트:
276
328
 
@@ -492,7 +544,7 @@ Planner + PlanEvaluator 사이클은 최대 5회 (초기 1회 + retry 최대 4
492
544
 
493
545
  ## 에이전트 호출 컨텍스트 규칙
494
546
 
495
- 오케스트레이터는 모든 에이전트를 `runAgent(role, prompt, providerConfig)` 규칙으로 호출한다.
547
+ 메타 규칙은 Step 1a의 해석 결과를 기준으로 적용한다. 본 문서의 `runAgent(role, prompt, providerConfig)` 표기는 의사코드이며, 실제 호출은 항상 Step 1a의 해석 테이블에서 해당 role의 provider를 확인한 뒤 아래 분기 규칙에 따라 `Agent` 또는 `Bash`로 직접 디스패치한다.
496
548
 
497
549
  - Claude provider: `Agent(subagent_type="{role}", model="{model}", description="...", prompt="...")`
498
550
  - Codex provider: `node "${CLAUDE_PLUGIN_ROOT}/scripts/crew-codex-companion.mjs" task --json --expect-crew-result --model {model} --effort {reasoning} --prompt-file {promptFile}`