mirror of
https://github.com/garrytan/gstack.git
synced 2026-07-07 00:27:56 +02:00
feat: add update check preamble to all 9 skills
Every skill now runs bin/gstack-update-check on invocation. If an upgrade is available, reads gstack-upgrade/SKILL.md inline upgrade flow. Also adds AskUserQuestion to 5 skills that lacked it (gstack root, browse, qa, retro, setup-browser-cookies) and Bash to plan-eng-review. Simplifies qa and setup-browser-cookies setup blocks (removes META parsing).
This commit is contained in:
@@ -10,11 +10,21 @@ description: |
|
|||||||
allowed-tools:
|
allowed-tools:
|
||||||
- Bash
|
- Bash
|
||||||
- Read
|
- Read
|
||||||
|
- AskUserQuestion
|
||||||
|
|
||||||
---
|
---
|
||||||
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->
|
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->
|
||||||
<!-- Regenerate: bun run gen:skill-docs -->
|
<!-- Regenerate: bun run gen:skill-docs -->
|
||||||
|
|
||||||
|
## Update Check (run first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
|
||||||
|
[ -n "$_UPD" ] && echo "$_UPD"
|
||||||
|
```
|
||||||
|
|
||||||
|
If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, `touch ~/.gstack/last-update-check` if no). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.
|
||||||
|
|
||||||
# gstack browse: QA Testing & Dogfooding
|
# gstack browse: QA Testing & Dogfooding
|
||||||
|
|
||||||
Persistent headless Chromium. First call auto-starts (~3s), then ~100-200ms per command.
|
Persistent headless Chromium. First call auto-starts (~3s), then ~100-200ms per command.
|
||||||
@@ -23,12 +33,9 @@ Auto-shuts down after 30 min idle. State persists between calls (cookies, tabs,
|
|||||||
## SETUP (run this check BEFORE any browse command)
|
## SETUP (run this check BEFORE any browse command)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
BROWSE_OUTPUT=$(browse/bin/find-browse 2>/dev/null || ~/.claude/skills/gstack/browse/bin/find-browse 2>/dev/null)
|
B=$(browse/bin/find-browse 2>/dev/null || ~/.claude/skills/gstack/browse/bin/find-browse 2>/dev/null)
|
||||||
B=$(echo "$BROWSE_OUTPUT" | head -1)
|
|
||||||
META=$(echo "$BROWSE_OUTPUT" | grep "^META:" || true)
|
|
||||||
if [ -n "$B" ]; then
|
if [ -n "$B" ]; then
|
||||||
echo "READY: $B"
|
echo "READY: $B"
|
||||||
[ -n "$META" ] && echo "$META"
|
|
||||||
else
|
else
|
||||||
echo "NEEDS_SETUP"
|
echo "NEEDS_SETUP"
|
||||||
fi
|
fi
|
||||||
@@ -39,13 +46,6 @@ If `NEEDS_SETUP`:
|
|||||||
2. Run: `cd <SKILL_DIR> && ./setup`
|
2. Run: `cd <SKILL_DIR> && ./setup`
|
||||||
3. If `bun` is not installed: `curl -fsSL https://bun.sh/install | bash`
|
3. If `bun` is not installed: `curl -fsSL https://bun.sh/install | bash`
|
||||||
|
|
||||||
If you see `META:UPDATE_AVAILABLE`:
|
|
||||||
1. Parse the JSON payload to get `current`, `latest`, and `command`.
|
|
||||||
2. Tell the user: "A gstack update is available (current: X, latest: Y). OK to update?"
|
|
||||||
3. **STOP and wait for approval.**
|
|
||||||
4. Run the command from the META payload.
|
|
||||||
5. Re-run the setup check above to get the updated binary path.
|
|
||||||
|
|
||||||
## IMPORTANT
|
## IMPORTANT
|
||||||
|
|
||||||
- Use the compiled binary via Bash: `$B <command>`
|
- Use the compiled binary via Bash: `$B <command>`
|
||||||
|
|||||||
@@ -10,9 +10,19 @@ description: |
|
|||||||
allowed-tools:
|
allowed-tools:
|
||||||
- Bash
|
- Bash
|
||||||
- Read
|
- Read
|
||||||
|
- AskUserQuestion
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Update Check (run first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
|
||||||
|
[ -n "$_UPD" ] && echo "$_UPD"
|
||||||
|
```
|
||||||
|
|
||||||
|
If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, `touch ~/.gstack/last-update-check` if no). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.
|
||||||
|
|
||||||
# gstack browse: QA Testing & Dogfooding
|
# gstack browse: QA Testing & Dogfooding
|
||||||
|
|
||||||
Persistent headless Chromium. First call auto-starts (~3s), then ~100-200ms per command.
|
Persistent headless Chromium. First call auto-starts (~3s), then ~100-200ms per command.
|
||||||
|
|||||||
@@ -10,11 +10,21 @@ description: |
|
|||||||
allowed-tools:
|
allowed-tools:
|
||||||
- Bash
|
- Bash
|
||||||
- Read
|
- Read
|
||||||
|
- AskUserQuestion
|
||||||
|
|
||||||
---
|
---
|
||||||
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->
|
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->
|
||||||
<!-- Regenerate: bun run gen:skill-docs -->
|
<!-- Regenerate: bun run gen:skill-docs -->
|
||||||
|
|
||||||
|
## Update Check (run first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
|
||||||
|
[ -n "$_UPD" ] && echo "$_UPD"
|
||||||
|
```
|
||||||
|
|
||||||
|
If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, `touch ~/.gstack/last-update-check` if no). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.
|
||||||
|
|
||||||
# browse: QA Testing & Dogfooding
|
# browse: QA Testing & Dogfooding
|
||||||
|
|
||||||
Persistent headless Chromium. First call auto-starts (~3s), then ~100ms per command.
|
Persistent headless Chromium. First call auto-starts (~3s), then ~100ms per command.
|
||||||
|
|||||||
@@ -10,9 +10,19 @@ description: |
|
|||||||
allowed-tools:
|
allowed-tools:
|
||||||
- Bash
|
- Bash
|
||||||
- Read
|
- Read
|
||||||
|
- AskUserQuestion
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Update Check (run first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
|
||||||
|
[ -n "$_UPD" ] && echo "$_UPD"
|
||||||
|
```
|
||||||
|
|
||||||
|
If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, `touch ~/.gstack/last-update-check` if no). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.
|
||||||
|
|
||||||
# browse: QA Testing & Dogfooding
|
# browse: QA Testing & Dogfooding
|
||||||
|
|
||||||
Persistent headless Chromium. First call auto-starts (~3s), then ~100ms per command.
|
Persistent headless Chromium. First call auto-starts (~3s), then ~100ms per command.
|
||||||
|
|||||||
@@ -14,6 +14,15 @@ allowed-tools:
|
|||||||
- AskUserQuestion
|
- AskUserQuestion
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Update Check (run first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
|
||||||
|
[ -n "$_UPD" ] && echo "$_UPD"
|
||||||
|
```
|
||||||
|
|
||||||
|
If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, `touch ~/.gstack/last-update-check` if no). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.
|
||||||
|
|
||||||
# Mega Plan Review Mode
|
# Mega Plan Review Mode
|
||||||
|
|
||||||
## Philosophy
|
## Philosophy
|
||||||
|
|||||||
@@ -10,8 +10,18 @@ allowed-tools:
|
|||||||
- Grep
|
- Grep
|
||||||
- Glob
|
- Glob
|
||||||
- AskUserQuestion
|
- AskUserQuestion
|
||||||
|
- Bash
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Update Check (run first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
|
||||||
|
[ -n "$_UPD" ] && echo "$_UPD"
|
||||||
|
```
|
||||||
|
|
||||||
|
If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, `touch ~/.gstack/last-update-check` if no). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.
|
||||||
|
|
||||||
# Plan Review Mode
|
# Plan Review Mode
|
||||||
|
|
||||||
Review this plan thoroughly before making any code changes. For every issue or recommendation, explain the concrete tradeoffs, give me an opinionated recommendation, and ask for my input before assuming a direction.
|
Review this plan thoroughly before making any code changes. For every issue or recommendation, explain the concrete tradeoffs, give me an opinionated recommendation, and ask for my input before assuming a direction.
|
||||||
|
|||||||
+19
-9
@@ -11,8 +11,18 @@ allowed-tools:
|
|||||||
- Bash
|
- Bash
|
||||||
- Read
|
- Read
|
||||||
- Write
|
- Write
|
||||||
|
- AskUserQuestion
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Update Check (run first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
|
||||||
|
[ -n "$_UPD" ] && echo "$_UPD"
|
||||||
|
```
|
||||||
|
|
||||||
|
If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, `touch ~/.gstack/last-update-check` if no). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.
|
||||||
|
|
||||||
# /qa: Systematic QA Testing
|
# /qa: Systematic QA Testing
|
||||||
|
|
||||||
You are a QA engineer. Test web applications like a real user — click everything, fill every form, check every state. Produce a structured report with evidence.
|
You are a QA engineer. Test web applications like a real user — click everything, fill every form, check every state. Produce a structured report with evidence.
|
||||||
@@ -34,18 +44,18 @@ You are a QA engineer. Test web applications like a real user — click everythi
|
|||||||
**Find the browse binary:**
|
**Find the browse binary:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
BROWSE_OUTPUT=$(browse/bin/find-browse 2>/dev/null || ~/.claude/skills/gstack/browse/bin/find-browse 2>/dev/null)
|
B=$(browse/bin/find-browse 2>/dev/null || ~/.claude/skills/gstack/browse/bin/find-browse 2>/dev/null)
|
||||||
B=$(echo "$BROWSE_OUTPUT" | head -1)
|
if [ -n "$B" ]; then
|
||||||
META=$(echo "$BROWSE_OUTPUT" | grep "^META:" || true)
|
echo "READY: $B"
|
||||||
if [ -z "$B" ]; then
|
else
|
||||||
echo "ERROR: browse binary not found"
|
echo "NEEDS_SETUP"
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
echo "READY: $B"
|
|
||||||
[ -n "$META" ] && echo "$META"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
If you see `META:UPDATE_AVAILABLE`: tell the user an update is available, STOP and wait for approval, then run the command from the META payload and re-run the setup check.
|
If `NEEDS_SETUP`:
|
||||||
|
1. Tell the user: "gstack browse needs a one-time build (~10 seconds). OK to proceed?" Then STOP and wait.
|
||||||
|
2. Run: `cd <SKILL_DIR> && ./setup`
|
||||||
|
3. If `bun` is not installed: `curl -fsSL https://bun.sh/install | bash`
|
||||||
|
|
||||||
**Create output directories:**
|
**Create output directories:**
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,18 @@ allowed-tools:
|
|||||||
- Read
|
- Read
|
||||||
- Write
|
- Write
|
||||||
- Glob
|
- Glob
|
||||||
|
- AskUserQuestion
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Update Check (run first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
|
||||||
|
[ -n "$_UPD" ] && echo "$_UPD"
|
||||||
|
```
|
||||||
|
|
||||||
|
If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, `touch ~/.gstack/last-update-check` if no). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.
|
||||||
|
|
||||||
# /retro — Weekly Engineering Retrospective
|
# /retro — Weekly Engineering Retrospective
|
||||||
|
|
||||||
Generates a comprehensive engineering retrospective analyzing commit history, work patterns, and code quality metrics. Team-aware: identifies the user running the command, then analyzes every contributor with per-person praise and growth opportunities. Designed for a senior IC/CTO-level builder using Claude Code as a force multiplier.
|
Generates a comprehensive engineering retrospective analyzing commit history, work patterns, and code quality metrics. Team-aware: identifies the user running the command, then analyzes every contributor with per-person praise and growth opportunities. Designed for a senior IC/CTO-level builder using Claude Code as a force multiplier.
|
||||||
|
|||||||
@@ -14,6 +14,15 @@ allowed-tools:
|
|||||||
- AskUserQuestion
|
- AskUserQuestion
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Update Check (run first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
|
||||||
|
[ -n "$_UPD" ] && echo "$_UPD"
|
||||||
|
```
|
||||||
|
|
||||||
|
If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, `touch ~/.gstack/last-update-check` if no). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.
|
||||||
|
|
||||||
# Pre-Landing PR Review
|
# Pre-Landing PR Review
|
||||||
|
|
||||||
You are running the `/review` workflow. Analyze the current branch's diff against main for structural issues that tests don't catch.
|
You are running the `/review` workflow. Analyze the current branch's diff against main for structural issues that tests don't catch.
|
||||||
|
|||||||
@@ -8,8 +8,18 @@ description: |
|
|||||||
allowed-tools:
|
allowed-tools:
|
||||||
- Bash
|
- Bash
|
||||||
- Read
|
- Read
|
||||||
|
- AskUserQuestion
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Update Check (run first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
|
||||||
|
[ -n "$_UPD" ] && echo "$_UPD"
|
||||||
|
```
|
||||||
|
|
||||||
|
If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, `touch ~/.gstack/last-update-check` if no). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.
|
||||||
|
|
||||||
# Setup Browser Cookies
|
# Setup Browser Cookies
|
||||||
|
|
||||||
Import logged-in sessions from your real Chromium browser into the headless browse session.
|
Import logged-in sessions from your real Chromium browser into the headless browse session.
|
||||||
@@ -26,12 +36,9 @@ Import logged-in sessions from your real Chromium browser into the headless brow
|
|||||||
### 1. Find the browse binary
|
### 1. Find the browse binary
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
BROWSE_OUTPUT=$(browse/bin/find-browse 2>/dev/null || ~/.claude/skills/gstack/browse/bin/find-browse 2>/dev/null)
|
B=$(browse/bin/find-browse 2>/dev/null || ~/.claude/skills/gstack/browse/bin/find-browse 2>/dev/null)
|
||||||
B=$(echo "$BROWSE_OUTPUT" | head -1)
|
|
||||||
META=$(echo "$BROWSE_OUTPUT" | grep "^META:" || true)
|
|
||||||
if [ -n "$B" ]; then
|
if [ -n "$B" ]; then
|
||||||
echo "READY: $B"
|
echo "READY: $B"
|
||||||
[ -n "$META" ] && echo "$META"
|
|
||||||
else
|
else
|
||||||
echo "NEEDS_SETUP"
|
echo "NEEDS_SETUP"
|
||||||
fi
|
fi
|
||||||
@@ -42,8 +49,6 @@ If `NEEDS_SETUP`:
|
|||||||
2. Run: `cd <SKILL_DIR> && ./setup`
|
2. Run: `cd <SKILL_DIR> && ./setup`
|
||||||
3. If `bun` is not installed: `curl -fsSL https://bun.sh/install | bash`
|
3. If `bun` is not installed: `curl -fsSL https://bun.sh/install | bash`
|
||||||
|
|
||||||
If you see `META:UPDATE_AVAILABLE`: tell the user an update is available, STOP and wait for approval, then run the command from the META payload and re-run the setup check.
|
|
||||||
|
|
||||||
### 2. Open the cookie picker
|
### 2. Open the cookie picker
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -13,6 +13,15 @@ allowed-tools:
|
|||||||
- AskUserQuestion
|
- AskUserQuestion
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Update Check (run first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
|
||||||
|
[ -n "$_UPD" ] && echo "$_UPD"
|
||||||
|
```
|
||||||
|
|
||||||
|
If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, `touch ~/.gstack/last-update-check` if no). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.
|
||||||
|
|
||||||
# Ship: Fully Automated Ship Workflow
|
# Ship: Fully Automated Ship Workflow
|
||||||
|
|
||||||
You are running the `/ship` workflow. This is a **non-interactive, fully automated** workflow. Do NOT ask for confirmation at any step. The user said `/ship` which means DO IT. Run straight through and output the PR URL at the end.
|
You are running the `/ship` workflow. This is a **non-interactive, fully automated** workflow. Do NOT ask for confirmation at any step. The user said `/ship` which means DO IT. Run straight through and output the PR URL at the end.
|
||||||
|
|||||||
Reference in New Issue
Block a user