@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
|
@@ -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
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# forgen — Compound Learning Demo
|
|
2
|
+
# Shows: Claude using accumulated knowledge → auto-compound extracting patterns
|
|
3
|
+
|
|
4
|
+
Output assets/demo/02-compound-learning.gif
|
|
5
|
+
|
|
6
|
+
Set Shell "zsh"
|
|
7
|
+
Set FontFamily "JetBrains Mono"
|
|
8
|
+
Set FontSize 15
|
|
9
|
+
Set Width 1200
|
|
10
|
+
Set Height 700
|
|
11
|
+
Set Padding 20
|
|
12
|
+
Set Theme "Catppuccin Mocha"
|
|
13
|
+
Set TypingSpeed 35ms
|
|
14
|
+
Set WindowBar Colorful
|
|
15
|
+
Set BorderRadius 10
|
|
16
|
+
Set Margin 20
|
|
17
|
+
Set MarginFill "#1e1e2e"
|
|
18
|
+
|
|
19
|
+
Hide
|
|
20
|
+
Type "cd /tmp/forgen-demo && clear"
|
|
21
|
+
Enter
|
|
22
|
+
Sleep 1s
|
|
23
|
+
Show
|
|
24
|
+
|
|
25
|
+
# Step 1: Ask Claude about TDD — compound should inject knowledge
|
|
26
|
+
Type "claude -p 'tdd 방식으로 isPrime 함수 만들어줘' --allowedTools Bash,Write,Edit"
|
|
27
|
+
Sleep 500ms
|
|
28
|
+
Enter
|
|
29
|
+
Sleep 15s
|
|
30
|
+
|
|
31
|
+
# Step 2: Show compound solutions matched
|
|
32
|
+
Type "# Compound matched starter-tdd-red-green-refactor"
|
|
33
|
+
Enter
|
|
34
|
+
Sleep 2s
|
|
35
|
+
|
|
36
|
+
# Step 3: Search compound knowledge via MCP
|
|
37
|
+
Type "claude -p 'compound-search MCP 도구로 typescript를 검색해줘'"
|
|
38
|
+
Sleep 500ms
|
|
39
|
+
Enter
|
|
40
|
+
Sleep 10s
|
|
41
|
+
|
|
42
|
+
# Step 4: Show accumulated solutions
|
|
43
|
+
Type "ls ~/.compound/me/solutions/ | wc -l"
|
|
44
|
+
Sleep 500ms
|
|
45
|
+
Enter
|
|
46
|
+
Sleep 1s
|
|
47
|
+
|
|
48
|
+
Type "# Knowledge grows with every session"
|
|
49
|
+
Enter
|
|
50
|
+
Sleep 3s
|
|
Binary file
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# forgen — Forge Personalization Demo
|
|
2
|
+
# Shows: forge interview → profile generated → personalized config
|
|
3
|
+
|
|
4
|
+
Output assets/demo/03-forge-personalization.gif
|
|
5
|
+
|
|
6
|
+
Set Shell "zsh"
|
|
7
|
+
Set FontFamily "JetBrains Mono"
|
|
8
|
+
Set FontSize 15
|
|
9
|
+
Set Width 1200
|
|
10
|
+
Set Height 700
|
|
11
|
+
Set Padding 20
|
|
12
|
+
Set Theme "Catppuccin Mocha"
|
|
13
|
+
Set TypingSpeed 35ms
|
|
14
|
+
Set WindowBar Colorful
|
|
15
|
+
Set BorderRadius 10
|
|
16
|
+
Set Margin 20
|
|
17
|
+
Set MarginFill "#1e1e2e"
|
|
18
|
+
|
|
19
|
+
Hide
|
|
20
|
+
Type "cd /tmp/forgen-demo && clear"
|
|
21
|
+
Enter
|
|
22
|
+
Sleep 1s
|
|
23
|
+
Show
|
|
24
|
+
|
|
25
|
+
# Step 1: Start forge
|
|
26
|
+
Type "forgen forge"
|
|
27
|
+
Sleep 500ms
|
|
28
|
+
Enter
|
|
29
|
+
Sleep 3s
|
|
30
|
+
|
|
31
|
+
# Answer questions (simulated — quality-focused developer)
|
|
32
|
+
Type "2"
|
|
33
|
+
Enter
|
|
34
|
+
Sleep 2s
|
|
35
|
+
|
|
36
|
+
Type "1"
|
|
37
|
+
Enter
|
|
38
|
+
Sleep 2s
|
|
39
|
+
|
|
40
|
+
Type "2"
|
|
41
|
+
Enter
|
|
42
|
+
Sleep 2s
|
|
43
|
+
|
|
44
|
+
Type "1"
|
|
45
|
+
Enter
|
|
46
|
+
Sleep 2s
|
|
47
|
+
|
|
48
|
+
Type "2"
|
|
49
|
+
Enter
|
|
50
|
+
Sleep 2s
|
|
51
|
+
|
|
52
|
+
# Wait for profile generation
|
|
53
|
+
Sleep 5s
|
|
54
|
+
|
|
55
|
+
# Step 2: Show generated rules
|
|
56
|
+
Type "cat .claude/rules/forge-quality.md | head -15"
|
|
57
|
+
Sleep 500ms
|
|
58
|
+
Enter
|
|
59
|
+
Sleep 3s
|
|
60
|
+
|
|
61
|
+
# Step 3: Show that Claude behavior is now personalized
|
|
62
|
+
Type "# Claude is now tuned to YOUR coding style"
|
|
63
|
+
Enter
|
|
64
|
+
Sleep 3s
|
|
Binary file
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# forgen — Same Tool, Different Developer
|
|
2
|
+
# Shows how forge adapts Claude to YOUR coding style
|
|
3
|
+
|
|
4
|
+
Output assets/demo/before-after.gif
|
|
5
|
+
|
|
6
|
+
Set Shell "zsh"
|
|
7
|
+
Set FontFamily "JetBrains Mono"
|
|
8
|
+
Set FontSize 14
|
|
9
|
+
Set Width 1200
|
|
10
|
+
Set Height 750
|
|
11
|
+
Set Padding 20
|
|
12
|
+
Set Theme "Catppuccin Mocha"
|
|
13
|
+
Set TypingSpeed 25ms
|
|
14
|
+
Set WindowBar Colorful
|
|
15
|
+
Set BorderRadius 10
|
|
16
|
+
Set Margin 20
|
|
17
|
+
Set MarginFill "#1e1e2e"
|
|
18
|
+
|
|
19
|
+
# ═══════════════════════════════════════
|
|
20
|
+
# Developer A: Senior — wants terse, severity-only
|
|
21
|
+
# ═══════════════════════════════════════
|
|
22
|
+
|
|
23
|
+
Hide
|
|
24
|
+
Type `TMPDIR=$(mktemp -d) && cd "$TMPDIR" && git init -q && git config user.email "t@t" && git config user.name "T" && mkdir -p .claude/rules && cat > .claude/rules/forge-communication.md << 'EOF'`
|
|
25
|
+
Enter
|
|
26
|
+
Type "# Forgen Forge — Communication Style (terse profile)"
|
|
27
|
+
Enter
|
|
28
|
+
Type "- Keep responses under 3 sentences unless showing code"
|
|
29
|
+
Enter
|
|
30
|
+
Type "- No preamble or trailing summary"
|
|
31
|
+
Enter
|
|
32
|
+
Type "- For code review: use [SEVERITY] format only"
|
|
33
|
+
Enter
|
|
34
|
+
Type "EOF"
|
|
35
|
+
Enter
|
|
36
|
+
Type "clear"
|
|
37
|
+
Enter
|
|
38
|
+
Sleep 1s
|
|
39
|
+
Show
|
|
40
|
+
|
|
41
|
+
Type "echo ' Developer A: Senior engineer — prefers terse, severity-only'"
|
|
42
|
+
Enter
|
|
43
|
+
Sleep 2s
|
|
44
|
+
|
|
45
|
+
Type "cat .claude/rules/forge-communication.md"
|
|
46
|
+
Enter
|
|
47
|
+
Sleep 3s
|
|
48
|
+
|
|
49
|
+
Type@20ms `claude -p "이 코드를 리뷰해줘: function add(a, b) { let result = a + b; return result; } 파일은 만들지 마."`
|
|
50
|
+
Sleep 500ms
|
|
51
|
+
Enter
|
|
52
|
+
Sleep 20s
|
|
53
|
+
|
|
54
|
+
Sleep 5s
|
|
55
|
+
|
|
56
|
+
# ═══════════════════════════════════════
|
|
57
|
+
# Developer B: Junior — wants explanations & examples
|
|
58
|
+
# ═══════════════════════════════════════
|
|
59
|
+
|
|
60
|
+
Hide
|
|
61
|
+
Type `TMPDIR2=$(mktemp -d) && cd "$TMPDIR2" && git init -q && git config user.email "t@t" && git config user.name "T" && mkdir -p .claude/rules && cat > .claude/rules/forge-communication.md << 'EOF'`
|
|
62
|
+
Enter
|
|
63
|
+
Type "# Forgen Forge — Communication Style (educational profile)"
|
|
64
|
+
Enter
|
|
65
|
+
Type "- Explain reasoning and trade-offs for every suggestion"
|
|
66
|
+
Enter
|
|
67
|
+
Type "- Include examples showing what could go wrong"
|
|
68
|
+
Enter
|
|
69
|
+
Type "- Teach concepts — explain the why not just the what"
|
|
70
|
+
Enter
|
|
71
|
+
Type "EOF"
|
|
72
|
+
Enter
|
|
73
|
+
Type "clear"
|
|
74
|
+
Enter
|
|
75
|
+
Sleep 1s
|
|
76
|
+
Show
|
|
77
|
+
|
|
78
|
+
Type ""
|
|
79
|
+
Enter
|
|
80
|
+
Type "echo ' Developer B: Junior engineer — wants explanations & examples'"
|
|
81
|
+
Enter
|
|
82
|
+
Sleep 2s
|
|
83
|
+
|
|
84
|
+
Type "cat .claude/rules/forge-communication.md"
|
|
85
|
+
Enter
|
|
86
|
+
Sleep 3s
|
|
87
|
+
|
|
88
|
+
Type@20ms `claude -p "이 코드를 리뷰해줘: function add(a, b) { let result = a + b; return result; } 파일은 만들지 마."`
|
|
89
|
+
Sleep 500ms
|
|
90
|
+
Enter
|
|
91
|
+
Sleep 25s
|
|
92
|
+
|
|
93
|
+
Sleep 3s
|
|
94
|
+
Type ""
|
|
95
|
+
Enter
|
|
96
|
+
Type "echo ' Same question. Same tool. Different developer. ⚡'"
|
|
97
|
+
Enter
|
|
98
|
+
Sleep 5s
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="340" viewBox="0 0 800 340">
|
|
2
|
+
<style>
|
|
3
|
+
.term { font-family: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'SF Mono', monospace; font-size: 13px; }
|
|
4
|
+
.prompt { fill: #a6e3a1; }
|
|
5
|
+
.cmd { fill: #cdd6f4; }
|
|
6
|
+
.tag { fill: #89b4fa; }
|
|
7
|
+
.haiku { fill: #f9e2af; }
|
|
8
|
+
.sonnet { fill: #a6e3a1; }
|
|
9
|
+
.opus { fill: #cba6f7; }
|
|
10
|
+
.dim { fill: #6c7086; }
|
|
11
|
+
.box { fill: #a6e3a1; }
|
|
12
|
+
@keyframes typeIn { from { opacity: 0; } to { opacity: 1; } }
|
|
13
|
+
@keyframes fadeIn { 0% { opacity: 0; } 100% { opacity: 1; } }
|
|
14
|
+
@keyframes blink { 0%, 100% { opacity: 0.8; } 50% { opacity: 0; } }
|
|
15
|
+
.line1 { animation: typeIn 0.1s 0.3s both; }
|
|
16
|
+
.line2 { animation: fadeIn 0.2s 0.8s both; }
|
|
17
|
+
.line3 { animation: fadeIn 0.2s 1.1s both; }
|
|
18
|
+
.line4 { animation: fadeIn 0.2s 1.4s both; }
|
|
19
|
+
.line5 { animation: fadeIn 0.2s 1.7s both; }
|
|
20
|
+
.line6 { animation: fadeIn 0.2s 2.0s both; }
|
|
21
|
+
.line7 { animation: fadeIn 0.3s 2.5s both; }
|
|
22
|
+
.cursor { animation: blink 1s 2.8s infinite; }
|
|
23
|
+
</style>
|
|
24
|
+
|
|
25
|
+
<!-- Terminal window -->
|
|
26
|
+
<rect width="800" height="340" rx="10" ry="10" fill="#1e1e2e"/>
|
|
27
|
+
<rect width="800" height="36" rx="10" ry="10" fill="#313244"/>
|
|
28
|
+
<rect y="26" width="800" height="10" fill="#313244"/>
|
|
29
|
+
|
|
30
|
+
<!-- Traffic lights -->
|
|
31
|
+
<circle cx="20" cy="18" r="6" fill="#f38ba8"/>
|
|
32
|
+
<circle cx="40" cy="18" r="6" fill="#f9e2af"/>
|
|
33
|
+
<circle cx="60" cy="18" r="6" fill="#a6e3a1"/>
|
|
34
|
+
<text x="400" y="23" text-anchor="middle" class="term" font-size="12" fill="#6c7086">forgen — terminal</text>
|
|
35
|
+
|
|
36
|
+
<!-- Line 1: command -->
|
|
37
|
+
<g class="line1">
|
|
38
|
+
<text x="24" y="68" class="term prompt">$</text>
|
|
39
|
+
<text x="40" y="68" class="term cmd">forgen</text>
|
|
40
|
+
</g>
|
|
41
|
+
|
|
42
|
+
<!-- Line 2: philosophy -->
|
|
43
|
+
<g class="line2">
|
|
44
|
+
<text x="24" y="96" class="term tag">[forgen]</text>
|
|
45
|
+
<text x="96" y="96" class="term cmd">Philosophy: </text>
|
|
46
|
+
<text x="194" y="96" class="term" fill="#f9e2af">my-engineering</text>
|
|
47
|
+
<text x="310" y="96" class="term dim"> (global)</text>
|
|
48
|
+
</g>
|
|
49
|
+
|
|
50
|
+
<!-- Line 3: scope -->
|
|
51
|
+
<g class="line3">
|
|
52
|
+
<text x="24" y="120" class="term tag">[forgen]</text>
|
|
53
|
+
<text x="96" y="120" class="term cmd">Scope: Me(5) │ 3 rules, 2 solutions</text>
|
|
54
|
+
</g>
|
|
55
|
+
|
|
56
|
+
<!-- Line 4: routing -->
|
|
57
|
+
<g class="line4">
|
|
58
|
+
<text x="24" y="144" class="term tag">[forgen]</text>
|
|
59
|
+
<text x="96" y="144" class="term cmd">Routing: </text>
|
|
60
|
+
<text x="172" y="144" class="term haiku">haiku:3</text>
|
|
61
|
+
<text x="232" y="144" class="term dim"> │ </text>
|
|
62
|
+
<text x="256" y="144" class="term sonnet">sonnet:5</text>
|
|
63
|
+
<text x="324" y="144" class="term dim"> │ </text>
|
|
64
|
+
<text x="348" y="144" class="term opus">opus:4</text>
|
|
65
|
+
</g>
|
|
66
|
+
|
|
67
|
+
<!-- Line 5: pack -->
|
|
68
|
+
<g class="line5">
|
|
69
|
+
<text x="24" y="168" class="term tag">[forgen]</text>
|
|
70
|
+
<text x="96" y="168" class="term cmd">Pack: backend v1.0.0 (5 rules, 3 solutions)</text>
|
|
71
|
+
</g>
|
|
72
|
+
|
|
73
|
+
<!-- Line 6: launching -->
|
|
74
|
+
<g class="line6">
|
|
75
|
+
<text x="24" y="192" class="term tag">[forgen]</text>
|
|
76
|
+
<text x="96" y="192" class="term cmd">Starting Claude Code...</text>
|
|
77
|
+
</g>
|
|
78
|
+
|
|
79
|
+
<!-- Separator -->
|
|
80
|
+
<g class="line7">
|
|
81
|
+
<line x1="24" y1="212" x2="776" y2="212" stroke="#313244" stroke-width="1"/>
|
|
82
|
+
|
|
83
|
+
<!-- Claude Code box -->
|
|
84
|
+
<text x="24" y="236" class="term dim">╭──────────────────────────────────────────────────╮</text>
|
|
85
|
+
<text x="24" y="256" class="term dim">│</text>
|
|
86
|
+
<text x="40" y="256" class="term box"> ✓ Claude Code (philosophy-driven mode)</text>
|
|
87
|
+
<text x="430" y="256" class="term dim">│</text>
|
|
88
|
+
<text x="24" y="276" class="term dim">│</text>
|
|
89
|
+
<text x="40" y="276" class="term" fill="#cdd6f4"> 19 agents │ 19 skills │ 18 hooks loaded</text>
|
|
90
|
+
<text x="430" y="276" class="term dim">│</text>
|
|
91
|
+
<text x="24" y="296" class="term dim">╰──────────────────────────────────────────────────╯</text>
|
|
92
|
+
|
|
93
|
+
<!-- Blinking cursor -->
|
|
94
|
+
<rect x="24" y="310" width="8" height="16" fill="#cdd6f4" class="cursor"/>
|
|
95
|
+
</g>
|
|
96
|
+
</svg>
|
package/assets/icon.png
ADDED
|
Binary file
|
|
@@ -18,5 +18,6 @@
|
|
|
18
18
|
{ "name": "subagent-tracker-stop", "tier": "workflow", "event": "SubagentStop", "matcher": "*", "script": "hooks/subagent-tracker.js stop", "timeout": 2, "compoundCritical": false },
|
|
19
19
|
{ "name": "post-tool-failure", "tier": "workflow", "event": "PostToolUseFailure", "matcher": "*", "script": "hooks/post-tool-failure.js", "timeout": 3, "compoundCritical": false },
|
|
20
20
|
{ "name": "solution-injector", "tier": "compound-core", "event": "UserPromptSubmit", "matcher": "*", "script": "hooks/solution-injector.js", "timeout": 5, "compoundCritical": true },
|
|
21
|
-
{ "name": "skill-injector", "tier": "compound-core", "event": "UserPromptSubmit", "matcher": "*", "script": "hooks/skill-injector.js", "timeout": 5, "compoundCritical": true }
|
|
21
|
+
{ "name": "skill-injector", "tier": "compound-core", "event": "UserPromptSubmit", "matcher": "*", "script": "hooks/skill-injector.js", "timeout": 5, "compoundCritical": true },
|
|
22
|
+
{ "name": "forge-loop-progress", "tier": "compound-core", "event": "UserPromptSubmit", "matcher": "*", "script": "hooks/forge-loop-progress.js", "timeout": 2, "compoundCritical": false }
|
|
22
23
|
]
|