@walwal-harness/cli 4.0.0 → 5.0.0
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/README.md +118 -294
- package/assets/templates/config.json +8 -7
- package/assets/templates/progress.json.template +7 -1
- package/bin/init.js +115 -84
- package/commands/harness-solo.md +68 -0
- package/commands/harness-stop.md +53 -0
- package/{skills/team-action/SKILL.md → commands/harness-team.md} +59 -29
- package/package.json +9 -10
- package/scripts/harness-dashboard.sh +219 -154
- package/scripts/harness-monitor.sh +17 -12
- package/scripts/harness-prompt-history.sh +1 -1
- package/scripts/harness-queue-manager.sh +1 -1
- package/scripts/harness-session-start.sh +24 -13
- package/scripts/harness-statusline.sh +31 -8
- package/scripts/harness-tmux.sh +125 -72
- package/scripts/harness-user-prompt-submit.sh +22 -15
- package/skills/dispatcher/SKILL.md +6 -6
- package/skills/evaluator-functional/SKILL.md +2 -2
- package/skills/generator-frontend/SKILL.md +2 -2
- package/scripts/harness-control.sh +0 -183
- package/scripts/harness-dashboard-v4.sh +0 -200
- package/scripts/harness-eval-watcher.sh +0 -228
- package/scripts/harness-studio-setup.sh +0 -139
- package/scripts/harness-studio.sh +0 -66
- package/scripts/harness-tmux-v4.sh +0 -148
- package/skills/team-stop/SKILL.md +0 -30
package/README.md
CHANGED
|
@@ -13,8 +13,10 @@
|
|
|
13
13
|
|
|
14
14
|
| 모드 | 설명 | 실행 방법 |
|
|
15
15
|
|------|------|----------|
|
|
16
|
-
| **
|
|
17
|
-
| **
|
|
16
|
+
| **Solo** | 순차 실행 — 프롬프트 기반으로 Planner → Generator → Evaluator 순서대로 진행 | `/harness-solo` 또는 프롬프트로 진행 |
|
|
17
|
+
| **Team** | 병렬 실행 — 3 Team이 Feature 단위 Gen→Eval 루프를 자동 핸즈오프로 동시 실행 | `/harness-team` 또는 `npx walwal-harness team` |
|
|
18
|
+
|
|
19
|
+
두 모드는 언제든 전환 가능합니다. Team 모드 중단 후 Solo로 이어가거나, Solo에서 Team으로 전환해도 진행 상태가 보존됩니다.
|
|
18
20
|
|
|
19
21
|
---
|
|
20
22
|
|
|
@@ -29,373 +31,195 @@ npm install @walwal-harness/cli
|
|
|
29
31
|
|
|
30
32
|
`postinstall`이 자동으로:
|
|
31
33
|
1. `.harness/` 디렉토리 스캐폴딩
|
|
32
|
-
2. `.claude/skills/` 에 에이전트 스킬 설치 (
|
|
33
|
-
3.
|
|
34
|
-
4.
|
|
35
|
-
5.
|
|
34
|
+
2. `.claude/skills/` 에 에이전트 스킬 설치 (7개)
|
|
35
|
+
3. `.claude/commands/` 에 모드 제어 커맨드 설치 (3개)
|
|
36
|
+
4. `scripts/` 에 오케스트레이션 스크립트 설치
|
|
37
|
+
5. SessionStart / UserPromptSubmit 훅 등록
|
|
38
|
+
6. `AGENTS.md` + `CLAUDE.md` 심볼릭 링크 생성
|
|
36
39
|
|
|
37
|
-
> **중요:** 설치 후 Claude Code 세션을 **재시작**해야 skills가 인식됩니다.
|
|
40
|
+
> **중요:** 설치 후 Claude Code 세션을 **재시작**해야 skills/commands가 인식됩니다.
|
|
38
41
|
|
|
39
|
-
###
|
|
42
|
+
### 업데이트
|
|
40
43
|
|
|
41
44
|
```bash
|
|
42
|
-
# latest (v3 안정판)
|
|
43
45
|
npm update @walwal-harness/cli
|
|
44
|
-
|
|
45
|
-
# v4 alpha (Agent Teams)
|
|
46
|
-
npm install @walwal-harness/cli@next
|
|
47
|
-
|
|
48
|
-
# 스크립트 동기화 (코어 스크립트 자동 덮어쓰기)
|
|
49
|
-
npx walwal-harness
|
|
50
46
|
```
|
|
51
47
|
|
|
48
|
+
npm update 시 모든 시스템 파일(scripts, skills, commands)이 **자동으로 교체**됩니다.
|
|
49
|
+
사용자 데이터(progress.json, progress.log, gotchas 커스텀 항목, archive)는 보존됩니다.
|
|
50
|
+
|
|
52
51
|
### CLI 명령어
|
|
53
52
|
|
|
54
53
|
```bash
|
|
55
|
-
npx walwal-harness
|
|
56
|
-
npx walwal-harness --force
|
|
57
|
-
npx walwal-harness
|
|
58
|
-
npx walwal-harness
|
|
59
|
-
npx walwal-harness --help
|
|
54
|
+
npx walwal-harness # 초기화 / 스크립트 업데이트
|
|
55
|
+
npx walwal-harness --force # 강제 재초기화
|
|
56
|
+
npx walwal-harness team # Team Mode tmux 레이아웃 실행
|
|
57
|
+
npx walwal-harness team --kill # Team Mode tmux 세션 종료
|
|
58
|
+
npx walwal-harness --help # 도움말
|
|
60
59
|
```
|
|
61
60
|
|
|
62
61
|
---
|
|
63
62
|
|
|
64
|
-
## Quick Start —
|
|
65
|
-
|
|
66
|
-
### 1. 설치 + 재시작
|
|
63
|
+
## Quick Start — Solo Mode
|
|
67
64
|
|
|
68
65
|
```bash
|
|
69
|
-
|
|
66
|
+
# 1. 설치
|
|
70
67
|
npm install @walwal-harness/cli
|
|
71
|
-
# Claude Code 재시작 (/exit → 재진입)
|
|
72
|
-
```
|
|
73
68
|
|
|
74
|
-
|
|
69
|
+
# 2. Claude Code 재시작
|
|
70
|
+
claude # (또는 codex)
|
|
75
71
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
또는 Claude Code에서 아무 요청 → UserPromptSubmit 훅이 자동으로 Dispatcher를 호출합니다.
|
|
72
|
+
# 3. 하네스 시작
|
|
73
|
+
> 하네스 엔지니어링 시작
|
|
81
74
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
Dispatcher가 요청을 분석하여 파이프라인을 결정합니다:
|
|
85
|
-
|
|
86
|
-
```
|
|
87
|
-
FULLSTACK : Planner → Gen-BE → Gen-FE → Eval-Func → Eval-Visual
|
|
88
|
-
FE-ONLY : Planner(light) → Gen-FE → Eval-Func → Eval-Visual
|
|
89
|
-
BE-ONLY : Planner → Gen-BE → Eval-Func(API-only)
|
|
75
|
+
# 4. Dispatcher → Planner 순서로 자동 진행
|
|
76
|
+
# 5. Generator, Evaluator를 프롬프트로 순차 호출
|
|
90
77
|
```
|
|
91
78
|
|
|
92
|
-
###
|
|
93
|
-
|
|
94
|
-
각 에이전트가 독립 Claude Code 세션에서 실행됩니다:
|
|
79
|
+
### Solo 파이프라인
|
|
95
80
|
|
|
96
81
|
```
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
82
|
+
사용자 요청 → Dispatcher → (Brainstormer) → Planner
|
|
83
|
+
→ Generator-Backend → Generator-Frontend
|
|
84
|
+
→ Evaluator-Functional → Evaluator-Visual
|
|
85
|
+
→ PASS: 다음 Sprint | FAIL: Generator로 재시도 (최대 5회)
|
|
100
86
|
```
|
|
101
87
|
|
|
102
|
-
에이전트가 완료되면 **새 세션**을 시작하면 자동으로 다음 에이전트를 안내합니다.
|
|
103
|
-
|
|
104
|
-
### 5. Eval FAIL → 자동 재작업
|
|
105
|
-
|
|
106
|
-
Evaluator FAIL 시 → 실패 원인 + 피드백과 함께 Generator로 자동 리라우팅 (최대 10회).
|
|
107
|
-
|
|
108
88
|
---
|
|
109
89
|
|
|
110
|
-
## Quick Start —
|
|
111
|
-
|
|
112
|
-
Claude Code의 **네이티브 Agent Teams 기능**을 사용하여 3개 Teammate가 Feature 단위로 Gen→Eval을 병렬 실행합니다.
|
|
113
|
-
|
|
114
|
-
```
|
|
115
|
-
기존 (v3): Planner → Gen(F-001~028 전부) → Eval(전부)
|
|
116
|
-
v4: Planner → 3 Teammates 병렬, 각 Feature 단위 Gen→Eval
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### 1. Agent Teams 활성화
|
|
90
|
+
## Quick Start — Team Mode
|
|
120
91
|
|
|
121
92
|
```bash
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
```
|
|
93
|
+
# Planner 완료 후:
|
|
94
|
+
> /harness-team
|
|
125
95
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
|
|
133
|
-
}
|
|
134
|
-
}
|
|
96
|
+
# 자동으로:
|
|
97
|
+
# 1. feature-queue.json 초기화 (의존성 topological sort)
|
|
98
|
+
# 2. tmux Studio 레이아웃 구축
|
|
99
|
+
# 3. 3개 팀이 병렬로 Gen→Eval 루프 자동 실행
|
|
100
|
+
# 4. 팀 완료 시 자동으로 다음 feature dequeue
|
|
101
|
+
# 5. 5회 초과 실패 시 사용자 개입 요청
|
|
135
102
|
```
|
|
136
103
|
|
|
137
|
-
###
|
|
104
|
+
### Team 모드 레이아웃
|
|
138
105
|
|
|
139
|
-
```bash
|
|
140
|
-
claude # 기본 모드
|
|
141
|
-
claude --teammate-mode tmux # tmux split pane 모드 (권장)
|
|
142
106
|
```
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
```
|
|
154
|
-
❯ /harness-team-action
|
|
107
|
+
┌──────────────┬──────────────┬──────────────┐
|
|
108
|
+
│ Prompt │ Dashboard │ TEAM 1 │
|
|
109
|
+
│ History │ (queue + │ Gen | Eval │
|
|
110
|
+
│ │ status) ├──────────────┤
|
|
111
|
+
├──────────────┤ │ TEAM 2 │
|
|
112
|
+
│ Controller │ │ Gen | Eval │
|
|
113
|
+
│ (Claude / │ ├──────────────┤
|
|
114
|
+
│ Codex) │ │ TEAM 3 │
|
|
115
|
+
└──────────────┴──────────────┴──────────────┘
|
|
155
116
|
```
|
|
156
117
|
|
|
157
|
-
|
|
158
|
-
1. `feature-list.json` → `feature-queue.json` 초기화 (dependency-aware topological sort)
|
|
159
|
-
2. 3개 Teammate 생성 (Claude의 네이티브 Agent Teams)
|
|
160
|
-
3. 각 Teammate가 Queue에서 Feature를 가져와 Gen→Eval 자율 실행
|
|
118
|
+
---
|
|
161
119
|
|
|
162
|
-
|
|
120
|
+
## 모드 전환
|
|
163
121
|
|
|
164
|
-
| 명령 |
|
|
122
|
+
| 명령 | 설명 |
|
|
165
123
|
|------|------|
|
|
166
|
-
| `/harness-team
|
|
167
|
-
| `/harness-
|
|
168
|
-
|
|
|
169
|
-
| `bash scripts/harness-queue-manager.sh requeue F-XXX .` | 실패 Feature 재큐 |
|
|
170
|
-
|
|
171
|
-
**tmux 모드에서 Teammate 간 전환:**
|
|
172
|
-
- `Shift+Down` — Teammate 순회
|
|
173
|
-
- `Ctrl+T` — 태스크 리스트 보기
|
|
174
|
-
|
|
175
|
-
### 6. 작동 원리
|
|
124
|
+
| `/harness-team` | Team 모드 시작/재개 |
|
|
125
|
+
| `/harness-solo` | Solo 모드로 전환 (진행 상태 보존) |
|
|
126
|
+
| `/harness-stop` | Team 모드 중단 (queue 보존, 나중에 재개 가능) |
|
|
176
127
|
|
|
177
128
|
```
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
Teammate 1: F-002 → 코드 생성 → tsc/eslint 검증 → AC 평가
|
|
183
|
-
PASS → queue에서 pass 처리 → dependents unblock → 다음 Feature
|
|
184
|
-
FAIL → 최대 3회 재시도 → 실패 시 fail 처리
|
|
185
|
-
|
|
186
|
-
Teammate 2: F-003 → (동일 루프)
|
|
187
|
-
Teammate 3: F-007 → (동일 루프)
|
|
129
|
+
Team 실행 중 → /harness-stop → /harness-solo → 프롬프트로 계속
|
|
130
|
+
↓
|
|
131
|
+
/harness-team → 나머지 feature 팀 재개
|
|
188
132
|
```
|
|
189
133
|
|
|
190
|
-
- 각 Teammate는 Claude Code의 **독립 컨텍스트** (1M token)
|
|
191
|
-
- `SendMessage`로 Teammate 간 직접 소통 (API 변경, 실패 알림 등)
|
|
192
|
-
- Lead(사용자 세션)는 오케스트레이터 — 개입, 리뷰, gotcha 등록
|
|
193
|
-
|
|
194
|
-
### 7. Lead에서 할 수 있는 것
|
|
195
|
-
|
|
196
|
-
| 할 수 있는 것 | 예시 |
|
|
197
|
-
|--------------|------|
|
|
198
|
-
| Teams 가동/중지 | `/harness-team-action`, `/harness-team-stop` |
|
|
199
|
-
| Queue 상태 확인 | `bash scripts/harness-queue-manager.sh status .` |
|
|
200
|
-
| 실패 Feature 분석 | "F-003이 왜 실패했는지 분석해줘" |
|
|
201
|
-
| Feature 재큐 | `bash scripts/harness-queue-manager.sh requeue F-003 .` |
|
|
202
|
-
| 코드 리뷰 | "F-002의 Sidebar 컴포넌트 리뷰해줘" |
|
|
203
|
-
| Gotcha 등록 | "API 응답에 created_at은 ISO 8601이어야 해" |
|
|
204
|
-
| Teammate에 메시지 | "team-1에게 API 스키마 변경 알려줘" |
|
|
205
|
-
|
|
206
|
-
**하지 말 것:** `/harness-generator-*`, `/harness-evaluator-*` 직접 호출 — Teammate가 처리합니다.
|
|
207
|
-
|
|
208
134
|
---
|
|
209
135
|
|
|
210
|
-
## 에이전트
|
|
136
|
+
## 에이전트 구성
|
|
211
137
|
|
|
212
138
|
| 에이전트 | 역할 | 모델 |
|
|
213
139
|
|----------|------|------|
|
|
214
|
-
| **Dispatcher** |
|
|
215
|
-
| **Brainstormer** | 러프한 요구사항
|
|
216
|
-
| **Planner** | 제품 사양 + API
|
|
217
|
-
| **Generator-Backend** | NestJS MSA 구현 | sonnet |
|
|
140
|
+
| **Dispatcher** | 요청 분석 → 파이프라인 결정 | opus |
|
|
141
|
+
| **Brainstormer** | 러프한 요구사항 → 구조화된 spec | opus |
|
|
142
|
+
| **Planner** | 제품 사양 + API 계약서 + 서비스 분할 | opus |
|
|
143
|
+
| **Generator-Backend** | NestJS MSA 서비스 구현 | sonnet |
|
|
218
144
|
| **Generator-Frontend** | React/Next.js UI 구현 | sonnet |
|
|
219
|
-
| **Evaluator-Functional** | Playwright E2E 기능 검증 | opus
|
|
220
|
-
| **Evaluator-Visual** |
|
|
221
|
-
|
|
222
|
-
### Brainstormer (조건부)
|
|
145
|
+
| **Evaluator-Functional** | Playwright E2E 기능 검증 | opus |
|
|
146
|
+
| **Evaluator-Visual** | 디자인/접근성/AI슬롭 검증 | opus |
|
|
223
147
|
|
|
224
|
-
|
|
148
|
+
### Evaluation 기준
|
|
149
|
+
- PASS: Weighted Score ≥ 2.80/3.00
|
|
150
|
+
- AC 100% 충족 필수 (부분 통과 = FAIL)
|
|
151
|
+
- Regression 실패 1건+ = FAIL
|
|
152
|
+
- Evidence 없는 Score = 0점
|
|
153
|
+
- Team Mode: 최대 5회 재시도 후 사용자 개입 요청
|
|
225
154
|
|
|
226
155
|
---
|
|
227
156
|
|
|
228
|
-
##
|
|
229
|
-
|
|
230
|
-
### Auto-Routing
|
|
231
|
-
|
|
232
|
-
모든 사용자 프롬프트가 Dispatcher를 자동 경유합니다.
|
|
233
|
-
|
|
234
|
-
```
|
|
235
|
-
# per-message opt-out
|
|
236
|
-
❯ harness skip 그냥 답해줘
|
|
237
|
-
|
|
238
|
-
# 전역 비활성
|
|
239
|
-
.harness/config.json → behavior.auto_route_dispatcher = false
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
### API Contract — 진실의 원천
|
|
243
|
-
|
|
244
|
-
`api-contract.json`이 FE ↔ Gateway ↔ Services 간 유일한 계약서입니다.
|
|
245
|
-
|
|
246
|
-
### Gotcha 시스템
|
|
247
|
-
|
|
248
|
-
사용자가 실수를 지적하면 Dispatcher가 자동 기록 → 이후 세션에서 반복 방지.
|
|
249
|
-
|
|
250
|
-
### Pre-Eval Gate
|
|
251
|
-
|
|
252
|
-
Generator → Evaluator 전환 전 결정론적 검증 (tsc, eslint, test). 실패 시 Evaluator 세션을 열지 않고 Generator로 자동 리라우팅.
|
|
253
|
-
|
|
254
|
-
```json
|
|
255
|
-
// .harness/config.json
|
|
256
|
-
"pre_eval_gate": {
|
|
257
|
-
"frontend_checks": ["npx tsc --noEmit", "npx eslint src/", "npx vitest run --bail 1"],
|
|
258
|
-
"frontend_cwd": "path/to/frontend" // 프로젝트 루트와 다른 경우
|
|
259
|
-
}
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
### Evaluation System
|
|
263
|
-
|
|
264
|
-
| 설정 | 값 |
|
|
265
|
-
|------|------|
|
|
266
|
-
| PASS 기준 | 2.80 / 3.00 이상 |
|
|
267
|
-
| FAIL 기준 | 2.79 이하 (예외 없음) |
|
|
268
|
-
| Evidence 없는 Score | 0점 강제 |
|
|
269
|
-
| Regression 실패 | 1건이라도 → 전체 FAIL |
|
|
270
|
-
|
|
271
|
-
---
|
|
272
|
-
|
|
273
|
-
## Harness Studio (tmux)
|
|
274
|
-
|
|
275
|
-
### Studio v3 (Classic)
|
|
276
|
-
|
|
277
|
-
```bash
|
|
278
|
-
npx walwal-harness studio
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
```
|
|
282
|
-
┌──────────────┬──────────────┐
|
|
283
|
-
│ Dashboard │ Monitor │
|
|
284
|
-
│ (Progress) ├──────────────┤
|
|
285
|
-
├──────────────┤ Agent Session │
|
|
286
|
-
│ Control ├──────────────┤
|
|
287
|
-
│ (harness>) │ Eval Review │
|
|
288
|
-
└──────────────┴──────────────┘
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
### Studio v4 (Agent Teams)
|
|
292
|
-
|
|
293
|
-
```bash
|
|
294
|
-
npx walwal-harness v4
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
```
|
|
298
|
-
┌──────────────┬──────────────┬──────────────┐
|
|
299
|
-
│ │ Progress │ Team 1 │
|
|
300
|
-
│ Main ├──────────────┤ Team 2 │
|
|
301
|
-
│ (Claude) │ Prompts │ Team 3 │
|
|
302
|
-
└──────────────┴──────────────┴──────────────┘
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
---
|
|
306
|
-
|
|
307
|
-
## 프로젝트 구조
|
|
157
|
+
## 디렉토리 구조
|
|
308
158
|
|
|
309
159
|
```
|
|
310
160
|
your-project/
|
|
311
|
-
├── AGENTS.md # 에이전트 공통 컨텍스트
|
|
312
|
-
├── CLAUDE.md → AGENTS.md # 심볼릭 링크
|
|
313
|
-
├── scripts/
|
|
314
|
-
│ ├── harness-next.sh # 세션 오케스트레이터
|
|
315
|
-
│ ├── harness-session-start.sh # SessionStart 훅
|
|
316
|
-
│ ├── harness-user-prompt-submit.sh # UserPromptSubmit 훅
|
|
317
|
-
│ ├── harness-queue-manager.sh # v4: Feature Queue 관리
|
|
318
|
-
│ ├── harness-team-worker.sh # v4: Team Worker (Gen→Eval 루프)
|
|
319
|
-
│ ├── harness-studio-v4.sh # v4: tmux 레이아웃
|
|
320
|
-
│ ├── harness-dashboard-v4.sh # v4: Progress 패널
|
|
321
|
-
│ ├── harness-prompts-v4.sh # v4: Prompts 패널
|
|
322
|
-
│ └── lib/
|
|
323
161
|
├── .harness/
|
|
324
|
-
│ ├── config.json
|
|
325
|
-
│ ├──
|
|
326
|
-
│ ├── progress.
|
|
327
|
-
│ ├──
|
|
328
|
-
│ ├──
|
|
329
|
-
│ ├──
|
|
330
|
-
│ │ ├──
|
|
331
|
-
│ │ ├── feature-queue.json
|
|
332
|
-
│ │
|
|
333
|
-
│
|
|
334
|
-
│ └──
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
"args": ["-y", "@playwright/mcp@latest", "--headless", "--caps", "vision"]
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
162
|
+
│ ├── config.json # 하네스 설정
|
|
163
|
+
│ ├── progress.json # 런타임 상태 (mode, sprint, agent)
|
|
164
|
+
│ ├── progress.log # 실시간 이벤트 로그
|
|
165
|
+
│ ├── HARNESS.md # 하네스 상세 가이드
|
|
166
|
+
│ ├── actions/ # 활성 스프린트 문서
|
|
167
|
+
│ │ ├── feature-list.json # Feature 목록 + AC
|
|
168
|
+
│ │ ├── api-contract.json # API 계약서
|
|
169
|
+
│ │ ├── feature-queue.json # Feature Queue 상태 (Team Mode)
|
|
170
|
+
│ │ └── ...
|
|
171
|
+
│ ├── archive/ # 완료 스프린트 보관 (불변)
|
|
172
|
+
│ └── gotchas/ # 에이전트 실수 기록
|
|
173
|
+
├── .claude/
|
|
174
|
+
│ ├── skills/harness-*/ # 에이전트 스킬 (7개)
|
|
175
|
+
│ ├── commands/harness-*.md # 모드 제어 커맨드 (3개)
|
|
176
|
+
│ └── settings.json # 훅, statusline
|
|
177
|
+
├── scripts/
|
|
178
|
+
│ ├── harness-tmux.sh # 통합 tmux 레이아웃 (Solo/Team)
|
|
179
|
+
│ ├── harness-dashboard.sh # 통합 대시보드
|
|
180
|
+
│ ├── harness-monitor.sh # 에이전트 모니터
|
|
181
|
+
│ ├── harness-queue-manager.sh # Feature Queue 관리
|
|
182
|
+
│ ├── harness-next.sh # 에이전트 전환 라우터
|
|
183
|
+
│ ├── harness-session-start.sh # SessionStart 훅
|
|
184
|
+
│ ├── harness-user-prompt-submit.sh # UserPromptSubmit 훅
|
|
185
|
+
│ ├── harness-statusline.sh # 상태바
|
|
186
|
+
│ ├── harness-prompt-history.sh # 프롬프트 히스토리
|
|
187
|
+
│ └── lib/ # 공유 라이브러리
|
|
188
|
+
├── AGENTS.md # 프로젝트 컨텍스트 (IA-MAP)
|
|
189
|
+
└── CLAUDE.md → AGENTS.md # 심볼릭 링크
|
|
356
190
|
```
|
|
357
191
|
|
|
358
192
|
---
|
|
359
193
|
|
|
360
|
-
##
|
|
361
|
-
|
|
362
|
-
### Skills가 로드되지 않아요
|
|
194
|
+
## Troubleshooting
|
|
363
195
|
|
|
196
|
+
### Skills/Commands가 인식되지 않음
|
|
364
197
|
```bash
|
|
365
|
-
|
|
366
|
-
|
|
198
|
+
# Claude Code 세션 재시작
|
|
199
|
+
/exit
|
|
200
|
+
claude
|
|
367
201
|
```
|
|
368
202
|
|
|
369
|
-
###
|
|
370
|
-
|
|
203
|
+
### Team 모드에서 "No features ready"
|
|
371
204
|
```bash
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
### v4 Team이 "No features ready" 반복
|
|
205
|
+
# Queue 상태 확인
|
|
206
|
+
bash scripts/harness-queue-manager.sh status .
|
|
376
207
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
npx walwal-harness v4
|
|
208
|
+
# 실패한 feature requeue
|
|
209
|
+
bash scripts/harness-queue-manager.sh requeue F-001 .
|
|
380
210
|
```
|
|
381
211
|
|
|
382
|
-
###
|
|
212
|
+
### 모드 전환 후 상태 꼬임
|
|
213
|
+
```bash
|
|
214
|
+
# progress.json 직접 확인
|
|
215
|
+
cat .harness/progress.json | jq '{mode, sprint, current_agent, next_agent}'
|
|
383
216
|
|
|
384
|
-
|
|
385
|
-
|
|
217
|
+
# 강제 Solo 복귀
|
|
218
|
+
jq '.mode = "solo"' .harness/progress.json > /tmp/p.json && mv /tmp/p.json .harness/progress.json
|
|
386
219
|
```
|
|
387
220
|
|
|
388
|
-
또는 `.harness/config.json`에서 `behavior.auto_route_dispatcher = false`
|
|
389
|
-
|
|
390
221
|
---
|
|
391
222
|
|
|
392
|
-
## 참고
|
|
393
|
-
|
|
394
|
-
- [Anthropic: Effective Harnesses for Long-Running Agents](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents)
|
|
395
|
-
- [Anthropic: Harness Design for Long-Running Application Development](https://www.anthropic.com/engineering/harness-design-long-running-apps)
|
|
396
|
-
- [Claude Code Skills Documentation](https://code.claude.com/docs/en/skills)
|
|
397
|
-
- [obra/superpowers](https://github.com/obra/superpowers) — Brainstorming skill (MIT License)
|
|
398
|
-
|
|
399
223
|
## License
|
|
400
224
|
|
|
401
225
|
MIT
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"harness": {
|
|
3
3
|
"name": "6-Agent Production Harness",
|
|
4
|
-
"version": "
|
|
5
|
-
"description": "Dispatcher + NestJS MSA + React/Next.js + Playwright
|
|
4
|
+
"version": "5.0.0",
|
|
5
|
+
"description": "Solo/Team 통합 하네스 — Dispatcher + NestJS MSA + React/Next.js + Playwright",
|
|
6
6
|
"source": "https://www.anthropic.com/engineering/harness-design-long-running-apps"
|
|
7
7
|
},
|
|
8
8
|
"agents": {
|
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
"스크린샷 없이 '확인했다'고 주장하는 행위"
|
|
133
133
|
]
|
|
134
134
|
}
|
|
135
|
-
}
|
|
135
|
+
}
|
|
136
136
|
},
|
|
137
137
|
"flow": {
|
|
138
138
|
"sequence": ["dispatcher", "planner", "generator-backend", "generator-frontend", "evaluator-functional", "evaluator-visual"],
|
|
@@ -163,11 +163,12 @@
|
|
|
163
163
|
"timeout_seconds": 120,
|
|
164
164
|
"on_fail": "reroute_to_generator"
|
|
165
165
|
},
|
|
166
|
-
"
|
|
167
|
-
"comment": "
|
|
168
|
-
"enabled": false,
|
|
166
|
+
"team": {
|
|
167
|
+
"comment": "Team Mode 설정. /harness-team 커맨드로 실행.",
|
|
169
168
|
"concurrency": 3,
|
|
170
|
-
"
|
|
169
|
+
"max_retries_per_feature": 5,
|
|
170
|
+
"escalate_after": 3,
|
|
171
|
+
"auto_dequeue": true,
|
|
171
172
|
"gen_model": "sonnet",
|
|
172
173
|
"eval_model": "opus",
|
|
173
174
|
"branch_strategy": "feature-branch",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version":
|
|
2
|
+
"version": 2,
|
|
3
|
+
"mode": "solo",
|
|
3
4
|
"project_name": "",
|
|
4
5
|
"pipeline": null,
|
|
5
6
|
"sprint": {
|
|
@@ -23,6 +24,11 @@
|
|
|
23
24
|
"api-contract.json": { "status": "pending", "updated_by": null, "updated_at": null },
|
|
24
25
|
"sprint-contract.md": { "status": "pending", "updated_by": null, "updated_at": null }
|
|
25
26
|
},
|
|
27
|
+
"team_state": {
|
|
28
|
+
"active_teams": 0,
|
|
29
|
+
"paused_at": null,
|
|
30
|
+
"resume_from": null
|
|
31
|
+
},
|
|
26
32
|
"updated_at": "{{DATE}}",
|
|
27
33
|
"history": []
|
|
28
34
|
}
|