Skip to content

Back-compat aliases (_gstack-command, connect-chrome) ship duplicate name: fields, breaking Claude Code skill discovery #2511

Closed

Description

@SokunPanha

Summary

The two back-compat alias directories created by setup / gstack-relink — _gstack-command and connect-chrome — ship a name: field that is identical to their canonical skill. This produces duplicate skill names in ~/.claude/skills/, which violates Claude Code's global unique-name requirement and causes Claude Code to drop the entire personal-skills set. The result: none of the gstack skills (/gstack, /browse, /cso, /ship, …) are discoverable, even after a full restart.

Environment

  • gstack 1.2.0
  • Claude Code 2.1.220 (host: claude)
  • macOS (darwin), flat-name install (no gstack- prefix)

Root cause

setup links two top-level alias dirs whose SKILL.md is a symlink into gstack/:

~/.claude/skills/_gstack-command/SKILL.md -> ~/.claude/skills/gstack/SKILL.md                 # name: gstack
~/.claude/skills/connect-chrome/SKILL.md  -> ~/.claude/skills/gstack/connect-chrome/SKILL.md  # name: open-gstack-browser
  • _gstack-command (created by link_claude_root_skill_alias, setup ~L593) resolves to name: gstack — collides with gstack/.
  • connect-chrome (back-compat alias, setup ~L1003–1010) resolves to name: open-gstack-browser — collides with open-gstack-browser/.

gstack-relink calls gstack-patch-names <gstack_dir> <prefix>, but that only patches name: fields for skills inside gstack/. The two top-level alias dirs are never patched, so they retain the canonical name: and collide.

Reproduction

git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack
cd ~/.claude/skills/gstack && ./setup

Then check for duplicate name: fields across top-level skills:

cd ~/.claude/skills
for d in */; do [ -e "$d/SKILL.md" ] && awk -F': *' '/^name:/{print $2; exit}' "$d/SKILL.md"; done | sort | uniq -d
# => gstack
#    open-gstack-browser

Both collide → Claude Code refuses to load personal skills; all gstack commands disappear.

Workaround

rm -rf ~/.claude/skills/_gstack-command ~/.claude/skills/connect-chrome

Restores discovery immediately (removing the symlink dirs doesn't touch their targets). But any subsequent ./setup or /gstack-upgrade recreates them and re-breaks discovery.

Suggested fix

Give the alias skills a distinct name: (matching their directory, e.g. gstack-command and connect-chrome) instead of symlinking the canonical SKILL.md verbatim — or extend gstack-patch-names to rewrite the name: field of the alias dirs so each skill name stays globally unique on the Claude Code host.

Activity

  1. added a commit that references this issue on Aug 17, 2026
    ae8914a
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions