@wooojin/forgen 0.4.1 → 0.4.3

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 (140) hide show
  1. package/.claude-plugin/plugin.json +5 -5
  2. package/CHANGELOG.md +164 -15
  3. package/CONTRIBUTING.md +2 -2
  4. package/README.ja.md +17 -9
  5. package/README.ko.md +20 -12
  6. package/README.md +46 -12
  7. package/README.zh.md +17 -9
  8. package/assets/README.md +86 -0
  9. package/assets/architecture.svg +100 -0
  10. package/assets/banner.png +0 -0
  11. package/assets/banner.svg +53 -0
  12. package/assets/demo/01-install.gif +0 -0
  13. package/assets/demo/01-install.tape +54 -0
  14. package/assets/demo/02-compound-learning.gif +0 -0
  15. package/assets/demo/02-compound-learning.tape +50 -0
  16. package/assets/demo/03-forge-personalization.gif +0 -0
  17. package/assets/demo/03-forge-personalization.tape +64 -0
  18. package/assets/demo/before-after.gif +0 -0
  19. package/assets/demo/before-after.tape +98 -0
  20. package/assets/demo-preview.svg +96 -0
  21. package/assets/icon.png +0 -0
  22. package/{hooks → assets/shared}/hook-registry.json +2 -1
  23. package/dist/cli.js +78 -6
  24. package/dist/core/auto-compound-runner.js +62 -38
  25. package/dist/core/behavior-classifier.d.ts +28 -0
  26. package/dist/core/behavior-classifier.js +46 -0
  27. package/dist/core/dashboard.d.ts +7 -0
  28. package/dist/core/dashboard.js +32 -0
  29. package/dist/core/doctor.js +92 -0
  30. package/dist/core/git-stats.d.ts +36 -0
  31. package/dist/core/git-stats.js +79 -0
  32. package/dist/core/harness.d.ts +1 -1
  33. package/dist/core/harness.js +27 -20
  34. package/dist/core/host-detect.d.ts +42 -0
  35. package/dist/core/host-detect.js +68 -0
  36. package/dist/core/installer.js +2 -2
  37. package/dist/core/migrate-cli.d.ts +1 -0
  38. package/dist/core/migrate-cli.js +19 -0
  39. package/dist/core/migrate-evidence-host.d.ts +36 -0
  40. package/dist/core/migrate-evidence-host.js +49 -0
  41. package/dist/core/settings-injector.js +4 -2
  42. package/dist/core/spawn.d.ts +1 -1
  43. package/dist/core/spawn.js +4 -11
  44. package/dist/core/stats-cli.js +12 -0
  45. package/dist/core/trust-layer-intent.d.ts +35 -0
  46. package/dist/core/trust-layer-intent.js +30 -0
  47. package/dist/core/types.d.ts +1 -1
  48. package/dist/engine/compound-extractor.js +7 -9
  49. package/dist/engine/learn-cli.js +4 -2
  50. package/dist/engine/lifecycle/bypass-detector.d.ts +6 -1
  51. package/dist/engine/lifecycle/bypass-detector.js +57 -5
  52. package/dist/fgx.js +2 -1
  53. package/dist/forge/evidence-processor.js +12 -0
  54. package/dist/forge/onboarding.d.ts +3 -2
  55. package/dist/forge/onboarding.js +3 -2
  56. package/dist/hooks/db-guard.js +3 -3
  57. package/dist/hooks/forge-loop-progress.d.ts +9 -0
  58. package/dist/hooks/forge-loop-progress.js +38 -0
  59. package/dist/hooks/hook-registry.js +1 -1
  60. package/dist/hooks/hooks-generator.d.ts +15 -1
  61. package/dist/hooks/hooks-generator.js +18 -16
  62. package/dist/hooks/keyword-detector.js +1 -1
  63. package/dist/hooks/post-tool-use.d.ts +1 -1
  64. package/dist/hooks/post-tool-use.js +13 -4
  65. package/dist/hooks/pre-compact.js +1 -1
  66. package/dist/hooks/pre-tool-use.js +4 -4
  67. package/dist/hooks/rate-limiter.js +2 -2
  68. package/dist/hooks/session-recovery.js +11 -0
  69. package/dist/hooks/shared/blocking-allowlist.d.ts +28 -0
  70. package/dist/hooks/shared/blocking-allowlist.js +38 -0
  71. package/dist/hooks/shared/forge-loop-state.d.ts +36 -0
  72. package/dist/hooks/shared/forge-loop-state.js +116 -0
  73. package/dist/hooks/shared/hook-response.d.ts +18 -0
  74. package/dist/hooks/shared/hook-response.js +31 -0
  75. package/dist/hooks/skill-injector.js +1 -1
  76. package/dist/hooks/stop-guard.js +15 -0
  77. package/dist/host/capabilities-claude.d.ts +8 -0
  78. package/dist/host/capabilities-claude.js +46 -0
  79. package/dist/host/capabilities-codex.d.ts +11 -0
  80. package/dist/host/capabilities-codex.js +50 -0
  81. package/dist/host/capabilities-registry.d.ts +11 -0
  82. package/dist/host/capabilities-registry.js +30 -0
  83. package/dist/host/codex-adapter.d.ts +8 -5
  84. package/dist/host/codex-adapter.js +10 -82
  85. package/dist/host/codex-output-parser.d.ts +39 -0
  86. package/dist/host/codex-output-parser.js +75 -0
  87. package/dist/host/exec-host.d.ts +54 -0
  88. package/dist/host/exec-host.js +92 -0
  89. package/dist/host/host-runtime.d.ts +37 -0
  90. package/dist/host/host-runtime.js +51 -0
  91. package/dist/host/install-claude.d.ts +35 -0
  92. package/dist/host/install-claude.js +238 -0
  93. package/dist/host/install-codex.d.ts +44 -0
  94. package/dist/host/install-codex.js +276 -0
  95. package/dist/host/install-orchestrator.d.ts +34 -0
  96. package/dist/host/install-orchestrator.js +126 -0
  97. package/dist/host/invoke-agent.d.ts +27 -0
  98. package/dist/host/invoke-agent.js +115 -0
  99. package/dist/host/parity-harness.d.ts +62 -0
  100. package/dist/host/parity-harness.js +283 -0
  101. package/dist/host/projection.d.ts +35 -0
  102. package/dist/host/projection.js +126 -0
  103. package/dist/mcp/server.js +11 -0
  104. package/dist/mcp/tools.js +47 -0
  105. package/dist/services/session.d.ts +6 -3
  106. package/dist/services/session.js +33 -4
  107. package/dist/store/evidence-store.d.ts +1 -0
  108. package/dist/store/evidence-store.js +34 -3
  109. package/dist/store/host-mismatch.d.ts +42 -0
  110. package/dist/store/host-mismatch.js +65 -0
  111. package/dist/store/profile-store.d.ts +29 -0
  112. package/dist/store/profile-store.js +53 -0
  113. package/dist/store/types.d.ts +13 -0
  114. package/hooks/hooks.json +6 -1
  115. package/package.json +6 -4
  116. package/plugin.json +4 -4
  117. package/scripts/postinstall.js +100 -25
  118. /package/{agents → assets/claude/agents}/analyst.md +0 -0
  119. /package/{agents → assets/claude/agents}/architect.md +0 -0
  120. /package/{agents → assets/claude/agents}/code-reviewer.md +0 -0
  121. /package/{agents → assets/claude/agents}/critic.md +0 -0
  122. /package/{agents → assets/claude/agents}/debugger.md +0 -0
  123. /package/{agents → assets/claude/agents}/designer.md +0 -0
  124. /package/{agents → assets/claude/agents}/executor.md +0 -0
  125. /package/{agents → assets/claude/agents}/explore.md +0 -0
  126. /package/{agents → assets/claude/agents}/git-master.md +0 -0
  127. /package/{agents → assets/claude/agents}/planner.md +0 -0
  128. /package/{agents → assets/claude/agents}/solution-evolver.md +0 -0
  129. /package/{agents → assets/claude/agents}/test-engineer.md +0 -0
  130. /package/{agents → assets/claude/agents}/verifier.md +0 -0
  131. /package/{commands → assets/claude/commands}/architecture-decision.md +0 -0
  132. /package/{commands → assets/claude/commands}/calibrate.md +0 -0
  133. /package/{commands → assets/claude/commands}/code-review.md +0 -0
  134. /package/{commands → assets/claude/commands}/compound.md +0 -0
  135. /package/{commands → assets/claude/commands}/deep-interview.md +0 -0
  136. /package/{commands → assets/claude/commands}/docker.md +0 -0
  137. /package/{commands → assets/claude/commands}/forge-loop.md +0 -0
  138. /package/{commands → assets/claude/commands}/learn.md +0 -0
  139. /package/{commands → assets/claude/commands}/retro.md +0 -0
  140. /package/{commands → assets/claude/commands}/ship.md +0 -0
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "$schema": "https://claude.ai/schemas/claude-plugin.json",
3
3
  "name": "forgen",
4
- "version": "0.4.1",
4
+ "version": "0.4.3",
5
5
  "description": "Claude Code harness — the more you use Claude, the better it gets",
6
6
  "author": {
7
7
  "name": "jang-ujin",
8
- "url": "https://github.com/wooo-jin"
8
+ "url": "https://github.com/forgen-team"
9
9
  },
10
- "repository": "https://github.com/wooo-jin/forgen",
11
- "homepage": "https://github.com/wooo-jin/forgen",
10
+ "repository": "https://github.com/forgen-team/forgen",
11
+ "homepage": "https://github.com/forgen-team/forgen",
12
12
  "license": "MIT",
13
13
  "keywords": [
14
14
  "claude-code",
@@ -17,7 +17,7 @@
17
17
  "forge"
18
18
  ],
19
19
  "skills": "./skills/",
20
- "agents": "agents/",
20
+ "agents": "assets/claude/agents/",
21
21
  "statusLine": {
22
22
  "type": "command",
23
23
  "command": "forgen me"
package/CHANGELOG.md CHANGED
@@ -5,6 +5,155 @@ All notable changes to forgen will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.4.3] — 2026-04-30 — Self-correcting hotfix + testbed prep (alpha)
9
+
10
+ forgen-eval introspect testbed (이번 릴리즈에 포함된 자기 측정 시스템) 가
11
+ release-blocker 두 결함을 자가 진단 + fix 까지 한 사이클에 검증한 릴리즈.
12
+ 큰 v0.5.0 testbed-proof 셀링은 실 PASS gate 통과 후로 미루고, 본 릴리즈는
13
+ *hotfix + testbed scaffolding alpha* 로 정직하게 박음.
14
+
15
+ ### Hotfix (forgen body)
16
+
17
+ **TEST-6 — bypass-detector false-positive fix** (`fix`)
18
+ - `src/engine/lifecycle/bypass-detector.ts`: Korean stop list (실행/사용/선언/수행/처리/작성/호출/적용 + 변형) + parens-heuristic 정밀화
19
+ - 기존 root cause: Korean regex `(\S+)\s*(?:말라|금지|하지\s*마|쓰지\s*마)` 가 정책 텍스트 "rm -rf 실행하지 마라" 에서 "실행" 만 추출 → 모든 코드의 "실행" 단어가 false positive (RC5/E9).
20
+ - Parens-heuristic: `(rm -rf, DROP, force-push)` 같은 *예시 목록*은 토큰 추출하되, file path (`tests/e2e/docker/run-test.sh`) 와 exclusion notes (`프로덕션 코드 맥락 한정, 테스트 파일 내 vi.mock 은 제외`) 는 skip.
21
+ - 자기증거: 16일 사용 데이터에서 strict φ 65.66% 의 84% 가 이 단일 버그 (3 L1 rules: no-rm-rf-unconfirmed, e2e-before-done, no-mock-as-proof). 향후 0 false positive 박힘.
22
+
23
+ **TEST-1 — fact-vs-agreement Stop hook wiring** (`fix`)
24
+ - `src/hooks/stop-guard.ts`: `checkFactVsAgreement` import + alert-level invocation. `kind: 'correction'` (no block) — 원 design intent ("alert level only — block 은 TEST-2 에서") 준수.
25
+ - 기존 결함: `src/checks/fact-vs-agreement.ts` 코드 존재했으나 어떤 hook 도 호출 안 함 (forgen-eval introspect 가 발견한 wiring gap).
26
+
27
+ ### Repo / infra
28
+
29
+ **GitHub repo migration** (`chore`)
30
+ - `wooo-jin/forgen` → `forgen-team/forgen` 이전 (1 star + 6 issues 자동 마이그레이션, redirect 자동)
31
+ - npm scope `@wooojin/forgen` 그대로 유지 (npm scope ≠ GitHub org 정상 패턴)
32
+ - 11 파일 URL bulk 갱신 (READMEs + plugin.json + CONTRIBUTING + CHANGELOG + SECURITY)
33
+
34
+ **npm workspaces enable** (`chore`)
35
+ - `"workspaces": ["packages/*"]` 추가 — forgen-eval 같은 부속 alpha package 호스팅용
36
+ - 본 forgen 패키지 무게 영향 0 (peerDep 모델, forgen-eval은 별도 publish)
37
+
38
+ ### Testbed scaffolding (alpha — private workspace)
39
+
40
+ **`@wooojin/forgen-eval@0.4.3-alpha.0` (private, not published)** (`feat`)
41
+ - `packages/forgen-eval/` — forgen 효용 검증 testbed scaffolding
42
+ - 7-축 메트릭: γ_slope (Cohen's d + Wilcoxon r), β_likert, δ/ε/ζ rate, φ Wilson-CI master gate, ψ weighted synergy
43
+ - κ (Cohen's + Fleiss') judge agreement
44
+ - 5 arms (vanilla / forgen-only / claude-mem-only via CLI invoke / forgen+mem / gstack)
45
+ - DEV (Sonnet 4.6 + Qwen + Llama Triple) + PUBLIC (Qwen + Llama Dual) judge tracks
46
+ - vitest 22/22 PASS
47
+
48
+ **`forgen-team/forgen-eval-data` 외부 dataset repo** (`feat`)
49
+ - https://github.com/forgen-team/forgen-eval-data — CC-BY-SA-4.0
50
+ - 10 personas (4 academic + 3 github-issue + 3 forgen-user-anonymized, seed-unreviewed)
51
+ - CURATION.md — 외부 PR 정책 (자체 작성 금지, 2-reviewer 강제)
52
+
53
+ **claude-mem coexistence (Plugin model)** (`design`)
54
+ - ADR-004 amendment — orchestration 가설 폐기, Plugin model 확정 (사용자가 둘 다 별도 plugin install)
55
+ - forgen 본체에 claude-mem 의존성 추가 안 함 (AGPL-3.0 회피)
56
+ - spec §10a — 6 사용자 시나리오 → 메트릭 매핑 narrative
57
+
58
+ ### Documentation
59
+
60
+ - `docs/plans/2026-04-28-forgen-testbed-proof-spec.md` — Deep Interview 11라운드 spec
61
+ - `docs/spike/2026-04-28-claude-mem-spike.md` — claude-mem 실측 (AGPL/Plugin model 발견)
62
+ - `docs/adr/ADR-004/005/006-*.md` — coexistence / module / metrics ADRs
63
+ - `docs/release/v0.5.0-checklist.md` — 미래 v0.5.0 게이트 (이 릴리즈는 *준비*)
64
+
65
+ ### 알려진 한계 — 정직 disclosure
66
+
67
+ **φ master gate 미통과 (current 10.53%, target ≤ 5%)** — 이 릴리즈는 *측정 시스템*이지 *PASS 입증*이 아님:
68
+ - TEST-6 fix 적용으로 strict φ 65.66% → 10.53% (84% reduction). 미래 introspect 사이클에서 추가 감소 예상.
69
+ - 남은 5.53pp 는 user-rule scope 영역 (예: `.then` async/await 룰의 사용자 우회). Pattern bug 아님.
70
+ - 진짜 PASS gate (φ ≤ 5%) 통과 시 v0.5.0 출시.
71
+
72
+ **Self-evidence**: forgen 의 자기 검증 시스템 (`packages/forgen-eval/src/runners/introspect.ts`) 이 자기 자신의 패턴 매칭 버그를 6주 만에 정밀하게 짚어내고 fix 까지 검증한 첫 사이클. v0.4.0 trust restoration 미션이 self-correcting harness 로 한 발자국 더.
73
+
74
+ ### 회귀 검증
75
+ - vitest: 2356/2356 (216 files)
76
+ - bypass-detector: 14/14 (3 RC5/E9 regression 신규)
77
+ - forgen-eval: 22/22
78
+ - Docker e2e: 77/77 (`~/.forgen/state/e2e-result.json` round 14)
79
+ - 회귀: 0
80
+
81
+ ## [0.4.2] - 2026-04-27
82
+
83
+ ### v0.4.2 — Trust hotfix + 학습 회로 4축 확장
84
+
85
+ v0.4.1 이 신뢰 회복 릴리스였다면, v0.4.2 는 **외부 진단(trust-hotfix-report)을 측정으로 검증해 5개 W 를 닫고**, 동시에 v0.4.1 자기 분석에서 발견된 **자동 학습이 4축 중 2축에만 닿는 결함(D1)** 과 **검증 레이어 invariant 부재(P1~P4)** 까지 한 사이클에 통합한 릴리스.
86
+
87
+ **M1 — RC6 가드: forge-loop findings 자동 inject** (`feat`)
88
+ - `src/hooks/shared/forge-loop-state.ts` 신규 — readForgeLoopState / renderForgeLoopForSession / renderForgeLoopForPrompt
89
+ - `session-recovery` (SessionStart) + `forge-loop-progress` (UserPromptSubmit) 신규 hook 이 직전 forge-loop findings 또는 진행 중 stories 를 ≤1KB 로 inject
90
+ - 자기증거: head -80 truncation 으로 directly 유실됐던 사례 invariant 박제
91
+ - Stale 24h soft / 7d hard cap, XML escape
92
+
93
+ **D1'' — auto-compound axis_refs 4축 분류 확장** (`feat`)
94
+ - `src/core/behavior-classifier.ts` 신규 — 5분기 (workflow/thinking/preference + **safety/autonomy** 신규)
95
+ - LLM prompt 카테고리 7종으로 확장 ([품질안전], [자율성] 추가)
96
+ - 결과: behavior_observation 자동 추출이 4축 모두에 닿음 (이전 2축 → 4축)
97
+ - 측정 자기증거: behavior 627건 중 quality 7 / autonomy 6 만 explicit_correction 경로로 들어왔던 결함 해결
98
+
99
+ **P2 — false-positive corpus golden test** (`test`)
100
+ - `tests/invariants/no-false-positive-block.test.ts` (FP1~5 + RC5-E9, 8 케이스)
101
+ - `tests/invariants/true-positive-block.test.ts` (E5/E6 정당 block 5 케이스)
102
+ - 신규 detector CI gate — vitest 가 tests/invariants/* 자동 포함
103
+
104
+ **P3' — Blocking ALLOW-LIST 정책 + denyOrObserve helper** (`feat`)
105
+ - `src/hooks/shared/blocking-allowlist.ts` (4개 멤버: stop-guard / pre-tool-use / secret-filter / db-guard)
106
+ - `denyOrObserve(hookName, reason, observer?)` helper — ALLOW-LIST 외 hook 의 deny 시도가 자동 관찰 모드로 강등
107
+ - 점진 마이그레이션 시작점 (기존 hook 들은 별도 PR)
108
+
109
+ **P4 — fix:feat 비율 셀프 가드** (`feat`)
110
+ - `src/core/git-stats.ts` — 최근 30커밋 fix:feat 비율 측정 (fix(test):/fix(docs): 제외)
111
+ - forgen stats 에 "Repo health" 섹션 + forgen doctor 가 30% 초과 시 경고
112
+ - v0.4.2 릴리즈 시점 측정값: **29%** (정상 범위, ⚠ 미발생)
113
+
114
+ **W1 — 한국어 README 설치 명령 오타 fix** (`fix`)
115
+ - `README.ko.md:86, 146` 의 `npm install -g /forgen` → `@wooojin/forgen`
116
+ - `tests/readme-install-contract.test.ts` 4 로케일 일치 invariant
117
+
118
+ **W2 — 온보딩 2/4 문항 계약 통일** (`fix`)
119
+ - `src/cli.ts:164, 469` 도움말 `2-question` → `4-question`
120
+ - `src/forge/onboarding.ts` 주석 4문항 갱신 + spec 경로 정정 (docs/history/)
121
+ - `tests/onboarding-contract.test.ts` — askChoice 호출 수 vs help text 일치
122
+
123
+ **W3 — agent 인벤토리 12↔13 정렬** (`fix`)
124
+ - `README.md:381` "12 built-in agents" → "13" + ch-solution-evolver Plan-only 표 추가
125
+ - `tests/agent-inventory-contract.test.ts` — agents/ 디렉토리 = README + verify-v3.sh 단일 source
126
+
127
+ **W4 — hooks-generator releaseMode 옵션** (`feat`)
128
+ - `generateHooksJson({ releaseMode: true })` 환경 독립 모드 — plugin 감지 + hook-config 비활성화 모두 무시
129
+ - `prepack-hooks.cjs` 가 releaseMode=true 사용 (HOME swap 도 유지하여 double safety)
130
+ - `tests/hooks-generator-release-mode.test.ts` — mock plugin / mock disable 양쪽 검증
131
+
132
+ **W5 — 하드코딩 → HOOK_REGISTRY.length 동적 read** (`refactor`)
133
+ - 3 자리 (plugin-coexistence / harness-e2e / chain-verification) 의 `21` 하드코딩 제거 → 동적 length
134
+ - `tests/contract-single-source.test.ts` 자체 invariant — 향후 하드코딩 추가 시 자동 fail
135
+ - A3 false-positive 가드: hook-timing/cache-lock-integration 의 다른 의미 20 은 건드리지 않음
136
+
137
+ **D2 — autonomy axis confidence 직접 경로** (`fix`)
138
+ - `bumpAxisConfidence(axis, delta)` — explicit_correction 의 axis_hint 가 즉시 confidence bump
139
+ - `evidence-processor.ts` 에서 호출: avoid-this +0.04, 그 외 +0.02
140
+ - 자기증거: autonomy explicit_correction 6건이 score 못 움직였던 결함 해결
141
+ - facet 값은 안 건드리고 confidence 만 — 회귀 위험 최소
142
+
143
+ **자기증거 박제** (`docs`)
144
+ - `docs/issues/D2-autonomy-facet-stuck.md` — D2 root cause 추적
145
+ - `docs/issues/W4-W5-self-evidence.md` — 본 forge-loop 1차에서 W4/W5 antipattern 을 단기 회피로 재생산한 사례 (RC7 후보)
146
+ - compound 4 박제: rc6-meta-amnesia, rc7-diagnostic-self-fix, validator-layer-invariant, interview-axes-disconnect-RETRACTED
147
+
148
+ **회귀**:
149
+ - vitest **2215/2215** (199 files, 신규 13 테스트 파일)
150
+ - Docker e2e **77/77 + ALL CHECKS PASSED** (round 12, mock_detected:false)
151
+ - typecheck 0
152
+
153
+ **Outstanding (별도 PR)**: P3' enforcement 의 기존 hook 마이그레이션, prepack-hooks.cjs 의 HOME swap 단순화
154
+
155
+ ---
156
+
8
157
  ## [0.4.1] - 2026-04-24
9
158
 
10
159
  ### v0.4.1 — 하네스가 당신을 담고 간다
@@ -464,7 +613,7 @@ Three-phase evolution loop around the existing compound solution store:
464
613
  - **Pack Marketplace** — GitHub-based community pack sharing
465
614
  - `forgen pack publish <name>` — publish verified solutions to GitHub + registry PR
466
615
  - `forgen pack search <query>` — search community registry
467
- - Registry: [wooo-jin/forgen-registry](https://github.com/wooo-jin/forgen-registry)
616
+ - Registry: [forgen-team/forgen-registry](https://github.com/forgen-team/forgen-registry)
468
617
  - **Lab compound events** — 6 new event types (compound-injected, compound-reflected, compound-negative, compound-extracted, compound-promoted, compound-demoted)
469
618
  - 83 new tests (solution-format, prompt-injection-filter, solution-index, compound-lifecycle, compound-extractor)
470
619
 
@@ -635,17 +784,17 @@ Three-phase evolution loop around the existing compound solution store:
635
784
  - Bilingual documentation (EN/KO)
636
785
  - Core CLI commands: `fgx` entrypoint
637
786
 
638
- [Unreleased]: https://github.com/wooo-jin/forgen/compare/v3.0.0...HEAD
639
- [3.0.0]: https://github.com/wooo-jin/forgen/compare/v2.1.0...v3.0.0
640
- [2.1.0]: https://github.com/wooo-jin/forgen/compare/v2.0.0...v2.1.0
641
- [2.0.0]: https://github.com/wooo-jin/forgen/compare/v1.7.0...v2.0.0
642
- [1.7.0]: https://github.com/wooo-jin/forgen/compare/v1.6.3...v1.7.0
643
- [1.6.3]: https://github.com/wooo-jin/forgen/compare/v1.6.2...v1.6.3
644
- [1.6.2]: https://github.com/wooo-jin/forgen/compare/v1.6.1...v1.6.2
645
- [1.6.1]: https://github.com/wooo-jin/forgen/compare/v1.6.0...v1.6.1
646
- [1.6.0]: https://github.com/wooo-jin/forgen/compare/v1.4.0...v1.6.0
647
- [1.4.0]: https://github.com/wooo-jin/forgen/compare/v1.3.0...v1.4.0
648
- [1.3.0]: https://github.com/wooo-jin/forgen/compare/v1.1.0...v1.3.0
649
- [1.1.0]: https://github.com/wooo-jin/forgen/compare/v1.0.1...v1.1.0
650
- [1.0.1]: https://github.com/wooo-jin/forgen/compare/v1.0.0...v1.0.1
651
- [1.0.0]: https://github.com/wooo-jin/forgen/releases/tag/v1.0.0
787
+ [Unreleased]: https://github.com/forgen-team/forgen/compare/v3.0.0...HEAD
788
+ [3.0.0]: https://github.com/forgen-team/forgen/compare/v2.1.0...v3.0.0
789
+ [2.1.0]: https://github.com/forgen-team/forgen/compare/v2.0.0...v2.1.0
790
+ [2.0.0]: https://github.com/forgen-team/forgen/compare/v1.7.0...v2.0.0
791
+ [1.7.0]: https://github.com/forgen-team/forgen/compare/v1.6.3...v1.7.0
792
+ [1.6.3]: https://github.com/forgen-team/forgen/compare/v1.6.2...v1.6.3
793
+ [1.6.2]: https://github.com/forgen-team/forgen/compare/v1.6.1...v1.6.2
794
+ [1.6.1]: https://github.com/forgen-team/forgen/compare/v1.6.0...v1.6.1
795
+ [1.6.0]: https://github.com/forgen-team/forgen/compare/v1.4.0...v1.6.0
796
+ [1.4.0]: https://github.com/forgen-team/forgen/compare/v1.3.0...v1.4.0
797
+ [1.3.0]: https://github.com/forgen-team/forgen/compare/v1.1.0...v1.3.0
798
+ [1.1.0]: https://github.com/forgen-team/forgen/compare/v1.0.1...v1.1.0
799
+ [1.0.1]: https://github.com/forgen-team/forgen/compare/v1.0.0...v1.0.1
800
+ [1.0.0]: https://github.com/forgen-team/forgen/releases/tag/v1.0.0
package/CONTRIBUTING.md CHANGED
@@ -5,7 +5,7 @@ Thank you for your interest in contributing! forgen is a philosophy-driven Claud
5
5
  ## Quick Start
6
6
 
7
7
  ```bash
8
- git clone https://github.com/wooo-jin/forgen.git
8
+ git clone https://github.com/forgen-team/forgen.git
9
9
  cd forgen
10
10
  npm install
11
11
  npm run build
@@ -95,4 +95,4 @@ forgen is built around five principles: `understand-before-act`, `decompose-to-c
95
95
 
96
96
  ## Questions
97
97
 
98
- Open a [GitHub Issue](https://github.com/wooo-jin/forgen/issues) for questions, bug reports, or feature proposals.
98
+ Open a [GitHub Issue](https://github.com/forgen-team/forgen/issues) for questions, bug reports, or feature proposals.
package/README.ja.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/wooo-jin/forgen/main/assets/banner.png" alt="Forgen" width="100%"/>
2
+ <img src="https://raw.githubusercontent.com/forgen-team/forgen/main/assets/banner.png" alt="Forgen" width="100%"/>
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -182,22 +182,30 @@ Claude が `correction-record` MCP ツールを呼び出します。修正は、
182
182
  ## クイックスタート
183
183
 
184
184
  ```bash
185
- # 1. インストール
185
+ # 1. インストール (グローバル CLI なので必ず -g)
186
186
  npm install -g @wooojin/forgen
187
187
 
188
- # 2. 初回実行4問オンボーディング(英語/韓国語選択)
189
- forgen
188
+ # 2. ホスト登録Claude Code / Codex / 両方
189
+ forgen install both # 3択インタラクティブ: claude / codex / both
190
+ # または非対話:
191
+ forgen install claude
192
+ forgen install codex
190
193
 
191
- # 3. 以降毎日
192
- forgen
194
+ # 3. 初回実行 — 4問オンボーディング (英語/韓国語選択)
195
+ forgen # デフォルト: Claude
196
+ forgen --runtime codex # Codex で実行
197
+ forgen config default-host codex # 永続デフォルトホスト設定
193
198
  ```
194
199
 
195
200
  ### 前提条件
196
201
 
197
- - **Node.js** >= 20SQLite セッション検索には >= 22 を推奨)
198
- - **Claude Code** インストール・認証済み(`npm i -g @anthropic-ai/claude-code`)
202
+ - **Node.js** >= 20 (SQLite セッション検索には >= 22 を推奨)
203
+ - **少なくとも 1 つのホスト** インストール・認証済み:
204
+ - **Claude Code** — `npm i -g @anthropic-ai/claude-code`
205
+ - **Codex CLI** — [Codex docs](https://github.com/openai/codex) を参照
206
+ - 両方利用可 — `forgen install both` が両方に hook/MCP を対称登録
199
207
 
200
- > **ベンダー依存:** forgen は Claude Code をラップします。Anthropic API または Claude Code の変更が動作に影響する可能性があります。Claude Code 1.0.x / 2.1.x でテスト済み。
208
+ > **ベンダー依存:** forgen は Claude Code Codex CLI を対称ラップします (Claude が動作基準、Codex が同等性拡張)。上流 API/CLI の変更が動作に影響する可能性があります。Claude Code 1.0.x / 2.1.x、Codex 0.x でテスト済み。
201
209
 
202
210
  ### 隔離 / CI / Docker での利用
203
211
 
package/README.ko.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/wooo-jin/forgen/main/assets/banner.png" alt="Forgen" width="100%"/>
2
+ <img src="https://raw.githubusercontent.com/forgen-team/forgen/main/assets/banner.png" alt="Forgen" width="100%"/>
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -83,7 +83,7 @@ forgen compound import <path> # 다른 머신에서 그대로 재연
83
83
  ### 첫 실행 (1회, 약 1분)
84
84
 
85
85
  ```bash
86
- npm install -g /forgen
86
+ npm install -g @wooojin/forgen
87
87
  forgen
88
88
  ```
89
89
 
@@ -142,22 +142,30 @@ Claude가 `correction-record` MCP 도구를 호출합니다. 교정은 축 분
142
142
  ## 빠른 시작
143
143
 
144
144
  ```bash
145
- # 1. 설치
146
- npm install -g /forgen
147
-
148
- # 2. 실행4문항 온보딩 (영어/한국어 선택)
149
- forgen
150
-
151
- # 3. 이후 매일
152
- forgen
145
+ # 1. 설치 (반드시 -g — forgen 은 글로벌 CLI)
146
+ npm install -g @wooojin/forgen
147
+
148
+ # 2. 호스트 등록Claude Code / Codex / 양쪽
149
+ forgen install both # 3지선다 인터랙티브: claude / codex / both
150
+ # 또는 비대화형:
151
+ forgen install claude
152
+ forgen install codex
153
+
154
+ # 3. 첫 실행 — 4문항 온보딩 (영어/한국어 선택)
155
+ forgen # 기본: Claude
156
+ forgen --runtime codex # Codex 로 실행
157
+ forgen config default-host codex # 영구 기본 호스트 설정
153
158
  ```
154
159
 
155
160
  ### 사전 요구사항
156
161
 
157
162
  - **Node.js** >= 20 (SQLite 세션 검색은 >= 22 권장)
158
- - **Claude Code** 설치 및 인증 (`npm i -g @anthropic-ai/claude-code`)
163
+ - **하나 이상의 호스트** 설치 및 인증:
164
+ - **Claude Code** — `npm i -g @anthropic-ai/claude-code`
165
+ - **Codex CLI** — [Codex docs](https://github.com/openai/codex) 참고
166
+ - 둘 다 사용 가능 — `forgen install both` 가 양쪽에 hook/MCP 를 대칭 등록
159
167
 
160
- > **벤더 의존성:** forgen은 Claude Code 래핑합니다. Anthropic API 또는 Claude Code 변경이 동작에 영향을 줄 수 있습니다. Claude Code 1.0.x / 2.1.x 에서 테스트됨.
168
+ > **벤더 의존성:** forgen 은 Claude Code Codex CLI 대칭 래핑합니다 (Claude 동작 기준, Codex 가 동등성 확장). 상위 API/CLI 변경이 동작에 영향을 줄 수 있습니다. Claude Code 1.0.x / 2.1.x, Codex 0.x 에서 테스트됨.
161
169
 
162
170
  ### 격리 / CI / Docker 사용
163
171
 
package/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/wooo-jin/forgen/main/assets/banner.png" alt="Forgen" width="100%"/>
2
+ <img src="https://raw.githubusercontent.com/forgen-team/forgen/main/assets/banner.png" alt="Forgen" width="100%"/>
3
3
  </p>
4
4
 
5
5
  <p align="center">
6
- <strong>When Claude says "done", forgen makes it prove it.</strong><br/>
7
- Turn-level self-verification + personalized rules, at <strong>$0 extra API cost</strong>.
6
+ <strong>When your agent says "done", forgen makes it prove it.</strong><br/>
7
+ Turn-level self-verification + personalized rules for <strong>Claude Code</strong> and <strong>Codex CLI</strong>, at <strong>$0 extra API cost</strong>.
8
8
  </p>
9
9
 
10
10
  <p align="center">
@@ -57,7 +57,9 @@ Claude: "측정 없이 점수를 매겼습니다. 실 테스트부터 실행합
57
57
 
58
58
  The same mechanism also fires when Claude writes conclusions faster than evidence ("done. passed. shipped. verified." with no measurement context), or claims facts ("테스트가 통과합니다") without ever having executed them. You can also define **custom rules** (e.g. "require npm test evidence before saying 'done' in this repo") via `forgen compound --rule` — they slot into the same Stop-hook dispatcher.
59
59
 
60
- This is **Mech-B self-check prompt-inject**. It works because Claude Code's Stop hook accepts `decision: "block"` + `reason`, and Claude in the next turn reads that reason as input. We verified it end-to-end on 10 scenarios at $1.74 total cost ([A1 spike report](docs/spike/mech-b-a1-verification-report.md)), and v0.4.1 added built-in guards so you get the first block **without writing any rule**.
60
+ This is **Mech-B self-check prompt-inject**. It works because Claude Code's Stop hook accepts `decision: "block"` + `reason`, and Claude in the next turn reads that reason as input. Codex CLI gets the same treatment via the symmetric host adapter (v0.4.3, [multi-host core design](docs/superpowers/specs/2026-04-27-forgen-multi-host-core-design.md)). We verified it end-to-end on 10 scenarios at $1.74 total cost ([A1 spike report](docs/spike/mech-b-a1-verification-report.md)), and v0.4.1 added built-in guards so you get the first block **without writing any rule**.
61
+
62
+ > **v0.4.3 self-correction story:** the same guards detected their own 16-day false-positive (strict φ 65.66% — 84% from a single Korean-regex bug), and the [`forgen-eval`](packages/forgen-eval/) introspect testbed (alpha) flagged a `TEST-1` wiring gap on top of it. Both fixes shipped in v0.4.3 — forgen finding and fixing forgen. Details in [CHANGELOG](CHANGELOG.md).
61
63
 
62
64
  🎬 **See it happen** (27 seconds):
63
65
 
@@ -187,19 +189,27 @@ Updated rules are rendered with your corrections included. Compound knowledge is
187
189
  # 1. Install (MUST use -g — forgen is a global CLI)
188
190
  npm install -g @wooojin/forgen
189
191
 
190
- # 2. First run4-question onboarding (English or Korean)
191
- forgen
192
+ # 2. Register forgen on your host(s) Claude Code, Codex, or both
193
+ forgen install both # 3-choice interactive: claude / codex / both
194
+ # or non-interactive:
195
+ forgen install claude
196
+ forgen install codex
192
197
 
193
- # 3. Every day after that
194
- forgen
198
+ # 3. First run 4-question onboarding (English or Korean)
199
+ forgen # default: Claude
200
+ forgen --runtime codex # use Codex
201
+ forgen config default-host codex # set persistent default
195
202
  ```
196
203
 
197
204
  ### Prerequisites
198
205
 
199
206
  - **Node.js** >= 20 (>= 22 recommended for SQLite session search)
200
- - **Claude Code** installed and authenticated (`npm i -g @anthropic-ai/claude-code`)
207
+ - **At least one host** installed and authenticated:
208
+ - **Claude Code** — `npm i -g @anthropic-ai/claude-code`
209
+ - **Codex CLI** — install per [Codex docs](https://github.com/openai/codex)
210
+ - Or both — `forgen install both` registers symmetric hooks/MCP for each
201
211
 
202
- > **Vendor dependency:** Forgen wraps Claude Code. Anthropic API or Claude Code changes may affect behavior. Tested with Claude Code 1.0.x / 2.1.x.
212
+ > **Vendor dependency:** Forgen wraps Claude Code and Codex CLI symmetrically (Claude is the behavior reference; Codex extends with equivalence). Upstream API/CLI changes may affect behavior. Tested with Claude Code 1.0.x / 2.1.x and Codex 0.x.
203
213
 
204
214
  ### Isolated / CI / Docker usage
205
215
 
@@ -378,7 +388,7 @@ Curated, compound-native skills. Each integrates with your accumulated knowledge
378
388
  | `architecture-decision` | "adr" | Weighted trade-off matrix, ADR lifecycle, reversibility classification |
379
389
  | `docker` | "docker", "컨테이너" | Multi-stage builds, security hardening, 10 failure modes
380
390
 
381
- ### 12 built-in agents
391
+ ### 13 built-in agents
382
392
 
383
393
  Sub-agents with physically separated tool access, `Failure_Modes_To_Avoid` sections, and Good/Bad examples. Invoked via `Agent(subagent_type: "ch-<name>")`. The `ch-` prefix avoids collisions with OMC / built-in Claude Code agents.
384
394
 
@@ -397,6 +407,7 @@ Sub-agents with physically separated tool access, `Failure_Modes_To_Avoid` secti
397
407
  | Agent | Model | Role |
398
408
  |-------|:-----:|------|
399
409
  | `ch-planner` | Opus | Strategic planning — decomposes tasks, identifies risks, creates actionable plans |
410
+ | `ch-solution-evolver` | Opus | Propose 3 novel compound-solution candidates from a weakness report (Phase 4 evolution loop) |
400
411
 
401
412
  **Write-enabled (implementation / verification):**
402
413
 
@@ -758,7 +769,27 @@ Safety rules are **hard constraints** -- they cannot be overridden by pack selec
758
769
 
759
770
  Forgen detects other Claude Code plugins (oh-my-claudecode, superpowers, claude-mem) at install time and automatically reduces its context injection by 50% ("yielding principle"). Core safety and compound hooks always remain active. Conflicting skills are skipped when another plugin already provides them.
760
771
 
761
- See [Coexistence Guide](docs/guides/with-omc.md) for details.
772
+ ### Better with claude-mem (recommended pairing)
773
+
774
+ forgen and [claude-mem](https://github.com/thedotmack/claude-mem) solve **complementary** halves of the trust gap:
775
+
776
+ | | forgen | claude-mem |
777
+ |---|---|---|
778
+ | **Job** | Enforcement — block unverified claims | Recall — inject relevant past sessions |
779
+ | **Trigger** | Stop / PreToolUse hooks | UserPromptSubmit hook |
780
+ | **Cost** | $0 (in-turn block/reason) | $0 (vector recall, local) |
781
+
782
+ Install both as separate Claude Code plugins (Plugin model — forgen does not bundle claude-mem; AGPL-3.0 stays at arm's length). When both are present forgen's auto-detect yields context budget so claude-mem's recall has room to land, and the orchestration contract — order, failure isolation, Stop-hook ownership — is documented in [ADR-004](docs/adr/ADR-004-claude-mem-hook-orchestration.md). The pairing is one of the 5 arms tracked by [forgen-eval](packages/forgen-eval/) (see [claude-mem spike](docs/spike/2026-04-28-claude-mem-spike.md)).
783
+
784
+ ```
785
+ You: "fix the auth flow"
786
+ claude-mem: ↓ recalls past auth-flow session, injects 3 relevant chunks
787
+ forgen: ↓ matches your "no mock as proof" rule, primes Stop guard
788
+ Claude: edits → declares done → forgen Stop hook blocks (no test ran)
789
+ → re-runs test → approved
790
+ ```
791
+
792
+ See [Coexistence Guide](docs/guides/with-omc.md) for the full plugin-detection matrix.
762
793
 
763
794
  ---
764
795
 
@@ -768,6 +799,9 @@ See [Coexistence Guide](docs/guides/with-omc.md) for details.
768
799
  |----------|-------------|
769
800
  | [Hooks Reference](docs/reference/hooks-reference.md) | 19 hooks across 3 tiers — events, timeouts, behavior |
770
801
  | [Coexistence Guide](docs/guides/with-omc.md) | Using forgen alongside oh-my-claudecode |
802
+ | [forgen-eval testbed](packages/forgen-eval/) | Alpha self-measurement package — multi-host parity, 7-axis metrics, drift detection (private workspace, v0.4.3+) |
803
+ | [Multi-host core design](docs/superpowers/specs/2026-04-27-forgen-multi-host-core-design.md) | Codex/Claude symmetric host adapter spec |
804
+ | [ADR-005 forgen-eval architecture](docs/adr/ADR-005-forgen-eval-module-architecture.md) | Self-measurement testbed module design |
771
805
  | [CHANGELOG](CHANGELOG.md) | Version history and release notes |
772
806
 
773
807
  ---
package/README.zh.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/wooo-jin/forgen/main/assets/banner.png" alt="Forgen" width="100%"/>
2
+ <img src="https://raw.githubusercontent.com/forgen-team/forgen/main/assets/banner.png" alt="Forgen" width="100%"/>
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -182,22 +182,30 @@ Claude 调用 `correction-record` MCP 工具。纠正作为结构化证据存储
182
182
  ## 快速开始
183
183
 
184
184
  ```bash
185
- # 1. 安装
185
+ # 1. 安装 (必须 -g — forgen 是全局 CLI)
186
186
  npm install -g @wooojin/forgen
187
187
 
188
- # 2. 首次运行4题引导问卷(英语/韩语选择)
189
- forgen
188
+ # 2. 注册主机Claude Code / Codex / 两者
189
+ forgen install both # 三选交互: claude / codex / both
190
+ # 或非交互:
191
+ forgen install claude
192
+ forgen install codex
190
193
 
191
- # 3. 此后每天
192
- forgen
194
+ # 3. 首次运行 — 4题引导问卷 (英语/韩语选择)
195
+ forgen # 默认: Claude
196
+ forgen --runtime codex # 使用 Codex
197
+ forgen config default-host codex # 设置持久默认主机
193
198
  ```
194
199
 
195
200
  ### 前提条件
196
201
 
197
- - **Node.js** >= 20SQLite 会话搜索推荐 >= 22
198
- - **Claude Code** 已安装并认证(`npm i -g @anthropic-ai/claude-code`)
202
+ - **Node.js** >= 20 (SQLite 会话搜索推荐 >= 22)
203
+ - **至少安装一个主机** 并认证:
204
+ - **Claude Code** — `npm i -g @anthropic-ai/claude-code`
205
+ - **Codex CLI** — 参考 [Codex docs](https://github.com/openai/codex)
206
+ - 也可同时使用 — `forgen install both` 对两者对称注册 hook/MCP
199
207
 
200
- > **厂商依赖:** forgen 封装了 Claude Code。Anthropic API Claude Code 的变更可能影响其行为。已在 Claude Code 1.0.x 版本下测试。
208
+ > **厂商依赖:** forgen 对称包装 Claude Code Codex CLI (Claude 为行为基准, Codex 以等价性扩展)。上游 API/CLI 变更可能影响行为。已在 Claude Code 1.0.x / 2.1.x、Codex 0.x 下测试。
201
209
 
202
210
  ---
203
211
 
@@ -0,0 +1,86 @@
1
+ # assets/ — 자산 분리 매핑 (§7.2)
2
+
3
+ > 출처: `docs/superpowers/specs/2026-04-27-forgen-multi-host-core-design.md` §7.2
4
+ > 상태: 1차 매핑 문서 박제 (실 이동 미완료)
5
+ > 작성일: 2026-04-27
6
+
7
+ ---
8
+
9
+ ## 목표 디렉토리 구조
10
+
11
+ ```
12
+ assets/
13
+ claude/ Claude 전용 자산 (manifest, agents, commands, hooks 등록 manifest)
14
+ codex/ Codex 전용 자산 (hooks.json 머지 템플릿, config 스니펫 등)
15
+ shared/ 호스트 무관 공통 자산 (hook 스크립트 본체, 이미지 등)
16
+ ```
17
+
18
+ 현재 `assets/` 루트에 있는 이미지/SVG/데모 파일은 **공통 자산**으로, 향후 `assets/shared/`로 이동합니다.
19
+
20
+ ---
21
+
22
+ ## 자산 매핑 표
23
+
24
+ | 현재 위치 | 목표 위치 | 이동 단계 | 비고 |
25
+ |---|---|---|---|
26
+ | `agents/*.md` | `assets/claude/agents/` | **2차 PR** | Claude Code 전용 서브에이전트 정의. Codex는 `AGENTS.md` 모델이므로 codex/ 동치 미정 |
27
+ | `commands/*.md` | `assets/claude/commands/` | **2차 PR** | Claude Code slash-command 원본. skills/ 생성의 소스 역할 |
28
+ | `skills/{name}/SKILL.md` | `assets/claude/skills/` | **2차 PR** | copy-assets.js 가 commands/ 를 변환하여 생성. Claude Code plugin 표준 |
29
+ | `hooks/hooks.json` | `assets/claude/hooks/hooks.json` + `assets/codex/hooks.json` | **2차 PR** | hooks.json schema 가 Claude/Codex 동일 (§18.4 확인). Codex 등록 시 절대경로 pre-expand 필요 (§18.5) |
30
+ | `hooks/hook-registry.json` | `assets/shared/hook-registry.json` | **2차 PR** | 호스트 무관 메타데이터. 양쪽 어댑터가 동일 registry 참조 |
31
+ | `assets/banner.png` | `assets/shared/banner.png` | **2차 PR** | 호스트 무관 이미지 자산 |
32
+ | `assets/banner.svg` | `assets/shared/banner.svg` | **2차 PR** | 동상 |
33
+ | `assets/architecture.svg` | `assets/shared/architecture.svg` | **2차 PR** | 동상 |
34
+ | `assets/icon.png` | `assets/shared/icon.png` | **2차 PR** | 동상 |
35
+ | `assets/demo-preview.svg` | `assets/shared/demo-preview.svg` | **2차 PR** | 동상 |
36
+ | `assets/demo/*` | `assets/shared/demo/` | **2차 PR** | 동상 |
37
+ | `dist/hooks/*.js` (빌드 산출물) | 이동 없음 — InstallPlan에서 절대경로 inject | **해당 없음** | hook 스크립트 본체는 host 무관 node 스크립트. Claude/Codex 양쪽이 동일 경로를 가리킴 (§14.2) |
38
+
39
+ ### Claude 전용 자산 (`assets/claude/`)
40
+
41
+ - Claude Code plugin manifest (`plugin.json`)
42
+ - `agents/*.md` — Claude Code 서브에이전트 정의
43
+ - `commands/*.md` — slash-command 원본
44
+ - `skills/` — Claude Code plugin 표준 (commands 에서 자동 생성)
45
+ - `hooks/hooks.json` — `${CLAUDE_PLUGIN_ROOT}` 환경변수 참조 버전 (Claude 전용)
46
+
47
+ ### Codex 전용 자산 (`assets/codex/`)
48
+
49
+ - `hooks.json` — 절대경로 pre-expand 버전. `~/.codex/hooks.json` 에 머지할 템플릿
50
+ - `config-snippet.toml` — `~/.codex/config.toml` 의 `[mcp_servers]` 등록 스니펫
51
+ - (Phase 2) Codex `AGENTS.md` 템플릿 — `skills/commands/agents` 의 Codex 등치 (미확정)
52
+
53
+ ### 공통 자산 (`assets/shared/`)
54
+
55
+ - `hook-registry.json` — 호스트 무관 hook 메타데이터 레지스트리
56
+ - `dist/hooks/*.js` — 런타임에 절대경로로 inject (실제 파일 이동 없음)
57
+ - 이미지/SVG/데모 파일 일체
58
+
59
+ ---
60
+
61
+ ## 마이그레이션 단계
62
+
63
+ ### 1차 PR (현재 — 이동 없음)
64
+ - [x] 이 README 박제 — 매핑 의도 문서화
65
+ - [x] `agents/`, `commands/`, `skills/`, `hooks/` 에 이동 예정 주석 추가
66
+ - [ ] `scripts/copy-assets.js` 에 TODO 주석 추가 (다음 작업)
67
+
68
+ ### 2차 PR (실 이동)
69
+ - `agents/`, `commands/`, `skills/` → `assets/claude/`
70
+ - `hooks/hooks.json` → `assets/claude/hooks/hooks.json` (Claude 버전)
71
+ - `hooks/hook-registry.json` → `assets/shared/hook-registry.json`
72
+ - 이미지/SVG/데모 → `assets/shared/`
73
+ - Codex hooks 템플릿 → `assets/codex/hooks.json`
74
+
75
+ ### 3차 PR (어댑터 연동)
76
+ - `scripts/copy-assets.js` 의 소스 경로를 새 구조로 갱신
77
+ - Claude InstallPlan: `assets/claude/` → `~/.claude/plugins/cache/...`
78
+ - Codex InstallPlan: `assets/codex/hooks.json` → 절대경로 pre-expand → `~/.codex/hooks.json` 머지
79
+
80
+ ---
81
+
82
+ ## 호환성 메모
83
+
84
+ - **hooks.json schema 동일성 (§18.4)**: forgen의 현재 `hooks/hooks.json` 형식이 Codex `~/.codex/hooks.json` schema와 완전 동일. 단, `${CLAUDE_PLUGIN_ROOT}` 환경변수는 Codex에서 자동 주입되지 않으므로 절대경로 pre-expand 필수 (§18.5).
85
+ - **agents/commands/skills Codex 동치 미정**: Codex의 prompt 자산 모델은 `AGENTS.md` / `requirements.toml` 중심으로 forgen `skills/commands/agents` 의 직접 대응 표면이 없음. Phase 2 InstallPlan에서 결정.
86
+ - **실 패키지 분리는 3단계 이후**: 현재는 단일 패키지 유지. 구조만 분리 가능한 상태로 준비 (§7.3).