@wooojin/forgen 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/.claude-plugin/plugin.json +5 -5
  2. package/CHANGELOG.md +164 -15
  3. package/CONTRIBUTING.md +2 -2
  4. package/README.ja.md +17 -9
  5. package/README.ko.md +20 -12
  6. package/README.md +46 -12
  7. package/README.zh.md +17 -9
  8. package/assets/README.md +86 -0
  9. package/assets/architecture.svg +100 -0
  10. package/assets/banner.png +0 -0
  11. package/assets/banner.svg +53 -0
  12. package/assets/demo/01-install.gif +0 -0
  13. package/assets/demo/01-install.tape +54 -0
  14. package/assets/demo/02-compound-learning.gif +0 -0
  15. package/assets/demo/02-compound-learning.tape +50 -0
  16. package/assets/demo/03-forge-personalization.gif +0 -0
  17. package/assets/demo/03-forge-personalization.tape +64 -0
  18. package/assets/demo/before-after.gif +0 -0
  19. package/assets/demo/before-after.tape +98 -0
  20. package/assets/demo-preview.svg +96 -0
  21. package/assets/icon.png +0 -0
  22. package/{hooks → assets/shared}/hook-registry.json +2 -1
  23. package/dist/cli.js +78 -6
  24. package/dist/core/auto-compound-runner.js +62 -38
  25. package/dist/core/behavior-classifier.d.ts +28 -0
  26. package/dist/core/behavior-classifier.js +46 -0
  27. package/dist/core/dashboard.d.ts +7 -0
  28. package/dist/core/dashboard.js +32 -0
  29. package/dist/core/doctor.js +92 -0
  30. package/dist/core/git-stats.d.ts +36 -0
  31. package/dist/core/git-stats.js +79 -0
  32. package/dist/core/harness.d.ts +1 -1
  33. package/dist/core/harness.js +27 -20
  34. package/dist/core/host-detect.d.ts +42 -0
  35. package/dist/core/host-detect.js +68 -0
  36. package/dist/core/installer.js +2 -2
  37. package/dist/core/migrate-cli.d.ts +1 -0
  38. package/dist/core/migrate-cli.js +19 -0
  39. package/dist/core/migrate-evidence-host.d.ts +36 -0
  40. package/dist/core/migrate-evidence-host.js +49 -0
  41. package/dist/core/settings-injector.js +4 -2
  42. package/dist/core/spawn.d.ts +1 -1
  43. package/dist/core/spawn.js +4 -11
  44. package/dist/core/stats-cli.js +12 -0
  45. package/dist/core/trust-layer-intent.d.ts +35 -0
  46. package/dist/core/trust-layer-intent.js +30 -0
  47. package/dist/core/types.d.ts +1 -1
  48. package/dist/engine/compound-extractor.js +7 -9
  49. package/dist/engine/learn-cli.js +4 -2
  50. package/dist/engine/lifecycle/bypass-detector.d.ts +6 -1
  51. package/dist/engine/lifecycle/bypass-detector.js +57 -5
  52. package/dist/fgx.js +2 -1
  53. package/dist/forge/evidence-processor.js +12 -0
  54. package/dist/forge/onboarding.d.ts +3 -2
  55. package/dist/forge/onboarding.js +3 -2
  56. package/dist/hooks/db-guard.js +3 -3
  57. package/dist/hooks/forge-loop-progress.d.ts +9 -0
  58. package/dist/hooks/forge-loop-progress.js +38 -0
  59. package/dist/hooks/hook-registry.js +1 -1
  60. package/dist/hooks/hooks-generator.d.ts +15 -1
  61. package/dist/hooks/hooks-generator.js +18 -16
  62. package/dist/hooks/keyword-detector.js +1 -1
  63. package/dist/hooks/post-tool-use.d.ts +1 -1
  64. package/dist/hooks/post-tool-use.js +13 -4
  65. package/dist/hooks/pre-compact.js +1 -1
  66. package/dist/hooks/pre-tool-use.js +4 -4
  67. package/dist/hooks/rate-limiter.js +2 -2
  68. package/dist/hooks/session-recovery.js +11 -0
  69. package/dist/hooks/shared/blocking-allowlist.d.ts +28 -0
  70. package/dist/hooks/shared/blocking-allowlist.js +38 -0
  71. package/dist/hooks/shared/forge-loop-state.d.ts +36 -0
  72. package/dist/hooks/shared/forge-loop-state.js +116 -0
  73. package/dist/hooks/shared/hook-response.d.ts +18 -0
  74. package/dist/hooks/shared/hook-response.js +31 -0
  75. package/dist/hooks/skill-injector.js +1 -1
  76. package/dist/hooks/stop-guard.js +15 -0
  77. package/dist/host/capabilities-claude.d.ts +8 -0
  78. package/dist/host/capabilities-claude.js +46 -0
  79. package/dist/host/capabilities-codex.d.ts +11 -0
  80. package/dist/host/capabilities-codex.js +50 -0
  81. package/dist/host/capabilities-registry.d.ts +11 -0
  82. package/dist/host/capabilities-registry.js +30 -0
  83. package/dist/host/codex-adapter.d.ts +8 -5
  84. package/dist/host/codex-adapter.js +10 -82
  85. package/dist/host/codex-output-parser.d.ts +39 -0
  86. package/dist/host/codex-output-parser.js +75 -0
  87. package/dist/host/exec-host.d.ts +54 -0
  88. package/dist/host/exec-host.js +92 -0
  89. package/dist/host/host-runtime.d.ts +37 -0
  90. package/dist/host/host-runtime.js +51 -0
  91. package/dist/host/install-claude.d.ts +35 -0
  92. package/dist/host/install-claude.js +238 -0
  93. package/dist/host/install-codex.d.ts +44 -0
  94. package/dist/host/install-codex.js +276 -0
  95. package/dist/host/install-orchestrator.d.ts +34 -0
  96. package/dist/host/install-orchestrator.js +126 -0
  97. package/dist/host/invoke-agent.d.ts +27 -0
  98. package/dist/host/invoke-agent.js +115 -0
  99. package/dist/host/parity-harness.d.ts +62 -0
  100. package/dist/host/parity-harness.js +283 -0
  101. package/dist/host/projection.d.ts +35 -0
  102. package/dist/host/projection.js +126 -0
  103. package/dist/mcp/server.js +11 -0
  104. package/dist/mcp/tools.js +47 -0
  105. package/dist/services/session.d.ts +6 -3
  106. package/dist/services/session.js +33 -4
  107. package/dist/store/evidence-store.d.ts +1 -0
  108. package/dist/store/evidence-store.js +34 -3
  109. package/dist/store/host-mismatch.d.ts +42 -0
  110. package/dist/store/host-mismatch.js +65 -0
  111. package/dist/store/profile-store.d.ts +29 -0
  112. package/dist/store/profile-store.js +53 -0
  113. package/dist/store/types.d.ts +13 -0
  114. package/hooks/hooks.json +6 -1
  115. package/package.json +6 -4
  116. package/plugin.json +4 -4
  117. package/scripts/postinstall.js +100 -25
  118. /package/{agents → assets/claude/agents}/analyst.md +0 -0
  119. /package/{agents → assets/claude/agents}/architect.md +0 -0
  120. /package/{agents → assets/claude/agents}/code-reviewer.md +0 -0
  121. /package/{agents → assets/claude/agents}/critic.md +0 -0
  122. /package/{agents → assets/claude/agents}/debugger.md +0 -0
  123. /package/{agents → assets/claude/agents}/designer.md +0 -0
  124. /package/{agents → assets/claude/agents}/executor.md +0 -0
  125. /package/{agents → assets/claude/agents}/explore.md +0 -0
  126. /package/{agents → assets/claude/agents}/git-master.md +0 -0
  127. /package/{agents → assets/claude/agents}/planner.md +0 -0
  128. /package/{agents → assets/claude/agents}/solution-evolver.md +0 -0
  129. /package/{agents → assets/claude/agents}/test-engineer.md +0 -0
  130. /package/{agents → assets/claude/agents}/verifier.md +0 -0
  131. /package/{commands → assets/claude/commands}/architecture-decision.md +0 -0
  132. /package/{commands → assets/claude/commands}/calibrate.md +0 -0
  133. /package/{commands → assets/claude/commands}/code-review.md +0 -0
  134. /package/{commands → assets/claude/commands}/compound.md +0 -0
  135. /package/{commands → assets/claude/commands}/deep-interview.md +0 -0
  136. /package/{commands → assets/claude/commands}/docker.md +0 -0
  137. /package/{commands → assets/claude/commands}/forge-loop.md +0 -0
  138. /package/{commands → assets/claude/commands}/learn.md +0 -0
  139. /package/{commands → assets/claude/commands}/retro.md +0 -0
  140. /package/{commands → assets/claude/commands}/ship.md +0 -0
@@ -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 &#x2014; Philosophy (WHY)</text>
17
+ <text x="60" y="100" font-family="'Inter', sans-serif" font-size="12" fill="#fde68a" opacity="0.8">philosophy.yaml &#x2192; 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 &#x2014; 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 &#x2014; 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 &amp; 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
@@ -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
@@ -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>
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
  ]