@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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +2 -1
- package/README.md +11 -1
- package/THIRD_PARTY_NOTICES.md +14 -0
- package/data/provider-catalog.json +36 -14
- package/package.json +2 -1
- package/scripts/crew-codex/LICENSE +201 -0
- package/scripts/crew-codex/NOTICE +16 -0
- package/scripts/crew-codex/app-server-broker.mjs +254 -0
- package/scripts/crew-codex/lib/app-server.mjs +352 -0
- package/scripts/crew-codex/lib/args.mjs +130 -0
- package/scripts/crew-codex/lib/broker-endpoint.mjs +43 -0
- package/scripts/crew-codex/lib/broker-lifecycle.mjs +213 -0
- package/scripts/crew-codex/lib/codex.mjs +1090 -0
- package/scripts/crew-codex/lib/fs.mjs +42 -0
- package/scripts/crew-codex/lib/git.mjs +348 -0
- package/scripts/crew-codex/lib/job-control.mjs +310 -0
- package/scripts/crew-codex/lib/process.mjs +137 -0
- package/scripts/crew-codex/lib/prompts.mjs +15 -0
- package/scripts/crew-codex/lib/render.mjs +466 -0
- package/scripts/crew-codex/lib/state.mjs +424 -0
- package/scripts/crew-codex/lib/tracked-jobs.mjs +279 -0
- package/scripts/crew-codex/lib/workspace.mjs +11 -0
- package/scripts/crew-codex-companion.mjs +863 -0
- package/skills/crew-dev/SKILL.md +68 -18
- package/skills/crew-interview/SKILL.md +34 -6
- package/skills/crew-plan/SKILL.md +43 -15
- package/skills/crew-setup/SKILL.md +38 -34
package/skills/crew-dev/SKILL.md
CHANGED
|
@@ -43,17 +43,48 @@ Agent(subagent_type="{role}", model="{model}", description="...", prompt="...")
|
|
|
43
43
|
|
|
44
44
|
**codex provider:**
|
|
45
45
|
```
|
|
46
|
-
Bash("codex
|
|
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
|
-
-
|
|
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
|
|
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(직접
|
|
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가 없으면 경고를 출력하고 해당 에이전트를
|
|
150
|
+
- codex가 없으면 경고를 출력하고 해당 에이전트를 Claude provider의 에이전트 frontmatter 모델로 폴백한다.
|
|
120
151
|
|
|
121
|
-
해석된
|
|
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
|
|
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
|
-
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
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
|
-
|
|
55
|
+
runAgent(role="explorer", description="프로젝트 구조 탐색", prompt="...")
|
|
50
56
|
```
|
|
51
57
|
|
|
52
58
|
탐색 목적:
|
|
@@ -124,7 +130,7 @@ NO 항목 중 **가장 선행되어야 할 것**을 선택한다.
|
|
|
124
130
|
예: 유저가 "기존 결제 로직에 추가"라고 답하면 결제 관련 코드를 탐색.
|
|
125
131
|
|
|
126
132
|
```
|
|
127
|
-
|
|
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
|
-
|
|
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 |
|
|
305
|
-
| Researcher | researcher |
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 |
|
|
492
|
-
| Planner (첫 번째) | planner |
|
|
493
|
-
| Planner (retry) | planner |
|
|
494
|
-
| PlanEvaluator | plan-evaluator |
|
|
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
|
-
|
|
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가 설치되어 있지 않습니다.
|
|
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
|
-
-
|
|
160
|
-
-
|
|
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
|
-
- 예시 입력: `
|
|
186
|
+
- 예시 입력: `planner`, `dev, code-reviewer`
|
|
175
187
|
|
|
176
188
|
### 3f. 선택된 에이전트별 설정
|
|
177
189
|
|
|
178
190
|
선택된 각 에이전트에 대해 순차적으로:
|
|
179
191
|
|
|
180
|
-
**
|
|
181
|
-
```
|
|
182
|
-
── {agent} ──
|
|
183
|
-
Provider:
|
|
184
|
-
[1] claude
|
|
185
|
-
[2] codex
|
|
186
|
-
```
|
|
192
|
+
**Model 선택:**
|
|
187
193
|
|
|
188
|
-
|
|
194
|
+
카탈로그에서 `status: active` 모델 조합을 번호 목록으로 표시한다. 모델 설명은 표시하지 않고 provider/model/reasoning ID만 보여준다. 첫 항목은 항상 기본값이다.
|
|
189
195
|
|
|
190
|
-
카탈로그에서 해당 provider의 models 배열을 번호 목록으로 표시한다. 1번이 추천.
|
|
191
|
-
|
|
192
|
-
claude 선택 시:
|
|
193
196
|
```
|
|
194
197
|
Model:
|
|
195
|
-
[1]
|
|
196
|
-
[2]
|
|
197
|
-
[3]
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
[
|
|
204
|
-
[
|
|
205
|
-
[
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
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
|
-
"
|
|
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
|
-
-
|
|
242
|
-
-
|
|
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 (유저 레벨 — 모든 프로젝트 공유)
|