Bug
When GSD is installed with --local, the copyCommandsAsClaudeSkills function in install.js (lines 3709-3752) does not rewrite ~/.claude/get-shit-done/ paths in deployed SKILL.md files. The function accepts a pathPrefix parameter but never uses it, leaving all gsd-tools.cjs references pointing at $HOME/.claude/get-shit-done/bin/gsd-tools.cjs — a path that doesn't exist in local installs.
Every skill that invokes gsd-tools.cjs fails with MODULE_NOT_FOUND.
Root Cause
Lines 3700-3701 contain an incorrect comment:
Claude is the native format so no path replacement is needed — only frontmatter restructuring via convertClaudeCommandToClaudeSkill.
This is false for --local installs. The skill templates are authored with ~/.claude/ paths (global install assumption), and local installs need those rewritten to relative .claude/ paths.
Comparison with other runtimes:
- Codex (lines ~3461-3468): ✅ performs path replacement
- Cursor (lines ~3514-3521): ✅ performs path replacement
- Windsurf, Augment, Trae: ✅ perform path replacement
- Claude (lines 3709-3752): ❌ skips path replacement
- Copilot: ❌ also skips path replacement
Impact
- 123 instances of
~/.claude/get-shit-done/ in deployed skill files remain unrewritten
- Affects 7+ skills that call
gsd-tools.cjs: gsd-add-backlog, gsd-research-phase, gsd-thread, gsd-review-backlog, gsd-discuss-phase, gsd-set-profile, gsd-debug
- Any
--local user hitting these skills gets:
Error: Cannot find module '/Users/<user>/.claude/get-shit-done/bin/gsd-tools.cjs'
at Module._resolveFilename (node:internal/modules/cjs/loader:1456:15)
code: 'MODULE_NOT_FOUND'
Expected Fix
Add path replacement logic to copyCommandsAsClaudeSkills similar to the Codex/Cursor implementations. The pathPrefix parameter is already computed correctly at line 5105-5107 and passed in at line 5242 — it just needs to be applied.
For local installs, ~/.claude/get-shit-done/ → .claude/get-shit-done/ (or the resolved pathPrefix value).
Reproduction
npx get-shit-done-cc --claude --local
grep -r '$HOME/.claude/get-shit-done' .claude/skills/
# Returns 123 matches — all unrewritten
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init plan-phase "1"
# MODULE_NOT_FOUND
node ".claude/get-shit-done/bin/gsd-tools.cjs" init plan-phase "1"
# Works correctly
Workaround
Replace $HOME/.claude/get-shit-done/bin/gsd-tools.cjs with .claude/get-shit-done/bin/gsd-tools.cjs in all affected SKILL.md files.
Environment
- GSD v1.32.0
- Claude Code CLI
- macOS Darwin 25.4.0
- Node.js v24.14.1
Related
🤖 Generated with Claude Code
Bug
When GSD is installed with
--local, thecopyCommandsAsClaudeSkillsfunction ininstall.js(lines 3709-3752) does not rewrite~/.claude/get-shit-done/paths in deployed SKILL.md files. The function accepts apathPrefixparameter but never uses it, leaving allgsd-tools.cjsreferences pointing at$HOME/.claude/get-shit-done/bin/gsd-tools.cjs— a path that doesn't exist in local installs.Every skill that invokes
gsd-tools.cjsfails withMODULE_NOT_FOUND.Root Cause
Lines 3700-3701 contain an incorrect comment:
This is false for
--localinstalls. The skill templates are authored with~/.claude/paths (global install assumption), and local installs need those rewritten to relative.claude/paths.Comparison with other runtimes:
Impact
~/.claude/get-shit-done/in deployed skill files remain unrewrittengsd-tools.cjs:gsd-add-backlog,gsd-research-phase,gsd-thread,gsd-review-backlog,gsd-discuss-phase,gsd-set-profile,gsd-debug--localuser hitting these skills gets:Expected Fix
Add path replacement logic to
copyCommandsAsClaudeSkillssimilar to the Codex/Cursor implementations. ThepathPrefixparameter is already computed correctly at line 5105-5107 and passed in at line 5242 — it just needs to be applied.For local installs,
~/.claude/get-shit-done/→.claude/get-shit-done/(or the resolvedpathPrefixvalue).Reproduction
Workaround
Replace
$HOME/.claude/get-shit-done/bin/gsd-tools.cjswith.claude/get-shit-done/bin/gsd-tools.cjsin all affected SKILL.md files.Environment
Related
🤖 Generated with Claude Code