@graypark/loophaus 3.8.1 → 3.9.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.ko.md +145 -220
- package/README.md +93 -86
- package/dist/README.ko.md +145 -220
- package/dist/README.md +93 -86
- package/dist/bin/loophaus.js +93 -1
- package/dist/package.json +14 -7
- package/package.json +14 -7
package/README.ko.md
CHANGED
|
@@ -10,34 +10,65 @@
|
|
|
10
10
|
<a href="https://github.com/vcz-Gray/loophaus/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="license" /></a>
|
|
11
11
|
<img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg?style=flat-square" alt="node version" />
|
|
12
12
|
<img src="https://img.shields.io/badge/platform-Claude%20Code%20%7C%20Codex%20CLI%20%7C%20Kiro%20CLI-purple.svg?style=flat-square" alt="platform" />
|
|
13
|
-
<img src="https://img.shields.io/badge/tests-
|
|
13
|
+
<img src="https://img.shields.io/badge/tests-359%20passing-brightgreen.svg?style=flat-square" alt="tests" />
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
|
+
<h3 align="center">AI 코딩 에이전트를 자율 루프로 실행 — 매 반복마다 신선한 컨텍스트, PRD 기반 진행 추적, 자동 품질 게이트.</h3>
|
|
17
|
+
|
|
16
18
|
<p align="center">
|
|
17
|
-
<b>코딩 에이전트를 위한 컨트롤 플레인 — Claude Code, Codex CLI, Kiro CLI에서 동작하는 반복형 개발 루프.</b>
|
|
18
|
-
<br/>
|
|
19
19
|
<sub><a href="https://ghuntley.com/ralph/">Geoffrey Huntley의 Ralph Wiggum 기법</a> 기반</sub>
|
|
20
20
|
</p>
|
|
21
21
|
|
|
22
22
|
---
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## 문제
|
|
25
|
+
|
|
26
|
+
AI 코딩 에이전트는 긴 작업에서 어려움을 겪습니다:
|
|
27
|
+
|
|
28
|
+
- **컨텍스트 부패** — 10회 이상 반복하면 에이전트가 혼란에 빠짐
|
|
29
|
+
- **목표 이탈** — 에이전트가 스펙을 잊고 엉뚱한 문제를 해결
|
|
30
|
+
- **품질 신호 부재** — 에이전트가 "완료"라 하지만 테스트는 여전히 실패
|
|
31
|
+
- **토큰 낭비** — 매번 같은 컨텍스트를 다시 설명해야 함
|
|
25
32
|
|
|
26
|
-
|
|
33
|
+
## 해결책
|
|
27
34
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
- **반복마다 신선한 컨텍스트** — 매 사이클마다 디스크에서 PRD + 진행 상황을 읽어, 20회 이상 반복해도 품질 저하 없음
|
|
36
|
+
- **PRD 연동 진행 추적** — `prd.json`에 스토리별 pass/fail 상태 추적, "끝난 것 같다"가 아닌 구조화된 추적
|
|
37
|
+
- **품질 측정과 유지/폐기** — Autoresearch 패턴에서 영감을 받은 개선 루프가 품질(0-100)을 측정하고 퇴보를 되돌림
|
|
38
|
+
- **범용 Stop hook** — 하나의 Node.js hook이 Claude Code, Codex CLI, Kiro CLI 모두에서 동작
|
|
39
|
+
|
|
40
|
+
## 빠른 시작
|
|
34
41
|
|
|
35
|
-
|
|
42
|
+
```bash
|
|
43
|
+
npm install -g @graypark/loophaus
|
|
44
|
+
loophaus install
|
|
45
|
+
```
|
|
36
46
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
> **참고:** `npx @graypark/loophaus install`은 일부 npm 버전에서 bin 해석 캐시 버그로 실패할 수 있습니다. 위의 글로벌 설치 방식을 권장합니다.
|
|
48
|
+
|
|
49
|
+
설치기가 호스트(Claude Code, Codex CLI, Kiro CLI)를 자동 감지하고 stop hook, 커맨드, 스킬을 모두 설정합니다.
|
|
50
|
+
|
|
51
|
+
이후 AI 코딩 세션에서:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
/loop-plan JWT, bcrypt, 로그인 UI를 포함한 사용자 인증 추가
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
그게 전부입니다. 인터뷰가 PRD를 생성하고, 루프를 활성화하고, 스토리별로 구현을 시작합니다.
|
|
58
|
+
|
|
59
|
+
## 안전장치
|
|
60
|
+
|
|
61
|
+
- 매 반복마다 **git 체크포인트** 생성 — 언제든 원자적 되돌리기
|
|
62
|
+
- **최대 반복 제한** (기본 20, 설정 가능)
|
|
63
|
+
- **품질 임계값 = 서킷 브레이커** — score < 80이면 개선 또는 중단
|
|
64
|
+
- **비용 추적**과 정책 적용 (최대 $5, 최대 30분)
|
|
65
|
+
- `loophaus clean`으로 데이터 생명주기 관리
|
|
66
|
+
|
|
67
|
+
## 스크립트로 하면 안 되나요?
|
|
68
|
+
|
|
69
|
+
1. **신선한 컨텍스트 격리** — 20회 반복 후에도 저하 없음; 매 사이클이 퇴화하는 대화가 아닌 디스크에서 시작
|
|
70
|
+
2. **PRD 연동 진행 추적** — 스토리별 pass/fail이 있는 구조화된 `prd.json`, "끝난 것 같다"가 아님
|
|
71
|
+
3. **품질 측정과 유지/폐기** — autoresearch 패턴: 측정, 개선 유지, 퇴보 되돌리기
|
|
41
72
|
|
|
42
73
|
## 동작 원리
|
|
43
74
|
|
|
@@ -72,91 +103,70 @@ AI 에이전트가 연속 루프에서 태스크를 수행합니다. 매 반복
|
|
|
72
103
|
│ │
|
|
73
104
|
│ 모든 스토리 통과? │
|
|
74
105
|
│ → <promise>COMPLETE</promise> │
|
|
106
|
+
│ │
|
|
107
|
+
│ /loop-pulse → 상태 확인 │
|
|
108
|
+
│ /loop-stop → 언제든 취소 │
|
|
75
109
|
└─────────────────────────────────┘
|
|
76
110
|
```
|
|
77
111
|
|
|
78
|
-
## 빠른 시작
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
npm install -g @graypark/loophaus
|
|
82
|
-
loophaus install
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
> **참고:** `npx @graypark/loophaus install`은 일부 npm 버전에서 bin 해석 캐시 버그로 실패할 수 있습니다. 위의 글로벌 설치 방식을 권장합니다.
|
|
86
|
-
|
|
87
|
-
이후 AI 코딩 세션에서:
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
/loop-plan JWT, bcrypt, 로그인 UI를 포함한 사용자 인증 추가
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
그게 전부입니다. 인터뷰가 PRD를 생성하고, 루프를 활성화하고, 스토리별로 구현을 시작합니다.
|
|
94
|
-
|
|
95
112
|
## 커맨드
|
|
96
113
|
|
|
97
|
-
> **Bauhaus** — 형태는 기능을 따른다.
|
|
98
|
-
|
|
99
114
|
| 커맨드 | 설명 |
|
|
100
|
-
|
|
101
|
-
| `/loop-plan` | 인터뷰 → PRD 생성 → 루프
|
|
102
|
-
| `/loop` | 반복 실행 |
|
|
103
|
-
| `/loop-stop` | 루프 중단 |
|
|
104
|
-
| `/loop-pulse` |
|
|
105
|
-
|
|
106
|
-
### `/loop-plan` — 메인 진입점
|
|
107
|
-
|
|
108
|
-
태스크에 대해 인터뷰하고, 적절한 크기의 스토리로 PRD를 생성하고, 루프를 활성화한 다음 즉시 작업을 시작합니다.
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
/loop-plan 프론트엔드와 백엔드에 걸친 인증 모듈 리팩토링
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
**동작 과정:**
|
|
115
|
-
|
|
116
|
-
1. 3~5개의 타겟 질문 (범위, 검증, 병렬성 등)
|
|
117
|
-
2. 적절한 크기와 순서의 스토리가 포함된 `prd.json` 생성
|
|
118
|
-
3. 반복 추적을 위한 `progress.txt` 작성
|
|
119
|
-
4. Stop hook 활성화 및 US-001 구현 시작
|
|
115
|
+
|---------|-------------|
|
|
116
|
+
| `/loop-plan` | 인터뷰 → PRD 생성 → 루프 활성화 |
|
|
117
|
+
| `/loop` | 직접 반복 실행 (PRD가 이미 있을 때) |
|
|
118
|
+
| `/loop-stop` | 활성 루프 즉시 중단 |
|
|
119
|
+
| `/loop-pulse` | 현재 루프 상태, 반복 횟수, 진행 상황 확인 |
|
|
120
120
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
```
|
|
124
|
-
/loop-plan 사용자 API에 페이지네이션 추가, 바로 실행
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### `/loop` — 직접 루프
|
|
128
|
-
|
|
129
|
-
이미 PRD가 있거나 직접 프롬프트를 작성하고 싶을 때:
|
|
121
|
+
## Quality Loop (v3.4.0+)
|
|
130
122
|
|
|
131
|
-
|
|
132
|
-
/loop "prd.json 읽기, 다음 스토리 선택, 구현, 검증, 커밋" --max-iterations 20 --completion-promise "COMPLETE"
|
|
133
|
-
```
|
|
123
|
+
v3.4.0에서 도입된 **Quality Loop** — [karpathy/autoresearch](https://github.com/karpathy/autoresearch)의 실험-측정-유지/폐기 패턴을 코드 품질 개선에 적용.
|
|
134
124
|
|
|
135
|
-
|
|
125
|
+
테스트가 통과하면 "완료"로 처리하던 기존 방식 대신, `/loop-plan`이 이제 **품질을 측정**(0-100)하고 임계값을 충족할 때까지 **반복 개선**합니다.
|
|
136
126
|
|
|
137
127
|
```
|
|
138
|
-
|
|
128
|
+
Phase 4: 구현
|
|
129
|
+
↓
|
|
130
|
+
Phase 5: 측정 (score 0-100)
|
|
131
|
+
↓ ↑
|
|
132
|
+
Phase 6: 개선 루프
|
|
133
|
+
점수 향상? → 유지 (commit)
|
|
134
|
+
점수 하락? → 폐기 (git reset)
|
|
135
|
+
최대 시도 도달? → 다음으로
|
|
136
|
+
↓
|
|
137
|
+
Phase 7: 보고서 (품질 점수 포함)
|
|
139
138
|
```
|
|
140
139
|
|
|
141
|
-
|
|
140
|
+
| autoresearch | loophaus |
|
|
141
|
+
|-------------|----------|
|
|
142
|
+
| `val_bpb` | quality score (가중치: tests, typecheck, lint, verify, diff, custom) |
|
|
143
|
+
| `results.tsv` | `.loophaus/results.tsv` |
|
|
144
|
+
| keep → advance | 점수 향상 → commit |
|
|
145
|
+
| discard → revert | 점수 하락 → `git reset --hard` |
|
|
146
|
+
| NEVER STOP | 스토리당 최대 3회 시도 (설정 가능) |
|
|
142
147
|
|
|
143
|
-
|
|
148
|
+
### 설정
|
|
144
149
|
|
|
145
|
-
```
|
|
146
|
-
|
|
150
|
+
```json
|
|
151
|
+
{
|
|
152
|
+
"qualityThreshold": 80,
|
|
153
|
+
"maxRefineAttempts": 3,
|
|
154
|
+
"qualityConfig": {
|
|
155
|
+
"weights": { "tests": 30, "typecheck": 25, "lint": 15, "verify": 15, "diff": 10, "custom": 5 }
|
|
156
|
+
}
|
|
157
|
+
}
|
|
147
158
|
```
|
|
148
159
|
|
|
149
160
|
## 플랫폼 지원
|
|
150
161
|
|
|
151
|
-
|
|
162
|
+
| | Claude Code | Codex CLI | Kiro CLI |
|
|
163
|
+
|---|---|---|---|
|
|
164
|
+
| **Stop Hook** | Node.js | Node.js | Node.js |
|
|
165
|
+
| **설치 대상** | Plugin cache | `hooks.json` | `agents/` + `steering/` |
|
|
166
|
+
| **커맨드** | `/reload-plugins` | native | steering manual mode |
|
|
167
|
+
| **멀티 에이전트** | Agent tool | subprocesses | steering agents |
|
|
152
168
|
|
|
153
|
-
|
|
154
|
-
| --- | --- | --- | --- |
|
|
155
|
-
| 자동 감지 설치 | `~/.claude/` | `~/.codex/` | `~/.kiro/` |
|
|
156
|
-
| Stop hook | Node.js 기반 | Node.js 기반 | Node.js 기반 |
|
|
157
|
-
| 루프 실행 | Skill tool | 네이티브 커맨드 | 네이티브 커맨드 |
|
|
158
|
-
| 멀티 에이전트 | Agent tool | 서브에이전트 | 서브에이전트 |
|
|
159
|
-
| 상태 파일 | `.loophaus/state.json` | `.loophaus/state.json` | `.loophaus/state.json` |
|
|
169
|
+
세 플랫폼 모두 같은 코어 엔진(`core/engine.ts`)과 상태 저장소(`store/state-store.ts`)를 공유합니다. 플랫폼별 어댑터가 차이를 처리합니다.
|
|
160
170
|
|
|
161
171
|
Windows에서도 PowerShell/CMD 기준으로 `install`, `upgrade`, `/loop` 초기화가 동작합니다. Git Bash나 WSL은 선택사항입니다.
|
|
162
172
|
|
|
@@ -181,94 +191,32 @@ npx @graypark/loophaus install
|
|
|
181
191
|
|
|
182
192
|
### 호스트별 설치
|
|
183
193
|
|
|
184
|
-
특정 호스트만 대상으로 설치:
|
|
185
|
-
|
|
186
194
|
```bash
|
|
187
|
-
loophaus install --claude
|
|
188
|
-
loophaus install --host codex-cli
|
|
189
|
-
loophaus install --kiro
|
|
195
|
+
loophaus install --host claude-code
|
|
196
|
+
loophaus install --host codex-cli
|
|
197
|
+
loophaus install --host kiro-cli
|
|
190
198
|
```
|
|
191
199
|
|
|
200
|
+
### 플래그
|
|
201
|
+
|
|
192
202
|
| 플래그 | 설명 |
|
|
193
|
-
|
|
194
|
-
| `--host <name>` | 특정 호스트 대상 지정 |
|
|
195
|
-
| `--claude` | `--host claude-code` 축약형 |
|
|
196
|
-
| `--kiro` | `--host kiro-cli` 축약형 |
|
|
197
|
-
| `--local` | 프로젝트 로컬 `.codex/`에 설치 (Codex만) |
|
|
198
|
-
| `--dry-run` | 변경 없이 미리보기 |
|
|
203
|
+
|------|-------------|
|
|
199
204
|
| `--force` | 기존 파일 덮어쓰기 |
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
<summary>설치되는 항목</summary>
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
~/.codex/ # (또는 ~/.claude/, ~/.kiro/)
|
|
206
|
-
├── plugins/loophaus/ # 핵심 플러그인 파일
|
|
207
|
-
├── hooks.json # Stop hook (기존 설정과 병합)
|
|
208
|
-
└── skills/
|
|
209
|
-
├── loop/ # /loop — 루프 실행
|
|
210
|
-
├── loop-plan/ # /loop-plan — PRD 생성 + 루프 시작
|
|
211
|
-
├── loop-stop/ # /loop-stop — 루프 중단
|
|
212
|
-
└── loop-pulse/ # /loop-pulse — 상태 확인
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
</details>
|
|
205
|
+
| `--dry-run` | 변경 없이 미리보기 |
|
|
206
|
+
| `--local` | 프로젝트 로컬 설치 (Codex CLI만) |
|
|
216
207
|
|
|
217
208
|
## CLI
|
|
218
209
|
|
|
219
210
|
```bash
|
|
220
|
-
loophaus install
|
|
221
|
-
loophaus status
|
|
222
|
-
loophaus stats
|
|
223
|
-
loophaus quality
|
|
224
|
-
loophaus
|
|
225
|
-
loophaus
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
v3.4.0에서 도입된 **Quality Loop** — [karpathy/autoresearch](https://github.com/karpathy/autoresearch)의 실험→측정→유지/폐기 패턴을 코드 품질 개선에 적용.
|
|
231
|
-
|
|
232
|
-
테스트가 통과하면 "완료"로 처리하던 기존 방식 대신, `/loop-plan`이 이제 **품질을 측정**(0-100)하고 임계값을 충족할 때까지 **반복 개선**합니다.
|
|
233
|
-
|
|
234
|
-
```
|
|
235
|
-
Phase 4: 구현
|
|
236
|
-
↓
|
|
237
|
-
Phase 5: 측정 (score 0-100)
|
|
238
|
-
↓ ↑
|
|
239
|
-
Phase 6: 개선 루프
|
|
240
|
-
점수 향상? → 유지 (commit)
|
|
241
|
-
점수 하락? → 폐기 (git reset)
|
|
242
|
-
최대 시도 도달? → 다음으로
|
|
243
|
-
↓
|
|
244
|
-
Phase 7: 보고서 (품질 점수 포함)
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
| autoresearch | loophaus |
|
|
248
|
-
|-------------|----------|
|
|
249
|
-
| `val_bpb` | quality score (가중치: tests, typecheck, lint, verify, diff, custom) |
|
|
250
|
-
| `results.tsv` | `.loophaus/results.tsv` |
|
|
251
|
-
| keep → advance | 점수 향상 → commit |
|
|
252
|
-
| discard → revert | 점수 하락 → `git reset --hard` |
|
|
253
|
-
| NEVER STOP | 스토리당 최대 3회 시도 (설정 가능) |
|
|
254
|
-
|
|
255
|
-
### 설정
|
|
256
|
-
|
|
257
|
-
```json
|
|
258
|
-
{
|
|
259
|
-
"qualityThreshold": 80,
|
|
260
|
-
"maxRefineAttempts": 3,
|
|
261
|
-
"qualityConfig": {
|
|
262
|
-
"weights": { "tests": 30, "typecheck": 25, "lint": 15, "verify": 15, "diff": 10, "custom": 5 }
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
### CLI
|
|
268
|
-
|
|
269
|
-
```bash
|
|
270
|
-
loophaus quality # 전체 스토리 품질 측정
|
|
271
|
-
loophaus quality --story US-001 # 특정 스토리 품질 측정
|
|
211
|
+
loophaus install # 자동 감지 설치
|
|
212
|
+
loophaus status # 설치 상태 확인
|
|
213
|
+
loophaus stats # 루프 실행 통계
|
|
214
|
+
loophaus quality # 품질 점수 측정
|
|
215
|
+
loophaus demo # 대화형 데모 실행
|
|
216
|
+
loophaus config # 설정 확인/수정
|
|
217
|
+
loophaus update-check # 새 버전 확인
|
|
218
|
+
loophaus upgrade # 최신 버전으로 업그레이드
|
|
219
|
+
loophaus uninstall # 제거
|
|
272
220
|
```
|
|
273
221
|
|
|
274
222
|
## 아키텍처
|
|
@@ -276,41 +224,41 @@ loophaus quality --story US-001 # 특정 스토리 품질 측정
|
|
|
276
224
|
```
|
|
277
225
|
loophaus/
|
|
278
226
|
├── bin/
|
|
279
|
-
│ ├── loophaus.ts
|
|
280
|
-
│ ├── install.ts
|
|
281
|
-
│ └── uninstall.ts
|
|
227
|
+
│ ├── loophaus.ts # CLI 진입점
|
|
228
|
+
│ ├── install.ts # 크로스 플랫폼 설치기
|
|
229
|
+
│ └── uninstall.ts # 제거기
|
|
282
230
|
├── core/
|
|
283
|
-
│ ├── types.ts
|
|
284
|
-
│ ├── engine.ts
|
|
285
|
-
│ ├── event-logger.ts
|
|
286
|
-
│ ├── quality-scorer.ts
|
|
287
|
-
│ ├── refine-loop.ts
|
|
288
|
-
│ ├── validate.ts
|
|
289
|
-
│ ├── policy.ts
|
|
290
|
-
│ ├── cost-tracker.ts
|
|
291
|
-
│ ├── trace-analyzer.ts
|
|
292
|
-
│ ├── worktree.ts
|
|
293
|
-
│ ├── merge-strategy.ts
|
|
294
|
-
│ ├── parallel-runner.ts
|
|
295
|
-
│ ├── session.ts
|
|
296
|
-
│ └── loop-registry.ts
|
|
231
|
+
│ ├── types.ts # 공유 TypeScript 인터페이스
|
|
232
|
+
│ ├── engine.ts # 핵심 루프 엔진
|
|
233
|
+
│ ├── event-logger.ts # 이벤트 추적
|
|
234
|
+
│ ├── quality-scorer.ts # 품질 측정 (점수, 평가, 로깅)
|
|
235
|
+
│ ├── refine-loop.ts # 유지/폐기 개선 로직
|
|
236
|
+
│ ├── validate.ts # PRD + 상태 스키마 검증
|
|
237
|
+
│ ├── policy.ts # 루프 정책 평가
|
|
238
|
+
│ ├── cost-tracker.ts # 토큰 비용 추정
|
|
239
|
+
│ ├── trace-analyzer.ts # 트레이스 분석 + 비교
|
|
240
|
+
│ ├── worktree.ts # Git 워크트리 관리
|
|
241
|
+
│ ├── merge-strategy.ts # 병렬 머지 전략
|
|
242
|
+
│ ├── parallel-runner.ts # 멀티 워크트리 오케스트레이션
|
|
243
|
+
│ ├── session.ts # 체크포인트 / 세션 관리
|
|
244
|
+
│ └── loop-registry.ts # 멀티 루프 레지스트리
|
|
297
245
|
├── store/
|
|
298
|
-
│ └── state-store.ts
|
|
246
|
+
│ └── state-store.ts # 루프 상태 저장소
|
|
299
247
|
├── lib/
|
|
300
|
-
│ ├── paths.ts
|
|
301
|
-
│ └── stop-hook-core.ts
|
|
248
|
+
│ ├── paths.ts # 크로스 플랫폼 경로
|
|
249
|
+
│ └── stop-hook-core.ts # 테스트 가능한 hook 로직
|
|
302
250
|
├── platforms/
|
|
303
|
-
│ ├── claude-code/installer.mjs
|
|
304
|
-
│ ├── codex-cli/installer.mjs
|
|
305
|
-
│ └── kiro-cli/installer.mjs
|
|
251
|
+
│ ├── claude-code/installer.mjs # 플러그인 캐시 설치기
|
|
252
|
+
│ ├── codex-cli/installer.mjs # hooks.json 설치기
|
|
253
|
+
│ └── kiro-cli/installer.mjs # agents/ + steering/ 설치기
|
|
306
254
|
├── hooks/
|
|
307
|
-
│ └── stop-hook.mjs
|
|
308
|
-
├── commands/
|
|
309
|
-
├── skills/
|
|
255
|
+
│ └── stop-hook.mjs # 범용 Stop hook (Node.js)
|
|
256
|
+
├── commands/ # 슬래시 커맨드 정의
|
|
257
|
+
├── skills/ # 플랫폼별 스킬 정의
|
|
310
258
|
├── .claude-plugin/
|
|
311
|
-
│ └── plugin.json
|
|
312
|
-
├── dist/
|
|
313
|
-
└── tests/
|
|
259
|
+
│ └── plugin.json # Claude Code 마켓플레이스 매니페스트
|
|
260
|
+
├── dist/ # 컴파일 출력 (tsc)
|
|
261
|
+
└── tests/ # 359개 테스트 케이스 (vitest)
|
|
314
262
|
```
|
|
315
263
|
|
|
316
264
|
## PRD 포맷
|
|
@@ -340,33 +288,7 @@ loophaus는 `prd.json` 포맷을 사용합니다:
|
|
|
340
288
|
}
|
|
341
289
|
```
|
|
342
290
|
|
|
343
|
-
각 스토리는 **한 번의 반복**(하나의 컨텍스트 윈도우)에서 완료할 수 있는 크기입니다. 의존성은 priority 순으로 정렬됩니다.
|
|
344
|
-
|
|
345
|
-
## 멀티 에이전트 오케스트레이션
|
|
346
|
-
|
|
347
|
-
여러 서비스에 걸치거나 광범위한 탐색이 필요한 태스크에 사용합니다:
|
|
348
|
-
|
|
349
|
-
```
|
|
350
|
-
Phase 1 — 병렬 스캔 (3 에이전트):
|
|
351
|
-
├── 에이전트 "fe-scan": frontend/** 인증 취약점 탐색
|
|
352
|
-
├── 에이전트 "be-scan": backend/** 인증 취약점 탐색
|
|
353
|
-
└── 에이전트 "db-scan": 스키마의 누락된 제약조건 검토
|
|
354
|
-
|
|
355
|
-
Phase 2 — 순차 수정 (루프):
|
|
356
|
-
└── 병합된 발견사항 읽기 → 스토리별로 수정 구현
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
인터뷰 과정에서 병렬성 잠재력을 점수 매트릭스로 자동 평가합니다.
|
|
360
|
-
|
|
361
|
-
5가지 오케스트레이션 패턴:
|
|
362
|
-
|
|
363
|
-
| 패턴 | 사용 시점 |
|
|
364
|
-
| --- | --- |
|
|
365
|
-
| 병렬 탐색 → 순차 구현 | 대규모 코드베이스 조사 후 수정 |
|
|
366
|
-
| 소유권 분할 | 멀티 서비스 변경 (fe + be + auth) |
|
|
367
|
-
| Fan-Out / Fan-In | 병렬 감사 (보안 + 성능 + 접근성) |
|
|
368
|
-
| 정찰 후 실행 | 익숙하지 않은 코드베이스 |
|
|
369
|
-
| 체크포인트가 있는 파이프라인 | 다단계 변환 |
|
|
291
|
+
각 스토리는 **한 번의 반복**(하나의 컨텍스트 윈도우)에서 완료할 수 있는 크기입니다. 의존성은 priority 순으로 정렬됩니다. 루프 엔진이 `passes`가 `false`인 다음 스토리를 선택해 검증이 성공할 때까지 작업합니다.
|
|
370
292
|
|
|
371
293
|
## 업데이트
|
|
372
294
|
|
|
@@ -391,10 +313,13 @@ npm uninstall -g @graypark/loophaus
|
|
|
391
313
|
## 개발
|
|
392
314
|
|
|
393
315
|
```bash
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
npm
|
|
397
|
-
|
|
316
|
+
git clone https://github.com/vcz-Gray/loophaus.git
|
|
317
|
+
cd loophaus
|
|
318
|
+
npm install
|
|
319
|
+
npm test # 359개 테스트
|
|
320
|
+
npm run typecheck # TypeScript strict 모드
|
|
321
|
+
npm run build # dist/로 컴파일
|
|
322
|
+
npx vitest # watch 모드
|
|
398
323
|
```
|
|
399
324
|
|
|
400
325
|
## 라이선스
|