@jjlabsio/claude-crew 0.1.30 → 0.1.32

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.
@@ -43,17 +43,48 @@ Agent(subagent_type="{role}", model="{model}", description="...", prompt="...")
43
43
 
44
44
  **codex provider:**
45
45
  ```
46
- Bash("codex exec --model {model} -c model_reasoning_effort=\"{reasoning}\" --dangerously-bypass-approvals-and-sandbox \"{prompt}\" < /dev/null")
46
+ Bash("node \"${CLAUDE_PLUGIN_ROOT}/scripts/crew-codex-companion.mjs\" task --json {writeFlag} --expect-crew-result --model {model} --effort {reasoning} --prompt-file {promptFile}")
47
47
  ```
48
- - 프롬프트가 길면 임시 파일에 저장 `cat`으로 전달한다.
48
+ - 프롬프트는 임시 파일에 저장하고 `--prompt-file`로 전달한다.
49
+ - `writeFlag`는 `data/provider-catalog.json`의 `agent_runtime.{role}.codex_sandbox`가 `workspace-write`일 때만 `--write`로 설정한다. 기본값은 read-only이며 `dev`만 workspace-write다.
49
50
  - Codex는 CWD 기준으로 작업하므로 워크트리 안에서 실행한다.
50
- - Codex stdout에서 결과를 캡처한다.
51
+ - Codex app-server thread id와 stdout에서 결과를 캡처한다.
52
+ - 같은 Codex 작업을 이어갈 때는 `--resume-last`를 사용한다.
51
53
 
52
54
  **codex provider 제약:**
53
55
  - Codex는 Claude Code의 Read/Edit/Glob 도구가 아닌 자체 도구를 사용한다.
54
- - Codex 에이전트는 `.crew/` 파일에 직접 접근할 없으므로, 프롬프트에 필요한 내용을 인라인으로 주입해야 한다.
56
+ - Codex 에이전트는 `.crew/` 접근 정책을 우회하면 된다. 필요한 `.crew/` 내용은 오케스트레이터가 프롬프트에 인라인으로 주입한다.
55
57
  - Codex dev-log.md 작성: Codex stdout을 오케스트레이터가 파싱하여 dev-log.md를 생성한다.
56
58
 
59
+ ### AgentResult 공통 프로토콜
60
+
61
+ Codex provider를 사용하는 모든 에이전트는 마지막에 아래 블록을 반드시 출력한다. 오케스트레이터는 `--expect-crew-result` payload의 `crewAgentResult`를 파싱하여 상태별 후속 액션을 수행한다.
62
+
63
+ ```json
64
+ <crew-agent-result>
65
+ {
66
+ "status": "complete",
67
+ "artifact": "에이전트 최종 결과 또는 산출물",
68
+ "questions": [],
69
+ "requests": [],
70
+ "summary": "짧은 요약",
71
+ "error": null
72
+ }
73
+ </crew-agent-result>
74
+ ```
75
+
76
+ 허용 상태:
77
+ - `complete`: `artifact`를 저장하거나 다음 단계로 전달한다.
78
+ - `blocked_on_user`: `questions`를 `AskUserQuestion`으로 질문한 뒤 같은 에이전트를 `--resume-last`로 이어간다.
79
+ - `needs_agent`: `requests`의 `role`/`prompt`를 `runAgent`로 실행한 뒤 결과를 같은 에이전트에 주입한다.
80
+ - `needs_tool`: 오케스트레이터가 허용된 Claude Code 도구를 실행한 뒤 결과를 같은 에이전트에 주입한다.
81
+ - `failed`: crash/retry/fallback/escalation 정책을 적용한다.
82
+
83
+ 루프 상한:
84
+ - 한 에이전트 실행당 AgentResult 후속 루프는 최대 5회.
85
+ - 유저 질문은 한 에이전트 실행당 최대 3회.
86
+ - `needs_agent` 요청은 한 에이전트 실행당 최대 5개.
87
+
57
88
  ---
58
89
 
59
90
  ## 절대 금지
@@ -99,7 +130,7 @@ Bash("codex exec --model {model} -c model_reasoning_effort=\"{reasoning}\" --dan
99
130
  | 에이전트 | subagent_type | 볼 수 있는 것 | 차단 | 차단 근거 |
100
131
  |----------|--------------|-------------|------|----------|
101
132
  | **Dev** | dev | plan.md, contract.md | brief.md, spec.md, analysis.md | 의도 추측 방지, plan+contract에 필요 정보 포함 |
102
- | **CodeReviewer** | code-reviewer | git diff(직접 실행), 가드레일(인라인) | contract.md, plan.md, brief.md, spec.md, dev-log.md | 수용 기준 체리피킹 방지 (.crew/는 .gitignore 대상이므로 diff 노출되지 않음) |
133
+ | **CodeReviewer** | code-reviewer | git diff(직접 실행, `':!.crew/'` exclude), 가드레일(인라인) | contract.md, plan.md, brief.md, spec.md, dev-log.md | 수용 기준 체리피킹 방지 (.crew/는 git diff 호출 시 pathspec `':!.crew/'`로 명시적 exclude하여 메타 파일 노출 방지) |
103
134
  | **QA** | qa | plan.md | contract.md, brief.md, spec.md | 검증 편향 방지 |
104
135
 
105
136
  **중요**: 모든 에이전트 호출 시 반드시 `subagent_type` 파라미터를 지정해야 한다. `subagent_type`이 없으면 PreToolUse hook이 호출을 차단한다. `model` 파라미터는 생략 가능 — hook이 에이전트 정의에서 자동 주입한다.
@@ -112,13 +143,13 @@ Bash("codex exec --model {model} -c model_reasoning_effort=\"{reasoning}\" --dan
112
143
 
113
144
  **1a. Provider 설정 로드**
114
145
 
115
- 1. `data/provider-catalog.json`을 읽어 `agent_defaults`를 로드한다.
146
+ 1. `data/provider-catalog.json`을 읽어 `agent_defaults`와 `agent_runtime`을 로드한다.
116
147
  2. `~/.claude/crew/config.json`이 있으면 `providers` 필드를 읽어 `agent_defaults`를 오버라이드한다 (유저 레벨).
117
148
  3. `{projectRoot}/.crew/config.json`이 있으면 `providers` 필드를 읽어 다시 오버라이드한다 (프로젝트 레벨, 최우선).
118
149
  4. codex provider가 하나라도 설정되어 있으면 `which codex`로 가용성을 확인한다.
119
- - codex가 없으면 경고를 출력하고 해당 에이전트를 기본값(claude)으로 폴백한다.
150
+ - codex가 없으면 경고를 출력하고 해당 에이전트를 Claude provider의 에이전트 frontmatter 모델로 폴백한다.
120
151
 
121
- 해석된 설정을 Phase 2, 3에서 ��용한다.
152
+ 해석된 provider/model 설정과 role별 runtime 정책을 Phase 2, 3에서 사용한다.
122
153
 
123
154
  **1b. contract.md 유효성 검사**
124
155
 
@@ -295,7 +326,12 @@ US-{k}에 해당하는 피드백만 수정한다. 다른 US의 코드를 변경
295
326
  오케스트레이터가 plan.md에서 US-{k} 섹션과 contract.md의 수용 기준을 추출하여 프롬프트에 인라인으로 주입한다.
296
327
 
297
328
  ```bash
298
- codex exec --model {model} -c model_reasoning_effort="{reasoning}" --dangerously-bypass-approvals-and-sandbox "$(cat <<'PROMPT'
329
+ node "${CLAUDE_PLUGIN_ROOT}/scripts/crew-codex-companion.mjs" task --json --write --expect-crew-result --model {model} --effort "{reasoning}" --prompt-file "{promptFile}"
330
+ ```
331
+
332
+ `{promptFile}` 내용:
333
+
334
+ ```markdown
299
335
  당신은 Dev 에이전트다. 아래 유저 스토리 US-{k}만 구현한다.
300
336
 
301
337
  ## US-{k} (plan.md에서 추출)
@@ -319,12 +355,18 @@ codex exec --model {model} -c model_reasoning_effort="{reasoning}" --dangerously
319
355
  - 기존 코드베이스의 컨벤션을 따른다.
320
356
 
321
357
  ## 완료 시 출력
322
- 구현 요약을 출력하라:
323
- - 변경한 파일 목록
324
- - US-{k} 구현 내용 1줄 요약
325
- - 자체 검증 결과 (각 항목별 PASS/FAIL + 명령어 + 출력)
326
- PROMPT
327
- )" < /dev/null
358
+ 구현 요약을 출력하고, 마지막에 `<crew-agent-result>` 블록을 포함하라:
359
+
360
+ <crew-agent-result>
361
+ {
362
+ "status": "complete",
363
+ "artifact": "변경한 파일 목록, US-{k} 구현 요약, 자체 검증 결과",
364
+ "questions": [],
365
+ "requests": [],
366
+ "summary": "US-{k} 구현 완료",
367
+ "error": null
368
+ }
369
+ </crew-agent-result>
328
370
  ```
329
371
 
330
372
  Codex stdout을 캡처하여 dev-log.md의 US-{k} 섹션으로 추가한다.
@@ -415,7 +457,7 @@ CodeReviewer와 QA를 **동시에** 호출한다. US-k의 변경분만 검증한
415
457
  당신은 CodeReviewer 에이전트다. 코드 변경 사항의 품질을 판단한다.
416
458
 
417
459
  ## 입력
418
- `git diff HEAD`를 직접 실행하여 마지막 커밋 이후 변경 사항을 확인하라.
460
+ `git diff HEAD -- ':!.crew/'`를 직접 실행하여 마지막 커밋 이후의 **코드 산출물 변경 사항만** 확인하라. (`.crew/` 디렉토리는 crew-dev 파이프라인의 메타 파일로, 본 리뷰 범위가 아니다.)
419
461
  contract.md, plan.md, brief.md, spec.md, dev-log.md는 읽지 않는다.
420
462
  코드만 보고 판단한다.
421
463
 
@@ -482,6 +524,14 @@ contract.md, brief.md, spec.md는 읽지 않는다.
482
524
 
483
525
  **병렬 실행 방법**: Phase 3과 동일 (provider 조합에 따라 Agent/Bash 병렬 호출).
484
526
 
527
+ Codex provider인 CodeReviewer/QA는 read-only로 실행한다. `--write`를 붙이지 않는다.
528
+
529
+ ```bash
530
+ node "${CLAUDE_PLUGIN_ROOT}/scripts/crew-codex-companion.mjs" task --json --expect-crew-result --model {model} --effort "{reasoning}" --prompt-file "{promptFile}"
531
+ ```
532
+
533
+ CodeReviewer/QA Codex 프롬프트도 마지막에 `<crew-agent-result>` 블록을 포함해야 한다. 검토/검증 결과는 `artifact`에 넣고, 판정이 불가능하면 `failed` 또는 `needs_tool`을 반환한다.
534
+
485
535
  **결과 저장 (오케스트레이터 직접)**:
486
536
  - CodeReviewer 결과 → `.crew/plans/{task-id}/review-report.md`
487
537
  - QA 결과 → `.crew/plans/{task-id}/qa-report.md`
@@ -591,7 +641,7 @@ CodeReviewer와 QA를 **동시에** 호출한다.
591
641
  당신은 CodeReviewer 에이전트다. 전체 코드 변경 사항의 품질을 판단한다.
592
642
 
593
643
  ## 입력
594
- `git diff main...HEAD`를 직접 실행하여 전체 변경 사항을 확인하라.
644
+ `git diff main...HEAD -- ':!.crew/'`를 직접 실행하여 전체 **코드 산출물 변경 사항만** 확인하라. (`.crew/` 디렉토리는 crew-dev 파이프라인의 메타 파일로, 본 리뷰 범위가 아니다.)
595
645
  contract.md, plan.md, brief.md, spec.md, dev-log.md는 읽지 않는다.
596
646
  코드만 보고 판단한다.
597
647
 
@@ -675,7 +725,7 @@ CodeReviewer와 QA 에이전트는 read-only이므로 파일을 직접 작성하
675
725
  오케스트레이터는 CodeReviewer와 QA를 **동시에** 호출한다. provider 조합에 따라:
676
726
 
677
727
  - 둘 다 claude → Agent tool 2개를 한 번에 호출
678
- - 둘 다 codex → Bash tool 2개를 한 번에 호출
728
+ - 둘 다 codex → read-only Bash tool 2개를 한 번에 호출 (`--write` 금지)
679
729
  - 혼합 → Agent + Bash를 한 번에 호출
680
730
 
681
731
  ---
@@ -34,6 +34,12 @@ description: 유저 요구사항을 인터뷰하여 개발 가능한 수준의 s
34
34
 
35
35
  ## 실행 순서
36
36
 
37
+ PM 판단/질문/spec 작성 단계도 provider 설정 대상이다. 오케스트레이터는 `pm` 설정을 해석한 뒤 아래 인터뷰 로직을 PM 작업 프롬프트로 구성하여 `runAgent(role="pm", ...)`로 실행한다.
38
+
39
+ - PM이 Claude provider이면 기존처럼 `AskUserQuestion`, Read/Write를 사용할 수 있다.
40
+ - PM이 Codex provider이면 직접 질문하거나 `.crew/` 파일을 쓰지 않는다. 질문이 필요하면 `blocked_on_user`, 추가 탐색이 필요하면 `needs_agent`, 최종 spec은 `complete.artifact`로 반환한다.
41
+ - Codex PM의 `artifact`는 오케스트레이터가 `.crew/plans/{task-id}/spec.md`로 저장한다.
42
+
37
43
  ### Phase 1 — 초기화 (자동)
38
44
 
39
45
  **1a. task-id 생성 + brief.md 작성**
@@ -46,7 +52,7 @@ task-id는 요청 내용에서 키워드를 추출하여 kebab-case로 생성한
46
52
  Explorer 서브에이전트를 병렬로 호출하여 프로젝트 구조를 파악한다.
47
53
 
48
54
  ```
49
- Agent(subagent_type="explorer", description="프로젝트 구조 탐색", prompt="...")
55
+ runAgent(role="explorer", description="프로젝트 구조 탐색", prompt="...")
50
56
  ```
51
57
 
52
58
  탐색 목적:
@@ -124,7 +130,7 @@ NO 항목 중 **가장 선행되어야 할 것**을 선택한다.
124
130
  예: 유저가 "기존 결제 로직에 추가"라고 답하면 결제 관련 코드를 탐색.
125
131
 
126
132
  ```
127
- Agent(subagent_type="explorer", description="결제 관련 코드 탐색", prompt="...")
133
+ runAgent(role="explorer", description="결제 관련 코드 탐색", prompt="...")
128
134
  ```
129
135
 
130
136
  **2e. 유저 답변 수신 + 큰 기획 갭 감지**
@@ -299,12 +305,34 @@ spec.md를 작성했습니다. 검토해주세요.
299
305
 
300
306
  ## 에이전트 호출 규칙
301
307
 
302
- | 에이전트 | subagent_type | 모델 | 용도 | 호출 시점 |
308
+ 오케스트레이터는 모든 에이전트를 `runAgent(role, prompt, providerConfig)` 규칙으로 호출한다.
309
+
310
+ - Claude provider: `Agent(subagent_type="{role}", model="{model}", description="...", prompt="...")`
311
+ - Codex provider: `node "${CLAUDE_PLUGIN_ROOT}/scripts/crew-codex-companion.mjs" task --json --expect-crew-result --model {model} --effort {reasoning} --prompt-file {promptFile}`
312
+ - `data/provider-catalog.json`의 `agent_runtime.{role}.codex_sandbox`가 `workspace-write`일 때만 `--write`를 붙인다. interview 단계 에이전트는 모두 read-only다.
313
+ - Codex provider는 `.crew/` 파일을 직접 읽거나 쓰지 않는다. 필요한 컨텍스트는 오케스트레이터가 프롬프트에 인라인 주입하고, 산출물은 `artifact`로 반환받아 오케스트레이터가 저장한다.
314
+
315
+ | 에이전트 | subagent_type | 기본 provider/model | 용도 | 호출 시점 |
303
316
  |----------|--------------|------|------|----------|
304
- | Explorer | explorer | haiku | 코드베이스 탐색 (read-only) | Phase 1b (필수), Phase 2d (필요 시) |
305
- | Researcher | researcher | sonnet | 외부 조사 (WebSearch) | Phase 2 중 필요 시 |
317
+ | Explorer | explorer | `agent_defaults.explorer` | 코드베이스 탐색 (read-only) | Phase 1b (필수), Phase 2d (필요 시) |
318
+ | Researcher | researcher | `agent_defaults.researcher` | 외부 조사 (WebSearch) | Phase 2 중 필요 시 |
319
+
320
+ **중요**: provider/model은 `.crew/config.json`, `~/.claude/crew/config.json`, `data/provider-catalog.json`의 `agent_defaults` 순서로 해석한다.
321
+
322
+ Codex provider 결과는 마지막 `<crew-agent-result>` 블록으로 파싱한다.
323
+
324
+ ```json
325
+ {
326
+ "status": "complete | blocked_on_user | needs_agent | needs_tool | failed",
327
+ "artifact": "최종 산출물 또는 결과",
328
+ "questions": [],
329
+ "requests": [],
330
+ "summary": "짧은 요약",
331
+ "error": null
332
+ }
333
+ ```
306
334
 
307
- **중요**: 모든 에이전트 호출 시 반드시 `subagent_type` 파라미터를 지정해야 한다. `subagent_type`이 없으면 PreToolUse hook이 호출을 차단한다. `model` 파라미터는 생략 가능 hook이 에이전트 정의에서 자동 주입한다.
335
+ `blocked_on_user`는 오케스트레이터가 `AskUserQuestion`으로 처리하고, `needs_agent`는 요청된 role을 다시 `runAgent`로 실행한 결과를 원래 에이전트에 `--resume-last`로 주입한다.
308
336
 
309
337
  ---
310
338
 
@@ -40,6 +40,12 @@ crew-interview가 생성한 spec.md를 입력으로 받아 **HOW(어떻게 만
40
40
 
41
41
  ## 실행 순서
42
42
 
43
+ TechLead, Planner, PlanEvaluator는 모두 provider 설정 대상이다. 오케스트레이터는 각 단계에서 `runAgent(role, prompt, providerConfig)`를 사용한다.
44
+
45
+ - Claude provider이면 기존 Claude Code `Agent` 호출을 사용한다.
46
+ - Codex provider이면 read-only companion task를 사용하고, 산출물은 `<crew-agent-result>.artifact`로 반환받아 오케스트레이터가 `.crew/` 파일에 저장한다.
47
+ - Codex TechLead/Planner가 Explorer/Researcher가 필요하면 직접 호출하지 않고 `needs_agent`를 반환한다. 오케스트레이터가 요청된 에이전트를 실행한 뒤 결과를 원래 Codex thread에 `--resume-last`로 주입한다.
48
+
43
49
  ### Step 1 — spec.md 유효성 검사 (오케스트레이터 직접)
44
50
 
45
51
  `.crew/plans/{task-id}/spec.md`를 확인한다.
@@ -58,9 +64,9 @@ spec.md가 없거나 비어 있습니다. crew-interview를 먼저 실행해야
58
64
 
59
65
  ### Step 2 — TechLead 에이전트 실행
60
66
 
61
- **모델**: opus
67
+ **provider/model**: 설정 resolver가 결정한다 (기본값: `agent_defaults.techlead`).
62
68
 
63
- 호출:
69
+ Claude provider 호출 예:
64
70
 
65
71
  ```
66
72
  Agent(subagent_type="techlead", description="TechLead: {task-id} 사전 분석", prompt="...")
@@ -79,14 +85,14 @@ WHAT(무엇을 만드는가)은 이미 정의되어 있으므로, HOW(어떻게
79
85
 
80
86
  ## 서브에이전트 호출
81
87
  - Explorer (Haiku): 코드베이스 탐색. 항상 호출. 병렬 2-3개로 호출하라.
82
- Agent(subagent_type="explorer", description="코드베이스 탐색: {탐색 대상}", prompt="...")
88
+ runAgent(role="explorer", description="코드베이스 탐색: {탐색 대상}", prompt="...")
83
89
  **필수 탐색 항목**: 테스트 인프라도 반드시 탐색한다. Explorer 중 1개는 다음을 확인:
84
90
  - 테스트 프레임워크 설정 파일 (jest.config.*, vitest.config.*, pytest.ini 등)
85
91
  - 대표적인 테스트 파일 2-3개의 패턴
86
92
  - 커버리지 설정 여부
87
93
  - 테스트 실행 스크립트 (package.json scripts 등)
88
94
  - Researcher (Sonnet): 외부 리서치. 필요시만 호출.
89
- Agent(subagent_type="researcher", description="외부 리서치: {리서치 대상}", prompt="...")
95
+ runAgent(role="researcher", description="외부 리서치: {리서치 대상}", prompt="...")
90
96
  **외부 API/서비스가 관련된 경우**: spec.md에 언급된 각 외부 대상(엔드포인트, 서비스, 플랫폼)에 대해 **개별적으로** 문서/인터페이스를 조사하라. 하나의 대상에 대한 문서를 다른 대상에 일반화하지 않는다. 문서가 확인되지 않는 대상은 "미검증 인터페이스"로 명시한다.
91
97
 
92
98
  ## 출력
@@ -152,9 +158,9 @@ TechLead의 analysis.md에서 테스트 인프라 섹션을 확인한 후, 오
152
158
 
153
159
  ### Step 3 — Planner 에이전트 실행
154
160
 
155
- **모델**: opus
161
+ **provider/model**: 설정 resolver가 결정한다 (기본값: `agent_defaults.planner`).
156
162
 
157
- 호출:
163
+ Claude provider 호출 예:
158
164
 
159
165
  ```
160
166
  Agent(subagent_type="planner", description="Planner: {task-id} 구현 계획", prompt="...")
@@ -258,9 +264,9 @@ plan.md 최상단에 "이전 피드백 반영" 섹션을 추가한다.
258
264
 
259
265
  ### Step 4 — PlanEvaluator 에이전트 실행
260
266
 
261
- **모델**: sonnet (하드 임계값 판정에서 Opus 합리화 방지)
267
+ **provider/model**: 설정 resolver가 결정한다 (기본값: `agent_defaults.plan-evaluator`).
262
268
 
263
- 호출:
269
+ Claude provider 호출 예:
264
270
 
265
271
  ```
266
272
  Agent(subagent_type="plan-evaluator", description="PlanEvaluator: {task-id} 계획 검증", prompt="...")
@@ -307,7 +313,7 @@ Agent(subagent_type="plan-evaluator", description="PlanEvaluator: {task-id} 계
307
313
 
308
314
  ## E3 코드 참조 확인
309
315
  Explorer 서브에이전트를 호출하여 plan.md에서 참조하는 파일/모듈이 존재하는지 확인하라.
310
- Agent(subagent_type="explorer", description="코드 참조 확인: {파일 목록 요약}", prompt="plan.md에서 참조하는 다음 파일/모듈이 존재하는지 확인하라: {파일 목록}")
316
+ runAgent(role="explorer", description="코드 참조 확인: {파일 목록 요약}", prompt="plan.md에서 참조하는 다음 파일/모듈이 존재하는지 확인하라: {파일 목록}")
311
317
 
312
318
  ## 출력
313
319
  아래 형식으로 검증 결과를 텍스트로 반환하라. 파일을 직접 작성하지 않는다.
@@ -486,14 +492,36 @@ Planner + PlanEvaluator 사이클은 최대 5회 (초기 1회 + retry 최대 4
486
492
 
487
493
  ## 에이전트 호출 컨텍스트 규칙
488
494
 
489
- | 에이전트 | subagent_type | 모델 | 주입할 파일 | 차단할 파일 |
495
+ 오케스트레이터는 모든 에이전트를 `runAgent(role, prompt, providerConfig)` 규칙으로 호출한다.
496
+
497
+ - Claude provider: `Agent(subagent_type="{role}", model="{model}", description="...", prompt="...")`
498
+ - Codex provider: `node "${CLAUDE_PLUGIN_ROOT}/scripts/crew-codex-companion.mjs" task --json --expect-crew-result --model {model} --effort {reasoning} --prompt-file {promptFile}`
499
+ - `data/provider-catalog.json`의 `agent_runtime.{role}.codex_sandbox`가 `workspace-write`일 때만 `--write`를 붙인다. plan 단계 에이전트는 모두 read-only다.
500
+ - Codex provider는 `.crew/` 파일을 직접 읽거나 쓰지 않는다. 필요한 `spec.md`, `analysis.md`, `plan.md`, `review-{n}.md` 내용은 오케스트레이터가 프롬프트에 인라인 주입한다.
501
+
502
+ | 에이전트 | subagent_type | 기본 provider/model | 주입할 파일 | 차단할 파일 |
490
503
  |----------|--------------|------|------------|------------|
491
- | TechLead | techlead | opus | spec.md | — |
492
- | Planner (첫 번째) | planner | opus | spec.md + analysis.md | brief.md |
493
- | Planner (retry) | planner | opus | spec.md + analysis.md + review-{n}.md | brief.md |
494
- | PlanEvaluator | plan-evaluator | sonnet | spec.md + analysis.md + plan.md | brief.md |
504
+ | TechLead | techlead | `agent_defaults.techlead` | spec.md | — |
505
+ | Planner (첫 번째) | planner | `agent_defaults.planner` | spec.md + analysis.md | brief.md |
506
+ | Planner (retry) | planner | `agent_defaults.planner` | spec.md + analysis.md + review-{n}.md | brief.md |
507
+ | PlanEvaluator | plan-evaluator | `agent_defaults.plan-evaluator` | spec.md + analysis.md + plan.md | brief.md |
508
+
509
+ **중요**: provider/model은 `.crew/config.json`, `~/.claude/crew/config.json`, `data/provider-catalog.json`의 `agent_defaults` 순서로 해석한다. Claude provider는 `Agent(subagent_type=..., model=...)`로 호출하고, Codex provider는 `scripts/crew-codex-companion.mjs task`로 호출한다.
510
+
511
+ Codex provider 결과는 마지막 `<crew-agent-result>` 블록으로 파싱한다.
512
+
513
+ ```json
514
+ {
515
+ "status": "complete | blocked_on_user | needs_agent | needs_tool | failed",
516
+ "artifact": "최종 산출물 또는 결과",
517
+ "questions": [],
518
+ "requests": [],
519
+ "summary": "짧은 요약",
520
+ "error": null
521
+ }
522
+ ```
495
523
 
496
- **중요**: 모든 에이전트 호출 반드시 `subagent_type` 파라미터를 지정해야 한다. `subagent_type`이 없으면 PreToolUse hook이 호출을 차단한다. `model` 파라미터는 생략 가능 hook이 에이전트 정의에서 자동 주입한다.
524
+ `blocked_on_user`는 오케스트레이터가 `AskUserQuestion`으로 처리한다. `needs_agent`는 Explorer/Researcher 요청된 role을 `runAgent`로 실행한 결과를 원래 에이전트에 `--resume-last`로 주입한다. 에이전트 실행의 후속 루프는 최대 5회다.
497
525
 
498
526
  ---
499
527
 
@@ -141,13 +141,19 @@ git rev-parse --show-toplevel
141
141
 
142
142
  `data/provider-catalog.json`을 읽어 사용 가능한 provider와 model 목록을 로드한다.
143
143
 
144
+ 카탈로그의 역할:
145
+ - `claude.models`: 선택 가능한 Claude 모델 ID
146
+ - `codex.models`: 선택 가능한 Codex 모델/reasoning 조합
147
+ - `agent_defaults`: 에이전트별 기본 provider/model
148
+ - `agent_runtime`: 에이전트별 Codex sandbox 정책 (`dev`만 `workspace-write`, 나머지는 `read-only`)
149
+
144
150
  ### 3c. Codex CLI 가용성 확인
145
151
 
146
152
  ```bash
147
153
  which codex
148
154
  ```
149
155
 
150
- - codex가 없으면: "Codex CLI가 설치되어 있지 않습니다. 모든 에이전트가 Claude를 사용합니다." 안내 후 Step 3를 스킵한다.
156
+ - codex가 없으면: "Codex CLI가 설치되어 있지 않습니다. Codex provider 선택지는 표시하지 않습니다." 안내 후 Claude 모델만 설정한다.
151
157
  - codex가 있으면: 계속 진행한다.
152
158
 
153
159
  ### 3d. 기존 설정 표시
@@ -156,8 +162,14 @@ Step 3a에서 판별된 config 경로의 파일이 있으면 현재 설정을
156
162
 
157
163
  ```
158
164
  현재 에이전트 설정:
159
- - dev: claude / opus (기본값)
160
- - code-reviewer: claude / opus (기본값)
165
+ - pm: claude / opus (기본값)
166
+ - techlead: claude / opus (기본값)
167
+ - planner: claude / opus (기본값)
168
+ - plan-evaluator: claude / sonnet (기본값)
169
+ - explorer: claude / haiku (기본값)
170
+ - researcher: claude / sonnet (기본값)
171
+ - dev: codex / gpt-5.5 medium (기본값)
172
+ - code-reviewer: codex / gpt-5.5 medium (기본값)
161
173
  - qa: claude / sonnet (기본값)
162
174
  ```
163
175
 
@@ -167,46 +179,37 @@ Step 3a에서 판별된 config 경로의 파일이 있으면 현재 설정을
167
179
 
168
180
  ```
169
181
  설정을 변경할 에이전트를 선택하세요 (쉼표 구분, 엔터 = 스킵):
170
- dev, code-reviewer, qa
182
+ pm, techlead, planner, plan-evaluator, explorer, researcher, dev, code-reviewer, qa
171
183
  ```
172
184
 
173
185
  - 사용자가 엔터만 누르거나 "없음"/"스킵"을 입력하면 Step 3를 종료한다.
174
- - 예시 입력: `dev`, `dev, code-reviewer`
186
+ - 예시 입력: `planner`, `dev, code-reviewer`
175
187
 
176
188
  ### 3f. 선택된 에이전트별 설정
177
189
 
178
190
  선택된 각 에이전트에 대해 순차적으로:
179
191
 
180
- **Provider 선택:**
181
- ```
182
- ── {agent} ──
183
- Provider:
184
- [1] claude
185
- [2] codex
186
- ```
192
+ **Model 선택:**
187
193
 
188
- **Model 선택 (provider 따라 목록이 다름):**
194
+ 카탈로그에서 `status: active` 모델 조합을 번호 목록으로 표시한다. 모델 설명은 표시하지 않고 provider/model/reasoning ID만 보여준다. 첫 항목은 항상 기본값이다.
189
195
 
190
- 카탈로그에서 해당 provider의 models 배열을 번호 목록으로 표시한다. 1번이 추천.
191
-
192
- claude 선택 시:
193
196
  ```
194
197
  Model:
195
- [1] Opus 최고 품질, 복잡한 구현 (추천)
196
- [2] Sonnet 빠르고 저렴, Opus급 성능
197
- [3] Haiku 최저 비용, 단순 태스크
198
- ```
199
-
200
- codex 선택 시:
201
- ```
202
- Model:
203
- [1] GPT-5.4 xhigh (추천) — 최고 성능, 토큰 多
204
- [2] GPT-5.4 high — 고성능, 균형잡힌 비용
205
- [3] GPT-5.4 medium — 빠르고 저렴
206
- [4] o3 high — 추론 특화
207
- [5] o3 medium — 추론 특화, 저비용
208
- [6] GPT-5.4 Mini — 최저 비용
209
- ```
198
+ [1] default: {default provider} / {default model} {default reasoning}
199
+ [2] claude / opus
200
+ [3] claude / claude-opus-4-7
201
+ [4] claude / claude-opus-4-6
202
+ [5] claude / sonnet
203
+ [6] claude / claude-sonnet-4-6
204
+ [7] claude / haiku
205
+ [8] claude / claude-haiku-4-5
206
+ [9] codex / gpt-5.5 / xhigh
207
+ [10] codex / gpt-5.5 / high
208
+ [11] codex / gpt-5.5 / medium
209
+ ...
210
+ ```
211
+
212
+ codex가 설치되어 있지 않으면 codex 항목은 제외한다.
210
213
 
211
214
  ### 3g. 설정 저장
212
215
 
@@ -226,20 +229,21 @@ Model:
226
229
  ```json
227
230
  {
228
231
  "providers": {
229
- "dev": { "provider": "codex", "model": "gpt-5.4", "reasoning": "xhigh" }
232
+ "planner": { "provider": "codex", "model": "gpt-5.5", "reasoning": "high" }
230
233
  }
231
234
  }
232
235
  ```
233
236
 
234
237
  - claude provider일 때: `reasoning` 필드 생략
235
238
  - codex provider일 때: 카탈로그의 `reasoning` 값 포함 (`null`이면 생략)
239
+ - `agent_runtime`은 유저 config에 저장하지 않는다. runtime 권한은 플러그인 카탈로그 정책을 따른다.
236
240
 
237
241
  ### 3h. 확인 메시지
238
242
 
239
243
  ```
240
244
  ✓ Provider 설정 완료:
241
- - dev: codex / gpt-5.4 xhigh
242
- - code-reviewer: claude / opus (기본값)
245
+ - planner: codex / gpt-5.5 high
246
+ - dev: codex / gpt-5.5 medium (기본값)
243
247
  - qa: claude / sonnet (기본값)
244
248
 
245
249
  설정 파일: ~/.claude/crew/config.json (유저 레벨 — 모든 프로젝트 공유)