@wooojin/forgen 0.2.1 → 0.3.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.
Files changed (145) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.ko.md +25 -14
  3. package/README.md +61 -17
  4. package/agents/analyst.md +48 -4
  5. package/agents/architect.md +39 -4
  6. package/agents/code-reviewer.md +107 -77
  7. package/agents/critic.md +47 -4
  8. package/agents/debugger.md +46 -4
  9. package/agents/designer.md +40 -4
  10. package/agents/executor.md +112 -30
  11. package/agents/explore.md +45 -5
  12. package/agents/git-master.md +48 -4
  13. package/agents/planner.md +121 -18
  14. package/agents/solution-evolver.md +115 -0
  15. package/agents/test-engineer.md +58 -4
  16. package/agents/verifier.md +92 -77
  17. package/commands/architecture-decision.md +127 -258
  18. package/commands/calibrate.md +225 -0
  19. package/commands/code-review.md +163 -178
  20. package/commands/compound.md +127 -68
  21. package/commands/deep-interview.md +212 -110
  22. package/commands/docker.md +68 -178
  23. package/commands/forge-loop.md +215 -0
  24. package/commands/learn.md +231 -0
  25. package/commands/retro.md +215 -0
  26. package/commands/ship.md +277 -0
  27. package/dist/cli.js +25 -9
  28. package/dist/core/auto-compound-runner.js +14 -0
  29. package/dist/core/config-injector.d.ts +2 -1
  30. package/dist/core/config-injector.js +2 -1
  31. package/dist/core/dashboard.d.ts +17 -0
  32. package/dist/core/dashboard.js +158 -2
  33. package/dist/core/harness.d.ts +6 -1
  34. package/dist/core/harness.js +75 -19
  35. package/dist/core/paths.d.ts +31 -1
  36. package/dist/core/paths.js +43 -2
  37. package/dist/core/spawn.d.ts +3 -2
  38. package/dist/core/spawn.js +27 -8
  39. package/dist/core/types.d.ts +34 -0
  40. package/dist/engine/compound-lifecycle.d.ts +4 -3
  41. package/dist/engine/compound-lifecycle.js +91 -46
  42. package/dist/engine/learn-cli.d.ts +1 -0
  43. package/dist/engine/learn-cli.js +182 -0
  44. package/dist/engine/meta-learning/adaptive-thresholds.d.ts +20 -0
  45. package/dist/engine/meta-learning/adaptive-thresholds.js +126 -0
  46. package/dist/engine/meta-learning/extraction-tuner.d.ts +15 -0
  47. package/dist/engine/meta-learning/extraction-tuner.js +99 -0
  48. package/dist/engine/meta-learning/matcher-weight-tuner.d.ts +21 -0
  49. package/dist/engine/meta-learning/matcher-weight-tuner.js +151 -0
  50. package/dist/engine/meta-learning/runner.d.ts +14 -0
  51. package/dist/engine/meta-learning/runner.js +90 -0
  52. package/dist/engine/meta-learning/scope-promoter.d.ts +21 -0
  53. package/dist/engine/meta-learning/scope-promoter.js +84 -0
  54. package/dist/engine/meta-learning/session-quality-scorer.d.ts +61 -0
  55. package/dist/engine/meta-learning/session-quality-scorer.js +166 -0
  56. package/dist/engine/meta-learning/types.d.ts +114 -0
  57. package/dist/engine/meta-learning/types.js +43 -0
  58. package/dist/engine/solution-candidate.d.ts +30 -0
  59. package/dist/engine/solution-candidate.js +124 -0
  60. package/dist/engine/solution-fitness.d.ts +52 -0
  61. package/dist/engine/solution-fitness.js +95 -0
  62. package/dist/engine/solution-fixup.d.ts +30 -0
  63. package/dist/engine/solution-fixup.js +116 -0
  64. package/dist/engine/solution-format.d.ts +10 -2
  65. package/dist/engine/solution-format.js +287 -57
  66. package/dist/engine/solution-index.d.ts +1 -1
  67. package/dist/engine/solution-index.js +10 -0
  68. package/dist/engine/solution-matcher.d.ts +7 -1
  69. package/dist/engine/solution-matcher.js +137 -37
  70. package/dist/engine/solution-outcomes.d.ts +70 -0
  71. package/dist/engine/solution-outcomes.js +242 -0
  72. package/dist/engine/solution-quarantine.d.ts +36 -0
  73. package/dist/engine/solution-quarantine.js +172 -0
  74. package/dist/engine/solution-weakness.d.ts +45 -0
  75. package/dist/engine/solution-weakness.js +225 -0
  76. package/dist/engine/solution-writer.d.ts +5 -0
  77. package/dist/engine/solution-writer.js +18 -0
  78. package/dist/fgx.js +12 -8
  79. package/dist/hooks/context-guard.d.ts +5 -0
  80. package/dist/hooks/context-guard.js +118 -2
  81. package/dist/hooks/hooks-generator.d.ts +3 -0
  82. package/dist/hooks/hooks-generator.js +23 -6
  83. package/dist/hooks/keyword-detector.js +16 -100
  84. package/dist/hooks/post-tool-failure.js +7 -0
  85. package/dist/hooks/skill-injector.d.ts +4 -3
  86. package/dist/hooks/skill-injector.js +6 -4
  87. package/dist/hooks/solution-injector.js +20 -0
  88. package/dist/host/codex-adapter.d.ts +10 -0
  89. package/dist/host/codex-adapter.js +154 -0
  90. package/dist/mcp/solution-reader.d.ts +5 -5
  91. package/dist/mcp/solution-reader.js +34 -24
  92. package/dist/mcp/tools.js +8 -0
  93. package/dist/services/session.d.ts +19 -0
  94. package/dist/services/session.js +62 -0
  95. package/hooks/hooks.json +2 -2
  96. package/package.json +2 -1
  97. package/skills/architecture-decision/SKILL.md +113 -257
  98. package/skills/calibrate/SKILL.md +207 -0
  99. package/skills/code-review/SKILL.md +151 -178
  100. package/skills/compound/SKILL.md +126 -68
  101. package/skills/deep-interview/SKILL.md +210 -110
  102. package/skills/docker/SKILL.md +57 -179
  103. package/skills/forge-loop/SKILL.md +198 -0
  104. package/skills/learn/SKILL.md +216 -0
  105. package/skills/retro/SKILL.md +199 -0
  106. package/skills/ship/SKILL.md +259 -0
  107. package/agents/code-simplifier.md +0 -197
  108. package/agents/performance-reviewer.md +0 -172
  109. package/agents/qa-tester.md +0 -158
  110. package/agents/refactoring-expert.md +0 -168
  111. package/agents/scientist.md +0 -144
  112. package/agents/security-reviewer.md +0 -137
  113. package/agents/writer.md +0 -184
  114. package/commands/api-design.md +0 -268
  115. package/commands/ci-cd.md +0 -270
  116. package/commands/database.md +0 -263
  117. package/commands/debug-detective.md +0 -99
  118. package/commands/documentation.md +0 -276
  119. package/commands/ecomode.md +0 -51
  120. package/commands/frontend.md +0 -271
  121. package/commands/git-master.md +0 -90
  122. package/commands/incident-response.md +0 -292
  123. package/commands/migrate.md +0 -101
  124. package/commands/performance.md +0 -288
  125. package/commands/refactor.md +0 -105
  126. package/commands/security-review.md +0 -288
  127. package/commands/specify.md +0 -128
  128. package/commands/tdd.md +0 -183
  129. package/commands/testing-strategy.md +0 -265
  130. package/skills/api-design/SKILL.md +0 -262
  131. package/skills/ci-cd/SKILL.md +0 -264
  132. package/skills/database/SKILL.md +0 -257
  133. package/skills/debug-detective/SKILL.md +0 -95
  134. package/skills/documentation/SKILL.md +0 -270
  135. package/skills/ecomode/SKILL.md +0 -46
  136. package/skills/frontend/SKILL.md +0 -265
  137. package/skills/git-master/SKILL.md +0 -86
  138. package/skills/incident-response/SKILL.md +0 -286
  139. package/skills/migrate/SKILL.md +0 -96
  140. package/skills/performance/SKILL.md +0 -282
  141. package/skills/refactor/SKILL.md +0 -100
  142. package/skills/security-review/SKILL.md +0 -282
  143. package/skills/specify/SKILL.md +0 -122
  144. package/skills/tdd/SKILL.md +0 -178
  145. package/skills/testing-strategy/SKILL.md +0 -260
@@ -1,6 +1,17 @@
1
1
  ---
2
2
  name: docker
3
- description: This skill should be used when the user asks to "docker,container,컨테이너,dockerfile,도커,docker-compose". Containerization with Docker, Dockerfile optimization, and compose configuration
3
+ description: This skill should be used when the user asks to "docker,container,컨테이너,dockerfile,도커,docker-compose". Docker 컨테이너화 -- Dockerfile 최적화, Compose 구성, 보안 강화
4
+ argument-hint: "[컨테이너화 대상]"
5
+ model: sonnet
6
+ allowed-tools:
7
+ - Read
8
+ - Grep
9
+ - Glob
10
+ - Bash
11
+ - Write
12
+ - Edit
13
+ - mcp__forgen-compound__compound-search
14
+ - mcp__forgen-compound__compound-read
4
15
  triggers:
5
16
  - "docker"
6
17
  - "container"
@@ -9,7 +20,6 @@ triggers:
9
20
  - "도커"
10
21
  - "docker-compose"
11
22
  ---
12
- <!-- forgen-managed -->
13
23
 
14
24
  <Purpose>
15
25
  Docker를 활용한 컨테이너화를 체계적으로 수행합니다.
@@ -17,107 +27,35 @@ Docker를 활용한 컨테이너화를 체계적으로 수행합니다.
17
27
  Docker Compose 구성, 헬스 체크까지 컨테이너 라이프사이클 전체를 다룹니다.
18
28
  </Purpose>
19
29
 
20
- <Steps>
21
- 1. **의존성 분석**: 애플리케이션의 런타임 요구사항을 파악합니다
22
- - 런타임 환경 (Node.js, Python, Go 등)
23
- - 시스템 의존성 (네이티브 바이너리, 라이브러리)
24
- - 환경 변수 목록 및 기본값
25
- - 포트 매핑 (애플리케이션 포트, 디버그 포트)
26
- - 볼륨 마운트 필요 사항 (데이터 영속성, 설정 파일)
27
- - 외부 서비스 의존성 (DB, Redis, 메시지 큐)
28
-
29
- 2. **Dockerfile 작성**: 최적화된 Dockerfile을 구성합니다
30
- - 베이스 이미지 선택 (alpine vs slim vs distroless)
31
- - 멀티스테이지 빌드 적용 (빌드 스테이지 / 런타임 스테이지)
32
- - 레이어 캐싱 최적화 (변경 빈도 낮은 것부터 순서)
33
- * 시스템 의존성 설치
34
- * package.json / lockfile 복사 + npm install
35
- * 소스 코드 복사 + 빌드
36
- - .dockerignore 설정 (node_modules, .git, 테스트 파일)
37
- - 비루트 사용자 설정 (보안)
38
- - 시그널 핸들링 (SIGTERM graceful shutdown)
39
- - HEALTHCHECK 명령 설정
40
-
41
- 3. **이미지 최적화**: 이미지 크기와 보안을 개선합니다
42
- - 레이어 수 최소화 (RUN 명령 결합)
43
- - 불필요한 파일 제거 (빌드 도구, 캐시, 문서)
44
- - 프로덕션 의존성만 설치 (--omit=dev)
45
- - 이미지 크기 측정 및 목표 설정
46
- - 보안 스캔 (Trivy, Docker Scout)
47
- - 이미지 태깅 전략 (semver, git SHA, latest)
30
+ <Compound_Integration>
31
+ ## 시작 전: 이전 Docker 구성 패턴 검색
48
32
 
49
- 4. **Docker Compose 구성**: 멀티 컨테이너 환경을 정의합니다
50
- - 서비스 정의 (app, db, cache, proxy)
51
- - 네트워크 구성 (서비스 간 통신)
52
- - 볼륨 정의 (데이터 영속성)
53
- - 환경 변수 관리 (.env 파일, 인라인)
54
- - 의존성 순서 (depends_on + healthcheck)
55
- - 개발/프로덕션 오버라이드 분리
56
- - 리소스 제한 설정 (CPU, 메모리)
57
-
58
- 5. **헬스 체크 및 모니터링**: 컨테이너 상태를 관리합니다
59
- - HEALTHCHECK 엔드포인트 구현 (/health, /ready)
60
- - Liveness probe vs Readiness probe 구분
61
- - 로그 수집 구성 (stdout/stderr → 로그 시스템)
62
- - 메트릭 노출 (Prometheus 엔드포인트)
63
- - Graceful shutdown 구현 (SIGTERM 처리)
64
- - 재시작 정책 설정 (restart: unless-stopped)
65
- </Steps>
66
-
67
- ## 에이전트 위임
68
-
69
- `executor` 에이전트(Sonnet 모델)에 위임하여 Docker 구성을 구현합니다:
33
+ 컨테이너화를 시작하기 전에 compound-search MCP 도구로 유사한 런타임/애플리케이션의 과거 Docker 구성을 검색합니다.
70
34
 
71
35
  ```
72
- Agent(
73
- subagent_type="executor",
74
- model="sonnet",
75
- prompt="DOCKER TASK
76
-
77
- Docker 컨테이너화를 구현하세요.
78
-
79
- Application: [애플리케이션 설명]
80
- Runtime: [Node.js / Python / Go / etc.]
81
- Services: [필요한 외부 서비스 목록]
82
-
83
- Docker Checklist:
84
- 1. Dockerfile 작성 (멀티스테이지, 최적화)
85
- 2. .dockerignore 설정
86
- 3. Docker Compose 구성 (개발/프로덕션)
87
- 4. 헬스 체크 설정
88
- 5. 보안 설정 (비루트 사용자, 이미지 스캔)
89
- 6. 볼륨 및 네트워크 구성
90
-
91
- Output: Docker 구성 파일 및 문서:
92
- - Dockerfile
93
- - .dockerignore
94
- - docker-compose.yml (dev/prod)
95
- - 이미지 크기 리포트
96
- - 실행 명령 가이드"
97
- )
36
+ compound-search("[런타임명 또는 애플리케이션 타입 키워드]")
37
+ compound-search("Docker 최적화")
98
38
  ```
99
39
 
100
- ## External Consultation (Optional)
101
-
102
- executor 에이전트는 교차 검증을 위해 Claude Task 에이전트에 자문할 수 있습니다.
103
-
104
- ### Protocol
105
- 1. **자체 Docker 구성을 먼저 완료** -- 독립적으로 구현
106
- 2. **검증을 위한 자문** -- Claude Task 에이전트를 통해 구성 교차 확인
107
- 3. **비판적 평가** -- 외부 제안을 맹목적으로 수용하지 않음
108
- 4. **우아한 폴백** -- 위임이 불가능할 경우 절대 차단하지 않음
40
+ 검색 결과가 있으면 의존성 분석 단계 전에 표시합니다:
41
+ ```
42
+ 이전 Docker 구성 패턴:
43
+ - [애플리케이션명]: [베이스 이미지] → 최종 크기 [N]MB (날짜: YYYY-MM-DD)
44
+ - 주요 최적화: [레이어 전략, 보안 설정 등]
45
+ - 주의사항: [이전에 발견된 문제나 트릭]
46
+ ```
109
47
 
110
- ### 자문이 필요한 경우
111
- - 복잡한 멀티스테이지 빌드
112
- - 프로덕션 수준의 보안 강화
113
- - 오케스트레이션 (Kubernetes 연동)
114
- - 네이티브 의존성이 있는 이미지 최적화
48
+ 이전 구성을 출발점으로 삼아 중복 탐색을 줄이고, 검증된 패턴을 재사용합니다.
49
+ 완료 주요 최적화 내용과 이미지 크기를 compound에 기록합니다.
50
+ </Compound_Integration>
115
51
 
116
- ### 자문을 생략하는 경우
117
- - 단순 Node.js/Python 컨테이너화
118
- - 개발 환경용 Docker Compose
119
- - 알려진 이미지 패턴
120
- - 기존 Dockerfile의 경미한 수정
52
+ <Steps>
53
+ 1. **의존성 분석**: 런타임 환경, 시스템 의존성, 포트, 볼륨, 외부 서비스
54
+ 2. **Dockerfile 작성**: 멀티스테이지, 레이어 캐싱, 비루트 사용자, HEALTHCHECK
55
+ 3. **이미지 최적화**: 레이어 최소화, 프로덕션 의존성만, 보안 스캔, 크기 측정
56
+ 4. **Docker Compose 구성**: 서비스, 네트워크, 볼륨, 환경 변수, 오버라이드
57
+ 5. **헬스 체크 및 모니터링**: probe, 로그 수집, graceful shutdown, 재시작 정책
58
+ </Steps>
121
59
 
122
60
  ## Docker 체크리스트
123
61
 
@@ -129,11 +67,12 @@ executor 에이전트는 교차 검증을 위해 Claude Task 에이전트에 자
129
67
  - [ ] 레이어 캐싱이 최적화됨
130
68
  - [ ] HEALTHCHECK가 설정됨
131
69
 
132
- ### 보안 (4개)
70
+ ### 보안 (5개)
133
71
  - [ ] 이미지 취약점 스캔 완료
134
72
  - [ ] 최소 권한 원칙 적용 (비루트, 읽기 전용 파일시스템)
135
- - [ ] 시크릿이 이미지에 포함되지 않음
73
+ - [ ] 시크릿이 이미지에 포함되지 않음 (ENV, ARG, COPY 모두 확인)
136
74
  - [ ] 불필요한 도구/패키지가 제거됨
75
+ - [ ] 빌드 시 민감 레이어 캐시 방지
137
76
 
138
77
  ### 운영 (4개)
139
78
  - [ ] Graceful shutdown이 구현됨 (SIGTERM)
@@ -154,7 +93,28 @@ executor 에이전트는 교차 검증을 위해 Claude Task 에이전트에 자
154
93
  | Node.js | < 150MB | node:20-alpine |
155
94
  | Python | < 200MB | python:3.12-slim |
156
95
  | Go | < 30MB | gcr.io/distroless/static |
157
- | Rust | < 30MB | debian:bookworm-slim (빌드) + scratch (런타임) |
96
+ | Rust | < 30MB | debian:bookworm-slim + scratch |
97
+ | Java | < 250MB | eclipse-temurin:21-jre-alpine |
98
+
99
+ <Failure_Modes>
100
+ ## 피해야 할 실패 패턴
101
+
102
+ ### 이미지 빌드
103
+ - **:latest 태그 사용**: 빌드 재현 불가능. 항상 `node:20.11.1-alpine3.19` 같이 고정.
104
+ - **단일 스테이지**: 빌드 도구가 런타임에 포함됨. 멀티스테이지 필수.
105
+ - **레이어 순서 오류**: 소스 코드를 lockfile보다 먼저 배치하면 캐시 무효화.
106
+
107
+ ### 보안
108
+ - **root 실행**: `USER` 지시어 없이 실행. 컨테이너 탈출 시 호스트 루트 권한 획득 위험.
109
+ - **시크릿 하드코딩**: ENV/ARG/RUN에 시크릿 포함. BuildKit `--mount=type=secret` 사용.
110
+ - **ARG로 시크릿 전달**: 중간 레이어에 남음. BuildKit secret mount 사용.
111
+
112
+ ### 구성
113
+ - **.dockerignore 누락**: node_modules, .git, .env가 이미지에 포함됨.
114
+ - **SIGTERM 미처리**: 10초 후 SIGKILL로 강제 종료. 데이터 손실 가능.
115
+ - **HEALTHCHECK 누락**: 애플리케이션 응답 불능 상태 미감지.
116
+ - **Compose 비밀번호 하드코딩**: .env 파일 또는 Docker secrets 사용.
117
+ </Failure_Modes>
158
118
 
159
119
  <Output>
160
120
  ```
@@ -166,95 +126,25 @@ Runtime: [Node.js 20]
166
126
  Image Size: [최종 이미지 크기]
167
127
 
168
128
  DOCKERFILE / Dockerfile
169
- -------------------------
170
- # Build stage
171
- FROM node:20-alpine AS builder
172
- WORKDIR /app
173
- COPY package*.json ./
174
- RUN npm ci --omit=dev
175
- COPY . .
176
- RUN npm run build
177
-
178
- # Runtime stage
179
- FROM node:20-alpine AS runtime
180
- RUN addgroup -g 1001 -S appgroup && \
181
- adduser -S appuser -u 1001 -G appgroup
182
- WORKDIR /app
183
- COPY --from=builder --chown=appuser:appgroup /app/dist ./dist
184
- COPY --from=builder --chown=appuser:appgroup /app/node_modules ./node_modules
185
- USER appuser
186
- EXPOSE 3000
187
- HEALTHCHECK --interval=30s --timeout=3s \
188
- CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
189
- CMD ["node", "dist/index.js"]
190
-
191
129
  DOCKER COMPOSE / docker-compose.yml
192
- --------------------------------------
193
- services:
194
- app:
195
- build: .
196
- ports: ["3000:3000"]
197
- depends_on:
198
- db: { condition: service_healthy }
199
- environment:
200
- DATABASE_URL: postgres://user:pass@db:5432/app
201
- db:
202
- image: postgres:16-alpine
203
- volumes: ["pgdata:/var/lib/postgresql/data"]
204
- healthcheck:
205
- test: ["CMD-SHELL", "pg_isready"]
206
-
207
130
  IMAGE ANALYSIS / 이미지 분석
208
- ------------------------------
209
- Total Size: 142MB
210
- Layers: 8
211
- Base Image: node:20-alpine (45MB)
212
- Dependencies: 85MB
213
- Application: 12MB
214
-
215
131
  SECURITY SCAN / 보안 스캔
216
- ---------------------------
217
- Vulnerabilities: 0 CRITICAL, 0 HIGH, 2 MEDIUM
218
- Recommendation: [조치 사항]
219
132
  ```
220
133
  </Output>
221
134
 
222
135
  <Policy>
223
- - 베이스 이미지에 항상 고정 태그를 사용합니다 (latest 금지)
224
- - 프로덕션 이미지에서 반드시 비루트 사용자로 실행합니다
225
- - 시크릿은 절대 이미지에 포함하지 않습니다 (빌드 시에도)
226
- - 이미지 크기를 정기적으로 모니터링합니다
227
- - 보안 스캔을 CI/CD에 통합하여 취약한 이미지 배포를 차단합니다
228
- - Graceful shutdown 반드시 구현하여 데이터 손실을 방지합니다
136
+ - 베이스 이미지에 항상 고정 태그 사용 (latest 금지)
137
+ - 프로덕션 이미지에서 비루트 사용자 실행 필수
138
+ - 시크릿은 절대 이미지에 포함하지 않음
139
+ - 멀티스테이지 빌드 기본 적용
140
+ - .dockerignore 필수 작성
141
+ - Graceful shutdown 필수 구현
229
142
  </Policy>
230
143
 
231
144
  ## 다른 스킬과의 연동
232
-
233
- **CI/CD 연동:**
234
- ```
235
- /forgen:ci-cd Docker 이미지 빌드 및 푸시 파이프라인
236
- ```
237
- CI에서 Docker 이미지 자동 빌드/배포
238
-
239
- **보안 리뷰 연동:**
240
- ```
241
- /forgen:security-review Dockerfile 및 이미지
242
- ```
243
- Docker 구성의 보안 취약점 점검
244
-
245
- **성능 연동:**
246
- ```
247
- /forgen:performance 컨테이너 리소스 사용량 분석
248
- ```
249
- 컨테이너의 리소스 최적화
250
-
251
- ## Best Practices
252
-
253
- - **작은 이미지** -- 불필요한 것을 빼서 크기를 줄임
254
- - **멀티스테이지** -- 빌드 도구를 런타임에 포함하지 않음
255
- - **캐시 활용** -- 레이어 순서를 변경 빈도 기준으로 정렬
256
- - **보안 우선** -- 비루트, 최소 권한, 시크릿 분리
257
- - **헬스 체크** -- 컨테이너 상태를 자동으로 모니터링
145
+ - `/forgen:ci-cd` -- Docker 이미지 빌드/배포 파이프라인
146
+ - `/forgen:security-review` -- Dockerfile/이미지 보안 점검
147
+ - `/forgen:performance` -- 컨테이너 리소스 최적화
258
148
 
259
149
  <Arguments>
260
150
  ## 사용법
@@ -0,0 +1,215 @@
1
+ ---
2
+ name: forge-loop
3
+ description: This skill should be used when the user asks to "forge-loop, 포지루프, 끝까지, don't stop". 주어진 작업을 PRD(User Story)로 분해하고, 모든 수용 기준이 충족될 때까지 반복 실행합니다.
4
+ argument-hint: "[task description]"
5
+ model: inherit
6
+ allowed-tools:
7
+ - Read
8
+ - Grep
9
+ - Glob
10
+ - Bash
11
+ - Agent
12
+ - Edit
13
+ - Write
14
+ triggers:
15
+ - "forge-loop"
16
+ - "포지루프"
17
+ - "끝까지"
18
+ - "don't stop"
19
+ - "완료될 때까지"
20
+ - "루프로 실행"
21
+ ---
22
+
23
+ <Purpose>
24
+ 주어진 작업을 User Story + 수용 기준으로 분해하고, 모든 스토리가 검증을 통과할 때까지
25
+ ch-planner -> ch-executor -> ch-verifier 사이클을 반복합니다.
26
+ 스토리 하나가 완료되면 멈추지 않고 즉시 다음 스토리로 진행합니다.
27
+ 사용자에게 보고하는 시점은 "전부 완료", "에스컬레이션", "컨텍스트 한계" 세 가지뿐입니다.
28
+ </Purpose>
29
+
30
+ <Compound_Integration>
31
+ ## Compound-In: 관련 패턴 로드
32
+
33
+ 루프 시작 전 + 각 스토리 시작 전에 compound-search를 수행합니다.
34
+
35
+ ```
36
+ compound-search 도구로 작업 키워드를 검색하세요.
37
+ 예: compound-search("TypeScript", "테스트", "리팩토링") 등
38
+ ```
39
+
40
+ ## Compound-Out: 세션 종료 시 패턴 추출
41
+
42
+ 모든 스토리 완료 후:
43
+ - 실패 후 성공한 패턴 -> troubleshoot 후보
44
+ - 반복 사용된 접근법 -> pattern 후보
45
+ - 아키텍처 결정 -> decision 후보
46
+ </Compound_Integration>
47
+
48
+ <Steps>
49
+ ## Phase 1: PRD 설정
50
+
51
+ ### PRD 구조
52
+ ```json
53
+ {
54
+ "task": "{$ARGUMENTS}",
55
+ "stories": [
56
+ {
57
+ "id": "US-001",
58
+ "title": "스토리 제목",
59
+ "description": "As a {role}, I want {feature} so that {value}",
60
+ "acceptanceCriteria": ["구체적이고 테스트 가능한 기준"],
61
+ "passes": false,
62
+ "attempts": 0,
63
+ "dependencies": []
64
+ }
65
+ ]
66
+ }
67
+ ```
68
+
69
+ ### 수용 기준 품질 규칙
70
+
71
+ | 금지 (일반적) | 교체 (구체적) |
72
+ |--------------|-------------|
73
+ | "코드가 컴파일된다" | "npm run build가 exit 0으로 완료된다" |
74
+ | "테스트가 통과한다" | "npm test의 {test-name}이 PASS한다" |
75
+ | "기능이 동작한다" | "POST /api/users에 {payload}를 보내면 201이 반환된다" |
76
+
77
+ ### 상태 파일 저장 (필수 — Stop 훅 연동)
78
+
79
+ PRD 확정 직후 **반드시** `~/.forgen/state/forge-loop.json`에 저장:
80
+
81
+ ```bash
82
+ mkdir -p ~/.forgen/state
83
+ cat > ~/.forgen/state/forge-loop.json <<EOF
84
+ {"active":true,"startedAt":"$(date -u +%Y-%m-%dT%H:%M:%SZ)","stories":[
85
+ {"id":"US-001","title":"...","passes":false,"attempts":0}
86
+ ]}
87
+ EOF
88
+ ```
89
+
90
+ 이 파일이 있어야 Claude가 중간에 멈추지 않도록 Stop 훅이 차단합니다.
91
+ 스토리 완료 시 `passes: true`로 업데이트. 전체 완료는 Stop 훅이 자동 처리.
92
+
93
+ ## Phase 2: 스토리 실행 루프
94
+
95
+ ### 2-1. Compound-In (스토리별)
96
+ 해당 스토리의 키워드로 compound-search 실행. 관련 패턴을 Planner에게 전달.
97
+
98
+ ### 2-2. Planner
99
+ 구현 계획 수립: 변경 파일, 접근법, compound 패턴 적용, 위험 요소, 검증 방법.
100
+
101
+ ### 2-3. Executor
102
+ 최소 변경으로 구현: 기존 패턴 준수, <200줄, 빌드 통과, 임시 코드 금지.
103
+
104
+ ### 2-4. Verifier
105
+ 각 AC를 독립적으로 검증. PASS/FAIL + 증거(테스트 출력, 빌드 로그, curl 응답).
106
+ "should work"는 증거가 아닙니다 -- 반드시 실행합니다.
107
+
108
+ ```
109
+ 수용 기준 검증:
110
+ - AC1: "POST /api/users가 201을 반환한다"
111
+ -> PASS | 증거: `curl -X POST ... -> HTTP/1.1 201 Created`
112
+ - AC2: "잘못된 이메일 시 400 반환"
113
+ -> FAIL | 증거: `curl -X POST ... -> 500`
114
+ ```
115
+
116
+ ### 2-5. 스토리 완료 판정
117
+ - 모든 AC PASS -> `passes: true` -> 즉시 다음 스토리 (보고하지 않음)
118
+ - FAIL -> `attempts++` -> ch-debugger -> ch-executor -> ch-verifier 재실행
119
+ - attempt == 3 -> 에스컬레이션
120
+
121
+ ## Anti-Polite-Stop 규칙
122
+
123
+ 스토리 완료 후 멈추지 않고 즉시 다음 스토리로 진행합니다.
124
+ 보고 시점:
125
+ - **전부 완료**: 모든 스토리 PASS + 최종 검증 통과
126
+ - **에스컬레이션**: 3회 실패
127
+ - **컨텍스트 한계**: 토큰 80% 사용
128
+
129
+ ## Phase 3: 최종 검증
130
+
131
+ 모든 스토리 passes: true 후:
132
+ 1. 전체 빌드 + 테스트
133
+ 2. Critic 에이전트 리뷰 (코드 패턴, 디버그 코드, 보안)
134
+ 3. CRITICAL 이슈 -> 수정 스토리 추가 -> Phase 2 복귀
135
+ 4. Compound-Out: 패턴 추출 제안
136
+
137
+ ## 서킷 브레이커
138
+
139
+ | 브레이커 | 임계값 | 동작 |
140
+ |---------|--------|------|
141
+ | max_attempts_per_story | 3 | 에스컬레이션 |
142
+ | max_total_iterations | 30 | 강제 종료 + 상태 리포트 |
143
+ | same_error_repeat | 3회 | 접근법 변경 요구 |
144
+ | context_limit | 80% 토큰 | 상태 저장 + resume 안내 |
145
+
146
+ ## 진행 상황 추적
147
+
148
+ ```
149
+ FORGE-LOOP PROGRESS
150
+ ═══════════════════
151
+ Story 1/4: User Authentication [DONE] (1 attempt)
152
+ Story 2/4: Payment API [IN PROGRESS] (attempt 2/3)
153
+ |- AC1: POST /pay returns 200 [PASS]
154
+ |- AC2: Webhook verification [FAIL]
155
+ +- AC3: Idempotency key [PENDING]
156
+ Story 3/4: Error Handling [PENDING]
157
+ Story 4/4: Tests [PENDING]
158
+ ═══════════════════
159
+ ```
160
+ </Steps>
161
+
162
+ <Failure_Modes>
163
+ NEVER: **PRD 없이 구현**: 스토리 분해를 먼저 수행합니다.
164
+
165
+ NEVER: **일반적 수용 기준**: "코드가 컴파일된다" -> 프로젝트 특화 기준으로 교체.
166
+
167
+ NEVER: **3회 실패 후 같은 접근**: 에스컬레이션하고 접근법을 변경합니다.
168
+
169
+ NEVER: **검증 스킵**: "should work"는 증거가 아닙니다. 실행하여 확인합니다.
170
+
171
+ NEVER: **중간 보고 (Polite-Stop)**: 스토리 완료 후 즉시 다음으로 진행합니다.
172
+
173
+ NEVER: **Compound 무시**: 시작 전과 각 스토리 전에 compound-search를 수행합니다.
174
+
175
+ NEVER: **디버그 코드 방치**: console.log, TODO, HACK, debugger 원천 차단.
176
+ </Failure_Modes>
177
+
178
+ <Output>
179
+ ```
180
+ FORGE-LOOP COMPLETE
181
+ ═══════════════════════════════════════════════════
182
+ Task: {task description}
183
+
184
+ STORIES
185
+ US-001: {title} [DONE] ({N} attempts)
186
+ US-002: {title} [DONE] ({N} attempts)
187
+
188
+ METRICS
189
+ Total: {N} stories, {N} iterations (avg {N.N}/story)
190
+ Build: PASS | Tests: {N} passed, 0 failed
191
+ Critic: {N} warnings, 0 critical
192
+
193
+ COMPOUND CANDIDATES
194
+ [troubleshoot] "{title}" -- {desc}
195
+ [pattern] "{title}" -- {desc}
196
+ compound에 저장하시겠습니까? [Y/n]
197
+ ═══════════════════════════════════════════════════
198
+ ```
199
+ </Output>
200
+
201
+ <Policy>
202
+ - 수용 기준은 구체적이고 검증 가능해야 합니다
203
+ - "should work"는 증거가 아닙니다 -- 반드시 실행
204
+ - 스토리 완료 후 즉시 다음 스토리 (Anti-Polite-Stop)
205
+ - 3회 실패 시 에스컬레이션
206
+ - 전체 완료 후 compound 추출 제안
207
+ - 서킷 브레이커 임계값 절대 무시 금지
208
+ </Policy>
209
+
210
+ <Arguments>
211
+ - `[task description]`: 실행할 작업 설명. 생략 시 현재 대화 컨텍스트에서 추론.
212
+ - `resume`: 이전에 중단된 루프를 재개합니다.
213
+ </Arguments>
214
+
215
+ $ARGUMENTS