bin/gstack-update-check (pure bash, <5ms cached). Prompts user via AskUserQuestion with option to upgrade or defer 24h./gstack-upgrade skill — standalone upgrade command that detects install type (global-git, local-git, vendored), upgrades, and shows a "What's New" summary from CHANGELOG~/.gstack/just-upgraded-from markerAskUserQuestion added to 5 skills — gstack (root), browse, qa, retro, setup-browser-cookies now have AskUserQuestion in allowed-tools for upgrade promptsBash added to plan-eng-review — enables the update check preamble to run in plan review sessionsbrowse/test/gstack-update-check.test.ts — 10 test cases covering all script branch paths with GSTACK_REMOTE_URL env var for test isolationTODOS.md for tracking deferred workcheckVersion() from browse/src/find-browse.ts (~120 lines deleted) and browse/test/find-browse.test.ts (~100 lines deleted). Replaced by bin/gstack-update-check bash script using semver VERSION comparison with 24h cache.qa/SKILL.md and setup-browser-cookies/SKILL.md setup blocks — removed old BROWSE_OUTPUT/META parsing, now use simple find-browse callbrowse/bin/find-browse shim comments to reflect simplified role (binary locator only)checkVersion(), readCache(), writeCache(), fetchRemoteSHA(), resolveSkillDir(), CacheEntry interface from browse/src/find-browse.tsMETA:UPDATE_AVAILABLE protocol from find-browse output/tmp/gstack-latest-version cache file (cleaned up by setup script)find-browse indirection with explicit browse/dist/browse path in SKILL.md setup blocks. Agents were guessing bin/browse (wrong) instead of running find-browse to discover browse/dist/browse (correct).[ -n "$_UPD" ] && echo "$_UPD" returned exit code 1 when no update available, causing agents to think gstack was broken. Added || true./browse used $B in every example but never defined it. Added {{BROWSE_SETUP}} placeholder.header usage from <name> <value> to <name>:<value> (matching actual implementation)cookie usage syntax: cookie <name>=<value>{{UPDATE_CHECK}} and {{BROWSE_SETUP}} placeholders to gen-skill-docs.ts. Converted qa/SKILL.md and setup-browser-cookies/SKILL.md to .tmpl templates. All 4 browse-using skills now generate from a single source of truth.~/.claude/skills/gstack/browse/dist/browseno such file or directory.*browse error pattern in session-runner-i / --interactive) alongside shortgenerateHelpText() from COMMAND_DESCRIPTIONSUsage: patterns in implementation against COMMAND_DESCRIPTIONS| (would break markdown tables).tmpl files with {{COMMAND_REFERENCE}} and {{SNAPSHOT_FLAGS}} placeholders, auto-generated from source code at build time. Structurally prevents command drift between docs and code.browse/src/commands.ts) — single source of truth for all browse commands with categories and enriched descriptions. Zero side effects, safe to import from build scripts and tests.SNAPSHOT_FLAGS array in browse/src/snapshot.ts) — metadata-driven parser replaces hand-coded switch/case. Adding a flag in one place updates the parser, docs, and tests.$B commands from SKILL.md code blocks, validates against command registry and snapshot flag metadataSKILL_E2E=1 env var (~$0.50/run)ANTHROPIC_API_KEYbun run skill:check — health dashboard showing all skills, command counts, validation status, template freshnessbun run dev:skill — watch mode that regenerates and validates SKILL.md on every template or source file change.github/workflows/skill-docs.yml) — runs gen:skill-docs on push/PR, fails if generated output differs from committed filesbun run gen:skill-docs script for manual regenerationbun run test:eval for LLM-as-judge evalstest/helpers/skill-parser.ts — extracts and validates $B commands from Markdowntest/helpers/session-runner.ts — Agent SDK wrapper with error pattern scanning and transcript savingconductor.json) — lifecycle hooks for workspace setup/teardown.env propagation — bin/dev-setup copies .env from main worktree into Conductor workspaces automatically.env.example template for API key configurationgen:skill-docs before compiling binariesparseSnapshotArgs is metadata-driven (iterates SNAPSHOT_FLAGS instead of switch/case)server.ts imports command sets from commands.ts instead of declaring inline.tmpl instead)jsonResponse() referenced url out of scope, crashing every API callhelp command routed correctly (was unreachable due to META_COMMANDS dispatch ordering)~/.claude/skills/gstack fallback from resolveServerScript()/tmp/ to .gstack//qa on a feature branch auto-analyzes git diff, identifies affected pages/routes, detects the running app on localhost, and tests only what changed. No URL needed..gstack/ inside the project root (detected via git rev-parse --show-toplevel). No more /tmp state files.browse/src/config.ts) — centralizes path resolution for CLI and server, eliminates duplicated port/state logicbinaryVersion SHA; CLI auto-restarts the server when the binary is rebuilt/tmp/browse-server*.json files, verifying PID ownership before sending signals/review and /ship fetch and triage Greptile bot comments; /retro tracks Greptile batting average across weeksbin/dev-setup symlinks skills from the repo for in-place development; bin/dev-teardown restores global installhelp command — agents can self-discover all commands and snapshot flagsfind-browse with META signal protocol — detects stale binaries and prompts agents to updatebrowse/dist/find-browse compiled binary with git SHA comparison against origin/main (4hr cached).version file written at build time for binary version tracking.gstack/browse.json (was /tmp/browse-server.json).gstack/browse-{console,network,dialog}.log (was /tmp/browse-*.log).json.tmp → rename (prevents partial reads)BROWSE_STATE_FILE to spawned server (server derives all paths from it)META:UPDATE_AVAILABLE/qa SKILL.md now describes four modes (diff-aware, full, quick, regression) with diff-aware as the default on feature branchesjsonResponse/errorResponse use options objects to prevent positional parameter confusionbrowse and find-browse binaries, cleans up .bun-build temp filesCONDUCTOR_PORT magic offset (browse_port = CONDUCTOR_PORT - 45600)~/.claude/skills/gstack/browse/src/server.tsDEVELOPING_GSTACK.md (renamed to CONTRIBUTING.md)cookie-import-browser command — decrypt and import cookies from real Chromium browsers (Comet, Chrome, Arc, Brave, Edge)--domain flag for non-interactive use/setup-browser-cookies skill for Claude Code integration/qa skill with 6-phase workflow (Initialize, Authenticate, Orient, Explore, Document, Wrap up)browse/bin/find-browse — DRY binary discovery using git rev-parse --show-toplevelupload <sel> <file1> [file2...]is visible|hidden|enabled|disabled|checked|editable|focused <sel>snapshot -a)snapshot -D)snapshot -C)wait --networkidle / --load / --domcontentloaded flagsconsole --errors filter (error + warning only)cookie-import <json-file> with auto-fill domain from page URL/browse installs — compiled binary now resolves server.ts from its own directory instead of assuming a global install existssetup rebuilds stale binaries (not just missing ones) and exits non-zero if the build failschain command swallowing real errors from write commands (e.g. navigation timeout reported as "Unknown meta command")ln -snf in setup to avoid creating nested symlinks on upgradegit fetch && git reset --hard instead of git pull for upgrades (handles force-pushes)/retro)Initial release.
/plan-ceo-review, /plan-eng-review, /review, /ship, /browsesetup script for binary compilation and skill symlinking