Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions .agents/skills/gstack-connect-chrome/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,12 @@ types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefl
"I think /skillname might help here — want me to run it?" and wait for confirmation.
The user opted out of proactive behavior.

If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
or invoking other gstack skills, use the `/gstack-` prefix (e.g., `/gstack-qa` instead
of `/qa`, `/gstack-ship` instead of `/ship`). Disk paths are unaffected — always use
`$GSTACK_ROOT/[skill-name]/SKILL.md` for reading skill files.
If `SKILL_PREFIX` is not `"false"` and not empty, the user has namespaced skill names.
The value printed above is the user's chosen prefix word. When suggesting or invoking
other gstack skills, prepend that word plus a dash (e.g., if SKILL_PREFIX is `"g"`,
suggest `/g-qa` instead of `/qa`, `/g-ship` instead of `/ship`; if SKILL_PREFIX is
`"gstack"`, use `/gstack-qa`, `/gstack-ship`, etc.). Disk paths are unaffected — always
use `$GSTACK_ROOT/[skill-name]/SKILL.md` for reading skill files.

If output shows `UPGRADE_AVAILABLE <old> <new>`: read `$GSTACK_ROOT/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with 4 options, write snooze state if declined). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.

Expand Down
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,29 @@
# Changelog

## [0.12.12.0] - 2026-03-27 — Custom Prefix, Live Reload

Type `gstack-config set skill_prefix g` and every gstack skill immediately switches to `/g-ship`, `/g-qa`, `/g-review`. No re-running setup. No session restart. The dash is automatic — you just pick the word.

### Added

- **Custom prefix word.** Setup now offers three choices: short names (`/qa`, `/ship`), namespaced (`/gstack-qa`, `/gstack-ship`), or a custom word you type yourself (`g`, `gs`, `mytools` — anything lowercase, 1-10 chars). The system appends the `-` separator.
- **`{{SKILL_NAME}}` template variable.** SKILL.md templates now use `name: {{SKILL_NAME}}` in their frontmatter. The generator resolves this to the actual prefixed name at build time (e.g. `name: g-ship` when prefix is `g`). Claude Code uses the `name:` field to register the slash command trigger, so this is what makes `/g-ship` actually work — not just a renamed directory.
- **Live prefix reload.** `gstack-config set skill_prefix <word>` regenerates all installed SKILL.md files immediately. Switching from `gstack` to `g` takes one command, not a full re-run of setup.
- **`--prefix <word>` on setup.** The `--prefix` flag now takes a word argument (`--prefix g`) instead of being a toggle. `--no-prefix` still works as before.
- **Universal skill cleanup.** Switching between any two prefix configurations (including custom words) now cleans up all previously generated dirs before regenerating. Detection uses the `AUTO-GENERATED from SKILL.md.tmpl` header in each file.

### Fixed

- **Backward compat for existing configs.** If `~/.gstack/config.yaml` has `skill_prefix: true` (the old boolean), `gstack-config get skill_prefix` returns `gstack`. If it has `false`, it returns `false`. Existing installs work without migration.
- **Double regen on setup.** When setup saves the prefix preference via `gstack-config set`, it no longer triggers an immediate regen (setup does its own cleanup + regen cycle after). Controlled via `GSTACK_SKIP_REGEN=1`.
- **PATH-invoked `gstack-config`.** `gstack-config set skill_prefix` now uses `readlink -f "$0"` to find the gstack installation directory, so it works when invoked via PATH rather than by absolute path.
- **Shell injection in `gstack-config`.** The `sed` command now uses `|` as the delimiter instead of `/`, preventing prefix words from being misinterpreted as sed metacharacters.

### For contributors

- 8 new tests for custom prefix, backward compat, and cleanup behavior.
- `scripts/gen-skill-docs.ts` now accepts `--output-root <dir>` to install SKILL.md files into a target directory without modifying committed source files. Used by `setup` for live installs.

## [0.12.11.0] - 2026-03-27 — Skill Prefix is Now Your Choice

You can now choose how gstack skills appear: short names (`/qa`, `/ship`, `/review`) or namespaced (`/gstack-qa`, `/gstack-ship`). Setup asks on first run, remembers your preference, and switching is one command.
Expand Down
10 changes: 6 additions & 4 deletions SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,12 @@ types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefl
"I think /skillname might help here — want me to run it?" and wait for confirmation.
The user opted out of proactive behavior.

If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
or invoking other gstack skills, use the `/gstack-` prefix (e.g., `/gstack-qa` instead
of `/qa`, `/gstack-ship` instead of `/ship`). Disk paths are unaffected — always use
`~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.
If `SKILL_PREFIX` is not `"false"` and not empty, the user has namespaced skill names.
The value printed above is the user's chosen prefix word. When suggesting or invoking
other gstack skills, prepend that word plus a dash (e.g., if SKILL_PREFIX is `"g"`,
suggest `/g-qa` instead of `/qa`, `/g-ship` instead of `/ship`; if SKILL_PREFIX is
`"gstack"`, use `/gstack-qa`, `/gstack-ship`, etc.). Disk paths are unaffected — always
use `~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.

If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with 4 options, write snooze state if declined). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.

Expand Down
2 changes: 1 addition & 1 deletion SKILL.md.tmpl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: gstack
name: {{SKILL_NAME}}
preamble-tier: 1
version: 1.1.0
description: |
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.12.11.0
0.12.12.0
10 changes: 6 additions & 4 deletions autoplan/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,12 @@ types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefl
"I think /skillname might help here — want me to run it?" and wait for confirmation.
The user opted out of proactive behavior.

If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
or invoking other gstack skills, use the `/gstack-` prefix (e.g., `/gstack-qa` instead
of `/qa`, `/gstack-ship` instead of `/ship`). Disk paths are unaffected — always use
`~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.
If `SKILL_PREFIX` is not `"false"` and not empty, the user has namespaced skill names.
The value printed above is the user's chosen prefix word. When suggesting or invoking
other gstack skills, prepend that word plus a dash (e.g., if SKILL_PREFIX is `"g"`,
suggest `/g-qa` instead of `/qa`, `/g-ship` instead of `/ship`; if SKILL_PREFIX is
`"gstack"`, use `/gstack-qa`, `/gstack-ship`, etc.). Disk paths are unaffected — always
use `~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.

If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with 4 options, write snooze state if declined). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.

Expand Down
2 changes: 1 addition & 1 deletion autoplan/SKILL.md.tmpl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: autoplan
name: {{SKILL_NAME}}
preamble-tier: 3
version: 1.0.0
description: |
Expand Down
10 changes: 6 additions & 4 deletions benchmark/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,12 @@ types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefl
"I think /skillname might help here — want me to run it?" and wait for confirmation.
The user opted out of proactive behavior.

If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
or invoking other gstack skills, use the `/gstack-` prefix (e.g., `/gstack-qa` instead
of `/qa`, `/gstack-ship` instead of `/ship`). Disk paths are unaffected — always use
`~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.
If `SKILL_PREFIX` is not `"false"` and not empty, the user has namespaced skill names.
The value printed above is the user's chosen prefix word. When suggesting or invoking
other gstack skills, prepend that word plus a dash (e.g., if SKILL_PREFIX is `"g"`,
suggest `/g-qa` instead of `/qa`, `/g-ship` instead of `/ship`; if SKILL_PREFIX is
`"gstack"`, use `/gstack-qa`, `/gstack-ship`, etc.). Disk paths are unaffected — always
use `~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.

If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with 4 options, write snooze state if declined). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.

Expand Down
2 changes: 1 addition & 1 deletion benchmark/SKILL.md.tmpl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: benchmark
name: {{SKILL_NAME}}
preamble-tier: 1
version: 1.0.0
description: |
Expand Down
50 changes: 46 additions & 4 deletions bin/gstack-config
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,61 @@ CONFIG_FILE="$STATE_DIR/config.yaml"
case "${1:-}" in
get)
KEY="${2:?Usage: gstack-config get <key>}"
grep -E "^${KEY}:" "$CONFIG_FILE" 2>/dev/null | tail -1 | awk '{print $2}' | tr -d '[:space:]' || true
_raw=$(grep -E "^${KEY}:" "$CONFIG_FILE" 2>/dev/null | tail -1 | awk '{print $2}' | tr -d '[:space:]' || true)
# Backward compat: skill_prefix stored as boolean → return canonical string
if [ "$KEY" = "skill_prefix" ]; then
case "$_raw" in
"true") echo "gstack" ;;
"false") echo "false" ;;
*) echo "$_raw" ;;
esac
else
echo "$_raw"
fi
;;
set)
KEY="${2:?Usage: gstack-config set <key> <value>}"
VALUE="${3:?Usage: gstack-config set <key> <value>}"
VALUE="${3:-}" # allow empty string (clears the value)
# Validate skill_prefix: must be lowercase alphanumeric, 1-10 chars (or empty to clear)
if [ "$KEY" = "skill_prefix" ] && [ -n "$VALUE" ]; then
if ! printf '%s' "$VALUE" | grep -qE '^[a-z0-9]{1,10}$'; then
echo "Error: skill_prefix must be lowercase letters/numbers only, 1-10 chars (got: '$VALUE')" >&2
echo " Valid examples: g, gs, gstack, my, x" >&2
exit 1
fi
fi
mkdir -p "$STATE_DIR"
if grep -qE "^${KEY}:" "$CONFIG_FILE" 2>/dev/null; then
# Portable in-place edit (BSD sed uses -i '', GNU sed uses -i without arg)
# Use | as sed delimiter to avoid conflicts with / in values
_tmpfile="$(mktemp "${CONFIG_FILE}.XXXXXX")"
sed "s/^${KEY}:.*/${KEY}: ${VALUE}/" "$CONFIG_FILE" > "$_tmpfile" && mv "$_tmpfile" "$CONFIG_FILE"
sed "s|^${KEY}:.*|${KEY}: ${VALUE}|" "$CONFIG_FILE" > "$_tmpfile" && mv "$_tmpfile" "$CONFIG_FILE"
else
echo "${KEY}: ${VALUE}" >> "$CONFIG_FILE"
fi
# After setting skill_prefix, regenerate Claude skills with new prefix.
# Set GSTACK_SKIP_REGEN=1 to suppress this (e.g., when called from setup,
# which runs its own cleanup + regen cycle after saving the preference).
if [ "$KEY" = "skill_prefix" ] && [ -z "${GSTACK_SKIP_REGEN:-}" ]; then
# Resolve gstack dir from this binary's real path (handles PATH invocation)
_SELF="$(cd "$(dirname "$(readlink -f "$0" 2>/dev/null || echo "$0")")" 2>/dev/null && pwd -P || dirname "$0")"
_GSTACK_DIR="$(cd "$_SELF/.." 2>/dev/null && pwd -P || true)"
_SKILLS_DIR="$(cd "$_GSTACK_DIR/.." 2>/dev/null && pwd -P || true)"
if [ -f "$_GSTACK_DIR/scripts/gen-skill-docs.ts" ] && [ -d "$_SKILLS_DIR" ]; then
_PREFIX_FLAG=""
[ -n "$VALUE" ] && _PREFIX_FLAG="--prefix ${VALUE}-"
# shellcheck disable=SC2086
if bun --bun "$_GSTACK_DIR/scripts/gen-skill-docs.ts" \
--output-root "$_SKILLS_DIR" \
$_PREFIX_FLAG \
2>&1 | grep -E '^(GENERATED|INSTALLED|Error)' | sed 's/^/ /'; then
echo " Skills regenerated with prefix: ${VALUE:-(none)}"
else
echo " Warning: skill regeneration failed — run ./setup to reapply prefix." >&2
fi
else
echo " Warning: could not determine skills directory. Re-run ./setup to apply prefix." >&2
fi
fi
;;
list)
cat "$CONFIG_FILE" 2>/dev/null || true
Expand Down
10 changes: 6 additions & 4 deletions browse/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,12 @@ types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefl
"I think /skillname might help here — want me to run it?" and wait for confirmation.
The user opted out of proactive behavior.

If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
or invoking other gstack skills, use the `/gstack-` prefix (e.g., `/gstack-qa` instead
of `/qa`, `/gstack-ship` instead of `/ship`). Disk paths are unaffected — always use
`~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.
If `SKILL_PREFIX` is not `"false"` and not empty, the user has namespaced skill names.
The value printed above is the user's chosen prefix word. When suggesting or invoking
other gstack skills, prepend that word plus a dash (e.g., if SKILL_PREFIX is `"g"`,
suggest `/g-qa` instead of `/qa`, `/g-ship` instead of `/ship`; if SKILL_PREFIX is
`"gstack"`, use `/gstack-qa`, `/gstack-ship`, etc.). Disk paths are unaffected — always
use `~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.

If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with 4 options, write snooze state if declined). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.

Expand Down
2 changes: 1 addition & 1 deletion browse/SKILL.md.tmpl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: browse
name: {{SKILL_NAME}}
preamble-tier: 1
version: 1.1.0
description: |
Expand Down
10 changes: 6 additions & 4 deletions canary/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,12 @@ types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefl
"I think /skillname might help here — want me to run it?" and wait for confirmation.
The user opted out of proactive behavior.

If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
or invoking other gstack skills, use the `/gstack-` prefix (e.g., `/gstack-qa` instead
of `/qa`, `/gstack-ship` instead of `/ship`). Disk paths are unaffected — always use
`~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.
If `SKILL_PREFIX` is not `"false"` and not empty, the user has namespaced skill names.
The value printed above is the user's chosen prefix word. When suggesting or invoking
other gstack skills, prepend that word plus a dash (e.g., if SKILL_PREFIX is `"g"`,
suggest `/g-qa` instead of `/qa`, `/g-ship` instead of `/ship`; if SKILL_PREFIX is
`"gstack"`, use `/gstack-qa`, `/gstack-ship`, etc.). Disk paths are unaffected — always
use `~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.

If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with 4 options, write snooze state if declined). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.

Expand Down
2 changes: 1 addition & 1 deletion canary/SKILL.md.tmpl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: canary
name: {{SKILL_NAME}}
preamble-tier: 2
version: 1.0.0
description: |
Expand Down
2 changes: 1 addition & 1 deletion careful/SKILL.md.tmpl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: careful
name: {{SKILL_NAME}}
version: 0.1.0
description: |
Safety guardrails for destructive commands. Warns before rm -rf, DROP TABLE,
Expand Down
10 changes: 6 additions & 4 deletions codex/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,12 @@ types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefl
"I think /skillname might help here — want me to run it?" and wait for confirmation.
The user opted out of proactive behavior.

If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
or invoking other gstack skills, use the `/gstack-` prefix (e.g., `/gstack-qa` instead
of `/qa`, `/gstack-ship` instead of `/ship`). Disk paths are unaffected — always use
`~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.
If `SKILL_PREFIX` is not `"false"` and not empty, the user has namespaced skill names.
The value printed above is the user's chosen prefix word. When suggesting or invoking
other gstack skills, prepend that word plus a dash (e.g., if SKILL_PREFIX is `"g"`,
suggest `/g-qa` instead of `/qa`, `/g-ship` instead of `/ship`; if SKILL_PREFIX is
`"gstack"`, use `/gstack-qa`, `/gstack-ship`, etc.). Disk paths are unaffected — always
use `~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.

If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with 4 options, write snooze state if declined). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.

Expand Down
2 changes: 1 addition & 1 deletion codex/SKILL.md.tmpl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: codex
name: {{SKILL_NAME}}
preamble-tier: 3
version: 1.0.0
description: |
Expand Down
10 changes: 6 additions & 4 deletions connect-chrome/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,12 @@ types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefl
"I think /skillname might help here — want me to run it?" and wait for confirmation.
The user opted out of proactive behavior.

If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
or invoking other gstack skills, use the `/gstack-` prefix (e.g., `/gstack-qa` instead
of `/qa`, `/gstack-ship` instead of `/ship`). Disk paths are unaffected — always use
`~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.
If `SKILL_PREFIX` is not `"false"` and not empty, the user has namespaced skill names.
The value printed above is the user's chosen prefix word. When suggesting or invoking
other gstack skills, prepend that word plus a dash (e.g., if SKILL_PREFIX is `"g"`,
suggest `/g-qa` instead of `/qa`, `/g-ship` instead of `/ship`; if SKILL_PREFIX is
`"gstack"`, use `/gstack-qa`, `/gstack-ship`, etc.). Disk paths are unaffected — always
use `~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.

If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with 4 options, write snooze state if declined). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.

Expand Down
2 changes: 1 addition & 1 deletion connect-chrome/SKILL.md.tmpl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: connect-chrome
name: {{SKILL_NAME}}
version: 0.1.0
description: |
Launch real Chrome controlled by gstack with the Side Panel extension auto-loaded.
Expand Down
10 changes: 6 additions & 4 deletions cso/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,12 @@ types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefl
"I think /skillname might help here — want me to run it?" and wait for confirmation.
The user opted out of proactive behavior.

If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
or invoking other gstack skills, use the `/gstack-` prefix (e.g., `/gstack-qa` instead
of `/qa`, `/gstack-ship` instead of `/ship`). Disk paths are unaffected — always use
`~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.
If `SKILL_PREFIX` is not `"false"` and not empty, the user has namespaced skill names.
The value printed above is the user's chosen prefix word. When suggesting or invoking
other gstack skills, prepend that word plus a dash (e.g., if SKILL_PREFIX is `"g"`,
suggest `/g-qa` instead of `/qa`, `/g-ship` instead of `/ship`; if SKILL_PREFIX is
`"gstack"`, use `/gstack-qa`, `/gstack-ship`, etc.). Disk paths are unaffected — always
use `~/.claude/skills/gstack/[skill-name]/SKILL.md` for reading skill files.

If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with 4 options, write snooze state if declined). If `JUST_UPGRADED <from> <to>`: tell user "Running gstack v{to} (just updated!)" and continue.

Expand Down
2 changes: 1 addition & 1 deletion cso/SKILL.md.tmpl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: cso
name: {{SKILL_NAME}}
preamble-tier: 2
version: 2.0.0
description: |
Expand Down
Loading