@kood/claude-code 0.6.7 → 0.7.1
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/package.json +1 -1
- package/templates/.claude/agents/analyst.md +5 -0
- package/templates/.claude/agents/architect.md +5 -0
- package/templates/.claude/agents/build-fixer.md +1 -0
- package/templates/.claude/agents/code-reviewer.md +1 -0
- package/templates/.claude/agents/critic.md +4 -0
- package/templates/.claude/agents/deep-executor.md +1 -0
- package/templates/.claude/agents/dependency-manager.md +2 -0
- package/templates/.claude/agents/deployment-validator.md +2 -0
- package/templates/.claude/agents/designer.md +2 -0
- package/templates/.claude/agents/document-writer.md +3 -0
- package/templates/.claude/agents/explore.md +1 -0
- package/templates/.claude/agents/git-operator.md +2 -0
- package/templates/.claude/agents/implementation-executor.md +2 -0
- package/templates/.claude/agents/ko-to-en-translator.md +3 -0
- package/templates/.claude/agents/lint-fixer.md +2 -0
- package/templates/.claude/agents/planner.md +3 -0
- package/templates/.claude/agents/pm.md +349 -0
- package/templates/.claude/agents/qa-tester.md +1 -0
- package/templates/.claude/agents/refactor-advisor.md +4 -0
- package/templates/.claude/agents/researcher.md +1 -0
- package/templates/.claude/agents/scientist.md +1 -0
- package/templates/.claude/agents/security-reviewer.md +1 -0
- package/templates/.claude/agents/tdd-guide.md +1 -0
- package/templates/.claude/agents/vision.md +1 -0
- package/templates/.claude/commands/lint-fix.md +20 -0
- package/templates/.claude/commands/pre-deploy.md +20 -0
- package/templates/.claude/commands/version-update.md +20 -0
- package/templates/.claude/instructions/agent-patterns/agent-teams-usage.md +376 -0
- package/templates/.claude/scripts/agent-teams/check-availability.sh +238 -0
- package/templates/.claude/scripts/agent-teams/setup-tmux.sh +125 -0
- package/templates/.claude/skills/agent-teams-setup/SKILL.md +460 -0
- package/templates/.claude/skills/brainstorm/SKILL.md +20 -0
- package/templates/.claude/skills/bug-fix/SKILL.md +20 -0
- package/templates/.claude/skills/crawler/SKILL.md +2 -0
- package/templates/.claude/skills/docs-creator/SKILL.md +20 -0
- package/templates/.claude/skills/docs-fetch/SKILL.md +20 -0
- package/templates/.claude/skills/docs-refactor/SKILL.md +20 -0
- package/templates/.claude/skills/elon-musk/SKILL.md +20 -0
- package/templates/.claude/skills/execute/SKILL.md +20 -0
- package/templates/.claude/skills/feedback/SKILL.md +20 -0
- package/templates/.claude/skills/figma-to-code/SKILL.md +20 -0
- package/templates/.claude/skills/genius-thinking/SKILL.md +1 -0
- package/templates/.claude/skills/global-uiux-design/SKILL.md +20 -0
- package/templates/.claude/skills/korea-uiux-design/SKILL.md +20 -0
- package/templates/.claude/skills/nextjs-react-best-practices/SKILL.md +20 -0
- package/templates/.claude/skills/plan/SKILL.md +20 -0
- package/templates/.claude/skills/prd/SKILL.md +20 -0
- package/templates/.claude/skills/project-optimizer/SKILL.md +20 -0
- package/templates/.claude/skills/ralph/SKILL.md +1 -0
- package/templates/.claude/skills/refactor/SKILL.md +20 -0
- package/templates/.claude/skills/research/SKILL.md +1 -0
- package/templates/.claude/skills/sql-optimizer/SKILL.md +20 -0
- package/templates/.claude/skills/startup-validator/SKILL.md +1 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/SKILL.md +20 -0
- package/templates/.claude/skills/tauri-react-best-practices/SKILL.md +20 -0
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
# Agent Teams 활용 가이드
|
|
2
|
+
|
|
3
|
+
> 스킬에서 Agent Teams를 효과적으로 활용하는 방법
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<availability_check>
|
|
8
|
+
|
|
9
|
+
## 환경 확인
|
|
10
|
+
|
|
11
|
+
### 스크립트 사용
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Agent Teams 사용 가능 여부 확인
|
|
15
|
+
.claude/scripts/agent-teams/check-availability.sh
|
|
16
|
+
|
|
17
|
+
# tmux 환경 세팅
|
|
18
|
+
.claude/scripts/agent-teams/setup-tmux.sh
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### 프로그래매틱 확인
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# 1. 환경변수 확인
|
|
25
|
+
if [[ "$CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS" == "1" ]]; then
|
|
26
|
+
AGENT_TEAMS_AVAILABLE=true
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
# 2. settings.json 확인 (글로벌 + 프로젝트)
|
|
30
|
+
for f in ~/.claude/settings.json .claude/settings.json; do
|
|
31
|
+
if grep -q '"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS".*"1"' "$f" 2>/dev/null; then
|
|
32
|
+
AGENT_TEAMS_AVAILABLE=true
|
|
33
|
+
fi
|
|
34
|
+
done
|
|
35
|
+
|
|
36
|
+
# 3. 에이전트 디렉토리 확인
|
|
37
|
+
if [[ -d ".claude/agents" ]] && [[ $(ls .claude/agents/*.md 2>/dev/null | wc -l) -gt 0 ]]; then
|
|
38
|
+
AGENTS_AVAILABLE=true
|
|
39
|
+
fi
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
</availability_check>
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
<subagent_vs_teams>
|
|
47
|
+
|
|
48
|
+
## Subagent vs Agent Teams
|
|
49
|
+
|
|
50
|
+
| 항목 | Subagents | Agent Teams |
|
|
51
|
+
|------|-----------|-------------|
|
|
52
|
+
| **컨텍스트** | 자체 컨텍스트, 결과만 반환 | 자체 컨텍스트, 완전 독립 |
|
|
53
|
+
| **통신** | 메인 에이전트에게만 보고 | 팀원끼리 직접 메시징 |
|
|
54
|
+
| **조율** | 메인 에이전트가 모든 작업 관리 | 공유 태스크 리스트로 자기조율 |
|
|
55
|
+
| **토큰 비용** | 낮음 (결과 요약) | 높음 (각 팀원 별도 인스턴스) |
|
|
56
|
+
| **적합** | 결과만 필요한 집중 작업 | 토론과 협업이 필요한 복잡한 작업 |
|
|
57
|
+
|
|
58
|
+
### 선택 기준
|
|
59
|
+
|
|
60
|
+
| 상황 | 권장 |
|
|
61
|
+
|------|------|
|
|
62
|
+
| 결과만 필요, 집중된 작업 | Subagent |
|
|
63
|
+
| 조율/토론/독립적 결정 필요 | Agent Teams |
|
|
64
|
+
| 토큰 비용 민감 | Subagent 또는 단독 세션 |
|
|
65
|
+
| 병렬 연구/리뷰 | Agent Teams |
|
|
66
|
+
| 단순 작업 (1-2 파일) | 직접 처리 |
|
|
67
|
+
|
|
68
|
+
</subagent_vs_teams>
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
<decision_matrix>
|
|
73
|
+
|
|
74
|
+
## 사용 결정 매트릭스
|
|
75
|
+
|
|
76
|
+
| 조건 | 권장 방식 | 이유 |
|
|
77
|
+
|------|----------|------|
|
|
78
|
+
| Agent Teams 비활성화 | Task (subagent) | 환경 미지원 |
|
|
79
|
+
| 단순 작업 (1-2 파일) | 직접 처리 | 오버헤드 불필요 |
|
|
80
|
+
| 독립적 병렬 작업 | Agent Teams | 진정한 병렬 실행 |
|
|
81
|
+
| 팀원 간 소통 필요 | Agent Teams | 메시지 교환 가능 |
|
|
82
|
+
| 순차 의존성 있음 | blockedBy 또는 Subagent | 의존성 관리 |
|
|
83
|
+
| tmux/iTerm2 환경 | split-pane 모드 | 시각적 모니터링 |
|
|
84
|
+
| VS Code/일반 터미널 | in-process 모드 | 호환성 |
|
|
85
|
+
|
|
86
|
+
</decision_matrix>
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
<teammate_modes>
|
|
91
|
+
|
|
92
|
+
## teammateMode 설정
|
|
93
|
+
|
|
94
|
+
### 모드별 특징
|
|
95
|
+
|
|
96
|
+
| 모드 | 특징 | 권장 상황 |
|
|
97
|
+
|------|------|----------|
|
|
98
|
+
| **auto** | tmux 세션이면 split-pane, 아니면 in-process | 기본값 |
|
|
99
|
+
| **tmux** | 각 팀원 별도 pane (tmux/iTerm2 필요) | 3명+ 팀 |
|
|
100
|
+
| **in-process** | 단일 터미널, Shift+Up/Down 전환 | 2명 이하 팀, VS Code |
|
|
101
|
+
|
|
102
|
+
### 설정 방법
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
// ~/.claude/settings.json
|
|
106
|
+
{
|
|
107
|
+
"teammateMode": "auto",
|
|
108
|
+
"env": {
|
|
109
|
+
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### tmux 세션 시작
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# 새 tmux 세션
|
|
118
|
+
tmux new -s claude
|
|
119
|
+
|
|
120
|
+
# iTerm2 (macOS)
|
|
121
|
+
tmux -CC
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 터미널 지원 현황
|
|
125
|
+
|
|
126
|
+
| 터미널 | Split Panes |
|
|
127
|
+
|--------|-------------|
|
|
128
|
+
| tmux | ✅ |
|
|
129
|
+
| iTerm2 | ✅ |
|
|
130
|
+
| WezTerm | ❌ (요청 중) |
|
|
131
|
+
| Zellij | ❌ (요청 중) |
|
|
132
|
+
| VS Code | ❌ |
|
|
133
|
+
| Windows Terminal | ❌ |
|
|
134
|
+
| Ghostty | ❌ |
|
|
135
|
+
|
|
136
|
+
</teammate_modes>
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
<usage_patterns>
|
|
141
|
+
|
|
142
|
+
## 활용 패턴
|
|
143
|
+
|
|
144
|
+
### 패턴 1: 환경 감지 후 분기
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
if (AGENT_TEAMS_AVAILABLE && 복잡한_병렬_작업) {
|
|
148
|
+
TeamCreate({ team_name: "feature-x", description: "..." })
|
|
149
|
+
Task({ subagent_type: "...", team_name: "feature-x", name: "worker-1" })
|
|
150
|
+
Task({ subagent_type: "...", team_name: "feature-x", name: "worker-2" })
|
|
151
|
+
} else {
|
|
152
|
+
// Subagent 폴백
|
|
153
|
+
Task({ subagent_type: "...", ... })
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 패턴 2: 팀 생성 + 태스크 분배
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
// 1. 팀 생성
|
|
161
|
+
TeamCreate({ team_name: "review-team", description: "코드 리뷰" })
|
|
162
|
+
|
|
163
|
+
// 2. 태스크 생성
|
|
164
|
+
TaskCreate({ subject: "보안 검토", description: "...", activeForm: "보안 검토 중" })
|
|
165
|
+
TaskCreate({ subject: "성능 검토", description: "...", activeForm: "성능 검토 중" })
|
|
166
|
+
|
|
167
|
+
// 3. 팀원 스폰 (병렬)
|
|
168
|
+
Task({ subagent_type: "security-reviewer", team_name: "review-team", name: "security" })
|
|
169
|
+
Task({ subagent_type: "code-reviewer", team_name: "review-team", name: "performance" })
|
|
170
|
+
|
|
171
|
+
// 4. 완료 대기 후 종합
|
|
172
|
+
TaskList()
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 패턴 3: Plan-First (비용 최적화)
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
// Phase 1: 계획 (저렴)
|
|
179
|
+
EnterPlanMode()
|
|
180
|
+
// 코드베이스 탐색 + 구현 계획 수립
|
|
181
|
+
|
|
182
|
+
// Phase 2: 실행 (고비용, 고속)
|
|
183
|
+
TeamCreate({ team_name: "impl-team" })
|
|
184
|
+
// 승인된 계획을 팀에 전달하여 병렬 실행
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
</usage_patterns>
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
<send_message>
|
|
192
|
+
|
|
193
|
+
## SendMessage 사용법
|
|
194
|
+
|
|
195
|
+
### 메시지 타입
|
|
196
|
+
|
|
197
|
+
| 타입 | 용도 |
|
|
198
|
+
|------|------|
|
|
199
|
+
| **message** | 특정 팀원에게 DM |
|
|
200
|
+
| **broadcast** | 모든 팀원에게 전송 (비용 높음) |
|
|
201
|
+
| **shutdown_request** | 팀원에게 종료 요청 |
|
|
202
|
+
| **shutdown_response** | 종료 요청에 응답 |
|
|
203
|
+
| **plan_approval_response** | 계획 승인/거부 |
|
|
204
|
+
|
|
205
|
+
### 사용 예시
|
|
206
|
+
|
|
207
|
+
```json
|
|
208
|
+
// DM
|
|
209
|
+
{ "type": "message", "recipient": "researcher",
|
|
210
|
+
"content": "...", "summary": "Brief status" }
|
|
211
|
+
|
|
212
|
+
// 브로드캐스트 (신중히!)
|
|
213
|
+
{ "type": "broadcast", "content": "...", "summary": "Critical" }
|
|
214
|
+
|
|
215
|
+
// 종료 요청
|
|
216
|
+
{ "type": "shutdown_request", "recipient": "researcher", "content": "완료" }
|
|
217
|
+
|
|
218
|
+
// 종료 응답
|
|
219
|
+
{ "type": "shutdown_response", "request_id": "abc-123", "approve": true }
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**중요**: 텍스트 출력은 팀원에게 보이지 않음. 반드시 SendMessage 사용.
|
|
223
|
+
|
|
224
|
+
</send_message>
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
<keyboard_shortcuts>
|
|
229
|
+
|
|
230
|
+
## 키보드 단축키 (in-process)
|
|
231
|
+
|
|
232
|
+
| 단축키 | 기능 |
|
|
233
|
+
|--------|------|
|
|
234
|
+
| `Shift+Up/Down` | 팀원 선택 |
|
|
235
|
+
| `Enter` | 선택된 팀원 세션 보기 |
|
|
236
|
+
| `Escape` | 현재 턴 중단 |
|
|
237
|
+
| `Ctrl+T` | 태스크 목록 토글 |
|
|
238
|
+
| `Shift+Tab` | Delegate mode 전환 |
|
|
239
|
+
|
|
240
|
+
</keyboard_shortcuts>
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
<best_practices>
|
|
245
|
+
|
|
246
|
+
## 베스트 프랙티스
|
|
247
|
+
|
|
248
|
+
| 원칙 | 설명 |
|
|
249
|
+
|------|------|
|
|
250
|
+
| **환경 감지 우선** | Agent Teams 사용 전 항상 가용성 확인 |
|
|
251
|
+
| **폴백 준비** | Subagent 방식으로 폴백 로직 구현 |
|
|
252
|
+
| **풍부한 컨텍스트** | 팀원은 Lead 대화 기록 미상속. spawn 시 상세 프롬프트 필수 |
|
|
253
|
+
| **적절한 태스크 크기** | 팀원당 5-6개 태스크 권장 |
|
|
254
|
+
| **파일 충돌 방지** | 한 파일은 한 팀원만 수정 |
|
|
255
|
+
| **모델 라우팅** | Lead: Opus, Teammates: Sonnet |
|
|
256
|
+
| **팀 정리** | 작업 완료 후 shutdown → TeamDelete |
|
|
257
|
+
| **Delegate Mode** | Lead가 직접 구현 방지, 조율에 집중 |
|
|
258
|
+
| **Plan Approval** | 위험한 작업 전 계획 승인 요구 |
|
|
259
|
+
|
|
260
|
+
### Context 제공 예시
|
|
261
|
+
|
|
262
|
+
```
|
|
263
|
+
❌ "인증 모듈 검토해"
|
|
264
|
+
✅ "src/auth/ 인증 모듈을 보안 취약점 관점으로 검토해.
|
|
265
|
+
토큰 핸들링, 세션 관리, 입력 검증에 집중해.
|
|
266
|
+
JWT 토큰을 httpOnly 쿠키에 저장함."
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
</best_practices>
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
<common_mistakes>
|
|
274
|
+
|
|
275
|
+
## 흔한 실수와 해결책
|
|
276
|
+
|
|
277
|
+
| 문제 | 원인 | 해결책 |
|
|
278
|
+
|------|------|--------|
|
|
279
|
+
| Lead가 직접 구현 | 위임 대신 본인이 작업 | `Shift+Tab` delegate mode |
|
|
280
|
+
| 팀원 안 보임 | in-process 전환 안 함 | `Shift+Down` 팀원 순환 |
|
|
281
|
+
| 과도한 권한 프롬프트 | 매번 승인 요청 | permission settings 사전 승인 |
|
|
282
|
+
| 팀원 에러 정지 | 예외 처리 실패 | 추가 지시 또는 대체 팀원 spawn |
|
|
283
|
+
| Lead 조기 종료 | 팀원 완료 전 마무리 | "모든 팀원 완료까지 대기" 명시 |
|
|
284
|
+
| 고아 tmux 세션 | 정리 안 됨 | `tmux ls` → `tmux kill-session` |
|
|
285
|
+
| 4+ 팀원 동시 spawn | tmux race condition | 2-3개씩 순차 spawn |
|
|
286
|
+
|
|
287
|
+
</common_mistakes>
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
<limitations>
|
|
292
|
+
|
|
293
|
+
## 제한사항 및 주의사항
|
|
294
|
+
|
|
295
|
+
### 아키텍처 제한
|
|
296
|
+
|
|
297
|
+
| 제한 | 설명 |
|
|
298
|
+
|------|------|
|
|
299
|
+
| 세션 재개 불가 | `/resume` 시 in-process 팀원 복원 안 됨 |
|
|
300
|
+
| 세션당 한 팀 | 중첩 팀 불가 |
|
|
301
|
+
| 리더십 고정 | 팀 생성 세션이 전체 수명 동안 리더 |
|
|
302
|
+
| 권한 상속 | 팀원별 개별 권한 설정 불가 |
|
|
303
|
+
| 종료 지연 | 현재 작업 완료까지 대기 |
|
|
304
|
+
| Working Dir 공유 | 팀원에 다른 repo 할당 불가 |
|
|
305
|
+
|
|
306
|
+
### 알려진 버그
|
|
307
|
+
|
|
308
|
+
| 버그 | 영향 | 워크어라운드 |
|
|
309
|
+
|------|------|-------------|
|
|
310
|
+
| 컨텍스트 압축 시 팀 손실 | Lead가 팀 인식 상실 | 200K 토큰 전 작업 완료 |
|
|
311
|
+
| tmux split-pane race | `send-keys` corruption | 2-3개씩 순차 spawn |
|
|
312
|
+
| PermissionRequest hook 미작동 | 서브에이전트 권한 hook 무시 | 사전 승인 또는 수동 확인 |
|
|
313
|
+
| TaskUpdate 상태 비동기 | TeamDelete 후 상태 손실 | TeamDelete 후 재확인 |
|
|
314
|
+
|
|
315
|
+
</limitations>
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
<cost_optimization>
|
|
320
|
+
|
|
321
|
+
## 비용 최적화
|
|
322
|
+
|
|
323
|
+
### 토큰 비용 구조
|
|
324
|
+
|
|
325
|
+
- 솔로 세션: ~200k tokens
|
|
326
|
+
- 3인 팀: ~800k tokens (4x)
|
|
327
|
+
- 각 팀원 별도 컨텍스트 윈도우
|
|
328
|
+
|
|
329
|
+
### 비용 절감 팁
|
|
330
|
+
|
|
331
|
+
| 전략 | 효과 |
|
|
332
|
+
|------|------|
|
|
333
|
+
| 모델 혼합 (Opus Lead + Sonnet Teammates) | ~40% 절감 |
|
|
334
|
+
| Plan-First 패턴 | 계획에서 실패 조기 발견 |
|
|
335
|
+
| 적절한 범위 지정 | 과도한 탐색 방지 |
|
|
336
|
+
| 단순 작업은 단독 세션 | 조율 오버헤드 제거 |
|
|
337
|
+
|
|
338
|
+
</cost_optimization>
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
<ideal_use_cases>
|
|
343
|
+
|
|
344
|
+
## 이상적인 사용 사례
|
|
345
|
+
|
|
346
|
+
| 패턴 | 설명 |
|
|
347
|
+
|------|------|
|
|
348
|
+
| **경쟁 가설 디버깅** | 여러 버그 원인 병렬 검증 |
|
|
349
|
+
| **다각도 코드 리뷰** | 보안/성능/테스트 동시 검토 |
|
|
350
|
+
| **Cross-Layer 개발** | 프론트엔드/백엔드/테스트 분리 |
|
|
351
|
+
| **연구 및 탐색** | 여러 접근법 병렬 탐색 |
|
|
352
|
+
| **QA Swarm** | 다양한 품질 관점 동시 테스트 |
|
|
353
|
+
|
|
354
|
+
### 부적합한 경우
|
|
355
|
+
|
|
356
|
+
- 순차 작업
|
|
357
|
+
- 같은 파일 편집
|
|
358
|
+
- 의존성 많은 작업
|
|
359
|
+
- 단순 단일 파일 수정
|
|
360
|
+
|
|
361
|
+
</ideal_use_cases>
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
<reference>
|
|
366
|
+
|
|
367
|
+
## 참조
|
|
368
|
+
|
|
369
|
+
| 문서 | 경로 |
|
|
370
|
+
|------|------|
|
|
371
|
+
| 공식 문서 | https://code.claude.com/docs/en/agent-teams |
|
|
372
|
+
| 환경 확인 스크립트 | `.claude/scripts/agent-teams/check-availability.sh` |
|
|
373
|
+
| tmux 세팅 스크립트 | `.claude/scripts/agent-teams/setup-tmux.sh` |
|
|
374
|
+
| agent-teams-setup 스킬 | `.claude/skills/agent-teams-setup/SKILL.md` |
|
|
375
|
+
|
|
376
|
+
</reference>
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Agent Teams 사용 가능 여부 확인
|
|
3
|
+
# Usage: .claude/scripts/agent-teams/check-availability.sh
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
# Colors
|
|
8
|
+
RED='\033[0;31m'
|
|
9
|
+
GREEN='\033[0;32m'
|
|
10
|
+
YELLOW='\033[0;33m'
|
|
11
|
+
BLUE='\033[0;34m'
|
|
12
|
+
NC='\033[0m' # No Color
|
|
13
|
+
|
|
14
|
+
echo -e "${BLUE}=== Agent Teams Availability Check ===${NC}"
|
|
15
|
+
echo ""
|
|
16
|
+
|
|
17
|
+
PASSED=0
|
|
18
|
+
FAILED=0
|
|
19
|
+
WARNINGS=0
|
|
20
|
+
|
|
21
|
+
# 1. 환경변수 / settings.json 확인
|
|
22
|
+
echo -e "${BLUE}[1/5] Agent Teams 활성화 확인${NC}"
|
|
23
|
+
|
|
24
|
+
AGENT_TEAMS_ENABLED=false
|
|
25
|
+
ENABLED_SOURCE=""
|
|
26
|
+
|
|
27
|
+
# 환경변수 확인
|
|
28
|
+
if [[ "$CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS" == "1" ]]; then
|
|
29
|
+
AGENT_TEAMS_ENABLED=true
|
|
30
|
+
ENABLED_SOURCE="환경변수"
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# 글로벌 settings.json 확인 (~/.claude/settings.json)
|
|
34
|
+
GLOBAL_SETTINGS="$HOME/.claude/settings.json"
|
|
35
|
+
if [[ -f "$GLOBAL_SETTINGS" ]] && grep -q '"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS".*"1"' "$GLOBAL_SETTINGS" 2>/dev/null; then
|
|
36
|
+
AGENT_TEAMS_ENABLED=true
|
|
37
|
+
if [[ -n "$ENABLED_SOURCE" ]]; then
|
|
38
|
+
ENABLED_SOURCE="$ENABLED_SOURCE + ~/.claude/settings.json"
|
|
39
|
+
else
|
|
40
|
+
ENABLED_SOURCE="~/.claude/settings.json"
|
|
41
|
+
fi
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
# 프로젝트 settings.json 확인 (.claude/settings.json)
|
|
45
|
+
PROJECT_SETTINGS=".claude/settings.json"
|
|
46
|
+
if [[ -f "$PROJECT_SETTINGS" ]] && grep -q '"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS".*"1"' "$PROJECT_SETTINGS" 2>/dev/null; then
|
|
47
|
+
AGENT_TEAMS_ENABLED=true
|
|
48
|
+
if [[ -n "$ENABLED_SOURCE" ]]; then
|
|
49
|
+
ENABLED_SOURCE="$ENABLED_SOURCE + .claude/settings.json"
|
|
50
|
+
else
|
|
51
|
+
ENABLED_SOURCE=".claude/settings.json"
|
|
52
|
+
fi
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
if [[ "$AGENT_TEAMS_ENABLED" == "true" ]]; then
|
|
56
|
+
echo -e " ${GREEN}✓${NC} Agent Teams 활성화됨 ($ENABLED_SOURCE)"
|
|
57
|
+
((PASSED++))
|
|
58
|
+
else
|
|
59
|
+
echo -e " ${RED}✗${NC} Agent Teams 미활성화"
|
|
60
|
+
echo -e " 설정 방법 (하나 선택):"
|
|
61
|
+
echo -e " 1. 환경변수: export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1"
|
|
62
|
+
echo -e " 2. ~/.claude/settings.json:"
|
|
63
|
+
echo -e ' { "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" } }'
|
|
64
|
+
echo -e " 3. .claude/settings.json (프로젝트):"
|
|
65
|
+
echo -e ' { "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" } }'
|
|
66
|
+
((FAILED++))
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# 2. .claude/agents/ 디렉토리 확인
|
|
70
|
+
echo ""
|
|
71
|
+
echo -e "${BLUE}[2/5] 에이전트 디렉토리 확인${NC}"
|
|
72
|
+
AGENTS_DIR=".claude/agents"
|
|
73
|
+
if [[ -d "$AGENTS_DIR" ]]; then
|
|
74
|
+
echo -e " ${GREEN}✓${NC} $AGENTS_DIR 디렉토리 존재"
|
|
75
|
+
((PASSED++))
|
|
76
|
+
else
|
|
77
|
+
echo -e " ${RED}✗${NC} $AGENTS_DIR 디렉토리 없음"
|
|
78
|
+
echo -e " 생성: mkdir -p $AGENTS_DIR"
|
|
79
|
+
((FAILED++))
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# 3. 에이전트 파일 확인
|
|
83
|
+
echo ""
|
|
84
|
+
echo -e "${BLUE}[3/5] 에이전트 파일 확인${NC}"
|
|
85
|
+
if [[ -d "$AGENTS_DIR" ]]; then
|
|
86
|
+
AGENT_COUNT=$(find "$AGENTS_DIR" -name "*.md" -type f 2>/dev/null | wc -l | tr -d ' ')
|
|
87
|
+
if [[ $AGENT_COUNT -gt 0 ]]; then
|
|
88
|
+
echo -e " ${GREEN}✓${NC} $AGENT_COUNT개 에이전트 발견"
|
|
89
|
+
|
|
90
|
+
# 주요 에이전트 확인
|
|
91
|
+
CORE_AGENTS=("explore" "planner" "implementation-executor" "code-reviewer" "pm")
|
|
92
|
+
MISSING_CORE=()
|
|
93
|
+
for agent in "${CORE_AGENTS[@]}"; do
|
|
94
|
+
if [[ -f "$AGENTS_DIR/$agent.md" ]]; then
|
|
95
|
+
echo -e " ${GREEN}✓${NC} $agent"
|
|
96
|
+
else
|
|
97
|
+
MISSING_CORE+=("$agent")
|
|
98
|
+
fi
|
|
99
|
+
done
|
|
100
|
+
|
|
101
|
+
if [[ ${#MISSING_CORE[@]} -gt 0 ]]; then
|
|
102
|
+
echo -e " ${YELLOW}!${NC} 권장 에이전트 누락: ${MISSING_CORE[*]}"
|
|
103
|
+
((WARNINGS++))
|
|
104
|
+
fi
|
|
105
|
+
((PASSED++))
|
|
106
|
+
else
|
|
107
|
+
echo -e " ${YELLOW}!${NC} 에이전트 파일 없음"
|
|
108
|
+
echo -e " /agent-teams-setup 스킬로 기본 에이전트 생성 권장"
|
|
109
|
+
((WARNINGS++))
|
|
110
|
+
fi
|
|
111
|
+
else
|
|
112
|
+
echo -e " ${YELLOW}!${NC} 디렉토리 없어 확인 불가"
|
|
113
|
+
((WARNINGS++))
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
# 4. Frontmatter 형식 검증
|
|
117
|
+
echo ""
|
|
118
|
+
echo -e "${BLUE}[4/5] Frontmatter 형식 검증${NC}"
|
|
119
|
+
if [[ -d "$AGENTS_DIR" ]]; then
|
|
120
|
+
INVALID_FILES=()
|
|
121
|
+
|
|
122
|
+
for file in "$AGENTS_DIR"/*.md; do
|
|
123
|
+
[[ -f "$file" ]] || continue
|
|
124
|
+
|
|
125
|
+
# name 필드 확인
|
|
126
|
+
if ! grep -q "^name:" "$file" 2>/dev/null; then
|
|
127
|
+
INVALID_FILES+=("$(basename "$file"): name 필드 없음")
|
|
128
|
+
continue
|
|
129
|
+
fi
|
|
130
|
+
|
|
131
|
+
# description 필드 확인
|
|
132
|
+
if ! grep -q "^description:" "$file" 2>/dev/null; then
|
|
133
|
+
INVALID_FILES+=("$(basename "$file"): description 필드 없음")
|
|
134
|
+
continue
|
|
135
|
+
fi
|
|
136
|
+
|
|
137
|
+
# model 별칭 확인 (opus, sonnet, haiku만 허용)
|
|
138
|
+
if grep -q "^model:" "$file" 2>/dev/null; then
|
|
139
|
+
MODEL=$(grep "^model:" "$file" | head -1 | sed 's/model:[[:space:]]*//' | tr -d ' ')
|
|
140
|
+
if [[ ! "$MODEL" =~ ^(opus|sonnet|haiku|inherit)$ ]]; then
|
|
141
|
+
INVALID_FILES+=("$(basename "$file"): 잘못된 model ($MODEL)")
|
|
142
|
+
fi
|
|
143
|
+
fi
|
|
144
|
+
done
|
|
145
|
+
|
|
146
|
+
if [[ ${#INVALID_FILES[@]} -eq 0 ]]; then
|
|
147
|
+
echo -e " ${GREEN}✓${NC} 모든 에이전트 frontmatter 유효"
|
|
148
|
+
((PASSED++))
|
|
149
|
+
else
|
|
150
|
+
echo -e " ${YELLOW}!${NC} 일부 에이전트 frontmatter 문제:"
|
|
151
|
+
for issue in "${INVALID_FILES[@]}"; do
|
|
152
|
+
echo -e " - $issue"
|
|
153
|
+
done
|
|
154
|
+
((WARNINGS++))
|
|
155
|
+
fi
|
|
156
|
+
else
|
|
157
|
+
echo -e " ${YELLOW}!${NC} 디렉토리 없어 검증 불가"
|
|
158
|
+
((WARNINGS++))
|
|
159
|
+
fi
|
|
160
|
+
|
|
161
|
+
# 5. tmux 환경 확인 및 teammateMode 추천
|
|
162
|
+
echo ""
|
|
163
|
+
echo -e "${BLUE}[5/5] tmux 환경 확인${NC}"
|
|
164
|
+
|
|
165
|
+
TMUX_AVAILABLE=false
|
|
166
|
+
ITERM2_AVAILABLE=false
|
|
167
|
+
RECOMMENDED_MODE="in-process"
|
|
168
|
+
|
|
169
|
+
# tmux 설치 확인
|
|
170
|
+
if command -v tmux &> /dev/null; then
|
|
171
|
+
TMUX_AVAILABLE=true
|
|
172
|
+
TMUX_VERSION=$(tmux -V 2>/dev/null | head -1)
|
|
173
|
+
echo -e " ${GREEN}✓${NC} tmux 설치됨 ($TMUX_VERSION)"
|
|
174
|
+
else
|
|
175
|
+
echo -e " ${YELLOW}!${NC} tmux 미설치"
|
|
176
|
+
echo -e " 설치: brew install tmux (macOS) / apt install tmux (Linux)"
|
|
177
|
+
fi
|
|
178
|
+
|
|
179
|
+
# 현재 tmux 세션 내부인지 확인
|
|
180
|
+
if [[ -n "$TMUX" ]]; then
|
|
181
|
+
echo -e " ${GREEN}✓${NC} 현재 tmux 세션 내부"
|
|
182
|
+
RECOMMENDED_MODE="tmux"
|
|
183
|
+
fi
|
|
184
|
+
|
|
185
|
+
# iTerm2 확인 (macOS)
|
|
186
|
+
if [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then
|
|
187
|
+
ITERM2_AVAILABLE=true
|
|
188
|
+
echo -e " ${GREEN}✓${NC} iTerm2 감지됨"
|
|
189
|
+
|
|
190
|
+
# it2 CLI 확인
|
|
191
|
+
if command -v it2 &> /dev/null; then
|
|
192
|
+
echo -e " ${GREEN}✓${NC} it2 CLI 설치됨"
|
|
193
|
+
RECOMMENDED_MODE="tmux"
|
|
194
|
+
else
|
|
195
|
+
echo -e " ${YELLOW}!${NC} it2 CLI 미설치"
|
|
196
|
+
echo -e " 설치: brew install mkusaka/it2/it2"
|
|
197
|
+
fi
|
|
198
|
+
fi
|
|
199
|
+
|
|
200
|
+
# teammateMode 설정 확인
|
|
201
|
+
echo ""
|
|
202
|
+
echo -e " ${BLUE}권장 teammateMode:${NC} $RECOMMENDED_MODE"
|
|
203
|
+
|
|
204
|
+
# settings.json에서 현재 teammateMode 확인
|
|
205
|
+
CURRENT_MODE=""
|
|
206
|
+
if [[ -f "$GLOBAL_SETTINGS" ]]; then
|
|
207
|
+
CURRENT_MODE=$(grep -o '"teammateMode"[[:space:]]*:[[:space:]]*"[^"]*"' "$GLOBAL_SETTINGS" 2>/dev/null | sed 's/.*: *"\([^"]*\)".*/\1/' || echo "")
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
if [[ -n "$CURRENT_MODE" ]]; then
|
|
211
|
+
echo -e " ${BLUE}현재 설정:${NC} $CURRENT_MODE"
|
|
212
|
+
if [[ "$CURRENT_MODE" == "$RECOMMENDED_MODE" ]] || [[ "$CURRENT_MODE" == "auto" ]]; then
|
|
213
|
+
echo -e " ${GREEN}✓${NC} 적절한 설정"
|
|
214
|
+
else
|
|
215
|
+
echo -e " ${YELLOW}!${NC} 권장 설정과 다름"
|
|
216
|
+
fi
|
|
217
|
+
else
|
|
218
|
+
echo -e " ${BLUE}현재 설정:${NC} auto (기본값)"
|
|
219
|
+
fi
|
|
220
|
+
|
|
221
|
+
((PASSED++))
|
|
222
|
+
|
|
223
|
+
# 결과 요약
|
|
224
|
+
echo ""
|
|
225
|
+
echo -e "${BLUE}=== 결과 요약 ===${NC}"
|
|
226
|
+
echo -e " ${GREEN}통과:${NC} $PASSED"
|
|
227
|
+
echo -e " ${RED}실패:${NC} $FAILED"
|
|
228
|
+
echo -e " ${YELLOW}경고:${NC} $WARNINGS"
|
|
229
|
+
echo ""
|
|
230
|
+
|
|
231
|
+
if [[ $FAILED -eq 0 ]]; then
|
|
232
|
+
echo -e "${GREEN}✓ Agent Teams 사용 가능${NC}"
|
|
233
|
+
exit 0
|
|
234
|
+
else
|
|
235
|
+
echo -e "${RED}✗ Agent Teams 사용 불가${NC}"
|
|
236
|
+
echo -e " 위의 실패 항목을 해결해주세요."
|
|
237
|
+
exit 1
|
|
238
|
+
fi
|