@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.
- package/.claude-plugin/plugin.json +5 -5
- package/CHANGELOG.md +164 -15
- package/CONTRIBUTING.md +2 -2
- package/README.ja.md +17 -9
- package/README.ko.md +20 -12
- package/README.md +46 -12
- package/README.zh.md +17 -9
- package/assets/README.md +86 -0
- package/assets/architecture.svg +100 -0
- package/assets/banner.png +0 -0
- package/assets/banner.svg +53 -0
- package/assets/demo/01-install.gif +0 -0
- package/assets/demo/01-install.tape +54 -0
- package/assets/demo/02-compound-learning.gif +0 -0
- package/assets/demo/02-compound-learning.tape +50 -0
- package/assets/demo/03-forge-personalization.gif +0 -0
- package/assets/demo/03-forge-personalization.tape +64 -0
- package/assets/demo/before-after.gif +0 -0
- package/assets/demo/before-after.tape +98 -0
- package/assets/demo-preview.svg +96 -0
- package/assets/icon.png +0 -0
- package/{hooks → assets/shared}/hook-registry.json +2 -1
- package/dist/cli.js +78 -6
- package/dist/core/auto-compound-runner.js +62 -38
- package/dist/core/behavior-classifier.d.ts +28 -0
- package/dist/core/behavior-classifier.js +46 -0
- package/dist/core/dashboard.d.ts +7 -0
- package/dist/core/dashboard.js +32 -0
- package/dist/core/doctor.js +92 -0
- package/dist/core/git-stats.d.ts +36 -0
- package/dist/core/git-stats.js +79 -0
- package/dist/core/harness.d.ts +1 -1
- package/dist/core/harness.js +27 -20
- package/dist/core/host-detect.d.ts +42 -0
- package/dist/core/host-detect.js +68 -0
- package/dist/core/installer.js +2 -2
- package/dist/core/migrate-cli.d.ts +1 -0
- package/dist/core/migrate-cli.js +19 -0
- package/dist/core/migrate-evidence-host.d.ts +36 -0
- package/dist/core/migrate-evidence-host.js +49 -0
- package/dist/core/settings-injector.js +4 -2
- package/dist/core/spawn.d.ts +1 -1
- package/dist/core/spawn.js +4 -11
- package/dist/core/stats-cli.js +12 -0
- package/dist/core/trust-layer-intent.d.ts +35 -0
- package/dist/core/trust-layer-intent.js +30 -0
- package/dist/core/types.d.ts +1 -1
- package/dist/engine/compound-extractor.js +7 -9
- package/dist/engine/learn-cli.js +4 -2
- package/dist/engine/lifecycle/bypass-detector.d.ts +6 -1
- package/dist/engine/lifecycle/bypass-detector.js +57 -5
- package/dist/fgx.js +2 -1
- package/dist/forge/evidence-processor.js +12 -0
- package/dist/forge/onboarding.d.ts +3 -2
- package/dist/forge/onboarding.js +3 -2
- package/dist/hooks/db-guard.js +3 -3
- package/dist/hooks/forge-loop-progress.d.ts +9 -0
- package/dist/hooks/forge-loop-progress.js +38 -0
- package/dist/hooks/hook-registry.js +1 -1
- package/dist/hooks/hooks-generator.d.ts +15 -1
- package/dist/hooks/hooks-generator.js +18 -16
- package/dist/hooks/keyword-detector.js +1 -1
- package/dist/hooks/post-tool-use.d.ts +1 -1
- package/dist/hooks/post-tool-use.js +13 -4
- package/dist/hooks/pre-compact.js +1 -1
- package/dist/hooks/pre-tool-use.js +4 -4
- package/dist/hooks/rate-limiter.js +2 -2
- package/dist/hooks/session-recovery.js +11 -0
- package/dist/hooks/shared/blocking-allowlist.d.ts +28 -0
- package/dist/hooks/shared/blocking-allowlist.js +38 -0
- package/dist/hooks/shared/forge-loop-state.d.ts +36 -0
- package/dist/hooks/shared/forge-loop-state.js +116 -0
- package/dist/hooks/shared/hook-response.d.ts +18 -0
- package/dist/hooks/shared/hook-response.js +31 -0
- package/dist/hooks/skill-injector.js +1 -1
- package/dist/hooks/stop-guard.js +15 -0
- package/dist/host/capabilities-claude.d.ts +8 -0
- package/dist/host/capabilities-claude.js +46 -0
- package/dist/host/capabilities-codex.d.ts +11 -0
- package/dist/host/capabilities-codex.js +50 -0
- package/dist/host/capabilities-registry.d.ts +11 -0
- package/dist/host/capabilities-registry.js +30 -0
- package/dist/host/codex-adapter.d.ts +8 -5
- package/dist/host/codex-adapter.js +10 -82
- package/dist/host/codex-output-parser.d.ts +39 -0
- package/dist/host/codex-output-parser.js +75 -0
- package/dist/host/exec-host.d.ts +54 -0
- package/dist/host/exec-host.js +92 -0
- package/dist/host/host-runtime.d.ts +37 -0
- package/dist/host/host-runtime.js +51 -0
- package/dist/host/install-claude.d.ts +35 -0
- package/dist/host/install-claude.js +238 -0
- package/dist/host/install-codex.d.ts +44 -0
- package/dist/host/install-codex.js +276 -0
- package/dist/host/install-orchestrator.d.ts +34 -0
- package/dist/host/install-orchestrator.js +126 -0
- package/dist/host/invoke-agent.d.ts +27 -0
- package/dist/host/invoke-agent.js +115 -0
- package/dist/host/parity-harness.d.ts +62 -0
- package/dist/host/parity-harness.js +283 -0
- package/dist/host/projection.d.ts +35 -0
- package/dist/host/projection.js +126 -0
- package/dist/mcp/server.js +11 -0
- package/dist/mcp/tools.js +47 -0
- package/dist/services/session.d.ts +6 -3
- package/dist/services/session.js +33 -4
- package/dist/store/evidence-store.d.ts +1 -0
- package/dist/store/evidence-store.js +34 -3
- package/dist/store/host-mismatch.d.ts +42 -0
- package/dist/store/host-mismatch.js +65 -0
- package/dist/store/profile-store.d.ts +29 -0
- package/dist/store/profile-store.js +53 -0
- package/dist/store/types.d.ts +13 -0
- package/hooks/hooks.json +6 -1
- package/package.json +6 -4
- package/plugin.json +4 -4
- package/scripts/postinstall.js +100 -25
- /package/{agents → assets/claude/agents}/analyst.md +0 -0
- /package/{agents → assets/claude/agents}/architect.md +0 -0
- /package/{agents → assets/claude/agents}/code-reviewer.md +0 -0
- /package/{agents → assets/claude/agents}/critic.md +0 -0
- /package/{agents → assets/claude/agents}/debugger.md +0 -0
- /package/{agents → assets/claude/agents}/designer.md +0 -0
- /package/{agents → assets/claude/agents}/executor.md +0 -0
- /package/{agents → assets/claude/agents}/explore.md +0 -0
- /package/{agents → assets/claude/agents}/git-master.md +0 -0
- /package/{agents → assets/claude/agents}/planner.md +0 -0
- /package/{agents → assets/claude/agents}/solution-evolver.md +0 -0
- /package/{agents → assets/claude/agents}/test-engineer.md +0 -0
- /package/{agents → assets/claude/agents}/verifier.md +0 -0
- /package/{commands → assets/claude/commands}/architecture-decision.md +0 -0
- /package/{commands → assets/claude/commands}/calibrate.md +0 -0
- /package/{commands → assets/claude/commands}/code-review.md +0 -0
- /package/{commands → assets/claude/commands}/compound.md +0 -0
- /package/{commands → assets/claude/commands}/deep-interview.md +0 -0
- /package/{commands → assets/claude/commands}/docker.md +0 -0
- /package/{commands → assets/claude/commands}/forge-loop.md +0 -0
- /package/{commands → assets/claude/commands}/learn.md +0 -0
- /package/{commands → assets/claude/commands}/retro.md +0 -0
- /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.
|
|
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/
|
|
8
|
+
"url": "https://github.com/forgen-team"
|
|
9
9
|
},
|
|
10
|
-
"repository": "https://github.com/
|
|
11
|
-
"homepage": "https://github.com/
|
|
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: [
|
|
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/
|
|
639
|
-
[3.0.0]: https://github.com/
|
|
640
|
-
[2.1.0]: https://github.com/
|
|
641
|
-
[2.0.0]: https://github.com/
|
|
642
|
-
[1.7.0]: https://github.com/
|
|
643
|
-
[1.6.3]: https://github.com/
|
|
644
|
-
[1.6.2]: https://github.com/
|
|
645
|
-
[1.6.1]: https://github.com/
|
|
646
|
-
[1.6.0]: https://github.com/
|
|
647
|
-
[1.4.0]: https://github.com/
|
|
648
|
-
[1.3.0]: https://github.com/
|
|
649
|
-
[1.1.0]: https://github.com/
|
|
650
|
-
[1.0.1]: https://github.com/
|
|
651
|
-
[1.0.0]: https://github.com/
|
|
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/
|
|
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/
|
|
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/
|
|
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.
|
|
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** >= 20
|
|
198
|
-
-
|
|
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
|
|
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/
|
|
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.
|
|
149
|
-
forgen
|
|
150
|
-
|
|
151
|
-
|
|
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
|
-
-
|
|
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
|
|
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/
|
|
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
|
|
7
|
-
Turn-level self-verification + personalized rules
|
|
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.
|
|
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.
|
|
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
|
-
- **
|
|
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
|
|
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
|
-
###
|
|
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
|
-
|
|
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/
|
|
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.
|
|
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** >= 20
|
|
198
|
-
-
|
|
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
|
|
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
|
|
package/assets/README.md
ADDED
|
@@ -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).
|