@walwal-harness/cli 4.0.0-alpha.9 → 4.0.0-beta.2

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 CHANGED
@@ -1,4 +1,4 @@
1
- # walwal-harness
1
+ # @walwal-harness/cli
2
2
 
3
3
  **AI 에이전트를 위한 프로덕션 하네스 엔지니어링 프레임워크**
4
4
 
@@ -9,332 +9,342 @@
9
9
 
10
10
  ---
11
11
 
12
+ ## 두 가지 모드
13
+
14
+ | 모드 | 설명 | 실행 방법 |
15
+ |------|------|----------|
16
+ | **Classic (v3)** | 순차 실행 — Planner → Generator → Evaluator 1세션씩 | `하네스 엔지니어링 시작` |
17
+ | **Agent Teams (v4)** | 병렬 실행 — 3 Team이 Feature 단위 Gen→Eval 루프 동시 실행 | `/harness-team` 또는 `npx walwal-harness v4` |
18
+
19
+ ---
20
+
12
21
  ## 설치
13
22
 
23
+ ### 첫 설치
24
+
14
25
  ```bash
26
+ cd your-project
15
27
  npm install @walwal-harness/cli
16
28
  ```
17
29
 
18
- `postinstall`이 자동으로 프로젝트 루트에 설치합니다:
19
-
20
- 1. `.harness/` 디렉토리 스캐폴딩 (actions, archive, gotchas, config)
21
- 2. `.claude/skills/` 에 에이전트 스킬 설치 (9개)
22
- 3. `scripts/` 오케스트레이션 헬퍼 스크립트 설치
23
- 4. `SessionStart` 등록 (세션 시작 시 진행 상태 표시)
24
- 5. `UserPromptSubmit` 훅 등록 (모든 프롬프트를 Dispatcher 경유 자동 라우팅)
25
- 6. `AGENTS.md` 생성 + `CLAUDE.md` 심볼릭 링크
26
- 7. 기존 프로젝트면 구조 스캔 → IA-MAP 자동 생성
30
+ `postinstall`이 자동으로:
31
+ 1. `.harness/` 디렉토리 스캐폴딩
32
+ 2. `.claude/skills/` 에이전트 스킬 설치 (8개)
33
+ 3. `scripts/` 에 오케스트레이션 스크립트 설치
34
+ 4. SessionStart / UserPromptSubmit 등록
35
+ 5. `AGENTS.md` + `CLAUDE.md` 심볼릭 링크 생성
27
36
 
28
37
  > **중요:** 설치 후 Claude Code 세션을 **재시작**해야 skills가 인식됩니다.
29
- > `/exit` → 디렉터리 재진입이 필요합니다.
30
38
 
31
- ### CLI 명령
39
+ ### 기존 설치자 업데이트
32
40
 
33
41
  ```bash
34
- npx walwal-harness # 초기화 (postinstall과 동일)
35
- npx walwal-harness --force # 강제 재초기화 (기존 파일 덮어쓰기)
36
- npx walwal-harness --help # 도움말
37
- ```
42
+ # latest (v3 안정판)
43
+ npm update @walwal-harness/cli
38
44
 
39
- ### 초기화에서 일어나는
45
+ # v4 alpha (Agent Teams)
46
+ npm install @walwal-harness/cli@next
40
47
 
48
+ # 스크립트 동기화 (코어 스크립트 자동 덮어쓰기)
49
+ npx walwal-harness
41
50
  ```
42
- your-project/
43
- ├── AGENTS.md # 에이전트 공통 컨텍스트 (Planner 관리)
44
- ├── CLAUDE.md → AGENTS.md # 심볼릭 링크
45
- ├── scripts/
46
- │ ├── harness-next.sh # 세션 오케스트레이터
47
- │ ├── harness-session-start.sh # SessionStart
48
- │ ├── harness-user-prompt-submit.sh # UserPromptSubmit (auto-routing)
49
- │ ├── scan-project.sh # 프로젝트 구조 스캔
50
- │ ├── init-agents-md.sh # AGENTS.md 생성/리빌드
51
- │ └── lib/
52
- │ └── harness-render-progress.sh # 프로그레스 바 렌더러
53
- ├── .harness/
54
- │ ├── config.json # 하네스 설정
55
- │ ├── HARNESS.md # 하네스 상세 가이드
56
- │ ├── progress.json # 세션 간 상태 (기계 판독)
57
- │ ├── gotchas/ # 에이전트별 실수 기록
58
- │ ├── actions/ # 활성 스프린트 문서
59
- │ └── archive/ # 완료 스프린트 보관 (불변)
60
- └── .claude/
61
- ├── settings.json # 훅 등록 (SessionStart + UserPromptSubmit)
62
- └── skills/ # Claude Code 스킬 (9개)
63
- ├── harness-dispatcher/
64
- ├── harness-brainstorming/
65
- ├── harness-planner/
66
- ├── harness-generator-backend/
67
- ├── harness-generator-frontend/
68
- ├── harness-generator-frontend-flutter/
69
- ├── harness-evaluator-functional/
70
- ├── harness-evaluator-functional-flutter/
71
- └── harness-evaluator-visual/
51
+
52
+ ### CLI 명령어
53
+
54
+ ```bash
55
+ npx walwal-harness # 초기화 / 스크립트 업데이트
56
+ npx walwal-harness --force # 강제 재초기화
57
+ npx walwal-harness studio # Harness Studio v3 (tmux 5-pane)
58
+ npx walwal-harness v4 # Harness Studio v4 (Agent Teams, tmux 6-pane)
59
+ npx walwal-harness --help # 도움말
72
60
  ```
73
61
 
74
62
  ---
75
63
 
76
- ## Quick Start
64
+ ## Quick Start — Classic Mode (v3)
77
65
 
78
66
  ### 1. 설치 + 재시작
79
67
 
80
68
  ```bash
81
69
  cd your-project
82
70
  npm install @walwal-harness/cli
83
- # Claude Code 세션 재시작 (/exit → 재진입)
71
+ # Claude Code 재시작 (/exit → 재진입)
84
72
  ```
85
73
 
86
74
  ### 2. 하네스 시작
87
75
 
88
- Claude Code에서 아무 요청이나 입력하면 **UserPromptSubmit 훅이 자동으로 Dispatcher를 호출**합니다. 또는 명시적으로:
89
-
90
76
  ```
91
- > 하네스 엔지니어링 시작
77
+ 하네스 엔지니어링 시작
92
78
  ```
93
79
 
94
- ### 3. Dispatcher 분류
80
+ 또는 Claude Code에서 아무 요청 → UserPromptSubmit 훅이 자동으로 Dispatcher 호출합니다.
81
+
82
+ ### 3. 파이프라인 자동 선택
83
+
84
+ Dispatcher가 요청을 분석하여 파이프라인을 결정합니다:
95
85
 
96
86
  ```
97
- 사용자 입력
98
-
99
- ├─ 신규 기능/제품 요청파이프라인 선택 (FULLSTACK / FE-ONLY / BE-ONLY)
100
- │ └─ "브레인스토밍 필요합니까?" → Y: Brainstormer → Planner
101
- │ → N: Planner 직행
102
- ├─ 실수 지적 → Gotcha 기록 → 해당 에이전트 재작업
103
- ├─ 특정 에이전트 명령 → 해당 에이전트 직접 라우팅
104
- └─ 메타/인사 → 일반 응답
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-BEEval-Func(API-only)
105
90
  ```
106
91
 
107
- ### 4. 에이전트 순차 실행
92
+ ### 4. 순차 실행
108
93
 
109
- 각 에이전트가 완료되면 다음 프롬프트를 제안합니다:
94
+ 각 에이전트가 독립 Claude Code 세션에서 실행됩니다:
110
95
 
111
96
  ```
112
- Dispatcher 완료. bash scripts/harness-next.sh 실행하여 다음 단계 확인.
97
+ /harness-planner # Plan 작성
98
+ ❯ /harness-generator-frontend # 코드 생성
99
+ ❯ /harness-evaluator-functional # E2E 테스트
113
100
  ```
114
101
 
115
- `bash scripts/harness-next.sh` 실행하면 프로그레스 + 다음 에이전트 안내:
102
+ 에이전트가 완료되면 **새 세션**을 시작하면 자동으로 다음 에이전트를 안내합니다.
116
103
 
117
- ```
118
- ═══ Sprint 1 / FULLSTACK ═══════════════════
104
+ ### 5. Eval FAIL → 자동 재작업
119
105
 
120
- Agents: planner✓generator-backend✓ [generator-frontend] evaluator-functional evaluator-visual
106
+ Evaluator FAIL 실패 원인 + 피드백과 함께 Generator로 자동 리라우팅 (최대 10회).
121
107
 
122
- /harness-generator-frontend 를 실행하세요.
123
- ```
108
+ ---
124
109
 
125
- ### 5. 반복
110
+ ## Quick Start — Agent Teams (v4)
126
111
 
127
- FAIL이 발생하면 Evaluator가 원인을 분석하고 해당 Generator로 자동 재작업 라우팅 (최대 10회). PASS하면 다음 Evaluator로 진행. 모든 Evaluator를 통과하면 스프린트 완료 → 아카이브.
112
+ Claude Code의 **네이티브 Agent Teams 기능**을 사용하여 3개 Teammate가 Feature 단위로 Gen→Eval을 병렬 실행합니다.
128
113
 
129
- ---
114
+ ```
115
+ 기존 (v3): Planner → Gen(F-001~028 전부) → Eval(전부)
116
+ v4: Planner → 3 Teammates 병렬, 각 Feature 단위 Gen→Eval
117
+ ```
130
118
 
131
- ## 파이프라인
119
+ ### 1. Agent Teams 활성화
132
120
 
133
- Dispatcher가 사용자 요청을 분석하여 3가지 파이프라인 중 하나를 자동 선택합니다:
121
+ ```bash
122
+ npm install @walwal-harness/cli@next
123
+ npx walwal-harness v4 # settings.json에 env var 설정 + queue 초기화
124
+ ```
134
125
 
135
- ### FULLSTACK (신규 프로젝트)
126
+ 또는 수동으로:
136
127
 
128
+ ```json
129
+ // .claude/settings.json
130
+ {
131
+ "env": {
132
+ "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
133
+ }
134
+ }
137
135
  ```
138
- Brainstormer? → Planner → Generator-BE → Generator-FE → Evaluator-Func → Evaluator-Visual
139
- FAIL
140
- └──→ 재작업 (max 10회)
136
+
137
+ ### 2. Claude Code 시작
138
+
139
+ ```bash
140
+ claude # 기본 모드
141
+ claude --teammate-mode tmux # tmux split pane 모드 (권장)
141
142
  ```
142
143
 
143
- ### FE-ONLY (기존 API에 프론트엔드 연동)
144
+ ### 3. Planner 실행
144
145
 
145
146
  ```
146
- Brainstormer? Planner(light) → Generator-FE → Evaluator-Func → Evaluator-Visual
147
- └─ OpenAPIapi-contract.json 자동 변환
147
+ 하네스 엔지니어링 시작
148
+ # DispatcherPlanner → feature-list.json 생성
148
149
  ```
149
150
 
150
- ### BE-ONLY (기존 서버에 백엔드 기능 추가)
151
+ ### 4. Teams 가동
151
152
 
152
153
  ```
153
- Brainstormer? → Planner → Generator-BE → Evaluator-Func(API-only)
154
+ /harness-team-action
154
155
  ```
155
156
 
156
- > `Brainstormer?` = Dispatcher가 사용자에게 확인 후 조건부 실행. 명확한 PRD/OpenAPI가 있으면 생략 가능.
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 자율 실행
157
161
 
158
- ### Flutter 프로젝트 자동 감지 (Web / Mobile / Desktop)
162
+ ### 5. 모니터링 & 제어
159
163
 
160
- `pubspec.yaml` + `flutter:` 키가 감지되면 FE 에이전트가 **자동 치환**됩니다. **Flutter Web** 은 컴파일 결과가 HTML+JS+CSS 이므로 React 와 동일하게 Playwright 기반 evaluator 를 그대로 사용하고, **Mobile/Desktop** 만 정적 분석 evaluator 로 교체됩니다.
164
+ | 명령 | 동작 |
165
+ |------|------|
166
+ | `/harness-team-action` | Queue 초기화 + 3 Teammates 생성 |
167
+ | `/harness-team-stop` | 모든 Teammates 해산 |
168
+ | `bash scripts/harness-queue-manager.sh status .` | Queue 상태 확인 |
169
+ | `bash scripts/harness-queue-manager.sh requeue F-XXX .` | 실패 Feature 재큐 |
161
170
 
162
- | fe_stack | fe_target | Generator | Eval-Functional | Eval-Visual |
163
- |----------|-----------|-----------|----------------|-------------|
164
- | react | (n/a) | `generator-frontend` | `evaluator-functional` (Playwright) | `evaluator-visual` |
165
- | **flutter** | **web** | `generator-frontend-flutter` | **`evaluator-functional`** (Playwright!) | **`evaluator-visual`** (Playwright!) |
166
- | **flutter** | mobile | `generator-frontend-flutter` | `evaluator-functional-flutter` (flutter analyze/test) | **SKIP** |
167
- | **flutter** | desktop | `generator-frontend-flutter` | `evaluator-functional-flutter` (flutter analyze/test) | **SKIP** |
171
+ **tmux 모드에서 Teammate 전환:**
172
+ - `Shift+Down` — Teammate 순회
173
+ - `Ctrl+T` 태스크 리스트 보기
168
174
 
169
- **감지 방식**: `scan-project.sh` Flutter 프로젝트의 `web/index.html`, `android/`, `ios/`, `macos/`, `windows/`, `linux/` 디렉터리 존재 여부로 `fe_target` 을 자동 판정. 멀티 타겟 또는 모호한 경우 Planner 가 사용자에게 확인합니다. 치환은 `pipeline.json.fe_stack + fe_target` 조합에 의해 `harness-next.sh` 가 자동 처리합니다.
175
+ ### 6. 작동 원리
170
176
 
171
- ---
177
+ ```
178
+ Feature Queue (dependency-aware topological sort)
179
+ Ready: [F-002, F-003, F-007] ← depends_on 충족된 것만
180
+ Blocked: [F-004, F-005, ...] ← 선행 Feature 미완료
172
181
 
173
- ## 에이전트
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 → (동일 루프)
188
+ ```
174
189
 
175
- ### 9개 에이전트 (조건부 포함)
190
+ - Teammate는 Claude Code의 **독립 컨텍스트** (1M token)
191
+ - `SendMessage`로 Teammate 간 직접 소통 (API 변경, 실패 알림 등)
192
+ - Lead(사용자 세션)는 오케스트레이터 — 개입, 리뷰, gotcha 등록
176
193
 
177
- | 에이전트 | 역할 | 호출 조건 |
178
- |----------|------|----------|
179
- | **Dispatcher** | 파이프라인 선택 + Gotcha 관리 + 라우팅 | 항상 (auto-routing 훅) |
180
- | **Brainstormer** | 러프한 요구사항을 대화형으로 구체화 | Dispatcher가 사용자에게 확인 후 |
181
- | **Planner** | 제품 사양 + API 계약서 + 서비스 분할 | 파이프라인 시작 시 |
182
- | **Generator-Backend** | NestJS MSA 구현 (Gateway + Microservices) | FULLSTACK, BE-ONLY |
183
- | **Generator-Frontend** | React/Next.js UI + API 연동 | FULLSTACK, FE-ONLY (React) |
184
- | **Generator-Frontend-Flutter** | Flutter (Riverpod + Retrofit + ARB i18n) | FULLSTACK, FE-ONLY (Flutter) |
185
- | **Evaluator-Functional** | Playwright E2E 기능 검증 | FULLSTACK, FE-ONLY (React) |
186
- | **Evaluator-Functional-Flutter** | flutter analyze/test + 정적 anti-pattern 검증 | FULLSTACK, FE-ONLY (Flutter) |
187
- | **Evaluator-Visual** | 디자인 일관성, 반응형, 접근성, AI슬롭 감지 | FULLSTACK, FE-ONLY (React만) |
194
+ ### 7. Lead에서 있는
188
195
 
189
- ### Brainstormer (조건부)
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 스키마 변경 알려줘" |
190
205
 
191
- [obra/superpowers](https://github.com/obra/superpowers) (MIT License)의 brainstorming 방법론을 이식.
192
- 바이브코딩 수준의 러프한 요구사항을 **대화형 Q&A로 구체화**하여 Planner가 바로 소비할 수 있는 `brainstorm-spec.md`로 만듭니다.
206
+ **하지 것:** `/harness-generator-*`, `/harness-evaluator-*` 직접 호출 — Teammate가 처리합니다.
193
207
 
194
- **핵심 원칙:**
195
- - HARD-GATE: 사용자 승인 없이 구현 단계로 넘어갈 수 없음
196
- - 한 번에 한 질문, 객관식 우선
197
- - 2-3개 접근법 제시 후 사용자가 선택
198
- - Spec self-review + User Review Gate
208
+ ---
199
209
 
200
- **실행 조건:** Dispatcher가 "브레인스토밍 과정이 필요합니까? (Y/N)" 라고 묻고 사용자가 Y 응답한 경우에만. 피드백/이터레이션/직접 명령에서는 자동 스킵.
210
+ ## 에이전트
211
+
212
+ | 에이전트 | 역할 | 모델 |
213
+ |----------|------|------|
214
+ | **Dispatcher** | 파이프라인 선택 + Gotcha 관리 | opus |
215
+ | **Brainstormer** | 러프한 요구사항 대화형 구체화 | opus |
216
+ | **Planner** | 제품 사양 + API 계약 + Feature 설계 | opus/ultraplan |
217
+ | **Generator-Backend** | NestJS MSA 구현 | sonnet |
218
+ | **Generator-Frontend** | React/Next.js UI 구현 | sonnet |
219
+ | **Evaluator-Functional** | Playwright E2E 기능 검증 | opus/ultrathink |
220
+ | **Evaluator-Visual** | 디자인, 반응형, 접근성 검증 | opus/ultrathink |
221
+
222
+ ### Brainstormer (조건부)
223
+
224
+ [obra/superpowers](https://github.com/obra/superpowers) (MIT License) 기반. 바이브코딩 수준의 러프한 요구사항을 대화형 Q&A로 구체화합니다.
201
225
 
202
226
  ---
203
227
 
204
228
  ## 핵심 메커니즘
205
229
 
206
- ### Auto-Routing (UserPromptSubmit Hook)
230
+ ### Auto-Routing
207
231
 
208
- 설치 시 `.claude/settings.json`에 `UserPromptSubmit` 훅이 자동 등록됩니다. 모든 사용자 프롬프트가 Dispatcher를 경유하도록 컨텍스트를 주입합니다.
232
+ 모든 사용자 프롬프트가 Dispatcher를 자동 경유합니다.
209
233
 
210
- **per-message opt-out:**
211
- ```
212
- > harness skip 그냥 이것만 답해줘
213
- > harness 없이 질문 하나만
214
- > without harness ...
215
234
  ```
235
+ # per-message opt-out
236
+ ❯ harness skip 그냥 답해줘
216
237
 
217
- **전역 비활성:**
218
- ```json
219
- // .harness/config.json
220
- { "behavior": { "auto_route_dispatcher": false } }
238
+ # 전역 비활성
239
+ .harness/config.json → behavior.auto_route_dispatcher = false
221
240
  ```
222
241
 
223
242
  ### API Contract — 진실의 원천
224
243
 
225
- `api-contract.json`이 Frontend ↔ Gateway ↔ Microservices 간 유일한 계약서입니다. Planner만 수정 가능하며, Generator-BE는 이를 구현하고, Generator-FE는 이를 소비합니다.
244
+ `api-contract.json`이 FE ↔ Gateway ↔ Services 간 유일한 계약서입니다.
226
245
 
227
- ### AGENTS.md — 에이전트 불문 범용 컨텍스트
246
+ ### Gotcha 시스템
228
247
 
229
- 모든 AI 에이전트(Claude, Cursor, Copilot, Windsurf)읽을 있는 공통 진입점입니다. 1차원 IA-MAP으로 폴더별 책임과 소유 에이전트를 명시합니다.
248
+ 사용자가 실수를 지적하면 Dispatcher자동 기록 이후 세션에서 반복 방지.
230
249
 
231
- ```
232
- ├── apps/gateway/ # [BE] API Gateway → Generator-Backend
233
- ├── apps/service-a/ # [BE] Microservice → Generator-Backend
234
- ├── apps/web/ # [FE] Frontend App → Generator-Frontend
235
- └── .harness/ # [HARNESS] 하네스 시스템 → Planner
236
- ```
250
+ ### Pre-Eval Gate
237
251
 
238
- ### Gotcha 시스템 실수를 반복하지 않는 에이전트
252
+ Generator Evaluator 전환 결정론적 검증 (tsc, eslint, test). 실패 시 Evaluator 세션을 열지 않고 Generator로 자동 리라우팅.
239
253
 
240
- 사용자가 에이전트의 실수를 지적하면 Dispatcher가 자동으로 감지하여 해당 에이전트의 gotchas 파일에 기록합니다. 이후 세션에서 에이전트는 시작 시 자신의 gotchas를 읽고 같은 실수를 반복하지 않습니다.
241
-
242
- ```
243
- 사용자: "API 응답에 created_at은 ISO 8601로 반환해야 "
244
- → Dispatcher: generator-backend.md에 [G-001] 기록
245
- → Generator-BE 다음 세션: gotchas 읽기 → 같은 실수 방지
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
+ }
246
260
  ```
247
261
 
248
- ### IA Structure Compliance — Step 0 Gate
249
-
250
- Evaluator는 기능 테스트 전에 AGENTS.md의 IA-MAP과 실제 폴더 구조를 대조합니다. 경로 누락이나 소유권 침범이 발견되면 **기능 테스트 없이 즉시 FAIL**합니다.
251
-
252
- ### 브라운필드 지원
262
+ ### Evaluation System
253
263
 
254
- 기존 프로젝트에 설치하면:
255
- - `scan-project.sh`가 Tech Stack, 폴더 구조, 기존 CLAUDE.md를 자동 스캔
256
- - 기존 CLAUDE.md 규칙을 "Preserved Rules" 섹션으로 이관
257
- - 원본은 `.harness/archive/pre-harness-backup/`에 백업
258
- - Flutter 프로젝트 자동 감지 (`pubspec.yaml` + `flutter:`)
264
+ | 설정 | 값 |
265
+ |------|------|
266
+ | PASS 기준 | 2.80 / 3.00 이상 |
267
+ | FAIL 기준 | 2.79 이하 (예외 없음) |
268
+ | Evidence 없는 Score | 0점 강제 |
269
+ | Regression 실패 | 1건이라도 → 전체 FAIL |
259
270
 
260
271
  ---
261
272
 
262
- ## FE 스택별 지원
263
-
264
- ### React / Next.js (기본)
265
-
266
- | 항목 | 상세 |
267
- |------|------|
268
- | Generator | `harness-generator-frontend` — RSC, App Router, Tailwind CSS, Cache Components |
269
- | Evaluator-Func | `harness-evaluator-functional` — Playwright MCP (`browser_*`) E2E 테스트 |
270
- | Evaluator-Visual | `harness-evaluator-visual` — 스크린샷 기반 디자인/접근성/반응형 검증 |
271
- | 레퍼런스 | Vercel Best Practices, Design System Rules, AI Forbidden Patterns, Component Patterns |
272
-
273
- ### Flutter (Dart) — Web / Mobile / Desktop
274
-
275
- | 항목 | Web (`fe_target=web`) | Mobile/Desktop (`fe_target=mobile`/`desktop`) |
276
- |------|----------------------|---------------------------------------------|
277
- | Generator | `harness-generator-frontend-flutter` (Web 가이드 활성) | `harness-generator-frontend-flutter` (Mobile/Desktop 가이드) |
278
- | Eval-Func | **`harness-evaluator-functional`** (Playwright MCP) | `harness-evaluator-functional-flutter` (`flutter analyze` + `flutter test` + build_runner drift + FL-01~FL-08 정적 검증) |
279
- | Eval-Visual | **`harness-evaluator-visual`** (Playwright 스크린샷/반응형/접근성) | **SKIP** (브라우저 없음) |
280
- | 레퍼런스 공통 | API Layer Pattern, Riverpod Pattern, i18n Pattern, Anti-Patterns | 동일 |
281
- | 레퍼런스 추가 | **Flutter Web Pattern** (`dart:html`/`package:web` 허용, go_router, CORS, PWA, 빌드/호스팅) | — |
282
- | dart:html / package:web | **허용** (가능하면 conditional import 권장) | **금지** (모바일/데스크톱 빌드 실패 유발) |
283
- | 빌드 명령 | `flutter build web --release` / `flutter run -d chrome` | `flutter build apk` / `flutter build ios` / `flutter build macos` 등 |
284
-
285
- ### FE 스택 + 타겟 감지
286
-
287
- 1. `scan-project.sh`가 `pubspec.yaml` + `flutter:` 키를 탐지하여 `fe_stack = "flutter"` 설정
288
- 2. 같은 스캔이 `web/index.html`, `android/`, `ios/`, `macos/`/`windows/`/`linux/` 존재 여부로 `fe_target` 자동 판정 (`web` / `mobile` / `desktop`)
289
- 3. Planner 가 모호한 경우(멀티 타겟, unknown) 사용자에게 단 한 번 확인하고 `pipeline.json.fe_target` 확정
290
- 4. `harness-next.sh`가 `fe_stack + fe_target` 조합에 따라 FE 에이전트를 자동 치환 (Agent Bar에도 반영)
273
+ ## Harness Studio (tmux)
291
274
 
292
- ---
275
+ ### Studio v3 (Classic)
293
276
 
294
- ## 스크립트 레퍼런스
277
+ ```bash
278
+ npx walwal-harness studio
279
+ ```
295
280
 
296
- | 스크립트 | 설명 | 실행 방법 |
297
- |----------|------|----------|
298
- | `harness-next.sh` | 세션 오케스트레이터 — progress.json 읽고 다음 에이전트 결정, 프로그레스 바 출력 | `bash scripts/harness-next.sh` |
299
- | `scan-project.sh` | 프로젝트 구조 스캔 → `.harness/actions/scan-result.json` 출력 | `bash scripts/scan-project.sh .` |
300
- | `init-agents-md.sh` | scan-result.json 기반 AGENTS.md 생성/리빌드 | `bash scripts/init-agents-md.sh .` |
301
- | `harness-session-start.sh` | SessionStart 훅 — 세션 시작 시 progress 요약 출력 | (자동 — .claude/settings.json 훅) |
302
- | `harness-user-prompt-submit.sh` | UserPromptSubmit 훅 — 모든 프롬프트를 Dispatcher 경유 라우팅 | (자동 — .claude/settings.json 훅) |
281
+ ```
282
+ ┌──────────────┬──────────────┐
283
+ │ Dashboard │ Monitor │
284
+ │ (Progress) ├──────────────┤
285
+ ├──────────────┤ Agent Session
286
+ │ Control ├──────────────┤
287
+ │ (harness>) │ Eval Review │
288
+ └──────────────┴──────────────┘
289
+ ```
303
290
 
304
- ---
291
+ ### Studio v4 (Agent Teams)
305
292
 
306
- ## Tech Stack
293
+ ```bash
294
+ npx walwal-harness v4
295
+ ```
307
296
 
308
- | 영역 | 기술 |
309
- |------|------|
310
- | Backend | NestJS (TypeScript) + MSA |
311
- | Frontend (React) | React 또는 Next.js (TypeScript) + Tailwind CSS |
312
- | Frontend (Flutter) | Flutter (Dart) + Riverpod + Retrofit + ARB i18n |
313
- | E2E Testing (React) | Playwright MCP |
314
- | E2E Testing (Flutter) | flutter analyze + flutter test + 정적 검증 |
315
- | Unit Testing | Jest (BE) + Vitest (FE-React) + flutter test (FE-Flutter) |
316
- | Database | PostgreSQL / SQLite |
297
+ ```
298
+ ┌──────────────┬──────────────┬──────────────┐
299
+ │ │ Progress │ Team 1 │
300
+ │ Main ├──────────────┤ Team 2 │
301
+ (Claude) │ Prompts │ Team 3 │
302
+ └──────────────┴──────────────┴──────────────┘
303
+ ```
317
304
 
318
305
  ---
319
306
 
320
- ## 권장 외부 스킬
321
-
322
- 하네스는 자체 reference 파일로 기본 가이드를 제공하지만, 아래 외부 스킬을 설치하면 품질이 향상됩니다. 초기화 시 자동으로 설치 여부를 체크하고 안내합니다.
307
+ ## 프로젝트 구조
323
308
 
324
- | 스킬 | 설명 | 사용 에이전트 |
325
- |------|------|-------------|
326
- | **vercel** | Vercel/Next.js 배포, 성능 최적화, AI SDK | Generator-FE |
327
- | **web-design-guidelines** | UI/UX 접근성, Web Interface Guidelines | Evaluator-Visual, Generator-FE |
328
- | **taste-skill** | AI 생성 UI 디자인 품질, AI슬롭 감지 | Evaluator-Visual, Generator-FE |
329
- | **supanova-design-skill** | 디자인 시스템 규칙, 시각적 일관성 | Evaluator-Visual, Generator-FE |
309
+ ```
310
+ 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
+ ├── .harness/
324
+ │ ├── config.json # 하네스 설정
325
+ │ ├── HARNESS.md # 상세 가이드
326
+ │ ├── progress.json # 세션 간 상태
327
+ │ ├── progress.log # append-only 히스토리
328
+ │ ├── gotchas/ # 에이전트별 실수 기록
329
+ │ ├── actions/
330
+ │ │ ├── feature-list.json # 기능 목록 + AC
331
+ │ │ ├── feature-queue.json # v4: Feature Queue 상태
332
+ │ │ ├── api-contract.json # API 계약서
333
+ │ │ └── plan.md # 제품 사양
334
+ │ └── archive/ # 완료 스프린트 보관
335
+ └── .claude/
336
+ ├── settings.json # 훅 등록
337
+ └── skills/ # Claude Code 스킬 (8개)
338
+ ```
330
339
 
331
340
  ---
332
341
 
333
- ## Playwright MCP 설정 (React 프로젝트)
342
+ ## Playwright MCP 설정
334
343
 
335
- Evaluator-Functional / Evaluator-Visual이 브라우저 테스트를 수행하려면 Playwright MCP가 필요합니다. `~/.mcp.json`에 추가:
344
+ Evaluator 브라우저 테스트를 수행하려면 Playwright MCP가 필요합니다:
336
345
 
337
346
  ```json
347
+ // ~/.mcp.json
338
348
  {
339
349
  "mcpServers": {
340
350
  "playwright": {
@@ -345,8 +355,6 @@ Evaluator-Functional / Evaluator-Visual이 브라우저 테스트를 수행하
345
355
  }
346
356
  ```
347
357
 
348
- > **Flutter Web (`fe_target=web`) 프로젝트도 Playwright 가 필요합니다** — 컴파일 결과가 일반 웹앱과 동일하므로 React 와 같은 evaluator 를 재사용합니다. **Flutter Mobile/Desktop (`fe_target=mobile`/`desktop`) 프로젝트만** Playwright 없이 `flutter analyze` + `flutter test` 기반으로 동작합니다.
349
-
350
358
  ---
351
359
 
352
360
  ## 트러블슈팅
@@ -354,76 +362,30 @@ Evaluator-Functional / Evaluator-Visual이 브라우저 테스트를 수행하
354
362
  ### Skills가 로드되지 않아요
355
363
 
356
364
  ```bash
357
- # Claude Code 세션을 완전히 종료하고 다시 시작
358
- /exit
359
- # 프로젝트 디렉토리에서 재진입 후 확인
365
+ /exit # Claude Code 세션 종료
366
+ # 프로젝트 디렉토리에서 재진입
360
367
  ```
361
368
 
362
- Claude Code는 세션 시작 시 `.claude/skills/`를 스캔합니다. `npm install` 이후 반드시 세션 재시작이 필요합니다.
363
-
364
- ### Dispatcher가 자동 호출되지 않아요
365
-
366
- `UserPromptSubmit` 훅이 정상적으로 등록되었는지 확인:
369
+ ### 스크립트가 구버전이에요
367
370
 
368
371
  ```bash
369
- cat .claude/settings.json
370
- # hooks.UserPromptSubmit 배열에 harness-user-prompt-submit.sh가 있어야 함
372
+ npx walwal-harness # 코어 스크립트 자동 덮어쓰기
371
373
  ```
372
374
 
373
- 등록이 되었다면:
375
+ ### v4 Team이 "No features ready" 반복
374
376
 
375
377
  ```bash
376
- npx walwal-harness --force
377
- # 재시작
378
+ # Studio를 재시작하면 자동으로 stale in_progress 복구
379
+ npx walwal-harness v4
378
380
  ```
379
381
 
380
- ### 브레인스토밍이 매번 실행돼서 피로해요
382
+ ### Auto-routing 끄기
381
383
 
382
- Brainstormer는 Dispatcher가 "브레인스토밍 필요합니까?" 물을 때만 실행됩니다. **N**으로 답하면 Planner로 직행합니다. 피드백/이터레이션/특정 에이전트 명령에서는 질문 자체가 나오지 않습니다.
383
-
384
- ### Flutter 프로젝트인데 React 에이전트가 실행돼요
385
-
386
- ```bash
387
- # 프로젝트 루트에 pubspec.yaml이 있고 flutter: 키가 존재하는지 확인
388
- grep "flutter:" pubspec.yaml
389
-
390
- # 재스캔
391
- bash scripts/scan-project.sh .
392
- # pipeline.json의 fe_stack + fe_target 값 확인
393
- cat .harness/actions/pipeline.json | jq '.fe_stack, .fe_target'
394
384
  ```
395
-
396
- ### Flutter Web 프로젝트인데 evaluator-functional-flutter (정적 분석) 가 실행돼요
397
-
398
- `fe_target` 이 `web` 으로 감지되지 않아서 발생합니다. 다음 두 가지를 확인:
399
-
400
- ```bash
401
- # 1) Flutter 프로젝트 루트에 web/index.html 이 존재하는가?
402
- ls -la web/index.html
403
- # 없으면 Flutter Web 활성화:
404
- flutter config --enable-web
405
- flutter create --platforms=web .
406
-
407
- # 2) pipeline.json 의 fe_target 값 확인
408
- jq '.fe_target' .harness/actions/pipeline.json
409
- # "mobile" 또는 "unknown" 이면 수동 수정 또는 재스캔
410
- bash scripts/scan-project.sh .
411
- ```
412
-
413
- `fe_target = web` 으로 확정되면 Playwright 기반 `evaluator-functional` + `evaluator-visual` 이 자동 사용됩니다.
414
-
415
- ### Auto-routing을 끄고 싶어요
416
-
417
- ```json
418
- // .harness/config.json
419
- { "behavior": { "auto_route_dispatcher": false } }
385
+ ❯ harness skip 답만 해줘
420
386
  ```
421
387
 
422
- 또는 개별 메시지에서:
423
-
424
- ```
425
- > harness skip 그냥 이것만 답해줘
426
- ```
388
+ 또는 `.harness/config.json`에서 `behavior.auto_route_dispatcher = false`
427
389
 
428
390
  ---
429
391
 
@@ -432,7 +394,7 @@ bash scripts/scan-project.sh .
432
394
  - [Anthropic: Effective Harnesses for Long-Running Agents](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents)
433
395
  - [Anthropic: Harness Design for Long-Running Application Development](https://www.anthropic.com/engineering/harness-design-long-running-apps)
434
396
  - [Claude Code Skills Documentation](https://code.claude.com/docs/en/skills)
435
- - [obra/superpowers](https://github.com/obra/superpowers) — Brainstorming skill 원본 (MIT License)
397
+ - [obra/superpowers](https://github.com/obra/superpowers) — Brainstorming skill (MIT License)
436
398
 
437
399
  ## License
438
400