Skip to content

[Bug] Local install: $HOME/.claude/ paths not replaced — all commands fail #909

@tudela-hzt

Description

@tudela-hzt

GSD Version

1.22.2

Runtime

Claude Code

What happened?

After updating from v1.22.1 to v1.22.2 via /gsd:update on a local install (--local), all GSD commands fail with exit code 1. The workflow files contain hardcoded $HOME/.claude/get-shit-done/... paths that point to a non-existent global directory instead of the local ./.claude/get-shit-done/....

The root cause is in bin/install.js — the copyWithPathReplacement() function only has a regex for ~/.claude/:
const globalClaudeRegex = /~\/\.claude\//g; content = content.replace(globalClaudeRegex, pathPrefix);

But the source workflow files in v1.22.2 now predominantly use $HOME/.claude/ (115 occurrences) instead of ~/.claude/ (34 occurrences). The $HOME variant passes through the installer unreplaced.

This is invisible for global installs (where $HOME/.claude/ expands correctly at runtime) but breaks local installs completely.

What did you expect?

All $HOME/.claude/ references in workflow files should be replaced with ./.claude/ for local installs, just like ~/.claude/ references are.

Steps to reproduce

  1. Have a project with a local GSD install (e.g., npx get-shit-done-cc --local)
  2. Update to v1.22.2: /gsd:update
  3. Run any GSD command: /gsd:progress
  4. Command fails with exit code 1

Verify with:
grep -c '$HOME/.claude' .claude/get-shit-done/workflows/*.md

Returns 115 (should be 0 for local installs)

Relevant logs or error messages

$ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init progress
# Exit code 1 — file not found at /home/user/.claude/get-shit-done/bin/gsd-tools.cjs
# (only exists at ./project/.claude/get-shit-done/bin/gsd-tools.cjs)

Suggested fix — add a $HOME regex alongside the existing ~/ regex in all 3 replacement locations in bin/install.js:
const dollarHomeClaudeRegex = /\$HOME\/\.claude\//g;
content = content.replace(dollarHomeClaudeRegex, pathPrefix);

Workaround — run after install:
find .claude/get-shit-done -name '*.md' -exec sed -i 's|\$HOME/\.claude/|./\.claude/|g' {} +

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingneeds-triageNew issue awaiting maintainer review

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions