@wooojin/forgen 0.2.0 → 0.3.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.
Files changed (158) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.ja.md +79 -14
  3. package/README.ko.md +100 -14
  4. package/README.md +124 -17
  5. package/README.zh.md +79 -14
  6. package/agents/analyst.md +48 -4
  7. package/agents/architect.md +39 -4
  8. package/agents/code-reviewer.md +107 -77
  9. package/agents/critic.md +47 -4
  10. package/agents/debugger.md +46 -4
  11. package/agents/designer.md +40 -4
  12. package/agents/executor.md +112 -30
  13. package/agents/explore.md +45 -5
  14. package/agents/git-master.md +48 -4
  15. package/agents/planner.md +121 -18
  16. package/agents/test-engineer.md +58 -4
  17. package/agents/verifier.md +92 -77
  18. package/commands/architecture-decision.md +127 -258
  19. package/commands/calibrate.md +225 -0
  20. package/commands/code-review.md +163 -178
  21. package/commands/compound.md +127 -68
  22. package/commands/deep-interview.md +273 -0
  23. package/commands/docker.md +68 -178
  24. package/commands/forge-loop.md +215 -0
  25. package/commands/learn.md +231 -0
  26. package/commands/retro.md +215 -0
  27. package/commands/ship.md +277 -0
  28. package/dist/cli.js +26 -9
  29. package/dist/core/auto-compound-runner.js +14 -0
  30. package/dist/core/config-injector.d.ts +2 -1
  31. package/dist/core/config-injector.js +2 -1
  32. package/dist/core/dashboard.d.ts +108 -0
  33. package/dist/core/dashboard.js +495 -0
  34. package/dist/core/doctor.js +151 -21
  35. package/dist/core/drift-score.d.ts +49 -0
  36. package/dist/core/drift-score.js +87 -0
  37. package/dist/core/harness.d.ts +6 -1
  38. package/dist/core/harness.js +75 -19
  39. package/dist/core/mcp-config.d.ts +2 -0
  40. package/dist/core/mcp-config.js +6 -1
  41. package/dist/core/paths.d.ts +6 -1
  42. package/dist/core/paths.js +18 -2
  43. package/dist/core/spawn.d.ts +3 -2
  44. package/dist/core/spawn.js +27 -8
  45. package/dist/core/types.d.ts +34 -0
  46. package/dist/engine/compound-export.d.ts +41 -0
  47. package/dist/engine/compound-export.js +169 -0
  48. package/dist/engine/compound-lifecycle.d.ts +4 -3
  49. package/dist/engine/compound-lifecycle.js +91 -46
  50. package/dist/engine/compound-loop.js +18 -0
  51. package/dist/engine/meta-learning/adaptive-thresholds.d.ts +20 -0
  52. package/dist/engine/meta-learning/adaptive-thresholds.js +126 -0
  53. package/dist/engine/meta-learning/extraction-tuner.d.ts +15 -0
  54. package/dist/engine/meta-learning/extraction-tuner.js +99 -0
  55. package/dist/engine/meta-learning/matcher-weight-tuner.d.ts +21 -0
  56. package/dist/engine/meta-learning/matcher-weight-tuner.js +151 -0
  57. package/dist/engine/meta-learning/runner.d.ts +14 -0
  58. package/dist/engine/meta-learning/runner.js +90 -0
  59. package/dist/engine/meta-learning/scope-promoter.d.ts +21 -0
  60. package/dist/engine/meta-learning/scope-promoter.js +84 -0
  61. package/dist/engine/meta-learning/session-quality-scorer.d.ts +61 -0
  62. package/dist/engine/meta-learning/session-quality-scorer.js +166 -0
  63. package/dist/engine/meta-learning/types.d.ts +114 -0
  64. package/dist/engine/meta-learning/types.js +43 -0
  65. package/dist/engine/solution-format.d.ts +2 -2
  66. package/dist/engine/solution-format.js +249 -34
  67. package/dist/engine/solution-index.d.ts +1 -1
  68. package/dist/engine/solution-matcher.d.ts +30 -1
  69. package/dist/engine/solution-matcher.js +235 -45
  70. package/dist/fgx.js +12 -8
  71. package/dist/hooks/context-guard.d.ts +15 -0
  72. package/dist/hooks/context-guard.js +218 -56
  73. package/dist/hooks/db-guard.js +2 -2
  74. package/dist/hooks/hook-config.d.ts +27 -1
  75. package/dist/hooks/hook-config.js +72 -12
  76. package/dist/hooks/hooks-generator.d.ts +3 -0
  77. package/dist/hooks/hooks-generator.js +23 -6
  78. package/dist/hooks/intent-classifier.d.ts +0 -2
  79. package/dist/hooks/intent-classifier.js +32 -18
  80. package/dist/hooks/keyword-detector.js +126 -204
  81. package/dist/hooks/notepad-injector.js +2 -2
  82. package/dist/hooks/permission-handler.js +2 -2
  83. package/dist/hooks/post-tool-failure.js +12 -6
  84. package/dist/hooks/post-tool-handlers.d.ts +1 -1
  85. package/dist/hooks/post-tool-handlers.js +14 -11
  86. package/dist/hooks/post-tool-use.d.ts +11 -0
  87. package/dist/hooks/post-tool-use.js +184 -71
  88. package/dist/hooks/pre-compact.d.ts +11 -1
  89. package/dist/hooks/pre-compact.js +112 -37
  90. package/dist/hooks/pre-tool-use.js +86 -56
  91. package/dist/hooks/rate-limiter.js +3 -3
  92. package/dist/hooks/secret-filter.js +2 -2
  93. package/dist/hooks/session-recovery.js +256 -236
  94. package/dist/hooks/shared/hook-response.d.ts +4 -4
  95. package/dist/hooks/shared/hook-response.js +13 -24
  96. package/dist/hooks/shared/hook-timing.d.ts +15 -0
  97. package/dist/hooks/shared/hook-timing.js +64 -0
  98. package/dist/hooks/skill-injector.d.ts +4 -3
  99. package/dist/hooks/skill-injector.js +47 -16
  100. package/dist/hooks/slop-detector.js +3 -3
  101. package/dist/hooks/solution-injector.js +224 -197
  102. package/dist/hooks/subagent-tracker.js +2 -2
  103. package/dist/host/codex-adapter.d.ts +10 -0
  104. package/dist/host/codex-adapter.js +154 -0
  105. package/dist/mcp/solution-reader.d.ts +5 -5
  106. package/dist/mcp/solution-reader.js +34 -24
  107. package/dist/renderer/rule-renderer.js +9 -11
  108. package/dist/services/session.d.ts +19 -0
  109. package/dist/services/session.js +62 -0
  110. package/hooks/hooks.json +2 -2
  111. package/package.json +2 -1
  112. package/skills/architecture-decision/SKILL.md +113 -257
  113. package/skills/calibrate/SKILL.md +207 -0
  114. package/skills/code-review/SKILL.md +151 -178
  115. package/skills/compound/SKILL.md +126 -68
  116. package/skills/deep-interview/SKILL.md +266 -0
  117. package/skills/docker/SKILL.md +57 -179
  118. package/skills/forge-loop/SKILL.md +198 -0
  119. package/skills/learn/SKILL.md +216 -0
  120. package/skills/retro/SKILL.md +199 -0
  121. package/skills/ship/SKILL.md +259 -0
  122. package/agents/code-simplifier.md +0 -197
  123. package/agents/performance-reviewer.md +0 -172
  124. package/agents/qa-tester.md +0 -158
  125. package/agents/refactoring-expert.md +0 -168
  126. package/agents/scientist.md +0 -144
  127. package/agents/security-reviewer.md +0 -137
  128. package/agents/writer.md +0 -184
  129. package/commands/api-design.md +0 -268
  130. package/commands/ci-cd.md +0 -270
  131. package/commands/database.md +0 -263
  132. package/commands/debug-detective.md +0 -99
  133. package/commands/documentation.md +0 -276
  134. package/commands/ecomode.md +0 -51
  135. package/commands/frontend.md +0 -271
  136. package/commands/git-master.md +0 -90
  137. package/commands/incident-response.md +0 -292
  138. package/commands/migrate.md +0 -101
  139. package/commands/performance.md +0 -288
  140. package/commands/refactor.md +0 -105
  141. package/commands/security-review.md +0 -288
  142. package/commands/tdd.md +0 -183
  143. package/commands/testing-strategy.md +0 -265
  144. package/skills/api-design/SKILL.md +0 -262
  145. package/skills/ci-cd/SKILL.md +0 -264
  146. package/skills/database/SKILL.md +0 -257
  147. package/skills/debug-detective/SKILL.md +0 -95
  148. package/skills/documentation/SKILL.md +0 -270
  149. package/skills/ecomode/SKILL.md +0 -46
  150. package/skills/frontend/SKILL.md +0 -265
  151. package/skills/git-master/SKILL.md +0 -86
  152. package/skills/incident-response/SKILL.md +0 -286
  153. package/skills/migrate/SKILL.md +0 -96
  154. package/skills/performance/SKILL.md +0 -282
  155. package/skills/refactor/SKILL.md +0 -100
  156. package/skills/security-review/SKILL.md +0 -282
  157. package/skills/tdd/SKILL.md +0 -178
  158. package/skills/testing-strategy/SKILL.md +0 -260
@@ -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
@@ -0,0 +1,231 @@
1
+ ---
2
+ name: learn
3
+ description: This skill should be used when the user asks to "learn, 학습 관리, compound 정리, 솔루션 정리". Compound 지식의 관리 인터페이스 — 검색, 통계, 가지치기, 내보내기/가져오기.
4
+ argument-hint: "[search {query}|stats|prune|export|import {path}]"
5
+ model: inherit
6
+ allowed-tools:
7
+ - Read
8
+ - Grep
9
+ - Glob
10
+ - Bash
11
+ triggers:
12
+ - "learn"
13
+ - "학습 관리"
14
+ - "compound 정리"
15
+ - "솔루션 정리"
16
+ - "compound 관리"
17
+ - "솔루션 관리"
18
+ - "지식 관리"
19
+ ---
20
+
21
+ <Purpose>
22
+ compound에 축적된 솔루션을 관리합니다.
23
+ 시간이 지남에 따라 솔루션은 낡거나 중복되거나 모순됩니다.
24
+ learn은 이를 정기적으로 정리하여 compound의 신호 대 잡음 비율을 유지합니다.
25
+
26
+ 서브커맨드: search, stats, prune, export, import
27
+ 서브커맨드 생략 시: stats 실행
28
+ </Purpose>
29
+
30
+ <Compound_Integration>
31
+ ## Compound 데이터 직접 조작
32
+
33
+ learn은 compound의 관리 도구입니다.
34
+ 모든 서브커맨드에서 compound MCP 도구를 직접 사용합니다:
35
+ - `compound-stats` -- 전체 현황 조회
36
+ - `compound-list` -- 솔루션 목록 조회
37
+ - `compound-read` -- 개별 솔루션 상세 조회
38
+ - `compound-search` -- 키워드 검색
39
+
40
+ retire/merge 전에 반드시 사용자 확인을 받습니다.
41
+ mature 상태 솔루션은 어떤 경우에도 자동 정리 대상이 아닙니다.
42
+ </Compound_Integration>
43
+
44
+ <Steps>
45
+ ## search {query}
46
+
47
+ compound-search MCP로 검색하고 결과를 정리합니다.
48
+
49
+ ```
50
+ compound-search("{query}")
51
+ ```
52
+
53
+ ```
54
+ SEARCH RESULTS / 검색 결과
55
+ ===========================
56
+ Query: "{query}"
57
+ Found: {N}개
58
+
59
+ # | Title | Type | Status | Last Used
60
+ ----+--------------------------|---------------|------------|----------
61
+ 1 | {제목} | {type} | {status} | {date}
62
+ 2 | {제목} | {type} | {status} | {date}
63
+ ```
64
+
65
+ 결과 없으면: "검색 결과 없음. 관련 키워드 제안: {1-3개}"
66
+
67
+ ---
68
+
69
+ ## stats
70
+
71
+ ```
72
+ compound-stats
73
+ compound-list
74
+ ```
75
+
76
+ ```
77
+ COMPOUND KNOWLEDGE / 복리 지식 현황
78
+ ════════════════════════════════════
79
+ Total: {N} solutions
80
+
81
+ By Status:
82
+ mature (3+ hits): {N} ({N}%) {bar}
83
+ verified (2 hits): {N} ({N}%) {bar}
84
+ candidate (1 hit): {N} ({N}%) {bar}
85
+ experiment (0 hits): {N} ({N}%) {bar}
86
+
87
+ By Type:
88
+ pattern: {N} | troubleshoot: {N} | decision: {N} | anti-pattern: {N}
89
+
90
+ By Scope:
91
+ me: {N} | project: {N} | universal: {N}
92
+
93
+ Activity (last 7 days):
94
+ Injected: {N}/{total} ({N}%)
95
+ New: +{N} | Promoted: +{N} | Retired: -{N}
96
+ Top: "{title}" ({N} hits)
97
+ ```
98
+
99
+ 바 차트는 비율에 따라 `#` 문자로 시각화 (최대 20자).
100
+
101
+ ---
102
+
103
+ ## prune
104
+
105
+ **prune은 항상 stats를 먼저 실행합니다.**
106
+
107
+ ### 감지 기준
108
+ 1. STALE: 30일+ 미사용
109
+ 2. DUPLICATE: 유사도 80%+ (제목+내용 키워드 비교)
110
+ 3. CONTRADICTORY: 같은 주제에 서로 반대 결론
111
+ 4. LOW-QUALITY: experiment 상태 60일+ 미승격
112
+
113
+ ### 제외 규칙
114
+ - mature 상태는 절대 prune 대상이 아님
115
+ - verified 상태는 STALE일 때만 후보
116
+
117
+ ```
118
+ PRUNE CANDIDATES / 정리 후보
119
+ ════════════════════════════
120
+
121
+ STALE (30d+ unused):
122
+ 1. "{title}" ({N}일 미사용) [retire / keep]
123
+ 2. "{title}" ({N}일 미사용) [retire / keep]
124
+
125
+ DUPLICATE (similarity {N}%+):
126
+ 3. "{title-a}" ~ "{title-b}" ({N}%) [merge / keep both]
127
+
128
+ CONTRADICTORY:
129
+ 4. "{title-a}" vs "{title-b}" [resolve / keep both]
130
+
131
+ LOW-QUALITY (experiment {N}d+):
132
+ 5. "{title}" (experiment {N}일 경과) [retire / promote / keep]
133
+
134
+ 선택하세요 (번호 + 행동, 예: "1 retire, 3 merge, 4 resolve"):
135
+ ```
136
+
137
+ 사용자 선택을 받은 후에만 실행합니다.
138
+
139
+ ---
140
+
141
+ ## export
142
+
143
+ ```bash
144
+ # tar.gz (기본)
145
+ tar -czf compound-export-$(date +%Y%m%d).tar.gz ~/.forgen/me/solutions/
146
+
147
+ # markdown (--md 인수)
148
+ # 각 솔루션을 하나의 markdown으로 결합
149
+ ```
150
+
151
+ ```
152
+ EXPORT COMPLETE / 내보내기 완료
153
+ ================================
154
+ Format: {tar.gz / markdown}
155
+ File: {파일 경로}
156
+ Size: {크기}
157
+ Count: {솔루션 수}
158
+ ```
159
+
160
+ ---
161
+
162
+ ## import {path}
163
+
164
+ ```bash
165
+ tar -xzf {path} -C /tmp/compound-import/
166
+ ```
167
+
168
+ 중복 검사 후 처리:
169
+ - 동일 -> skip
170
+ - 유사 -> 사용자에게 merge/skip/replace 선택
171
+ - 신규 -> 추가
172
+
173
+ ```
174
+ IMPORT RESULTS / 가져오기 결과
175
+ ===============================
176
+ Source: {path}
177
+ Total: {N}개
178
+ Added: {N}개
179
+ Skipped: {N}개 (중복)
180
+ Merged: {N}개
181
+ ```
182
+ </Steps>
183
+
184
+ <Failure_Modes>
185
+ **확인 없이 retire**: 각 후보의 선택을 반드시 사용자에게 받는다. 자동 삭제 없음.
186
+ **mature 솔루션 삭제 제안**: mature는 prune 대상에서 제외. 3회 이상 활용된 지식은 가치가 검증됨.
187
+ **stats 없이 prune**: stats 먼저, 그 다음 prune 후보. 전체 맥락 없이 개별 삭제 불가.
188
+ **import 무조건 덮어쓰기**: 기존 솔루션과 충돌 시 반드시 중복 검사 먼저.
189
+ **빈 compound에서 prune 시도**: 솔루션이 없으면 "/compound로 세션 패턴을 축적하세요" 안내.
190
+ </Failure_Modes>
191
+
192
+ <Output>
193
+ ## stats 출력
194
+
195
+ ```
196
+ COMPOUND KNOWLEDGE / 복리 지식 현황
197
+ ════════════════════════════════════
198
+ Total: {N} solutions
199
+ ...
200
+ ```
201
+
202
+ ## prune 출력
203
+
204
+ ```
205
+ PRUNE CANDIDATES / 정리 후보
206
+ ════════════════════════════
207
+ [stale] "{title}" -- {N}일 미사용 -> retire/keep?
208
+ [duplicate] "{a}" ~ "{b}" -> merge/keep?
209
+ [low-quality] "{title}" -- experiment {N}일 -> retire/promote/keep?
210
+ ```
211
+ </Output>
212
+
213
+ <Policy>
214
+ - retire/merge는 반드시 사용자 확인 후 실행.
215
+ - mature 상태 솔루션은 prune 대상이 아님. 예외 없음.
216
+ - prune은 항상 stats 출력 이후에 후보 제시.
217
+ - export는 현재 디렉토리에 날짜 포함 파일명.
218
+ - import는 중복 검사 먼저, 충돌 시 사용자 선택.
219
+ - 서브커맨드 없으면 stats 기본 실행.
220
+ </Policy>
221
+
222
+ <Arguments>
223
+ - `search {query}`: 솔루션 검색
224
+ - `stats`: 전체 현황 통계 (기본값)
225
+ - `prune`: stale/중복/모순/저품질 감지 및 정리
226
+ - `export`: tar.gz 내보내기
227
+ - `export --md`: markdown 내보내기
228
+ - `import {path}`: 외부 compound 가져오기 (중복 검사 후 머지)
229
+ </Arguments>
230
+
231
+ $ARGUMENTS
@@ -0,0 +1,215 @@
1
+ ---
2
+ name: retro
3
+ description: This skill should be used when the user asks to "retro, 회고, retrospective, 돌아보기". Git 메트릭 + compound 건강도 + 학습 추세를 교차 분석하는 회고 리포트.
4
+ argument-hint: "[7d|14d|30d] [compare]"
5
+ model: inherit
6
+ allowed-tools:
7
+ - Read
8
+ - Grep
9
+ - Glob
10
+ - Bash
11
+ triggers:
12
+ - "retro"
13
+ - "회고"
14
+ - "retrospective"
15
+ - "돌아보기"
16
+ - "주간 회고"
17
+ - "월간 회고"
18
+ - "주간회고"
19
+ - "월간회고"
20
+ ---
21
+
22
+ <Purpose>
23
+ git log + compound 통계 + 교정 기록을 교차 분석하여 최근 기간의 개발 패턴을 파악합니다.
24
+ "잘 하고 있는가"가 아니라 "어디서 반복 마찰이 생기는가"를 발견하는 것이 목적입니다.
25
+ 데이터 없이 추측하지 않습니다. 모든 분석은 실제 수집된 데이터에 근거합니다.
26
+ </Purpose>
27
+
28
+ <Compound_Integration>
29
+ ## Compound 데이터 활용
30
+
31
+ retro는 compound stats를 핵심 데이터 소스로 사용합니다.
32
+
33
+ 분석 신호:
34
+ - 활용률 낮음 -> 축적은 되지만 재사용 안 됨 (검색 키워드 품질 문제)
35
+ - stale 많음 -> 정리 필요 (`/learn prune` 추천)
36
+ - experiment 비율 높음 -> 검증 없이 축적만 됨
37
+ - mature 비율 높음 -> 건강한 지식 베이스
38
+ </Compound_Integration>
39
+
40
+ <Steps>
41
+ ## Phase 1: 데이터 수집
42
+
43
+ 기간 기본값: 7d
44
+ `$ARGUMENTS`에서 파싱 (7d, 14d, 30d, compare).
45
+
46
+ ### 1-1: Git 활동 데이터
47
+
48
+ ```bash
49
+ # 커밋 이력
50
+ git log --since="{period}" --oneline --stat --format="%h|%an|%ai|%s"
51
+
52
+ # 기여자별 커밋
53
+ git shortlog --since="{period}" -sn
54
+
55
+ # 핫스팟 (파일별 변경 빈도)
56
+ git log --since="{period}" --name-only --pretty=format: | sort | uniq -c | sort -rn | head -10
57
+
58
+ # 변경 줄 수
59
+ git log --since="{period}" --stat --format="" | tail -1
60
+ ```
61
+
62
+ ### 1-2: Compound 데이터
63
+
64
+ ```
65
+ compound-stats
66
+ compound-list
67
+ ```
68
+
69
+ ### 1-3: 교정 기록
70
+
71
+ ```bash
72
+ ls -la ~/.forgen/me/evidence/ 2>/dev/null || echo "교정 데이터 없음"
73
+ find ~/.forgen/me/evidence/ -name "*.json" -mtime -{period_days} 2>/dev/null | wc -l
74
+ ```
75
+
76
+ ## Phase 2: 코드 활동 분석
77
+
78
+ - 커밋 수 (일 평균 포함)
79
+ - +추가 / -삭제 비율
80
+ - 핫스팟 Top 5 (3회+ 수정 -> 불안정 영역)
81
+
82
+ ## Phase 3: 세션 패턴 분석
83
+
84
+ ```
85
+ 세션 분리: 45분+ 간격 = 새 세션
86
+ ```
87
+
88
+ - 세션 수, 평균 길이
89
+ - 시간대 분포 (정보 제공용, 판단은 사용자에게)
90
+
91
+ ## Phase 4: Compound 건강도 분석
92
+
93
+ ```
94
+ 총 솔루션, 상태별/유형별 비율, 활용률, stale 후보
95
+ ```
96
+
97
+ 건강도 판정:
98
+ - HEALTHY: mature 20%+, stale < 5, 활용률 30%+
99
+ - ATTENTION: experiment 40%+, 또는 stale 5-10
100
+ - NEEDS CARE: stale 10+, 또는 활용률 10% 미만
101
+
102
+ ## Phase 5: 학습 추세 분석
103
+
104
+ - 교정 감소 -> 학습 중 (좋은 신호)
105
+ - 교정 증가 -> 드리프트 발생
106
+ - 동일 축 반복 -> `/calibrate` 권장
107
+ - 데이터 없음 -> "교정 데이터 없음" 표시
108
+
109
+ ## Phase 6: 추천 생성 (반드시 3개)
110
+
111
+ 데이터 근거 규칙:
112
+ - 핫스팟 존재 -> `/code-review {파일}`
113
+ - stale 5개+ -> `/learn prune`
114
+ - 동일 교정 3회+ -> `/calibrate`
115
+ - experiment 40%+ -> compound 품질 개선
116
+ - 활용률 10% 미만 -> compound 검색 개선
117
+ - 커밋 급감 -> 블로커 확인
118
+ </Steps>
119
+
120
+ <Compare_Mode>
121
+ ## Compare 모드
122
+
123
+ `/retro compare` 또는 `/retro 14d compare`
124
+
125
+ ```bash
126
+ # 현재 기간
127
+ git log --since="{period}" --oneline --stat
128
+ # 이전 기간
129
+ git log --since="{period*2}" --until="{period}" --oneline --stat
130
+ ```
131
+
132
+ ```
133
+ COMPARE / 기간 비교
134
+ ════════════════════
135
+ Previous {N}d This {N}d Delta
136
+ Commits: {N} {N} {+/-N}%
137
+ LOC: +{N} +{N} {+/-N}%
138
+ Files: {N} {N} {+/-N}%
139
+ Hotspot: {file}({N}) {file}({N}) {NEW/SAME/GONE}
140
+ Sessions: {N} {N} {+/-N}%
141
+ Compound hits: {N} {N} {+/-N}%
142
+ Corrections: {N} {N} {+/-N}% {arrow}
143
+ ```
144
+
145
+ Delta 해석:
146
+ - 커밋 증가 + 교정 감소 -> 생산성 + 학습 (최고)
147
+ - 커밋 감소 + 핫스팟 동일 -> 같은 파일에서 막힘 (구조적 문제)
148
+ - Compound hits 증가 -> 복리 효과 발현
149
+ </Compare_Mode>
150
+
151
+ <Failure_Modes>
152
+ **데이터 없이 추측**: git log + compound stats 수집 후 분석. 느낌 기반 회고 금지.
153
+ **긍정만 보고**: 핫스팟, stale, 개선점 반드시 포함. 칭찬 보고서는 가치 없음.
154
+ **추천 없는 보고서**: 반드시 3개 next action. "계속 잘 하세요"는 추천이 아님.
155
+ **기간 무시**: `--since` 파라미터 정확 적용.
156
+ **세션 패턴 판단**: 데이터만 보여주고 판단은 사용자에게.
157
+ </Failure_Modes>
158
+
159
+ <Output>
160
+ ```
161
+ RETRO / 회고
162
+ ════════════
163
+ 기간: {start} ~ {end}
164
+
165
+ CODE ACTIVITY
166
+ ─────────────
167
+ 커밋: {N}개 (일 평균 {N}개) | +{N} / -{N} | 파일: {N}개
168
+ 세션: {N}개 (평균 {N}분)
169
+
170
+ 핫스팟:
171
+ 1. {file} ({N}회 수정) <- 구조 리뷰 권장
172
+ 2. {file} ({N}회 수정)
173
+ 3. {file} ({N}회 수정)
174
+ 4. {file} ({N}회 수정)
175
+ 5. {file} ({N}회 수정)
176
+
177
+ COMPOUND HEALTH [{HEALTHY/ATTENTION/NEEDS CARE}]
178
+ ───────────────
179
+ 총: {N}개 | mature: {N} | verified: {N} | candidate: {N} | experiment: {N}
180
+ 활용률: {N}% (지난주 대비 {+/-N}%)
181
+ Stale 후보: {N}개
182
+ 신규: +{N}개 | 승격: +{N}개 | 은퇴: -{N}개
183
+
184
+ LEARNING TREND
185
+ ──────────────
186
+ 교정: {N} -> {N} ({down/up/flat} {arrow})
187
+ 드리프트: {N}회
188
+
189
+ RECOMMENDATIONS
190
+ ───────────────
191
+ 1. {action} -- {data-backed reason}
192
+ 2. {action} -- {data-backed reason}
193
+ 3. {action} -- {data-backed reason}
194
+ ```
195
+ </Output>
196
+
197
+ <Policy>
198
+ - 데이터 수집 없이 회고 시작하지 않음.
199
+ - 기간 없으면 7d 기본.
200
+ - 추천은 수집된 데이터에만 근거. 추측 금지.
201
+ - 추천 반드시 3개.
202
+ - compare 모드: 두 기간 delta 시각화.
203
+ - 핫스팟 Top 5.
204
+ - compound 건강도 3단계 판정.
205
+ </Policy>
206
+
207
+ <Arguments>
208
+ - `7d`: 최근 7일 회고 (기본값)
209
+ - `14d`: 최근 14일 회고
210
+ - `30d`: 최근 30일 회고
211
+ - `compare`: 현재 기간 vs 이전 동일 기간 비교
212
+ - `14d compare`: 14일 회고 + 기간 비교
213
+ </Arguments>
214
+
215
+ $ARGUMENTS