feat: team-friendly gstack install mode (v0.15.7.0)#809
Merged
Conversation
DRY helper for adding/removing SessionStart hooks in ~/.claude/settings.json. Handles missing files, deduplication, malformed JSON, and atomic writes (.tmp + rename) to prevent corruption on crash or disk-full. Part of team-install-mode feature (credit: Jared Friedman). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SessionStart hook target that auto-updates gstack at session start. Background fork (zero latency), throttled to once/hour, with lockfile (mkdir + PID), stale lock recovery, GIT_TERMINAL_PROMPT=0, and debug logging to ~/.gstack/analytics/session-update.log. Part of team-install-mode feature (credit: Jared Friedman). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
--team enables auto_upgrade and registers SessionStart hook via gstack-settings-hook. --no-team reverses it. -q/--quiet suppresses all informational output (for hook-triggered setup runs). --local now prints a deprecation warning. Replaces ~20 echo calls with log() helper for quiet mode support. Part of team-install-mode feature (credit: Jared Friedman). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two modes: 'optional' (gentle CLAUDE.md suggestion) and 'required' (CLAUDE.md enforcement + .claude/hooks/check-gstack.sh PreToolUse hook that blocks work without gstack installed). Atomic JSON writes, idempotent, prints git add instructions. Part of team-install-mode feature (credit: Jared Friedman). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- README: replace "Step 2: Add to your repo" vendoring instructions with team mode (./setup --team + gstack-team-init) - CLAUDE.md: rename "Vendored symlink awareness" to "Dev symlink awareness", add deprecation note - CONTRIBUTING.md: remove vendoring language from prefix section - bin/gstack-uninstall: clean up SessionStart hook on uninstall Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Detects vendored gstack in CWD (.claude/skills/gstack/ that's not a symlink and has VERSION or .git). Outputs VENDORED_GSTACK: yes/no. Adds generateVendoringDeprecation() section that offers one-time migration to team mode via AskUserQuestion. Part of team-install-mode feature (credit: Jared Friedman). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Covers gstack-settings-hook (add, remove, dedup, preserve existing, atomic write), gstack-session-update (guards, throttle, non-fatal), gstack-team-init (optional, required, enforcement hook, idempotent), and setup flags (-q, --local deprecation). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
E2E Evals: ✅ PASS60/60 tests passed | $6.82 total cost | 12 parallel runners
12x ubicloud-standard-2 (Docker: pre-baked toolchain + deps) | wall clock ≈ slowest suite |
Bump to v0.15.9.0 (above main's 0.15.8.0). Keep team mode entry on top, main's Smarter Reviews and Security Wave 1 entries below. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bump to v0.15.13.0 (above main's 0.15.12.0). Resolve preamble.ts conflicts (keep both vendoring detection and spawned session check). Regenerate all SKILL.md files from resolved sources. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2 tasks
joethorngren
added a commit
to joethorngren/jstack
that referenced
this pull request
Apr 6, 2026
Upstream features merged: - GStack Browser with anti-bot stealth (garrytan#695) - Adaptive gating + cross-review dedup for review army (garrytan#760) - Voice-friendly skill triggers for AquaVoice (garrytan#732) - Native OpenClaw skills + ClaHub publishing (garrytan#832) - Declarative multi-host platform (OpenCode, Slate, Cursor, OpenClaw) (garrytan#793) - Interactive /plan-devex-review + DX review skills (garrytan#784, garrytan#796) - Ship re-run verification checks (garrytan#833) - Community security wave — 8 PRs, 4 contributors (garrytan#847) - Security wave 1 — 14 fixes for audit (garrytan#810) - Team-friendly gstack install mode (garrytan#809) - Anti-skip rule for all review skills (garrytan#804) - Various bug fixes and doc updates Conflict resolution strategy: - Branding files (README, CLAUDE.md, CHANGELOG, VERSION, CONTRIBUTING, TODOS): kept jstack - SKILL.md / SKILL.md.tmpl files: took upstream (skill improvements) - Code files (browse/, scripts/, tests, setup, package.json): took upstream - Telemetry files (bin/gstack-telemetry-sync, supabase telemetry-ingest): kept deleted (jstack privacy policy) - New upstream files (hosts/, openclaw/, devex-review/, etc.): accepted as-is Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Teams can now keep every developer on the same gstack version automatically. No more vendoring 342 files into your repo. No more version drift across 10 concurrent monorepo checkouts. No more "who upgraded gstack last?" Slack threads.
Hat tip to Jared Friedman for the design.
Team mode
./setup --teamregisters aSessionStarthook that auto-updates gstack at session start. Background fork (zero latency), throttled to once/hour, network-failure-safe../setup --no-teamreverses it../setup -qfor silent operation.gstack-team-init optional|requiredgenerates repo-level bootstrap files: CLAUDE.md section + enforcement hook (required mode blocks work without gstack).Infrastructure
bin/gstack-settings-hookDRY helper for atomic JSON manipulation of~/.claude/settings.jsonbin/gstack-session-updateSessionStart hook target with PID-based lockfile, stale recovery,GIT_TERMINAL_PROMPT=0, debug logDocs & cleanup
gstack-uninstallcleans up SessionStart hooks--localprints deprecation warningTest Coverage
20 integration tests covering: settings-hook (add, remove, dedup, preserve existing, atomic write), session-update (guards, throttle, non-fatal), team-init (optional, required, enforcement hook, idempotent), setup flags (-q, --local deprecation).
Pre-Landing Review
CEO review (SELECTIVE EXPANSION) + Eng review completed in this session. Outside voice (Claude subagent) caught 4 issues, all resolved.
Test plan
🤖 Generated with Claude Code