Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/garrytan-gstack-upgrade
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: ci-cd
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Shell scripts
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/gstack-upgrade
What's inside
- Skill name
gstack-upgrade- Description
- Upgrade gstack to the latest version.
- License
- MIT
- Instructions
- 410 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
- Instructions call the network
Agent Skills spec issues
- allowed-tools: must be a space-separated string
Files (18)
- SKILL.md
- SKILL.md.tmpl
- v0.15.2.0.sh · migrations/
- v0.16.2.0.sh · migrations/
- v1.0.0.0.sh · migrations/
- v1.1.3.0.sh · migrations/
- v1.17.0.0.sh · migrations/
- v1.27.0.0.sh · migrations/
- v1.37.0.0.sh · migrations/
- v1.38.1.0.sh · migrations/
- v1.40.0.0.sh · migrations/
- v1.58.0.0.sh · migrations/
- v1.65.0.0.sh · migrations/
- v1.67.0.0.sh · migrations/
- v1.78.0.0.sh · migrations/
- v1.86.0.0.sh · migrations/
- v1.91.19.0.sh · migrations/
- v1.91.65.0.sh · migrations/
SKILL.md (first lines)
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->
<!-- Regenerate: bun run gen:skill-docs -->
# /gstack-upgrade
Upgrade gstack to the latest version and show what's new.
## Inline upgrade flow
This section is referenced by all skill preambles when they detect `UPGRADE_AVAILABLE`.
### Step 1: Ask the user (or auto-upgrade)
First, check if auto-upgrade is enabled:
```bash
_AUTO=""
[ "${GSTACK_AUTO_UPGRADE:-}" = "1" ] && _AUTO="true"
[ -z "$_AUTO" ] && _AUTO=$(~/.claude/skills/gstack/bin/gstack-config get auto_upgrade 2>/dev/null || true)
echo "AUTO_UPGRADE=$_AUTO"
```
**If `AUTO_UPGRADE=true` or `AUTO_UPGRADE=1`:** Skip AskUserQuestion. Log "Auto-upgrading gstack v{old} → v{new}..." and proceed directly to Step 2. On setup failure, follow Step 4's install-specific recovery: vendored installs restore their backup; git installs stop with the pre-upgrade commit recorded, without a destructive reset. Never claim restoration unless it actually succeeded.
**Otherwise**, use AskUserQuestion:
- Question: "gstack **v{new}** is available (you're on v{old}). Upgrade now?"
Four fields (`UPGRADE_AVAILABLE <old> <old>+<n> <sha>`, main moved): ask "gstack main is **{n} commit(s)** past v{old} (at {sha}). Upgrade now?"
- Options: ["Yes, upgrade now", "Always keep me up to date", "Not now", "Never ask again"]
**If "Yes, upgrade now":** Proceed to Step 2.
**If "Always keep me up to date":**
```bash
~/.claude/skills/gstack/bin/gstack-config set auto_upgrade true
```
Tell user: "Auto-upgrade enabled. Future updates will install automatically." Then proceed to Step 2.
**If "Not now":** Write snooze state with escalating backoff (first snooze = 24h, second = 48h, third+ = 1 week), then continue with the current skill. Do not mention the upgrade again.
```bash
GSTACK_STATE_ROOT=$(~/.claude/skills/gstack/bin/gstack-paths --get GSTACK_STATE_ROOT); : "${GSTACK_STATE_ROOT:?gstack-paths failed; reinstall with ./setup or /gstack-upgrade}"
_SNOOZE_FILE="$GSTACK_STATE_ROOT/update-snoozed"
_REMOTE_VER="{new}"
_CUR_LEVEL=0
if [ -f "$_SNOOZE_FILE" ]; then
_SNOOZED_VER=$(awk '{print $(1)}' "$_SNOOZE_FILE")
if [ "$_SNOOZED_VER" = "$_REMOTE_VER" ]; then
_CUR_LEVEL=$(awk '{print $(2)}' "$_SNOOZE_FILE")
case "$_CUR_LEVEL" in *[!0-9]*) _CUR_LEVEL=0 ;; esac
fi
fi
_NEW_LEVEL=$((_CUR_LEVEL + 1))
[ "$_NEW_LEVEL" -gt 3 ] && _NEW_LEVEL=3
echo "$_REMOTE_VER $_NEW_LEVEL $(date +%s)" > "$_SNOOZE_FILE"
```
Note: `{new}` is the remote version from the `UPGRADE_AVAILABLE` output — substitute it from the update check result. On a four-field line use the SHA (fourth field) as `{new}`, so the snooze ends when main moves.
Tell user the snooze duration: "Next reminder in 24h" (or 48h or 1 week, depending on level). Tip: "Set `auto_upgrade: true` in `~/.gstack/config.yaml` for automatic upgrades."
**If "Never ask again":**
```bash
~/.claude/skills/gstack/bin/gstack-config set update_check false
```
Tell user: "Update checks disabled. Run `~/.claude/skills/gstack/bin/gstack-config set update_check true` to re-enable."
Continue with the current skill.
### Step 2: Detect install type
```bash
if [ -d "$HOME/.claude/skills/gstack/.git" ]; then
INSTALL_TYPE="global-git"
INSTALL_DIR="$HOME/.claude/skills/gstack"
elif [ -d "$HOME/.gstack/repos/gstack/.git" ]; then
INSTALL_TYPE="global-git"
INSTALL_DIR="$HOME/.gstack/repos/gstack"
elif [ -d ".claude/skills/gstack/.git" ]; then
INSTALL_TYPE="local-git"
INSTALL_DIR=".claude/skills/gstack"
elif [ -d ".agents/skills/gstack/.git" ]; then
INSTALL_TYPE="local-git"
INSTALL_DIR=".agents/skills/gstack"
elif [ -d ".claude/skills/gstack" ]; then
INSTALL_TYPE="vendored"
INSTALL_DIR=".claude/skills/gstack"
elif [ -d "$HOME/.claude/skills/gstack" ]; then
INSTALL_TYPE="vendored-global"
INSTALL_DIR="$HOME/.claude/skills/gstack"
elif _SRC=$(~/.claude/skills/gstack/bin/gstack-paths --get GSTACK_STATE_ROOT 2>/dev/null) && _SRC=$(awk -F '\t' '$(1) == "claude" && $(6) != "-" { print $(6); exit }' "$_SRC/installs.tsv" 2>/dev/null) && [ -d "$_SRC/.git" ]; then
# The install registry names the checkout setup activated for this host (e.g. a ~/gstack clone).
INSTALL_TYPE="global-git"
INSTALL_DIR="$_SRC"
else
echo "ERROR: gstack not found"
exit 1
fi
INSTALL_DIR=$(cd -- "$INSTALL_DIR" && pwd -P) || { echo "ERROR: cannot enter the gstack install directory" >&2; exit 1; }
echo "Install type: $INSTALL_TYPE at $INSTALL_DIR"
```
The install type and the absolute directory printed above are used in all subsequent steps.
Carry `INSTALL_TYPE`, `INSTALL_DIR`, `OLD_VERSION`, and later `UPSTREAM_REF` and `NEW_VERSION` forward explicitly: tool calls may run in fresh shells, so start each later block by assigning them from the captured output (for example `INSTALL_DIR=/abs/path/printed/above`). Do not rely on a prior call's working directory or shell variables. Every block that changes files first checks `INSTALL_DIR` and stops before any git command when it is unset, empty, missing, unreadable, or not gstack's own checkout.
### Step 3: Save old version
Use the install directory from Step 2's output below:
```bash
OLD_VERSION=$(cat "${INSTALL_DIR:?INSTALL_DIR is not set: re-run Step 2 and substitute the printed path}/VERSION" 2>/dev/null || echo "unknown")
echo "OLD_VERSION=$OLD_VERSION"
```
### Step 4: Upgrade
Use the install type and directory detected in Step 2:
**For git installs** (global-git, local-git):
Fast-forward first, through `bin/gstack-ff-update`, the same code the
session-update auto-upgrade uses: local edits that merge cleanly ride over the
update, and an edit that conflicts (or a staged change, or an unmerged file)
is saved in a rescue ref instead of being left as conflict markers:
```bashFrom garrytan/gstack, MIT.
More from garrytan/gstack
- 0.846score
gstack
garrytan
Install and use gstack in Capy and Claude Code.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.842score
browse
garrytan
Drive a real browser through Aside: open a page, read it, click through a flow, take screenshots, check console errors.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.837score
diagram
garrytan
Turn an English description (or mermaid source) into a diagram triplet: the source, an editable .excalidraw file you can open on excalidraw.com, and rendered…
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
landing-report
garrytan
Read-only queue dashboard for workspace-aware ship.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
scrape
garrytan
Pull data from a web page through the Aside browser — your real, already signed-in sessions.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
setup-browser-cookies
garrytan
Import cookies from your real Chromium browser into the headless browse session.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
open-gstack-browser
garrytan
Launch GStack Browser — AI-controlled Chromium with the sidebar extension baked in.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
cso
garrytan
Security audit: supported static findings; qualified profiles add reproduction and repair candidates.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
deslop-shared-libs
garrytan
Find worthwhile shared-code extractions in recent work.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
unfreeze
garrytan
Clear the freeze boundary set by /freeze, allowing edits to all directories again.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
make-pdf
garrytan
Turn any markdown file into a publication-quality PDF.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
ios-sync
garrytan
Regenerate the iOS debug bridge against the latest upstream gstack templates.
SkillAFreshness: A★ 137.5KClaude Code +9
Signals
- Stars
- 137,493
- Forks
- 20,378
- Open issues
- 67
- Last commit (this folder)
- Oct 20, 2026 (9 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/garrytan/gstack
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from garrytan
- 0.846score
gstack
garrytan
Install and use gstack in Capy and Claude Code.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.842score
browse
garrytan
Drive a real browser through Aside: open a page, read it, click through a flow, take screenshots, check console errors.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.837score
diagram
garrytan
Turn an English description (or mermaid source) into a diagram triplet: the source, an editable .excalidraw file you can open on excalidraw.com, and rendered…
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
deslop-shared-libs
garrytan
Find worthwhile shared-code extractions in recent work.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
cso
garrytan
Security audit: supported static findings; qualified profiles add reproduction and repair candidates.
SkillAFreshness: A★ 137.5KClaude Code +9 - 0.833score
unfreeze
garrytan
Clear the freeze boundary set by /freeze, allowing edits to all directories again.
SkillAFreshness: A★ 137.5KClaude Code +9
Cite this page
gstack-upgrade skill. Agent Mart. https://agentmart.dev/skills/garrytan-gstack-upgrade (last updated 2026-10-24)