opengstack 0.13.4

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 (73) hide show
  1. package/AGENTS.md +47 -0
  2. package/CLAUDE.md +370 -0
  3. package/LICENSE +21 -0
  4. package/README.md +80 -0
  5. package/SKILL.md +226 -0
  6. package/autoplan/SKILL.md +96 -0
  7. package/autoplan/SKILL.md.tmpl +694 -0
  8. package/benchmark/SKILL.md +358 -0
  9. package/benchmark/SKILL.md.tmpl +222 -0
  10. package/browse/SKILL.md +396 -0
  11. package/browse/SKILL.md.tmpl +131 -0
  12. package/canary/SKILL.md +89 -0
  13. package/canary/SKILL.md.tmpl +212 -0
  14. package/careful/SKILL.md +58 -0
  15. package/careful/SKILL.md.tmpl +56 -0
  16. package/codex/SKILL.md +90 -0
  17. package/codex/SKILL.md.tmpl +417 -0
  18. package/connect-chrome/SKILL.md +87 -0
  19. package/connect-chrome/SKILL.md.tmpl +195 -0
  20. package/cso/SKILL.md +93 -0
  21. package/cso/SKILL.md.tmpl +606 -0
  22. package/design-consultation/SKILL.md +94 -0
  23. package/design-consultation/SKILL.md.tmpl +415 -0
  24. package/design-review/SKILL.md +94 -0
  25. package/design-review/SKILL.md.tmpl +290 -0
  26. package/design-shotgun/SKILL.md +91 -0
  27. package/design-shotgun/SKILL.md.tmpl +285 -0
  28. package/docs/designs/CHROME_VS_CHROMIUM_EXPLORATION.md +84 -0
  29. package/docs/designs/CONDUCTOR_CHROME_SIDEBAR_INTEGRATION.md +57 -0
  30. package/docs/designs/CONDUCTOR_SESSION_API.md +108 -0
  31. package/docs/designs/DESIGN_SHOTGUN.md +451 -0
  32. package/docs/designs/DESIGN_TOOLS_V1.md +622 -0
  33. package/docs/skills.md +880 -0
  34. package/document-release/SKILL.md +91 -0
  35. package/document-release/SKILL.md.tmpl +359 -0
  36. package/freeze/SKILL.md +78 -0
  37. package/freeze/SKILL.md.tmpl +77 -0
  38. package/gstack-upgrade/SKILL.md +224 -0
  39. package/gstack-upgrade/SKILL.md.tmpl +222 -0
  40. package/guard/SKILL.md +78 -0
  41. package/guard/SKILL.md.tmpl +77 -0
  42. package/investigate/SKILL.md +105 -0
  43. package/investigate/SKILL.md.tmpl +194 -0
  44. package/land-and-deploy/SKILL.md +88 -0
  45. package/land-and-deploy/SKILL.md.tmpl +881 -0
  46. package/office-hours/SKILL.md +96 -0
  47. package/office-hours/SKILL.md.tmpl +645 -0
  48. package/package.json +43 -0
  49. package/plan-ceo-review/SKILL.md +94 -0
  50. package/plan-ceo-review/SKILL.md.tmpl +811 -0
  51. package/plan-design-review/SKILL.md +92 -0
  52. package/plan-design-review/SKILL.md.tmpl +446 -0
  53. package/plan-eng-review/SKILL.md +93 -0
  54. package/plan-eng-review/SKILL.md.tmpl +303 -0
  55. package/qa/SKILL.md +95 -0
  56. package/qa/SKILL.md.tmpl +316 -0
  57. package/qa-only/SKILL.md +89 -0
  58. package/qa-only/SKILL.md.tmpl +101 -0
  59. package/retro/SKILL.md +89 -0
  60. package/retro/SKILL.md.tmpl +820 -0
  61. package/review/SKILL.md +92 -0
  62. package/review/SKILL.md.tmpl +281 -0
  63. package/scripts/cleanup.py +100 -0
  64. package/scripts/filter-skills.sh +114 -0
  65. package/scripts/filter_skills.py +140 -0
  66. package/setup-browser-cookies/SKILL.md +216 -0
  67. package/setup-browser-cookies/SKILL.md.tmpl +81 -0
  68. package/setup-deploy/SKILL.md +92 -0
  69. package/setup-deploy/SKILL.md.tmpl +215 -0
  70. package/ship/SKILL.md +90 -0
  71. package/ship/SKILL.md.tmpl +636 -0
  72. package/unfreeze/SKILL.md +37 -0
  73. package/unfreeze/SKILL.md.tmpl +36 -0
package/AGENTS.md ADDED
@@ -0,0 +1,47 @@
1
+ # OpenGStack — AI Engineering Workflow
2
+
3
+ OpenGStack is a collection of SKILL.md files that give AI agents structured roles for
4
+ software development. Each skill is a specialist: CEO reviewer, eng manager,
5
+ designer, QA lead, release engineer, debugger, and more.
6
+
7
+ Forked from garrytan/gstack with telemetry removed.
8
+
9
+ ## Available skills
10
+
11
+ Skills live in skill directories. Invoke them by name (e.g., `/office-hours`).
12
+
13
+ | Skill | What it does |
14
+ |-------|-------------|
15
+ | `/office-hours` | Start here. Reframes your product idea before you write code. |
16
+ | `/plan-ceo-review` | CEO-level review: find the 10-star product in the request. |
17
+ | `/plan-eng-review` | Lock architecture, data flow, edge cases, and tests. |
18
+ | `/plan-design-review` | Rate each design dimension 0-10, explain what a 10 looks like. |
19
+ | `/design-consultation` | Build a complete design system from scratch. |
20
+ | `/review` | Pre-landing PR review. Finds bugs that pass CI but break in prod. |
21
+ | `/investigate` | Systematic root-cause debugging. No fixes without investigation. |
22
+ | `/design-review` | Design audit + fix loop with atomic commits. |
23
+ | `/qa` | Open a real browser, find bugs, fix them, re-verify. |
24
+ | `/qa-only` | Same as /qa but report only — no code changes. |
25
+ | `/ship` | Run tests, review, push, open PR. One command. |
26
+ | `/land-and-deploy` | Merge PR, deploy, verify health. |
27
+ | `/document-release` | Update all docs to match what you just shipped. |
28
+ | `/retro` | Weekly retro with per-person breakdowns and shipping streaks. |
29
+ | `/browse` | Headless browser — real Chromium, real clicks, ~100ms/command. |
30
+ | `/setup-browser-cookies` | Import cookies from your real browser for authenticated testing. |
31
+ | `/careful` | Warn before destructive commands (rm -rf, DROP TABLE, force-push). |
32
+ | `/freeze` | Lock edits to one directory. Hard block, not just a warning. |
33
+ | `/guard` | Activate both careful + freeze at once. |
34
+ | `/unfreeze` | Remove directory edit restrictions. |
35
+ | `/autoplan` | Run all reviews sequentially with auto-decisions. |
36
+ | `/codex` | OpenAI Codex CLI wrapper for code review. |
37
+ | `/canary` | Post-deploy monitoring. |
38
+ | `/benchmark` | Performance regression detection. |
39
+ | `/cso` | Security audit. |
40
+
41
+ ## No Telemetry
42
+
43
+ This fork has all telemetry, analytics, and tracking removed. Your usage stays local.
44
+
45
+ ## Sync from Upstream
46
+
47
+ This repo syncs daily from garrytan/gstack via GitHub Actions.
package/CLAUDE.md ADDED
@@ -0,0 +1,370 @@
1
+ # gstack development
2
+
3
+ ## Commands
4
+
5
+ ```bash
6
+ bun install # install dependencies
7
+ bun test # run free tests (browse + snapshot + skill validation)
8
+ bun run test:evals # run paid evals: LLM judge + E2E (diff-based, ~$4/run max)
9
+ bun run test:evals:all # run ALL paid evals regardless of diff
10
+ bun run test:gate # run gate-tier tests only (CI default, blocks merge)
11
+ bun run test:periodic # run periodic-tier tests only (weekly cron / manual)
12
+ bun run test:e2e # run E2E tests only (diff-based, ~$3.85/run max)
13
+ bun run test:e2e:all # run ALL E2E tests regardless of diff
14
+ bun run eval:select # show which tests would run based on current diff
15
+ bun run dev <cmd> # run CLI in dev mode, e.g. bun run dev goto https://example.com
16
+ bun run build # gen docs + compile binaries
17
+ bun run gen:skill-docs # regenerate SKILL.md files from templates
18
+ bun run skill:check # health dashboard for all skills
19
+ bun run dev:skill # watch mode: auto-regen + validate on change
20
+ bun run eval:list # list all eval runs from ~/.gstack-dev/evals/
21
+ bun run eval:compare # compare two eval runs (auto-picks most recent)
22
+ bun run eval:summary # aggregate stats across all eval runs
23
+ ```
24
+
25
+ `test:evals` requires `ANTHROPIC_API_KEY`. Codex E2E tests (`test/codex-e2e.test.ts`)
26
+ use Codex's own auth from `~/.codex/` config — no `OPENAI_API_KEY` env var needed.
27
+ E2E tests stream progress in real-time (tool-by-tool via `--output-format stream-json
28
+ --verbose`). Results are persisted to `~/.gstack-dev/evals/` with auto-comparison
29
+ against the previous run.
30
+
31
+ **Diff-based test selection:** `test:evals` and `test:e2e` auto-select tests based
32
+ on `git diff` against the base branch. Each test declares its file dependencies in
33
+ `test/helpers/touchfiles.ts`. Changes to global touchfiles (session-runner, eval-store,
34
+ touchfiles.ts itself) trigger all tests. Use `EVALS_ALL=1` or the `:all` script
35
+ variants to force all tests. Run `eval:select` to preview which tests would run.
36
+
37
+ **Two-tier system:** Tests are classified as `gate` or `periodic` in `E2E_TIERS`
38
+ (in `test/helpers/touchfiles.ts`). CI runs only gate tests (`EVALS_TIER=gate`);
39
+ periodic tests run weekly via cron or manually. Use `EVALS_TIER=gate` or
40
+ `EVALS_TIER=periodic` to filter. When adding new E2E tests, classify them:
41
+ 1. Safety guardrail or deterministic functional test? -> `gate`
42
+ 2. Quality benchmark, Opus model test, or non-deterministic? -> `periodic`
43
+ 3. Requires external service (Codex, Gemini)? -> `periodic`
44
+
45
+ ## Testing
46
+
47
+ ```bash
48
+ bun test # run before every commit — free, <2s
49
+ bun run test:evals # run before shipping — paid, diff-based (~$4/run max)
50
+ ```
51
+
52
+ `bun test` runs skill validation, gen-skill-docs quality checks, and browse
53
+ integration tests. `bun run test:evals` runs LLM-judge quality evals and E2E
54
+ tests via `claude -p`. Both must pass before creating a PR.
55
+
56
+ ## Project structure
57
+
58
+ ```
59
+ gstack/
60
+ ├── browse/ # Headless browser CLI (Playwright)
61
+ │ ├── src/ # CLI + server + commands
62
+ │ │ ├── commands.ts # Command registry (single source of truth)
63
+ │ │ └── snapshot.ts # SNAPSHOT_FLAGS metadata array
64
+ │ ├── test/ # Integration tests + fixtures
65
+ │ └── dist/ # Compiled binary
66
+ ├── scripts/ # Build + DX tooling
67
+ │ ├── gen-skill-docs.ts # Template → SKILL.md generator
68
+ │ ├── resolvers/ # Template resolver modules (preamble, design, review, etc.)
69
+ │ ├── skill-check.ts # Health dashboard
70
+ │ └── dev-skill.ts # Watch mode
71
+ ├── test/ # Skill validation + eval tests
72
+ │ ├── helpers/ # skill-parser.ts, session-runner.ts, llm-judge.ts, eval-store.ts
73
+ │ ├── fixtures/ # Ground truth JSON, planted-bug fixtures, eval baselines
74
+ │ ├── skill-validation.test.ts # Tier 1: static validation (free, <1s)
75
+ │ ├── gen-skill-docs.test.ts # Tier 1: generator quality (free, <1s)
76
+ │ ├── skill-llm-eval.test.ts # Tier 3: LLM-as-judge (~$0.15/run)
77
+ │ └── skill-e2e-*.test.ts # Tier 2: E2E via claude -p (~$3.85/run, split by category)
78
+ ├── qa-only/ # /qa-only skill (report-only QA, no fixes)
79
+ ├── plan-design-review/ # /plan-design-review skill (report-only design audit)
80
+ ├── design-review/ # /design-review skill (design audit + fix loop)
81
+ ├── ship/ # Ship workflow skill
82
+ ├── review/ # PR review skill
83
+ ├── plan-ceo-review/ # /plan-ceo-review skill
84
+ ├── plan-eng-review/ # /plan-eng-review skill
85
+ ├── autoplan/ # /autoplan skill (auto-review pipeline: CEO → design → eng)
86
+ ├── benchmark/ # /benchmark skill (performance regression detection)
87
+ ├── canary/ # /canary skill (post-deploy monitoring loop)
88
+ ├── codex/ # /codex skill (multi-AI second opinion via OpenAI Codex CLI)
89
+ ├── land-and-deploy/ # /land-and-deploy skill (merge → deploy → canary verify)
90
+ ├── office-hours/ # /office-hours skill (YC Office Hours — startup diagnostic + builder brainstorm)
91
+ ├── investigate/ # /investigate skill (systematic root-cause debugging)
92
+ ├── retro/ # Retrospective skill (includes /retro global cross-project mode)
93
+ ├── bin/ # CLI utilities (gstack-repo-mode, gstack-slug, gstack-config, etc.)
94
+ ├── document-release/ # /document-release skill (post-ship doc updates)
95
+ ├── cso/ # /cso skill (OWASP Top 10 + STRIDE security audit)
96
+ ├── design-consultation/ # /design-consultation skill (design system from scratch)
97
+ ├── design-shotgun/ # /design-shotgun skill (visual design exploration)
98
+ ├── connect-chrome/ # /connect-chrome skill (headed Chrome with side panel)
99
+ ├── design/ # Design binary CLI (GPT Image API)
100
+ │ ├── src/ # CLI + commands (generate, variants, compare, serve, etc.)
101
+ │ ├── test/ # Integration tests
102
+ │ └── dist/ # Compiled binary
103
+ ├── extension/ # Chrome extension (side panel + activity feed)
104
+ ├── lib/ # Shared libraries (worktree.ts)
105
+ ├── docs/designs/ # Design documents
106
+ ├── setup-deploy/ # /setup-deploy skill (one-time deploy config)
107
+ ├── .github/ # CI workflows + Docker image
108
+ │ ├── workflows/ # evals.yml (E2E on Ubicloud), skill-docs.yml, actionlint.yml
109
+ │ └── docker/ # Dockerfile.ci (pre-baked toolchain + Playwright/Chromium)
110
+ ├── setup # One-time setup: build binary + symlink skills
111
+ ├── SKILL.md # Generated from SKILL.md.tmpl (don't edit directly)
112
+ ├── SKILL.md.tmpl # Template: edit this, run gen:skill-docs
113
+ ├── ETHOS.md # Builder philosophy (Boil the Lake, Search Before Building)
114
+ └── package.json # Build scripts for browse
115
+ ```
116
+
117
+ ## SKILL.md workflow
118
+
119
+ SKILL.md files are **generated** from `.tmpl` templates. To update docs:
120
+
121
+ 1. Edit the `.tmpl` file (e.g. `SKILL.md.tmpl` or `browse/SKILL.md.tmpl`)
122
+ 2. Run `bun run gen:skill-docs` (or `bun run build` which does it automatically)
123
+ 3. Commit both the `.tmpl` and generated `.md` files
124
+
125
+ To add a new browse command: add it to `browse/src/commands.ts` and rebuild.
126
+ To add a snapshot flag: add it to `SNAPSHOT_FLAGS` in `browse/src/snapshot.ts` and rebuild.
127
+
128
+ **Merge conflicts on SKILL.md files:** NEVER resolve conflicts on generated SKILL.md
129
+ files by accepting either side. Instead: (1) resolve conflicts on the `.tmpl` templates
130
+ and `scripts/gen-skill-docs.ts` (the sources of truth), (2) run `bun run gen:skill-docs`
131
+ to regenerate all SKILL.md files, (3) stage the regenerated files. Accepting one side's
132
+ generated output silently drops the other side's template changes.
133
+
134
+ ## Platform-agnostic design
135
+
136
+ Skills must NEVER hardcode framework-specific commands, file patterns, or directory
137
+ structures. Instead:
138
+
139
+ 1. **Read CLAUDE.md** for project-specific config (test commands, eval commands, etc.)
140
+ 2. **If missing, AskUserQuestion** — let the user tell you or let gstack search the repo
141
+ 3. **Persist the answer to CLAUDE.md** so we never have to ask again
142
+
143
+ This applies to test commands, eval commands, deploy commands, and any other
144
+ project-specific behavior. The project owns its config; gstack reads it.
145
+
146
+ ## Writing SKILL templates
147
+
148
+ SKILL.md.tmpl files are **prompt templates read by Claude**, not bash scripts.
149
+ Each bash code block runs in a separate shell — variables do not persist between blocks.
150
+
151
+ Rules:
152
+ - **Use natural language for logic and state.** Don't use shell variables to pass
153
+ state between code blocks. Instead, tell Claude what to remember and reference
154
+ it in prose (e.g., "the base branch detected in Step 0").
155
+ - **Don't hardcode branch names.** Detect `main`/`master`/etc dynamically via
156
+ `gh pr view` or `gh repo view`. Use `{{BASE_BRANCH_DETECT}}` for PR-targeting
157
+ skills. Use "the base branch" in prose, `<base>` in code block placeholders.
158
+ - **Keep bash blocks self-contained.** Each code block should work independently.
159
+ If a block needs context from a previous step, restate it in the prose above.
160
+ - **Express conditionals as English.** Instead of nested `if/elif/else` in bash,
161
+ write numbered decision steps: "1. If X, do Y. 2. Otherwise, do Z."
162
+
163
+ ## Browser interaction
164
+
165
+ When you need to interact with a browser (QA, dogfooding, cookie setup), use the
166
+ `/browse` skill or run the browse binary directly via `$B <command>`. NEVER use
167
+ `mcp__claude-in-chrome__*` tools — they are slow, unreliable, and not what this
168
+ project uses.
169
+
170
+ ## Vendored symlink awareness
171
+
172
+ When developing gstack, `.claude/skills/gstack` may be a symlink back to this
173
+ working directory (gitignored). This means skill changes are **live immediately** —
174
+ great for rapid iteration, risky during big refactors where half-written skills
175
+ could break other Claude Code sessions using gstack concurrently.
176
+
177
+ **Check once per session:** Run `ls -la .claude/skills/gstack` to see if it's a
178
+ symlink or a real copy. If it's a symlink to your working directory, be aware that:
179
+ - Template changes + `bun run gen:skill-docs` immediately affect all gstack invocations
180
+ - Breaking changes to SKILL.md.tmpl files can break concurrent gstack sessions
181
+ - During large refactors, remove the symlink (`rm .claude/skills/gstack`) so the
182
+ global install at `~/.claude/skills/gstack/` is used instead
183
+
184
+ **Prefix setting:** Skill symlinks use either short names (`qa -> gstack/qa`) or
185
+ namespaced (`gstack-qa -> gstack/qa`), controlled by `skill_prefix` in
186
+ `~/.gstack/config.yaml`. When vendoring into a project, run `./setup` after
187
+ symlinking to create the per-skill symlinks with your preferred naming. Pass
188
+ `--no-prefix` or `--prefix` to skip the interactive prompt.
189
+
190
+ **For plan reviews:** When reviewing plans that modify skill templates or the
191
+ gen-skill-docs pipeline, consider whether the changes should be tested in isolation
192
+ before going live (especially if the user is actively using gstack in other windows).
193
+
194
+ ## Compiled binaries — NEVER commit browse/dist/ or design/dist/
195
+
196
+ The `browse/dist/` and `design/dist/` directories contain compiled Bun binaries
197
+ (`browse`, `find-browse`, `design`, ~58MB each). These are Mach-O arm64 only — they
198
+ do NOT work on Linux, Windows, or Intel Macs. The `./setup` script already builds
199
+ from source for every platform, so the checked-in binaries are redundant. They are
200
+ tracked by git due to a historical mistake and should eventually be removed with
201
+ `git rm --cached`.
202
+
203
+ **NEVER stage or commit these files.** They show up as modified in `git status`
204
+ because they're tracked despite `.gitignore` — ignore them. When staging files,
205
+ always use specific filenames (`git add file1 file2`) — never `git add .` or
206
+ `git add -A`, which will accidentally include the binaries.
207
+
208
+ ## Commit style
209
+
210
+ **Always bisect commits.** Every commit should be a single logical change. When
211
+ you've made multiple changes (e.g., a rename + a rewrite + new tests), split them
212
+ into separate commits before pushing. Each commit should be independently
213
+ understandable and revertable.
214
+
215
+ Examples of good bisection:
216
+ - Rename/move separate from behavior changes
217
+ - Test infrastructure (touchfiles, helpers) separate from test implementations
218
+ - Template changes separate from generated file regeneration
219
+ - Mechanical refactors separate from new features
220
+
221
+ When the user says "bisect commit" or "bisect and push," split staged/unstaged
222
+ changes into logical commits and push.
223
+
224
+ ## Community PR guardrails
225
+
226
+ When reviewing or merging community PRs, **always AskUserQuestion** before accepting
227
+ any commit that:
228
+
229
+ 1. **Touches ETHOS.md** — this file is Garry's personal builder philosophy. No edits
230
+ from external contributors or AI agents, period.
231
+ 2. **Removes or softens promotional material** — YC references, founder perspective,
232
+ and product voice are intentional. PRs that frame these as "unnecessary" or
233
+ "too promotional" must be rejected.
234
+ 3. **Changes Garry's voice** — the tone, humor, directness, and perspective in skill
235
+ templates, CHANGELOG, and docs are not generic. PRs that rewrite voice to be
236
+ more "neutral" or "professional" must be rejected.
237
+
238
+ Even if the agent strongly believes a change improves the project, these three
239
+ categories require explicit user approval via AskUserQuestion. No exceptions.
240
+ No auto-merging. No "I'll just clean this up."
241
+
242
+ ## CHANGELOG + VERSION style
243
+
244
+ **VERSION and CHANGELOG are branch-scoped.** Every feature branch that ships gets its
245
+ own version bump and CHANGELOG entry. The entry describes what THIS branch adds —
246
+ not what was already on main.
247
+
248
+ **When to write the CHANGELOG entry:**
249
+ - At `/ship` time (Step 5), not during development or mid-branch.
250
+ - The entry covers ALL commits on this branch vs the base branch.
251
+ - Never fold new work into an existing CHANGELOG entry from a prior version that
252
+ already landed on main. If main has v0.10.0.0 and your branch adds features,
253
+ bump to v0.10.1.0 with a new entry — don't edit the v0.10.0.0 entry.
254
+
255
+ **Key questions before writing:**
256
+ 1. What branch am I on? What did THIS branch change?
257
+ 2. Is the base branch version already released? (If yes, bump and create new entry.)
258
+ 3. Does an existing entry on this branch already cover earlier work? (If yes, replace
259
+ it with one unified entry for the final version.)
260
+
261
+ CHANGELOG.md is **for users**, not contributors. Write it like product release notes:
262
+
263
+ - Lead with what the user can now **do** that they couldn't before. Sell the feature.
264
+ - Use plain language, not implementation details. "You can now..." not "Refactored the..."
265
+ - **Never mention TODOS.md, internal tracking, eval infrastructure, or contributor-facing
266
+ details.** These are invisible to users and meaningless to them.
267
+ - Put contributor/internal changes in a separate "For contributors" section at the bottom.
268
+ - Every entry should make someone think "oh nice, I want to try that."
269
+ - No jargon: say "every question now tells you which project and branch you're in" not
270
+ "AskUserQuestion format standardized across skill templates via preamble resolver."
271
+
272
+ ## AI effort compression
273
+
274
+ When estimating or discussing effort, always show both human-team and CC+gstack time:
275
+
276
+ | Task type | Human team | CC+gstack | Compression |
277
+ |-----------|-----------|-----------|-------------|
278
+ | Boilerplate / scaffolding | 2 days | 15 min | ~100x |
279
+ | Test writing | 1 day | 15 min | ~50x |
280
+ | Feature implementation | 1 week | 30 min | ~30x |
281
+ | Bug fix + regression test | 4 hours | 15 min | ~20x |
282
+ | Architecture / design | 2 days | 4 hours | ~5x |
283
+ | Research / exploration | 1 day | 3 hours | ~3x |
284
+
285
+ Completeness is cheap. Don't recommend shortcuts when the complete implementation
286
+ is a "lake" (achievable) not an "ocean" (multi-quarter migration). See the
287
+ Completeness Principle in the skill preamble for the full philosophy.
288
+
289
+ ## Search before building
290
+
291
+ Before designing any solution that involves concurrency, unfamiliar patterns,
292
+ infrastructure, or anything where the runtime/framework might have a built-in:
293
+
294
+ 1. Search for "{runtime} {thing} built-in"
295
+ 2. Search for "{thing} best practice {current year}"
296
+ 3. Check official runtime/framework docs
297
+
298
+ Three layers of knowledge: tried-and-true (Layer 1), new-and-popular (Layer 2),
299
+ first-principles (Layer 3). Prize Layer 3 above all. See ETHOS.md for the full
300
+ builder philosophy.
301
+
302
+ ## Local plans
303
+
304
+ Contributors can store long-range vision docs and design documents in `~/.gstack-dev/plans/`.
305
+ These are local-only (not checked in). When reviewing TODOS.md, check `plans/` for candidates
306
+ that may be ready to promote to TODOs or implement.
307
+
308
+ ## E2E eval failure blame protocol
309
+
310
+ When an E2E eval fails during `/ship` or any other workflow, **never claim "not
311
+ related to our changes" without proving it.** These systems have invisible couplings —
312
+ a preamble text change affects agent behavior, a new helper changes timing, a
313
+ regenerated SKILL.md shifts prompt context.
314
+
315
+ **Required before attributing a failure to "pre-existing":**
316
+ 1. Run the same eval on main (or base branch) and show it fails there too
317
+ 2. If it passes on main but fails on the branch — it IS your change. Trace the blame.
318
+ 3. If you can't run on main, say "unverified — may or may not be related" and flag it
319
+ as a risk in the PR body
320
+
321
+ "Pre-existing" without receipts is a lazy claim. Prove it or don't say it.
322
+
323
+ ## Long-running tasks: don't give up
324
+
325
+ When running evals, E2E tests, or any long-running background task, **poll until
326
+ completion**. Use `sleep 180 && echo "ready"` + `TaskOutput` in a loop every 3
327
+ minutes. Never switch to blocking mode and give up when the poll times out. Never
328
+ say "I'll be notified when it completes" and stop checking — keep the loop going
329
+ until the task finishes or the user tells you to stop.
330
+
331
+ The full E2E suite can take 30-45 minutes. That's 10-15 polling cycles. Do all of
332
+ them. Report progress at each check (which tests passed, which are running, any
333
+ failures so far). The user wants to see the run complete, not a promise that
334
+ you'll check later.
335
+
336
+ ## E2E test fixtures: extract, don't copy
337
+
338
+ **NEVER copy a full SKILL.md file into an E2E test fixture.** SKILL.md files are
339
+ 1500-2000 lines. When `claude -p` reads a file that large, context bloat causes
340
+ timeouts, flaky turn limits, and tests that take 5-10x longer than necessary.
341
+
342
+ Instead, extract only the section the test actually needs:
343
+
344
+ ```typescript
345
+ // BAD — agent reads 1900 lines, burns tokens on irrelevant sections
346
+ fs.copyFileSync(path.join(ROOT, 'ship', 'SKILL.md'), path.join(dir, 'ship-SKILL.md'));
347
+
348
+ // GOOD — agent reads ~60 lines, finishes in 38s instead of timing out
349
+ const full = fs.readFileSync(path.join(ROOT, 'ship', 'SKILL.md'), 'utf-8');
350
+ const start = full.indexOf('## Review Readiness Dashboard');
351
+ const end = full.indexOf('\n---\n', start);
352
+ fs.writeFileSync(path.join(dir, 'ship-SKILL.md'), full.slice(start, end > start ? end : undefined));
353
+ ```
354
+
355
+ Also when running targeted E2E tests to debug failures:
356
+ - Run in **foreground** (`bun test ...`), not background with `&` and `tee`
357
+ - Never `pkill` running eval processes and restart — you lose results and waste money
358
+ - One clean run beats three killed-and-restarted runs
359
+
360
+ ## Deploying to the active skill
361
+
362
+ The active skill lives at `~/.claude/skills/gstack/`. After making changes:
363
+
364
+ 1. Push your branch
365
+ 2. Fetch and reset in the skill directory: `cd ~/.claude/skills/gstack && git fetch origin && git reset --hard origin/main`
366
+ 3. Rebuild: `cd ~/.claude/skills/gstack && bun run build`
367
+
368
+ Or copy the binaries directly:
369
+ - `cp browse/dist/browse ~/.claude/skills/gstack/browse/dist/browse`
370
+ - `cp design/dist/design ~/.claude/skills/gstack/design/dist/design`
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Garry Tan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # OpenGStack
2
+
3
+ Open source engineering workflow skills for AI coding assistants.
4
+
5
+ Forked from [garrytan/gstack](https://github.com/garrytan/gstack) with telemetry and YC references removed.
6
+
7
+ ## What is this?
8
+
9
+ Skills that give AI agents structured roles for software development. Each skill is a specialist: CEO reviewer, eng manager, designer, QA lead, release engineer, debugger, and more.
10
+
11
+ ## Available Skills
12
+
13
+ | Skill | What it does |
14
+ |-------|--------------|
15
+ | `/office-hours` | Brainstorm your product idea before you write code. |
16
+ | `/plan-ceo-review` | CEO-level review: find the 10-star product in the request. |
17
+ | `/plan-eng-review` | Lock architecture, data flow, edge cases, and tests. |
18
+ | `/plan-design-review` | Rate each design dimension 0-10, explain what a 10 looks like. |
19
+ | `/design-consultation` | Build a complete design system from scratch. |
20
+ | `/design-review` | Design audit + fix loop with atomic commits. |
21
+ | `/review` | Pre-landing PR review. Finds bugs that pass CI but break in prod. |
22
+ | `/investigate` | Systematic root-cause debugging. |
23
+ | `/qa` | Open a real browser, find bugs, fix them, re-verify. |
24
+ | `/qa-only` | Same as /qa but report only — no code changes. |
25
+ | `/ship` | Run tests, review, push, open PR. One command. |
26
+ | `/land-and-deploy` | Merge PR, deploy, verify health. |
27
+ | `/document-release` | Update all docs to match what you just shipped. |
28
+ | `/retro` | Weekly retro with per-person breakdowns and shipping streaks. |
29
+ | `/browse` | Headless browser — real Chromium, real clicks, ~100ms/command. |
30
+ | `/setup-browser-cookies` | Import cookies from your real browser for authenticated testing. |
31
+ | `/careful` | Warn before destructive commands (rm -rf, DROP TABLE, force-push). |
32
+ | `/freeze` | Lock edits to one directory. Hard block, not just a warning. |
33
+ | `/guard` | Activate both careful + freeze at once. |
34
+ | `/unfreeze` | Remove directory edit restrictions. |
35
+ | `/autoplan` | Run all reviews sequentially with auto-decisions. |
36
+ | `/codex` | OpenAI Codex CLI wrapper for code review. |
37
+ | `/canary` | Post-deploy monitoring. |
38
+ | `/benchmark` | Performance regression detection. |
39
+ | `/cso` | Security audit. |
40
+
41
+ ## Installation
42
+
43
+ ### For Claude Code / OpenCode
44
+
45
+ ```bash
46
+ # Clone to your skills directory
47
+ git clone https://github.com/Ambisphaeric/opengstack.git ~/.claude/skills/opengstack
48
+ ```
49
+
50
+ ### Browse Setup (optional but recommended)
51
+
52
+ ```bash
53
+ cd ~/.claude/skills/opengstack/browse
54
+ ./setup
55
+ ```
56
+
57
+ Requires `bun`: `curl -fsSL https://bun.sh/install | bash`
58
+
59
+ ## No Telemetry
60
+
61
+ This fork removes all telemetry, analytics, and tracking from the original gstack. Your usage data stays on your machine.
62
+
63
+ ## Syncing from Upstream
64
+
65
+ This repo auto-syncs daily from `garrytan/gstack` via GitHub Actions. Filters are applied to remove telemetry and YC references.
66
+
67
+ To sync manually:
68
+
69
+ ```bash
70
+ git remote add upstream https://github.com/garrytan/gstack.git
71
+ git fetch upstream main
72
+ git merge upstream/main
73
+ ./scripts/filter_skills.py .
74
+ ./scripts/cleanup.py .
75
+ git commit -m "chore: sync from upstream"
76
+ ```
77
+
78
+ ## License
79
+
80
+ MIT