opengstack 0.13.10 → 0.14.2

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 (189) hide show
  1. package/AGENTS.md +4 -4
  2. package/CLAUDE.md +127 -110
  3. package/README.md +10 -5
  4. package/SKILL.md +500 -70
  5. package/bin/opengstack.js +69 -69
  6. package/{skills/land-and-deploy/SKILL.md → commands/autoplan.md} +7 -25
  7. package/{skills/benchmark/SKILL.md → commands/benchmark.md} +84 -108
  8. package/{skills/browse/SKILL.md → commands/browse.md} +60 -81
  9. package/{skills/ship/SKILL.md → commands/canary.md} +7 -27
  10. package/{skills/careful/SKILL.md → commands/careful.md} +2 -22
  11. package/{skills/canary/SKILL.md → commands/codex.md} +7 -26
  12. package/{skills/connect-chrome/SKILL.md → commands/connect-chrome.md} +7 -24
  13. package/commands/cso.md +70 -0
  14. package/commands/design-consultation.md +70 -0
  15. package/commands/design-review.md +70 -0
  16. package/commands/design-shotgun.md +70 -0
  17. package/commands/document-release.md +70 -0
  18. package/{skills/freeze/SKILL.md → commands/freeze.md} +3 -29
  19. package/{skills/guard/SKILL.md → commands/guard.md} +4 -35
  20. package/commands/investigate.md +70 -0
  21. package/commands/land-and-deploy.md +70 -0
  22. package/commands/office-hours.md +70 -0
  23. package/{skills/gstack-upgrade/SKILL.md → commands/opengstack-upgrade.md} +64 -79
  24. package/commands/plan-ceo-review.md +70 -0
  25. package/commands/plan-design-review.md +70 -0
  26. package/commands/plan-eng-review.md +70 -0
  27. package/commands/qa-only.md +70 -0
  28. package/commands/qa.md +70 -0
  29. package/commands/retro.md +70 -0
  30. package/commands/review.md +70 -0
  31. package/{skills/setup-browser-cookies/SKILL.md → commands/setup-browser-cookies.md} +22 -40
  32. package/commands/setup-deploy.md +70 -0
  33. package/commands/ship.md +70 -0
  34. package/commands/unfreeze.md +25 -0
  35. package/docs/designs/CHROME_VS_CHROMIUM_EXPLORATION.md +9 -9
  36. package/docs/designs/CONDUCTOR_CHROME_SIDEBAR_INTEGRATION.md +2 -2
  37. package/docs/designs/CONDUCTOR_SESSION_API.md +16 -16
  38. package/docs/designs/DESIGN_SHOTGUN.md +74 -74
  39. package/docs/designs/DESIGN_TOOLS_V1.md +111 -111
  40. package/docs/skills.md +483 -202
  41. package/package.json +42 -43
  42. package/scripts/analytics.ts +188 -0
  43. package/scripts/dev-skill.ts +83 -0
  44. package/scripts/discover-skills.ts +39 -0
  45. package/scripts/eval-compare.ts +97 -0
  46. package/scripts/eval-list.ts +117 -0
  47. package/scripts/eval-select.ts +86 -0
  48. package/scripts/eval-summary.ts +188 -0
  49. package/scripts/eval-watch.ts +172 -0
  50. package/scripts/gen-skill-docs.ts +473 -0
  51. package/scripts/resolvers/browse.ts +129 -0
  52. package/scripts/resolvers/codex-helpers.ts +133 -0
  53. package/scripts/resolvers/composition.ts +48 -0
  54. package/scripts/resolvers/confidence.ts +37 -0
  55. package/scripts/resolvers/constants.ts +50 -0
  56. package/scripts/resolvers/design.ts +950 -0
  57. package/scripts/resolvers/index.ts +59 -0
  58. package/scripts/resolvers/learnings.ts +96 -0
  59. package/scripts/resolvers/preamble.ts +505 -0
  60. package/scripts/resolvers/review.ts +884 -0
  61. package/scripts/resolvers/testing.ts +573 -0
  62. package/scripts/resolvers/types.ts +45 -0
  63. package/scripts/resolvers/utility.ts +421 -0
  64. package/scripts/skill-check.ts +190 -0
  65. package/scripts/cleanup.py +0 -100
  66. package/scripts/filter-skills.sh +0 -114
  67. package/scripts/filter_skills.py +0 -164
  68. package/scripts/install-skills.js +0 -60
  69. package/skills/autoplan/SKILL.md +0 -96
  70. package/skills/autoplan/SKILL.md.tmpl +0 -694
  71. package/skills/benchmark/SKILL.md.tmpl +0 -222
  72. package/skills/browse/SKILL.md.tmpl +0 -131
  73. package/skills/browse/bin/find-browse +0 -21
  74. package/skills/browse/bin/remote-slug +0 -14
  75. package/skills/browse/scripts/build-node-server.sh +0 -48
  76. package/skills/browse/src/activity.ts +0 -208
  77. package/skills/browse/src/browser-manager.ts +0 -959
  78. package/skills/browse/src/buffers.ts +0 -137
  79. package/skills/browse/src/bun-polyfill.cjs +0 -109
  80. package/skills/browse/src/cli.ts +0 -678
  81. package/skills/browse/src/commands.ts +0 -128
  82. package/skills/browse/src/config.ts +0 -150
  83. package/skills/browse/src/cookie-import-browser.ts +0 -625
  84. package/skills/browse/src/cookie-picker-routes.ts +0 -230
  85. package/skills/browse/src/cookie-picker-ui.ts +0 -688
  86. package/skills/browse/src/find-browse.ts +0 -61
  87. package/skills/browse/src/meta-commands.ts +0 -550
  88. package/skills/browse/src/platform.ts +0 -17
  89. package/skills/browse/src/read-commands.ts +0 -358
  90. package/skills/browse/src/server.ts +0 -1192
  91. package/skills/browse/src/sidebar-agent.ts +0 -280
  92. package/skills/browse/src/sidebar-utils.ts +0 -21
  93. package/skills/browse/src/snapshot.ts +0 -407
  94. package/skills/browse/src/url-validation.ts +0 -95
  95. package/skills/browse/src/write-commands.ts +0 -364
  96. package/skills/browse/test/activity.test.ts +0 -120
  97. package/skills/browse/test/adversarial-security.test.ts +0 -32
  98. package/skills/browse/test/browser-manager-unit.test.ts +0 -17
  99. package/skills/browse/test/bun-polyfill.test.ts +0 -72
  100. package/skills/browse/test/commands.test.ts +0 -2075
  101. package/skills/browse/test/compare-board.test.ts +0 -342
  102. package/skills/browse/test/config.test.ts +0 -316
  103. package/skills/browse/test/cookie-import-browser.test.ts +0 -519
  104. package/skills/browse/test/cookie-picker-routes.test.ts +0 -260
  105. package/skills/browse/test/file-drop.test.ts +0 -271
  106. package/skills/browse/test/find-browse.test.ts +0 -50
  107. package/skills/browse/test/findport.test.ts +0 -191
  108. package/skills/browse/test/fixtures/basic.html +0 -33
  109. package/skills/browse/test/fixtures/cursor-interactive.html +0 -22
  110. package/skills/browse/test/fixtures/dialog.html +0 -15
  111. package/skills/browse/test/fixtures/empty.html +0 -2
  112. package/skills/browse/test/fixtures/forms.html +0 -55
  113. package/skills/browse/test/fixtures/iframe.html +0 -30
  114. package/skills/browse/test/fixtures/network-idle.html +0 -30
  115. package/skills/browse/test/fixtures/qa-eval-checkout.html +0 -108
  116. package/skills/browse/test/fixtures/qa-eval-spa.html +0 -98
  117. package/skills/browse/test/fixtures/qa-eval.html +0 -51
  118. package/skills/browse/test/fixtures/responsive.html +0 -49
  119. package/skills/browse/test/fixtures/snapshot.html +0 -55
  120. package/skills/browse/test/fixtures/spa.html +0 -24
  121. package/skills/browse/test/fixtures/states.html +0 -17
  122. package/skills/browse/test/fixtures/upload.html +0 -25
  123. package/skills/browse/test/gstack-config.test.ts +0 -138
  124. package/skills/browse/test/gstack-update-check.test.ts +0 -514
  125. package/skills/browse/test/handoff.test.ts +0 -235
  126. package/skills/browse/test/path-validation.test.ts +0 -91
  127. package/skills/browse/test/platform.test.ts +0 -37
  128. package/skills/browse/test/server-auth.test.ts +0 -65
  129. package/skills/browse/test/sidebar-agent-roundtrip.test.ts +0 -226
  130. package/skills/browse/test/sidebar-agent.test.ts +0 -199
  131. package/skills/browse/test/sidebar-integration.test.ts +0 -320
  132. package/skills/browse/test/sidebar-unit.test.ts +0 -96
  133. package/skills/browse/test/snapshot.test.ts +0 -467
  134. package/skills/browse/test/state-ttl.test.ts +0 -35
  135. package/skills/browse/test/test-server.ts +0 -57
  136. package/skills/browse/test/url-validation.test.ts +0 -72
  137. package/skills/browse/test/watch.test.ts +0 -129
  138. package/skills/canary/SKILL.md.tmpl +0 -212
  139. package/skills/careful/SKILL.md.tmpl +0 -56
  140. package/skills/careful/bin/check-careful.sh +0 -112
  141. package/skills/codex/SKILL.md +0 -90
  142. package/skills/codex/SKILL.md.tmpl +0 -417
  143. package/skills/connect-chrome/SKILL.md.tmpl +0 -195
  144. package/skills/cso/ACKNOWLEDGEMENTS.md +0 -14
  145. package/skills/cso/SKILL.md +0 -93
  146. package/skills/cso/SKILL.md.tmpl +0 -606
  147. package/skills/design-consultation/SKILL.md +0 -94
  148. package/skills/design-consultation/SKILL.md.tmpl +0 -415
  149. package/skills/design-review/SKILL.md +0 -94
  150. package/skills/design-review/SKILL.md.tmpl +0 -290
  151. package/skills/design-shotgun/SKILL.md +0 -91
  152. package/skills/design-shotgun/SKILL.md.tmpl +0 -285
  153. package/skills/document-release/SKILL.md +0 -91
  154. package/skills/document-release/SKILL.md.tmpl +0 -359
  155. package/skills/freeze/SKILL.md.tmpl +0 -77
  156. package/skills/freeze/bin/check-freeze.sh +0 -79
  157. package/skills/gstack-upgrade/SKILL.md.tmpl +0 -222
  158. package/skills/guard/SKILL.md.tmpl +0 -77
  159. package/skills/investigate/SKILL.md +0 -105
  160. package/skills/investigate/SKILL.md.tmpl +0 -194
  161. package/skills/land-and-deploy/SKILL.md.tmpl +0 -881
  162. package/skills/office-hours/SKILL.md +0 -96
  163. package/skills/office-hours/SKILL.md.tmpl +0 -645
  164. package/skills/plan-ceo-review/SKILL.md +0 -94
  165. package/skills/plan-ceo-review/SKILL.md.tmpl +0 -811
  166. package/skills/plan-design-review/SKILL.md +0 -92
  167. package/skills/plan-design-review/SKILL.md.tmpl +0 -446
  168. package/skills/plan-eng-review/SKILL.md +0 -93
  169. package/skills/plan-eng-review/SKILL.md.tmpl +0 -303
  170. package/skills/qa/SKILL.md +0 -95
  171. package/skills/qa/SKILL.md.tmpl +0 -316
  172. package/skills/qa/references/issue-taxonomy.md +0 -85
  173. package/skills/qa/templates/qa-report-template.md +0 -126
  174. package/skills/qa-only/SKILL.md +0 -89
  175. package/skills/qa-only/SKILL.md.tmpl +0 -101
  176. package/skills/retro/SKILL.md +0 -89
  177. package/skills/retro/SKILL.md.tmpl +0 -820
  178. package/skills/review/SKILL.md +0 -92
  179. package/skills/review/SKILL.md.tmpl +0 -281
  180. package/skills/review/TODOS-format.md +0 -62
  181. package/skills/review/checklist.md +0 -220
  182. package/skills/review/design-checklist.md +0 -132
  183. package/skills/review/greptile-triage.md +0 -220
  184. package/skills/setup-browser-cookies/SKILL.md.tmpl +0 -81
  185. package/skills/setup-deploy/SKILL.md +0 -92
  186. package/skills/setup-deploy/SKILL.md.tmpl +0 -215
  187. package/skills/ship/SKILL.md.tmpl +0 -636
  188. package/skills/unfreeze/SKILL.md +0 -37
  189. package/skills/unfreeze/SKILL.md.tmpl +0 -36
package/bin/opengstack.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * OpenGStack CLI - Install and manage AI workflow skills
4
+ * opengstack CLI - Install and manage AI workflow skills
5
5
  * Usage: opengstack [options]
6
6
  * Example: opengstack --install
7
7
  */
@@ -13,93 +13,93 @@ const PKG_DIR = path.dirname(__dirname);
13
13
  const SKILLS_SOURCE = path.join(PKG_DIR, 'skills');
14
14
 
15
15
  function getSkillDescription(skillName) {
16
- const skillPath = path.join(SKILLS_SOURCE, skillName, 'SKILL.md');
17
- if (!fs.existsSync(skillPath)) return '';
18
-
19
- const content = fs.readFileSync(skillPath, 'utf8');
20
- const match = content.match(/description:\s*\|?\s*([^\n]+)/);
21
- return match ? match[1].trim() : '';
16
+ const skillPath = path.join(SKILLS_SOURCE, skillName, 'SKILL.md');
17
+ if (!fs.existsSync(skillPath)) return '';
18
+
19
+ const content = fs.readFileSync(skillPath, 'utf8');
20
+ const match = content.match(/description:\s*\|?\s*([^\n]+)/);
21
+ return match ? match[1].trim() : '';
22
22
  }
23
23
 
24
24
  function showHelp() {
25
- console.log(`
26
- OpenGStack - AI Engineering Workflow Skills
25
+ console.log(`
26
+ opengstack - AI Engineering Workflow Skills
27
27
 
28
28
  Usage: opengstack [options]
29
29
 
30
30
  Options:
31
- -h, --help Show this help message
32
- -l, --list List all available skills
33
- -i, --install Install skills to ~/.config/opencode/skills/,
34
- ~/.claude/skills/, and ~/.agents/skills/
31
+ -h, --help Show this help message
32
+ -l, --list List all available skills
33
+ -i, --install Install skills to ~/.config/opencode/skills/,
34
+ ~/.claude/skills/, and ~/.agents/skills/
35
35
 
36
36
  In opencode/Claude, use /slash commands:
37
- /ship, /qa, /review, etc.
37
+ /ship, /qa, /review, etc.
38
38
  `);
39
39
  }
40
40
 
41
41
  function listSkills() {
42
- console.log('\nAvailable skills:\n');
43
-
44
- if (!fs.existsSync(SKILLS_SOURCE)) {
45
- console.error('❌ No skills/ folder found');
46
- process.exit(1);
47
- }
48
-
49
- fs.readdirSync(SKILLS_SOURCE).forEach(skillName => {
50
- const skillPath = path.join(SKILLS_SOURCE, skillName, 'SKILL.md');
51
- if (!fs.existsSync(skillPath)) return;
52
-
53
- const content = fs.readFileSync(skillPath, 'utf8');
54
- const match = content.match(/description:\s*\|?\s*([^\n]+)/);
55
- let description = '';
56
- if (match) {
57
- description = match[1].trim().substring(0, 60);
58
- if (description.length === 60) description += '...';
59
- }
60
- console.log(` ${skillName.padEnd(20)} ${description}`);
61
- });
62
- console.log('');
42
+ console.log('\nAvailable skills:\n');
43
+
44
+ if (!fs.existsSync(SKILLS_SOURCE)) {
45
+ console.error('❌ No skills/ folder found');
46
+ process.exit(1);
47
+ }
48
+
49
+ fs.readdirSync(SKILLS_SOURCE).forEach(skillName => {
50
+ const skillPath = path.join(SKILLS_SOURCE, skillName, 'SKILL.md');
51
+ if (!fs.existsSync(skillPath)) return;
52
+
53
+ const content = fs.readFileSync(skillPath, 'utf8');
54
+ const match = content.match(/description:\s*\|?\s*([^\n]+)/);
55
+ let description = '';
56
+ if (match) {
57
+ description = match[1].trim().substring(0, 60);
58
+ if (description.length === 60) description += '...';
59
+ }
60
+ console.log(` ${skillName.padEnd(20)} ${description}`);
61
+ });
62
+ console.log('');
63
63
  }
64
64
 
65
65
  function installSkills() {
66
- console.log('Installing skills...');
67
- require('../scripts/install-skills.js');
66
+ console.log('Installing skills...');
67
+ require('../scripts/install-skills.js');
68
68
  }
69
69
 
70
70
  function main() {
71
- const args = process.argv.slice(2);
72
- const command = args[0];
73
-
74
- if (!command || command === '-h' || command === '--help') {
75
- showHelp();
76
- process.exit(0);
77
- }
78
-
79
- if (command === '-l' || command === '--list') {
80
- listSkills();
81
- process.exit(0);
82
- }
83
-
84
- if (command === '-i' || command === '--install') {
85
- installSkills();
86
- process.exit(0);
87
- }
88
-
89
- // Check if skill exists in package
90
- const skillPath = path.join(SKILLS_SOURCE, command, 'SKILL.md');
91
- if (!fs.existsSync(skillPath)) {
92
- console.error(`Unknown command: ${command}`);
93
- console.error('Run "opengstack --help" for available commands');
94
- process.exit(1);
95
- }
96
-
97
- // Print instructions for using the skill
98
- console.log(`\n🎯 Skill: ${command}`);
99
- console.log(`📍 Location: ${skillPath}`);
100
- console.log(`\nTo use this skill in opencode/Claude, type:`);
101
- console.log(` /${command}\n`);
102
- console.log('The skill instructions will be loaded automatically.\n');
71
+ const args = process.argv.slice(2);
72
+ const command = args[0];
73
+
74
+ if (!command || command === '-h' || command === '--help') {
75
+ showHelp();
76
+ process.exit(0);
77
+ }
78
+
79
+ if (command === '-l' || command === '--list') {
80
+ listSkills();
81
+ process.exit(0);
82
+ }
83
+
84
+ if (command === '-i' || command === '--install') {
85
+ installSkills();
86
+ process.exit(0);
87
+ }
88
+
89
+ // Check if skill exists in package
90
+ const skillPath = path.join(SKILLS_SOURCE, command, 'SKILL.md');
91
+ if (!fs.existsSync(skillPath)) {
92
+ console.error(`Unknown command: ${command}`);
93
+ console.error('Run "opengstack --help" for available commands');
94
+ process.exit(1);
95
+ }
96
+
97
+ // Print instructions for using the skill
98
+ console.log(`\n🎯 Skill: ${command}`);
99
+ console.log(`📍 Location: ${skillPath}`);
100
+ console.log(`\nTo use this skill in opencode/Claude, type:`);
101
+ console.log(` /${command}\n`);
102
+ console.log('The skill instructions will be loaded automatically.\n');
103
103
  }
104
104
 
105
105
  main();
@@ -1,48 +1,30 @@
1
- ---
2
- name: land-and-deploy
3
- preamble-tier: 4
4
- version: 1.0.0
5
- description: |
6
- Land and deploy workflow. Merges the PR, waits for CI and deploy,
7
- verifies production health via canary checks. Takes over after /ship
8
- creates the PR. Use when: "merge", "land", "deploy", "merge and verify",
9
- "land it", "ship it to production".
10
- allowed-tools:
11
- - Bash
12
- - Read
13
- - Write
14
- - Glob
15
- - AskUserQuestion
16
- ---
17
1
  <!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->
18
2
  <!-- Regenerate: bun run gen:skill-docs -->
19
3
 
20
4
  ## Preamble (run first)
21
5
 
22
-
23
- If `PROACTIVE` is `"false"`, do not proactively suggest gstack skills AND do not
6
+ If `PROACTIVE` is `"false"`, do not proactively suggest opengstack skills AND do not
24
7
  auto-invoke skills based on conversation context. Only run skills the user explicitly
25
8
  types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefly say:
26
9
  "I think /skillname might help here — want me to run it?" and wait for confirmation.
27
10
  The user opted out of proactive behavior.
28
11
 
29
12
  If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
30
- or invoking other gstack skills, use the `/gstack-` prefix (e.g., `/gstack-qa` instead
31
- of `/qa`, `/gstack-ship` instead of `/ship`). Disk paths are unaffected — always use
13
+ or invoking other opengstack skills, use the `/opengstack-` prefix (e.g., `/opengstack-qa` instead
14
+ of `/qa`, `/opengstack-ship` instead of `/ship`). Disk paths are unaffected — always use
32
15
  `~/.claude/skills/opengstack/[skill-name]/SKILL.md` for reading skill files.
33
16
 
34
17
  If `LAKE_INTRO` is `no`: Before continuing, introduce the Completeness Principle.
35
18
  Then offer to open the essay in their default browser:
36
19
 
37
20
  ```bash
38
- touch ~/.gstack/.completeness-intro-seen
21
+ touch ~/.opengstack/.completeness-intro-seen
39
22
 
40
23
  Only run `open` if the user says yes. Always run `touch` to mark as seen. This only happens once.
41
24
 
42
- If `PROACTIVE_PROMPTED` is `no` AND `TEL_PROMPTED` is `yes`: After telemetry is handled,
43
25
  ask the user about proactive behavior. Use AskUserQuestion:
44
26
 
45
- > gstack can proactively figure out when you might need a skill while you work —
27
+ > opengstack can proactively figure out when you might need a skill while you work —
46
28
  > like suggesting /qa when you say "does this work?" or /investigate when you hit
47
29
  > a bug. We recommend keeping this on — it speeds up every part of your workflow.
48
30
 
@@ -55,13 +37,13 @@ If B: run `echo set proactive false`
55
37
 
56
38
  Always run:
57
39
  ```bash
58
- touch ~/.gstack/.proactive-prompted
40
+ touch ~/.opengstack/.proactive-prompted
59
41
 
60
42
  This only happens once. If `PROACTIVE_PROMPTED` is `yes`, skip this entirely.
61
43
 
62
44
  ## Voice
63
45
 
64
- You are OpenGStack, an open source AI builder framework
46
+ You are opengstack, an open source AI builder framework
65
47
 
66
48
  Lead with the point. Say what it does, why it matters, and what changes for the builder. Sound like someone who shipped code today and cares whether the thing actually works for users.
67
49
 
@@ -1,49 +1,30 @@
1
- ---
2
- name: benchmark
3
- preamble-tier: 1
4
- version: 1.0.0
5
- description: |
6
- Performance regression detection using the browse daemon. Establishes
7
- baselines for page load times, Core Web Vitals, and resource sizes.
8
- Compares before/after on every PR. Tracks performance trends over time.
9
- Use when: "performance", "benchmark", "page speed", "lighthouse", "web vitals",
10
- "bundle size", "load time".
11
- allowed-tools:
12
- - Bash
13
- - Read
14
- - Write
15
- - Glob
16
- - AskUserQuestion
17
- ---
18
1
  <!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->
19
2
  <!-- Regenerate: bun run gen:skill-docs -->
20
3
 
21
4
  ## Preamble (run first)
22
5
 
23
-
24
- If `PROACTIVE` is `"false"`, do not proactively suggest gstack skills AND do not
6
+ If `PROACTIVE` is `"false"`, do not proactively suggest opengstack skills AND do not
25
7
  auto-invoke skills based on conversation context. Only run skills the user explicitly
26
8
  types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefly say:
27
9
  "I think /skillname might help here — want me to run it?" and wait for confirmation.
28
10
  The user opted out of proactive behavior.
29
11
 
30
12
  If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
31
- or invoking other gstack skills, use the `/gstack-` prefix (e.g., `/gstack-qa` instead
32
- of `/qa`, `/gstack-ship` instead of `/ship`). Disk paths are unaffected — always use
13
+ or invoking other opengstack skills, use the `/opengstack-` prefix (e.g., `/opengstack-qa` instead
14
+ of `/qa`, `/opengstack-ship` instead of `/ship`). Disk paths are unaffected — always use
33
15
  `~/.claude/skills/opengstack/[skill-name]/SKILL.md` for reading skill files.
34
16
 
35
17
  If `LAKE_INTRO` is `no`: Before continuing, introduce the Completeness Principle.
36
18
  Then offer to open the essay in their default browser:
37
19
 
38
20
  ```bash
39
- touch ~/.gstack/.completeness-intro-seen
21
+ touch ~/.opengstack/.completeness-intro-seen
40
22
 
41
23
  Only run `open` if the user says yes. Always run `touch` to mark as seen. This only happens once.
42
24
 
43
- If `PROACTIVE_PROMPTED` is `no` AND `TEL_PROMPTED` is `yes`: After telemetry is handled,
44
25
  ask the user about proactive behavior. Use AskUserQuestion:
45
26
 
46
- > gstack can proactively figure out when you might need a skill while you work —
27
+ > opengstack can proactively figure out when you might need a skill while you work —
47
28
  > like suggesting /qa when you say "does this work?" or /investigate when you hit
48
29
  > a bug. We recommend keeping this on — it speeds up every part of your workflow.
49
30
 
@@ -56,7 +37,7 @@ If B: run `echo set proactive false`
56
37
 
57
38
  Always run:
58
39
  ```bash
59
- touch ~/.gstack/.proactive-prompted
40
+ touch ~/.opengstack/.proactive-prompted
60
41
 
61
42
  This only happens once. If `PROACTIVE_PROMPTED` is `yes`, skip this entirely.
62
43
 
@@ -94,30 +75,29 @@ RECOMMENDATION:
94
75
 
95
76
  Replace `SKILL_NAME` with the actual skill name from frontmatter, `OUTCOME` with
96
77
  success/error/abort, and `USED_BROWSE` with true/false based on whether `$B` was used.
97
- If you cannot determine the outcome, use "unknown". The local JSONL always logs. The
98
- remote binary only runs if telemetry is not off and the binary exists.
78
+ If you cannot determine the outcome, use "unknown".
99
79
 
100
80
  ## Plan Status Footer
101
81
 
102
82
  When you are in plan mode and about to call ExitPlanMode:
103
83
 
104
- 1. Check if the plan file already has a `## GSTACK REVIEW REPORT` section.
84
+ 1. Check if the plan file already has a `## opengstack REVIEW REPORT` section.
105
85
  2. If it DOES — skip (a review skill already wrote a richer report).
106
86
  3. If it does NOT — run this command:
107
87
 
108
88
  \`\`\`bash
109
- ~/.claude/skills/opengstack/bin/gstack-review-read
89
+ ~/.claude/skills/opengstack/bin/opengstack-review-read
110
90
  \`\`\`
111
91
 
112
- Then write a `## GSTACK REVIEW REPORT` section to the end of the plan file:
92
+ Then write a `## opengstack REVIEW REPORT` section to the end of the plan file:
113
93
 
114
94
  - If the output contains review entries (JSONL lines before `---CONFIG---`): format the
115
- standard report table with runs/status/findings per skill, same format as the review
116
- skills use.
95
+ standard report table with runs/status/findings per skill, same format as the review
96
+ skills use.
117
97
  - If the output is `NO_REVIEWS` or empty: write this placeholder table:
118
98
 
119
99
  \`\`\`markdown
120
- ## GSTACK REVIEW REPORT
100
+ ## opengstack REVIEW REPORT
121
101
 
122
102
  | Review | Trigger | Why | Runs | Status | Findings |
123
103
  |--------|---------|-----|------|--------|----------|
@@ -138,23 +118,23 @@ plan's living status.
138
118
  ```bash
139
119
  _ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
140
120
  B=""
141
- [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/browse/dist/browse" ] && B="$_ROOT/.claude/skills/gstack/browse/dist/browse"
121
+ [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/opengstack/browse/dist/browse" ] && B="$_ROOT/.claude/skills/opengstack/browse/dist/browse"
142
122
  [ -z "$B" ] && B=~/.claude/skills/opengstack/browse/dist/browse
143
123
  if [ -x "$B" ]; then
144
- echo "READY: $B"
124
+ echo "READY: $B"
145
125
  else
146
- echo "NEEDS_SETUP"
126
+ echo "NEEDS_SETUP"
147
127
  fi
148
128
 
149
129
  If `NEEDS_SETUP`:
150
- 1. Tell the user: "gstack browse needs a one-time build (~10 seconds). OK to proceed?" Then STOP and wait.
130
+ 1. Tell the user: "opengstack browse needs a one-time build (~10 seconds). OK to proceed?" Then STOP and wait.
151
131
  2. Run: `cd <SKILL_DIR> && ./setup`
152
132
  3. If `bun` is not installed:
153
- ```bash
154
- if ! command -v bun >/dev/null 2>&1; then
155
- curl -fsSL https://bun.sh/install | BUN_VERSION=1.3.10 bash
156
- fi
157
- ```
133
+ ```bash
134
+ if ! command -v bun >/dev/null 2>&1; then
135
+ curl -fsSL https://bun.sh/install | BUN_VERSION=1.3.10 bash
136
+ fi
137
+ ```
158
138
 
159
139
  # /benchmark — Performance Regression Detection
160
140
 
@@ -178,9 +158,9 @@ When the user types `/benchmark`, run this skill.
178
158
  ### Phase 1: Setup
179
159
 
180
160
  ```bash
181
- eval "$(~/.claude/skills/opengstack/bin/gstack-slug 2>/dev/null || echo "SLUG=unknown")"
182
- mkdir -p .gstack/benchmark-reports
183
- mkdir -p .gstack/benchmark-reports/baselines
161
+ eval "$(~/.claude/skills/opengstack/bin/opengstack-slug 2>/dev/null || echo "SLUG=unknown")"
162
+ mkdir -p .OpenGStack/benchmark-reports
163
+ mkdir -p .OpenGStack/benchmark-reports/baselines
184
164
 
185
165
  ### Phase 2: Page Discovery
186
166
 
@@ -230,59 +210,58 @@ Save metrics to baseline file:
230
210
 
231
211
  ```json
232
212
  {
233
- "url": "<url>",
234
- "timestamp": "<ISO>",
235
- "branch": "<branch>",
236
- "pages": {
237
- "/": {
238
- "ttfb_ms": 120,
239
- "fcp_ms": 450,
240
- "lcp_ms": 800,
241
- "dom_interactive_ms": 600,
242
- "dom_complete_ms": 1200,
243
- "full_load_ms": 1400,
244
- "total_requests": 42,
245
- "total_transfer_bytes": 1250000,
246
- "js_bundle_bytes": 450000,
247
- "css_bundle_bytes": 85000,
248
- "largest_resources": [
249
- {"name": "main.js", "size": 320000, "duration": 180},
250
- {"name": "vendor.js", "size": 130000, "duration": 90}
251
- ]
252
- }
253
- }
213
+ "url": "<url>",
214
+ "timestamp": "<ISO>",
215
+ "branch": "<branch>",
216
+ "pages": {
217
+ "/": {
218
+ "ttfb_ms": 120,
219
+ "fcp_ms": 450,
220
+ "lcp_ms": 800,
221
+ "dom_interactive_ms": 600,
222
+ "dom_complete_ms": 1200,
223
+ "full_load_ms": 1400,
224
+ "total_requests": 42,
225
+ "total_transfer_bytes": 1250000,
226
+ "js_bundle_bytes": 450000,
227
+ "css_bundle_bytes": 85000,
228
+ "largest_resources": [
229
+ {"name": "main.js", "size": 320000, "duration": 180},
230
+ {"name": "vendor.js", "size": 130000, "duration": 90}
231
+ ]
232
+ }
233
+ }
254
234
  }
255
235
 
256
- Write to `.gstack/benchmark-reports/baselines/baseline.json`.
236
+ Write to `.OpenGStack/benchmark-reports/baselines/baseline.json`.
257
237
 
258
238
  ### Phase 5: Comparison
259
239
 
260
240
  If baseline exists, compare current metrics against it:
261
241
 
262
-
263
242
  PERFORMANCE REPORT —
264
243
  ══════════════════════════
265
244
  Branch: [current-branch] vs baseline ([baseline-branch])
266
245
 
267
246
  Page: /
268
247
  ─────────────────────────────────────────────────────
269
- Metric Baseline Current Delta Status
270
- ──────── ──────── ─────── ───── ──────
271
- TTFB 120ms 135ms +15ms OK
272
- FCP 450ms 480ms +30ms OK
273
- LCP 800ms 1600ms +800ms REGRESSION
274
- DOM Interactive 600ms 650ms +50ms OK
275
- DOM Complete 1200ms 1350ms +150ms WARNING
276
- Full Load 1400ms 2100ms +700ms REGRESSION
277
- Total Requests 42 58 +16 WARNING
278
- Transfer Size 1.2MB 1.8MB +0.6MB REGRESSION
279
- JS Bundle 450KB 720KB +270KB REGRESSION
280
- CSS Bundle 85KB 88KB +3KB OK
248
+ Metric Baseline Current Delta Status
249
+ ──────── ──────── ─────── ───── ──────
250
+ TTFB 120ms 135ms +15ms OK
251
+ FCP 450ms 480ms +30ms OK
252
+ LCP 800ms 1600ms +800ms REGRESSION
253
+ DOM Interactive 600ms 650ms +50ms OK
254
+ DOM Complete 1200ms 1350ms +150ms WARNING
255
+ Full Load 1400ms 2100ms +700ms REGRESSION
256
+ Total Requests 42 58 +16 WARNING
257
+ Transfer Size 1.2MB 1.8MB +0.6MB REGRESSION
258
+ JS Bundle 450KB 720KB +270KB REGRESSION
259
+ CSS Bundle 85KB 88KB +3KB OK
281
260
 
282
261
  REGRESSIONS DETECTED: 3
283
- [1] LCP doubled (800ms → 1600ms) — likely a large new image or blocking resource
284
- [2] Total transfer +50% (1.2MB → 1.8MB) — check new JS bundles
285
- [3] JS bundle +60% (450KB → 720KB) — new dependency or missing tree-shaking
262
+ [1] LCP doubled (800ms → 1600ms) — likely a large new image or blocking resource
263
+ [2] Total transfer +50% (1.2MB → 1.8MB) — check new JS bundles
264
+ [3] JS bundle +60% (450KB → 720KB) — new dependency or missing tree-shaking
286
265
 
287
266
  **Regression thresholds:**
288
267
  - Timing metrics: >50% increase OR >500ms absolute increase = REGRESSION
@@ -293,15 +272,14 @@ REGRESSIONS DETECTED: 3
293
272
 
294
273
  ### Phase 6: Slowest Resources
295
274
 
296
-
297
275
  TOP 10 SLOWEST RESOURCES
298
276
  ═════════════════════════
299
- # Resource Type Size Duration
300
- 1 vendor.chunk.js script 320KB 480ms
301
- 2 main.js script 250KB 320ms
302
- 3 hero-image.webp img 180KB 280ms
303
- 4 analytics.js script 45KB 250ms ← third-party
304
- 5 fonts/inter-var.woff2 font 95KB 180ms
277
+ # Resource Type Size Duration
278
+ 1 vendor.chunk.js script 320KB 480ms
279
+ 2 main.js script 250KB 320ms
280
+ 3 hero-image.webp img 180KB 280ms
281
+ 4 analytics.js script 45KB 250ms ← third-party
282
+ 5 fonts/inter-var.woff2 font 95KB 180ms
305
283
  ...
306
284
 
307
285
  RECOMMENDATIONS:
@@ -313,17 +291,16 @@ RECOMMENDATIONS:
313
291
 
314
292
  Check against industry budgets:
315
293
 
316
-
317
294
  PERFORMANCE BUDGET CHECK
318
295
  ════════════════════════
319
- Metric Budget Actual Status
320
- ──────── ────── ────── ──────
321
- FCP < 1.8s 0.48s PASS
322
- LCP < 2.5s 1.6s PASS
323
- Total JS < 500KB 720KB FAIL
324
- Total CSS < 100KB 88KB PASS
325
- Total Transfer < 2MB 1.8MB WARNING (90%)
326
- HTTP Requests < 50 58 FAIL
296
+ Metric Budget Actual Status
297
+ ──────── ────── ────── ──────
298
+ FCP < 1.8s 0.48s PASS
299
+ LCP < 2.5s 1.6s PASS
300
+ Total JS < 500KB 720KB FAIL
301
+ Total CSS < 100KB 88KB PASS
302
+ Total Transfer < 2MB 1.8MB WARNING (90%)
303
+ HTTP Requests < 50 58 FAIL
327
304
 
328
305
  Grade: B (4/6 passing)
329
306
 
@@ -331,22 +308,21 @@ Grade: B (4/6 passing)
331
308
 
332
309
  Load historical baseline files and show trends:
333
310
 
334
-
335
311
  PERFORMANCE TRENDS (last 5 benchmarks)
336
312
  ══════════════════════════════════════
337
- Date FCP LCP Bundle Requests Grade
338
- 2026-03-10 420ms 750ms 380KB 38 A
339
- 2026-03-12 440ms 780ms 410KB 40 A
340
- 2026-03-14 450ms 800ms 450KB 42 A
341
- 2026-03-16 460ms 850ms 520KB 48 B
342
- 2026-03-18 480ms 1600ms 720KB 58 B
313
+ Date FCP LCP Bundle Requests Grade
314
+ 2026-03-10 420ms 750ms 380KB 38 A
315
+ 2026-03-12 440ms 780ms 410KB 40 A
316
+ 2026-03-14 450ms 800ms 450KB 42 A
317
+ 2026-03-16 460ms 850ms 520KB 48 B
318
+ 2026-03-18 480ms 1600ms 720KB 58 B
343
319
 
344
320
  TREND: Performance degrading. LCP doubled in 8 days.
345
- JS bundle growing 50KB/week. Investigate.
321
+ JS bundle growing 50KB/week. Investigate.
346
322
 
347
323
  ### Phase 9: Save Report
348
324
 
349
- Write to `.gstack/benchmark-reports/{date}-benchmark.md` and `.gstack/benchmark-reports/{date}-benchmark.json`.
325
+ Write to `.OpenGStack/benchmark-reports/{date}-benchmark.md` and `.OpenGStack/benchmark-reports/{date}-benchmark.json`.
350
326
 
351
327
  ## Important Rules
352
328