@wooojin/forgen 0.4.0 → 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 +194 -15
- package/CONTRIBUTING.md +2 -2
- package/README.ja.md +74 -9
- package/README.ko.md +77 -12
- package/README.md +127 -25
- package/README.zh.md +43 -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/checks/conclusion-verification-ratio.d.ts +37 -0
- package/dist/checks/conclusion-verification-ratio.js +86 -0
- package/dist/checks/fact-vs-agreement.d.ts +47 -0
- package/dist/checks/fact-vs-agreement.js +92 -0
- package/dist/checks/self-score-deflation.d.ts +38 -0
- package/dist/checks/self-score-deflation.js +108 -0
- package/dist/cli.js +98 -6
- package/dist/core/auto-compound-runner.js +137 -49
- 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 +41 -2
- package/dist/core/doctor.js +118 -5
- package/dist/core/extraction-notice.d.ts +18 -0
- package/dist/core/extraction-notice.js +64 -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/init-cli.d.ts +26 -0
- package/dist/core/init-cli.js +104 -0
- package/dist/core/init.js +17 -0
- package/dist/core/inspect-cli.js +1 -2
- package/dist/core/installer.js +2 -2
- package/dist/core/migrate-cli.d.ts +11 -0
- package/dist/core/migrate-cli.js +53 -0
- package/dist/core/migrate-evidence-host.d.ts +36 -0
- package/dist/core/migrate-evidence-host.js +49 -0
- package/dist/core/paths.d.ts +8 -1
- package/dist/core/paths.js +11 -2
- package/dist/core/recall-cli.d.ts +26 -0
- package/dist/core/recall-cli.js +125 -0
- package/dist/core/recall-reference-detector.d.ts +43 -0
- package/dist/core/recall-reference-detector.js +65 -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.d.ts +21 -0
- package/dist/core/stats-cli.js +133 -10
- 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/core/uninstall.js +2 -1
- package/dist/engine/compound-cli.js +1 -0
- package/dist/engine/compound-export.js +8 -3
- package/dist/engine/compound-extractor.js +7 -9
- package/dist/engine/learn-cli.js +5 -6
- package/dist/engine/lifecycle/bypass-detector.d.ts +6 -1
- package/dist/engine/lifecycle/bypass-detector.js +57 -5
- package/dist/engine/lifecycle/lifecycle-cli.js +4 -4
- package/dist/engine/lifecycle/meta-reclassifier.js +3 -3
- package/dist/engine/lifecycle/orchestrator.js +2 -2
- package/dist/engine/lifecycle/signals.js +6 -6
- package/dist/engine/meta-learning/session-quality-scorer.d.ts +1 -6
- package/dist/engine/meta-learning/session-quality-scorer.js +2 -21
- package/dist/engine/skill-promoter.js +3 -6
- 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/context-guard.js +1 -1
- package/dist/hooks/dangerous-patterns.json +3 -3
- package/dist/hooks/db-guard.js +21 -5
- 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/intent-classifier.js +1 -1
- package/dist/hooks/keyword-detector.js +2 -2
- package/dist/hooks/notepad-injector.js +1 -1
- package/dist/hooks/permission-handler.js +1 -1
- package/dist/hooks/post-tool-failure.js +1 -1
- package/dist/hooks/post-tool-use.d.ts +7 -1
- package/dist/hooks/post-tool-use.js +50 -23
- package/dist/hooks/pre-compact.js +2 -2
- package/dist/hooks/pre-tool-use.d.ts +7 -0
- package/dist/hooks/pre-tool-use.js +28 -10
- package/dist/hooks/rate-limiter.js +3 -3
- package/dist/hooks/secret-filter.js +1 -1
- package/dist/hooks/session-recovery.js +12 -1
- package/dist/hooks/shared/blocking-allowlist.d.ts +28 -0
- package/dist/hooks/shared/blocking-allowlist.js +38 -0
- package/dist/hooks/shared/command-parser.d.ts +44 -0
- package/dist/hooks/shared/command-parser.js +50 -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 +30 -2
- package/dist/hooks/shared/hook-response.js +61 -3
- package/dist/hooks/skill-injector.js +2 -2
- package/dist/hooks/slop-detector.js +2 -2
- package/dist/hooks/solution-injector.d.ts +9 -0
- package/dist/hooks/solution-injector.js +48 -5
- package/dist/hooks/stop-guard.js +152 -13
- package/dist/hooks/subagent-tracker.js +1 -1
- 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/i18n/index.js +3 -5
- 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 +45 -3
- package/dist/store/host-mismatch.d.ts +42 -0
- package/dist/store/host-mismatch.js +65 -0
- package/dist/store/implicit-feedback-store.d.ts +59 -0
- package/dist/store/implicit-feedback-store.js +153 -0
- package/dist/store/profile-store.d.ts +29 -0
- package/dist/store/profile-store.js +53 -0
- package/dist/store/rule-store.js +8 -0
- package/dist/store/types.d.ts +13 -0
- package/hooks/hooks.json +6 -1
- package/package.json +7 -5
- 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
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">
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<a href="#quick-start">Quick Start</a> ·
|
|
19
19
|
<a href="#how-it-works">How It Works</a> ·
|
|
20
20
|
<a href="#4-axis-personalization">4-Axis</a> ·
|
|
21
|
+
<a href="#the-harness-carries-you">Harness Vision</a> ·
|
|
21
22
|
<a href="#commands">Commands</a> ·
|
|
22
23
|
<a href="#architecture">Architecture</a> ·
|
|
23
24
|
<a href="#safety">Safety</a>
|
|
@@ -37,24 +38,28 @@
|
|
|
37
38
|
You've been burned: Claude says "tests pass, implementation done" — you run it — it doesn't work. forgen closes that gap.
|
|
38
39
|
|
|
39
40
|
```
|
|
40
|
-
You: "
|
|
41
|
-
Claude: ...makes edits...
|
|
42
|
-
Claude: "구현
|
|
41
|
+
You: "Update the auth middleware."
|
|
42
|
+
Claude: ...makes edits to src/middleware/auth.ts...
|
|
43
|
+
Claude: "구현 완료. 신뢰도 95/100."
|
|
43
44
|
|
|
44
|
-
[forgen:stop-guard/
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
[forgen:stop-guard/builtin:self-score-inflation]
|
|
46
|
+
자가 점수 상승 선언 1건 (95/100). 측정 도구 호출 0회 — 숫자를 뒷받침할
|
|
47
|
+
실행/확인 증거 없음. 테스트/빌드/curl 실행 결과를 턴에 포함해 재응답.
|
|
47
48
|
|
|
48
|
-
Claude: "
|
|
49
|
-
|
|
50
|
-
"
|
|
49
|
+
Claude: "측정 없이 점수를 매겼습니다. 실 테스트부터 실행합니다..."
|
|
50
|
+
$ npm test
|
|
51
|
+
"31 passed / 0 failed. auth middleware 구현 완료."
|
|
51
52
|
|
|
52
53
|
[forgen] ✓ approved
|
|
53
54
|
```
|
|
54
55
|
|
|
55
|
-
**What just happened**: Claude's Stop hook
|
|
56
|
+
**What just happened**: Claude's Stop hook detected a score claim (`95/100`) without any measurement tool call (`Bash` / `NotebookEdit`) in the turn — one of forgen's **three built-in meta guards** (TEST-1 fact vs agreement, **TEST-2 self-score inflation**, TEST-3 conclusion/verification ratio). Claude read the block `reason`, retracted, ran the real test, and re-submitted. **Zero extra API calls** — it all happened in the same session turn Claude was going to produce anyway.
|
|
56
57
|
|
|
57
|
-
|
|
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
|
+
|
|
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).
|
|
58
63
|
|
|
59
64
|
🎬 **See it happen** (27 seconds):
|
|
60
65
|
|
|
@@ -92,6 +97,31 @@ Forgen profiles your work style, learns from your corrections, and renders perso
|
|
|
92
97
|
|
|
93
98
|
---
|
|
94
99
|
|
|
100
|
+
## The harness carries you
|
|
101
|
+
|
|
102
|
+
Personalization is the surface. The deeper idea: **every session leaves a trace, and those traces compound into a harness that reasons like you do.** Your corrections, your conventions, your trade-off preferences — extracted from conversation, stored under `~/.forgen/me/`, and replayed back to Claude on every future session.
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
Conversation ──► Extracted: solution / rule / behavior / profile update
|
|
106
|
+
─────────────────────────────────────────────────────
|
|
107
|
+
│
|
|
108
|
+
▼
|
|
109
|
+
Next session ◄── Injected: UserPromptSubmit context + rendered rules
|
|
110
|
+
+ Stop-hook guards calibrated to *your* standards
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
After a few weeks this harness stops being "a tool that enforces rules" and starts being **a portable bundle of how you judge work**. One command exports it:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
forgen compound export # → forgen-knowledge-YYYY-MM-DD.tar.gz
|
|
117
|
+
# (rules + solutions + behavior — your philosophy)
|
|
118
|
+
forgen compound import <path> # replay it on another machine
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
That's the north star: *a Claude on your laptop that judges like you do, and a tarball you can carry.*
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
95
125
|
## What happens when you use forgen
|
|
96
126
|
|
|
97
127
|
### First run (one time, ~1 minute)
|
|
@@ -159,19 +189,59 @@ Updated rules are rendered with your corrections included. Compound knowledge is
|
|
|
159
189
|
# 1. Install (MUST use -g — forgen is a global CLI)
|
|
160
190
|
npm install -g @wooojin/forgen
|
|
161
191
|
|
|
162
|
-
# 2.
|
|
163
|
-
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
|
|
164
197
|
|
|
165
|
-
# 3.
|
|
166
|
-
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
|
|
167
202
|
```
|
|
168
203
|
|
|
169
204
|
### Prerequisites
|
|
170
205
|
|
|
171
206
|
- **Node.js** >= 20 (>= 22 recommended for SQLite session search)
|
|
172
|
-
- **
|
|
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
|
|
211
|
+
|
|
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.
|
|
173
213
|
|
|
174
|
-
|
|
214
|
+
### Isolated / CI / Docker usage
|
|
215
|
+
|
|
216
|
+
Forgen's home directory is `~/.forgen` by default, but can be overridden per-process:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
# Fresh isolated home — does NOT touch your real ~/.forgen
|
|
220
|
+
FORGEN_HOME=/tmp/forgen-clean forgen init # provisions 15-solution starter pack
|
|
221
|
+
FORGEN_HOME=/tmp/forgen-clean forgen stats # shows stats from the isolated home
|
|
222
|
+
FORGEN_HOME=/tmp/forgen-clean claude -p "..." # hooks inherit the env → isolated logs
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Claude Code hook processes inherit the parent env, so any `claude` command
|
|
226
|
+
prefixed with `FORGEN_HOME=...` routes all state (rules, solutions, behavior,
|
|
227
|
+
enforcement logs) into that directory. Useful for:
|
|
228
|
+
|
|
229
|
+
- CI pipelines validating forgen against a pinned seed set
|
|
230
|
+
- Reproducing buyer-first-day experience without polluting your real home
|
|
231
|
+
- Running multiple personas on one machine
|
|
232
|
+
|
|
233
|
+
**Docker / remote servers (OAuth limitation):** Claude Code stores its OAuth
|
|
234
|
+
session in the **OS keychain** (macOS Keychain / libsecret / Windows Credential
|
|
235
|
+
Manager). Mounting `~/.claude.json` alone is **not enough** in a fresh Linux
|
|
236
|
+
container because the keychain-bound refresh is missing. For container use, set
|
|
237
|
+
`ANTHROPIC_API_KEY` in the container env instead. Host-native usage (macOS,
|
|
238
|
+
Linux workstations) works with the normal `claude login` flow — no API key
|
|
239
|
+
needed.
|
|
240
|
+
|
|
241
|
+
### Migrations
|
|
242
|
+
|
|
243
|
+
`forgen migrate implicit-feedback` backfills the `category` field on pre-v0.4.1
|
|
244
|
+
entries in `~/.forgen/state/implicit-feedback.jsonl`. Idempotent — safe to re-run.
|
|
175
245
|
|
|
176
246
|
---
|
|
177
247
|
|
|
@@ -283,7 +353,11 @@ Claude has your accumulated patterns in context while drafting the response.
|
|
|
283
353
|
|
|
284
354
|
Precision gates (v0.3.2+): matches below relevance 0.3 or with only a single
|
|
285
355
|
common-word tag overlap are filtered before injection so Claude's context
|
|
286
|
-
doesn't get polluted by low-signal hits.
|
|
356
|
+
doesn't get polluted by low-signal hits. **Cold-start boost (v0.4.1+)**: when
|
|
357
|
+
your outcome history has < 5 champion/active solutions (first days after
|
|
358
|
+
install), the injection threshold is relaxed to 0.2 so starter-pack solutions
|
|
359
|
+
can actually surface; once your own patterns accumulate the threshold returns
|
|
360
|
+
to the standard 0.3.
|
|
287
361
|
|
|
288
362
|
### 10 built-in skills
|
|
289
363
|
|
|
@@ -314,7 +388,7 @@ Curated, compound-native skills. Each integrates with your accumulated knowledge
|
|
|
314
388
|
| `architecture-decision` | "adr" | Weighted trade-off matrix, ADR lifecycle, reversibility classification |
|
|
315
389
|
| `docker` | "docker", "컨테이너" | Multi-stage builds, security hardening, 10 failure modes
|
|
316
390
|
|
|
317
|
-
###
|
|
391
|
+
### 13 built-in agents
|
|
318
392
|
|
|
319
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.
|
|
320
394
|
|
|
@@ -333,6 +407,7 @@ Sub-agents with physically separated tool access, `Failure_Modes_To_Avoid` secti
|
|
|
333
407
|
| Agent | Model | Role |
|
|
334
408
|
|-------|:-----:|------|
|
|
335
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) |
|
|
336
411
|
|
|
337
412
|
**Write-enabled (implementation / verification):**
|
|
338
413
|
|
|
@@ -491,7 +566,9 @@ forgen forge --export # Export profile
|
|
|
491
566
|
### Inspection
|
|
492
567
|
|
|
493
568
|
```bash
|
|
494
|
-
forgen stats #
|
|
569
|
+
forgen stats # Trust-layer dashboard (rules, corrections, blocks 7d, assist today, philosophy)
|
|
570
|
+
forgen recall [--limit N] [--show]
|
|
571
|
+
# Recent compound recalls surfaced to Claude (with body preview)
|
|
495
572
|
forgen last-block # Most recent block event with rule detail
|
|
496
573
|
forgen inspect profile # 4-axis profile with packs and facets
|
|
497
574
|
forgen inspect rules # Active and suppressed rules
|
|
@@ -530,7 +607,9 @@ forgen skill list # List promoted skills
|
|
|
530
607
|
### System
|
|
531
608
|
|
|
532
609
|
```bash
|
|
533
|
-
forgen init # Initialize project
|
|
610
|
+
forgen init # Initialize project (+ 15 starter-pack solutions)
|
|
611
|
+
forgen migrate [implicit-feedback|all]
|
|
612
|
+
# One-shot schema migrations (idempotent)
|
|
534
613
|
forgen doctor # System diagnostics (10 categories + harness maturity)
|
|
535
614
|
forgen doctor --prune-state # Daily hygiene: state GC + T4 rule decay (90d idle → retire)
|
|
536
615
|
forgen dashboard # Knowledge overview (6 sections)
|
|
@@ -690,7 +769,27 @@ Safety rules are **hard constraints** -- they cannot be overridden by pack selec
|
|
|
690
769
|
|
|
691
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.
|
|
692
771
|
|
|
693
|
-
|
|
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.
|
|
694
793
|
|
|
695
794
|
---
|
|
696
795
|
|
|
@@ -700,6 +799,9 @@ See [Coexistence Guide](docs/guides/with-omc.md) for details.
|
|
|
700
799
|
|----------|-------------|
|
|
701
800
|
| [Hooks Reference](docs/reference/hooks-reference.md) | 19 hooks across 3 tiers — events, timeouts, behavior |
|
|
702
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 |
|
|
703
805
|
| [CHANGELOG](CHANGELOG.md) | Version history and release notes |
|
|
704
806
|
|
|
705
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">
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<a href="#快速开始">快速开始</a> ·
|
|
19
19
|
<a href="#工作原理">工作原理</a> ·
|
|
20
20
|
<a href="#4轴个性化">4轴</a> ·
|
|
21
|
+
<a href="#这个-harness-装载的是你">愿景</a> ·
|
|
21
22
|
<a href="#命令">命令</a> ·
|
|
22
23
|
<a href="#架构">架构</a> ·
|
|
23
24
|
<a href="#安全">安全</a>
|
|
@@ -92,6 +93,31 @@ forgen 实现了这一切。它对你的工作风格进行画像、从你的纠
|
|
|
92
93
|
|
|
93
94
|
---
|
|
94
95
|
|
|
96
|
+
## 这个 harness 装载的是你
|
|
97
|
+
|
|
98
|
+
个性化只是表面。更深层的想法:**每次会话都留下痕迹,这些痕迹累积起来成为一个像你一样判断的 harness。** 你的修正、你的规范、你的权衡偏好 — 从对话中提取,存储在 `~/.forgen/me/` 下,并在每次后续会话中回放给 Claude。
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
对话 ──► 提取: solution / rule / behavior / profile 更新
|
|
102
|
+
────────────────────────────────────────────
|
|
103
|
+
│
|
|
104
|
+
▼
|
|
105
|
+
下一次会话 ◄── 注入: UserPromptSubmit 上下文 + 渲染的规则
|
|
106
|
+
+ 校准到你标准的 Stop-hook 守卫
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
几周之后,这个 harness 不再是"强制执行规则的工具",而是 **承载你如何判断工作的可携带包裹**。一条命令导出:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
forgen compound export # → forgen-knowledge-YYYY-MM-DD.tar.gz
|
|
113
|
+
# (rules + solutions + behavior — 你的哲学)
|
|
114
|
+
forgen compound import <path> # 在另一台机器上重放
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
这就是北极星:*你的笔记本上,一个像你一样判断的 Claude,还有你能随身携带的 tarball。*
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
95
121
|
## 使用 forgen 会发生什么
|
|
96
122
|
|
|
97
123
|
### 首次运行(仅一次,约1分钟)
|
|
@@ -156,22 +182,30 @@ Claude 调用 `correction-record` MCP 工具。纠正作为结构化证据存储
|
|
|
156
182
|
## 快速开始
|
|
157
183
|
|
|
158
184
|
```bash
|
|
159
|
-
# 1. 安装
|
|
185
|
+
# 1. 安装 (必须 -g — forgen 是全局 CLI)
|
|
160
186
|
npm install -g @wooojin/forgen
|
|
161
187
|
|
|
162
|
-
# 2.
|
|
163
|
-
forgen
|
|
188
|
+
# 2. 注册主机 — Claude Code / Codex / 两者
|
|
189
|
+
forgen install both # 三选交互: claude / codex / both
|
|
190
|
+
# 或非交互:
|
|
191
|
+
forgen install claude
|
|
192
|
+
forgen install codex
|
|
164
193
|
|
|
165
|
-
# 3.
|
|
166
|
-
forgen
|
|
194
|
+
# 3. 首次运行 — 4题引导问卷 (英语/韩语选择)
|
|
195
|
+
forgen # 默认: Claude
|
|
196
|
+
forgen --runtime codex # 使用 Codex
|
|
197
|
+
forgen config default-host codex # 设置持久默认主机
|
|
167
198
|
```
|
|
168
199
|
|
|
169
200
|
### 前提条件
|
|
170
201
|
|
|
171
|
-
- **Node.js** >= 20
|
|
172
|
-
-
|
|
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
|
|
173
207
|
|
|
174
|
-
> **厂商依赖:** forgen
|
|
208
|
+
> **厂商依赖:** forgen 对称包装 Claude Code 与 Codex CLI (Claude 为行为基准, Codex 以等价性扩展)。上游 API/CLI 变更可能影响行为。已在 Claude Code 1.0.x / 2.1.x、Codex 0.x 下测试。
|
|
175
209
|
|
|
176
210
|
---
|
|
177
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).
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 420" fill="none">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg2" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" style="stop-color:#0f0f23" />
|
|
5
|
+
<stop offset="100%" style="stop-color:#1a1a3e" />
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
|
|
9
|
+
<rect width="720" height="420" rx="12" fill="url(#bg2)"/>
|
|
10
|
+
|
|
11
|
+
<!-- Title -->
|
|
12
|
+
<text x="360" y="35" text-anchor="middle" font-family="'SF Mono', monospace" font-size="14" fill="#ffffff" opacity="0.6" letter-spacing="4">3-LAYER ARCHITECTURE</text>
|
|
13
|
+
|
|
14
|
+
<!-- Layer 0: Philosophy -->
|
|
15
|
+
<rect x="40" y="55" width="640" height="95" rx="8" fill="#f59e0b" fill-opacity="0.08" stroke="#f59e0b" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
16
|
+
<text x="60" y="80" font-family="'SF Mono', monospace" font-size="13" font-weight="700" fill="#fbbf24">Layer 0 — Philosophy (WHY)</text>
|
|
17
|
+
<text x="60" y="100" font-family="'Inter', sans-serif" font-size="12" fill="#fde68a" opacity="0.8">philosophy.yaml → Declare your principles</text>
|
|
18
|
+
|
|
19
|
+
<g transform="translate(60, 110)">
|
|
20
|
+
<rect width="145" height="28" rx="4" fill="#f59e0b" fill-opacity="0.12"/>
|
|
21
|
+
<text x="10" y="18" font-family="monospace" font-size="10" fill="#fbbf24">understand-before-act</text>
|
|
22
|
+
</g>
|
|
23
|
+
<g transform="translate(215, 110)">
|
|
24
|
+
<rect width="145" height="28" rx="4" fill="#f59e0b" fill-opacity="0.12"/>
|
|
25
|
+
<text x="10" y="18" font-family="monospace" font-size="10" fill="#fbbf24">decompose-to-control</text>
|
|
26
|
+
</g>
|
|
27
|
+
<g transform="translate(370, 110)">
|
|
28
|
+
<rect width="148" height="28" rx="4" fill="#f59e0b" fill-opacity="0.12"/>
|
|
29
|
+
<text x="10" y="18" font-family="monospace" font-size="10" fill="#fbbf24">capitalize-on-failure</text>
|
|
30
|
+
</g>
|
|
31
|
+
<g transform="translate(528, 110)">
|
|
32
|
+
<rect width="142" height="28" rx="4" fill="#f59e0b" fill-opacity="0.12"/>
|
|
33
|
+
<text x="10" y="18" font-family="monospace" font-size="10" fill="#fbbf24">focus-resources</text>
|
|
34
|
+
</g>
|
|
35
|
+
|
|
36
|
+
<!-- Arrow -->
|
|
37
|
+
<line x1="360" y1="155" x2="360" y2="170" stroke="#ffffff" stroke-width="1" opacity="0.3"/>
|
|
38
|
+
<polygon points="355,168 360,178 365,168" fill="#ffffff" opacity="0.3"/>
|
|
39
|
+
|
|
40
|
+
<!-- Layer 1: Workflow Engine -->
|
|
41
|
+
<rect x="40" y="180" width="640" height="105" rx="8" fill="#6366f1" fill-opacity="0.08" stroke="#6366f1" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
42
|
+
<text x="60" y="205" font-family="'SF Mono', monospace" font-size="13" font-weight="700" fill="#a78bfa">Layer 1 — Workflow Engine (HOW)</text>
|
|
43
|
+
<text x="60" y="225" font-family="'Inter', sans-serif" font-size="12" fill="#c4b5fd" opacity="0.8">Auto-generated from principles: modes, routing, hooks, monitoring</text>
|
|
44
|
+
|
|
45
|
+
<g transform="translate(60, 238)">
|
|
46
|
+
<rect width="90" height="28" rx="4" fill="#6366f1" fill-opacity="0.15"/>
|
|
47
|
+
<text x="10" y="18" font-family="monospace" font-size="10" fill="#a78bfa">9 Modes</text>
|
|
48
|
+
</g>
|
|
49
|
+
<g transform="translate(160, 238)">
|
|
50
|
+
<rect width="100" height="28" rx="4" fill="#6366f1" fill-opacity="0.15"/>
|
|
51
|
+
<text x="10" y="18" font-family="monospace" font-size="10" fill="#a78bfa">3-Tier Route</text>
|
|
52
|
+
</g>
|
|
53
|
+
<g transform="translate(270, 238)">
|
|
54
|
+
<rect width="100" height="28" rx="4" fill="#6366f1" fill-opacity="0.15"/>
|
|
55
|
+
<text x="10" y="18" font-family="monospace" font-size="10" fill="#a78bfa">14 Hooks</text>
|
|
56
|
+
</g>
|
|
57
|
+
<g transform="translate(380, 238)">
|
|
58
|
+
<rect width="100" height="28" rx="4" fill="#6366f1" fill-opacity="0.15"/>
|
|
59
|
+
<text x="10" y="18" font-family="monospace" font-size="10" fill="#a78bfa">Monitoring</text>
|
|
60
|
+
</g>
|
|
61
|
+
<g transform="translate(490, 238)">
|
|
62
|
+
<rect width="120" height="28" rx="4" fill="#6366f1" fill-opacity="0.15"/>
|
|
63
|
+
<text x="10" y="18" font-family="monospace" font-size="10" fill="#a78bfa">Compound Loop</text>
|
|
64
|
+
</g>
|
|
65
|
+
|
|
66
|
+
<!-- Arrow -->
|
|
67
|
+
<line x1="360" y1="290" x2="360" y2="305" stroke="#ffffff" stroke-width="1" opacity="0.3"/>
|
|
68
|
+
<polygon points="355,303 360,313 365,303" fill="#ffffff" opacity="0.3"/>
|
|
69
|
+
|
|
70
|
+
<!-- Layer 2: Pack -->
|
|
71
|
+
<rect x="40" y="315" width="640" height="90" rx="8" fill="#10b981" fill-opacity="0.08" stroke="#10b981" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
72
|
+
<text x="60" y="340" font-family="'SF Mono', monospace" font-size="13" font-weight="700" fill="#34d399">Layer 2 — Pack (KNOW + SHARE)</text>
|
|
73
|
+
<text x="60" y="360" font-family="'Inter', sans-serif" font-size="12" fill="#6ee7b7" opacity="0.8">Domain knowledge & sharing across scopes</text>
|
|
74
|
+
|
|
75
|
+
<g transform="translate(60, 370)">
|
|
76
|
+
<rect width="80" height="26" rx="4" fill="#10b981" fill-opacity="0.12"/>
|
|
77
|
+
<text x="14" y="17" font-family="monospace" font-size="11" fill="#34d399">Me</text>
|
|
78
|
+
</g>
|
|
79
|
+
<g transform="translate(150, 370)">
|
|
80
|
+
<rect width="80" height="26" rx="4" fill="#10b981" fill-opacity="0.12"/>
|
|
81
|
+
<text x="14" y="17" font-family="monospace" font-size="11" fill="#34d399">Team</text>
|
|
82
|
+
</g>
|
|
83
|
+
<g transform="translate(240, 370)">
|
|
84
|
+
<rect width="80" height="26" rx="4" fill="#10b981" fill-opacity="0.12"/>
|
|
85
|
+
<text x="14" y="17" font-family="monospace" font-size="11" fill="#34d399">Project</text>
|
|
86
|
+
</g>
|
|
87
|
+
|
|
88
|
+
<g transform="translate(380, 370)">
|
|
89
|
+
<rect width="80" height="26" rx="4" fill="#10b981" fill-opacity="0.12"/>
|
|
90
|
+
<text x="10" y="17" font-family="monospace" font-size="10" fill="#34d399">Solutions</text>
|
|
91
|
+
</g>
|
|
92
|
+
<g transform="translate(470, 370)">
|
|
93
|
+
<rect width="70" height="26" rx="4" fill="#10b981" fill-opacity="0.12"/>
|
|
94
|
+
<text x="10" y="17" font-family="monospace" font-size="10" fill="#34d399">Rules</text>
|
|
95
|
+
</g>
|
|
96
|
+
<g transform="translate(550, 370)">
|
|
97
|
+
<rect width="80" height="26" rx="4" fill="#10b981" fill-opacity="0.12"/>
|
|
98
|
+
<text x="10" y="17" font-family="monospace" font-size="10" fill="#34d399">Manuals</text>
|
|
99
|
+
</g>
|
|
100
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 200" fill="none">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" style="stop-color:#0f0f23;stop-opacity:1" />
|
|
5
|
+
<stop offset="100%" style="stop-color:#1a1a3e;stop-opacity:1" />
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="accent" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
8
|
+
<stop offset="0%" style="stop-color:#f97316" />
|
|
9
|
+
<stop offset="50%" style="stop-color:#ef4444" />
|
|
10
|
+
<stop offset="100%" style="stop-color:#f59e0b" />
|
|
11
|
+
</linearGradient>
|
|
12
|
+
<linearGradient id="glow" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
13
|
+
<stop offset="0%" style="stop-color:#f97316;stop-opacity:0.3" />
|
|
14
|
+
<stop offset="100%" style="stop-color:#f97316;stop-opacity:0" />
|
|
15
|
+
</linearGradient>
|
|
16
|
+
</defs>
|
|
17
|
+
|
|
18
|
+
<rect width="800" height="200" rx="12" fill="url(#bg)"/>
|
|
19
|
+
|
|
20
|
+
<!-- Decorative line -->
|
|
21
|
+
<line x1="60" y1="160" x2="740" y2="160" stroke="url(#accent)" stroke-width="1" opacity="0.4"/>
|
|
22
|
+
|
|
23
|
+
<!-- Subtle grid -->
|
|
24
|
+
<pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
|
|
25
|
+
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#ffffff" stroke-width="0.3" opacity="0.05"/>
|
|
26
|
+
</pattern>
|
|
27
|
+
<rect width="800" height="200" fill="url(#grid)"/>
|
|
28
|
+
|
|
29
|
+
<!-- Symbol: Anvil + Flame -->
|
|
30
|
+
<g transform="translate(80, 50)">
|
|
31
|
+
<!-- Flame -->
|
|
32
|
+
<path d="M45,5 Q55,25 48,40 Q60,30 55,15 Q65,35 50,50 Q42,50 35,45 Q25,35 30,15 Q35,30 42,40 Q35,25 45,5Z" fill="url(#accent)" opacity="0.8"/>
|
|
33
|
+
<!-- Anvil -->
|
|
34
|
+
<path d="M20,60 L70,60 L75,70 Q45,75 15,70 Z" fill="#ffffff" opacity="0.9"/>
|
|
35
|
+
<rect x="30" y="52" width="30" height="10" rx="2" fill="#ffffff" opacity="0.7"/>
|
|
36
|
+
</g>
|
|
37
|
+
|
|
38
|
+
<!-- Title -->
|
|
39
|
+
<text x="200" y="95" font-family="'SF Mono', 'Fira Code', 'JetBrains Mono', monospace" font-size="52" font-weight="700" fill="#ffffff" letter-spacing="8">FORGEN</text>
|
|
40
|
+
|
|
41
|
+
<!-- Subtitle -->
|
|
42
|
+
<text x="200" y="125" font-family="'Inter', 'Helvetica Neue', sans-serif" font-size="15" fill="#f59e0b" letter-spacing="3" opacity="0.9">CODE, FORGED FOR YOU</text>
|
|
43
|
+
|
|
44
|
+
<!-- Tag -->
|
|
45
|
+
<rect x="200" y="138" width="160" height="22" rx="4" fill="#f97316" opacity="0.15"/>
|
|
46
|
+
<text x="210" y="153" font-family="'SF Mono', monospace" font-size="11" fill="#f59e0b" opacity="0.8">Personalize.</text>
|
|
47
|
+
|
|
48
|
+
<rect x="370" y="138" width="140" height="22" rx="4" fill="#f97316" opacity="0.15"/>
|
|
49
|
+
<text x="380" y="153" font-family="'SF Mono', monospace" font-size="11" fill="#f59e0b" opacity="0.8">Forge workflow.</text>
|
|
50
|
+
|
|
51
|
+
<rect x="520" y="138" width="150" height="22" rx="4" fill="#f97316" opacity="0.15"/>
|
|
52
|
+
<text x="530" y="153" font-family="'SF Mono', monospace" font-size="11" fill="#f59e0b" opacity="0.8">Compound growth.</text>
|
|
53
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# forgen — Install & First Run Demo
|
|
2
|
+
# Shows: npm install → forgen doctor → starter pack loaded
|
|
3
|
+
|
|
4
|
+
Output assets/demo/01-install.gif
|
|
5
|
+
|
|
6
|
+
Set Shell "zsh"
|
|
7
|
+
Set FontFamily "JetBrains Mono"
|
|
8
|
+
Set FontSize 16
|
|
9
|
+
Set Width 1200
|
|
10
|
+
Set Height 600
|
|
11
|
+
Set Padding 20
|
|
12
|
+
Set Theme "Catppuccin Mocha"
|
|
13
|
+
Set TypingSpeed 40ms
|
|
14
|
+
Set WindowBar Colorful
|
|
15
|
+
Set BorderRadius 10
|
|
16
|
+
Set Margin 20
|
|
17
|
+
Set MarginFill "#1e1e2e"
|
|
18
|
+
|
|
19
|
+
# Setup (hidden)
|
|
20
|
+
Hide
|
|
21
|
+
Type "cd /tmp && mkdir forgen-demo && cd forgen-demo && git init -q && npm init -y -q 2>/dev/null && clear"
|
|
22
|
+
Enter
|
|
23
|
+
Sleep 1s
|
|
24
|
+
Show
|
|
25
|
+
|
|
26
|
+
# Step 1: Install
|
|
27
|
+
Type "npm i -g forgen"
|
|
28
|
+
Sleep 500ms
|
|
29
|
+
Enter
|
|
30
|
+
Sleep 5s
|
|
31
|
+
|
|
32
|
+
# Step 2: Doctor check
|
|
33
|
+
Type "forgen doctor"
|
|
34
|
+
Sleep 500ms
|
|
35
|
+
Enter
|
|
36
|
+
Sleep 3s
|
|
37
|
+
|
|
38
|
+
# Step 3: Show starter pack
|
|
39
|
+
Type "ls ~/.compound/me/solutions/ | head -5"
|
|
40
|
+
Sleep 500ms
|
|
41
|
+
Enter
|
|
42
|
+
Sleep 2s
|
|
43
|
+
|
|
44
|
+
# Step 4: Show available skills
|
|
45
|
+
Type "ls ~/.claude/commands/forgen/ | head -10"
|
|
46
|
+
Sleep 500ms
|
|
47
|
+
Enter
|
|
48
|
+
Sleep 3s
|
|
49
|
+
|
|
50
|
+
# Done
|
|
51
|
+
Type "# Ready! 15 starter solutions + 19 skills loaded"
|
|
52
|
+
Sleep 500ms
|
|
53
|
+
Enter
|
|
54
|
+
Sleep 3s
|
|
Binary file
|