From 69b28eeca43191d11b40dd38c268aaa50c5af692 Mon Sep 17 00:00:00 2001 From: Lex Christopherson Date: Fri, 27 Feb 2026 13:11:19 -0600 Subject: [PATCH] fix: use $HOME instead of ~ for gsd-tools.cjs paths to prevent subagent MODULE_NOT_FOUND (#786) Claude Code subagents sometimes rewrite ~/. paths to relative paths, causing MODULE_NOT_FOUND when CWD is the project directory. $HOME is a shell variable resolved at runtime, immune to model path rewriting. Co-Authored-By: Claude Opus 4.6 --- agents/gsd-debugger.md | 4 ++-- agents/gsd-executor.md | 22 ++++++++--------- agents/gsd-phase-researcher.md | 6 ++--- agents/gsd-plan-checker.md | 10 ++++---- agents/gsd-planner.md | 12 +++++----- agents/gsd-project-researcher.md | 2 +- agents/gsd-research-synthesizer.md | 2 +- agents/gsd-verifier.md | 12 +++++----- commands/gsd/debug.md | 4 ++-- commands/gsd/research-phase.md | 6 ++--- .../references/decimal-phase-calculation.md | 8 +++---- get-shit-done/references/git-integration.md | 6 ++--- .../references/git-planning-commit.md | 4 ++-- .../references/phase-argument-parsing.md | 6 ++--- get-shit-done/references/planning-config.md | 12 +++++----- get-shit-done/workflows/add-phase.md | 4 ++-- get-shit-done/workflows/add-tests.md | 4 ++-- get-shit-done/workflows/add-todo.md | 6 ++--- get-shit-done/workflows/audit-milestone.md | 10 ++++---- get-shit-done/workflows/check-todos.md | 4 ++-- get-shit-done/workflows/cleanup.md | 2 +- get-shit-done/workflows/complete-milestone.md | 12 +++++----- get-shit-done/workflows/diagnose-issues.md | 2 +- get-shit-done/workflows/discuss-phase.md | 12 +++++----- get-shit-done/workflows/execute-phase.md | 16 ++++++------- get-shit-done/workflows/execute-plan.md | 24 +++++++++---------- get-shit-done/workflows/health.md | 4 ++-- get-shit-done/workflows/insert-phase.md | 4 ++-- get-shit-done/workflows/map-codebase.md | 4 ++-- get-shit-done/workflows/new-milestone.md | 12 +++++----- get-shit-done/workflows/new-project.md | 14 +++++------ get-shit-done/workflows/pause-work.md | 4 ++-- .../workflows/plan-milestone-gaps.md | 4 ++-- get-shit-done/workflows/plan-phase.md | 12 +++++----- get-shit-done/workflows/progress.md | 12 +++++----- get-shit-done/workflows/quick.md | 4 ++-- get-shit-done/workflows/remove-phase.md | 8 +++---- get-shit-done/workflows/research-phase.md | 4 ++-- get-shit-done/workflows/resume-project.md | 2 +- get-shit-done/workflows/set-profile.md | 4 ++-- get-shit-done/workflows/settings.md | 4 ++-- get-shit-done/workflows/transition.md | 8 +++---- get-shit-done/workflows/verify-phase.md | 12 +++++----- get-shit-done/workflows/verify-work.md | 4 ++-- 44 files changed, 166 insertions(+), 166 deletions(-) diff --git a/agents/gsd-debugger.md b/agents/gsd-debugger.md index 2635ee7d7..84fd893c1 100644 --- a/agents/gsd-debugger.md +++ b/agents/gsd-debugger.md @@ -1027,7 +1027,7 @@ mv .planning/debug/{slug}.md .planning/debug/resolved/ **Check planning config using state load (commit_docs is available from the output):** ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs state load) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state load) # commit_docs is in the JSON output ``` @@ -1044,7 +1044,7 @@ Root cause: {root_cause}" Then commit planning docs via CLI (respects `commit_docs` config automatically): ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: resolve debug {slug}" --files .planning/debug/resolved/{slug}.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: resolve debug {slug}" --files .planning/debug/resolved/{slug}.md ``` Report completion and offer next steps. diff --git a/agents/gsd-executor.md b/agents/gsd-executor.md index 19412ad8a..98113864b 100644 --- a/agents/gsd-executor.md +++ b/agents/gsd-executor.md @@ -37,7 +37,7 @@ This ensures project-specific patterns, conventions, and best practices are appl Load execution context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init execute-phase "${PHASE}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init execute-phase "${PHASE}") ``` Extract from init JSON: `executor_model`, `commit_docs`, `phase_dir`, `plans`, `incomplete_plans`. @@ -200,7 +200,7 @@ Do NOT continue reading. Analysis without action is a stuck signal. Check if auto mode is active at executor start: ```bash -AUTO_CFG=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false") +AUTO_CFG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow.auto_advance 2>/dev/null || echo "false") ``` Store the result for checkpoint handling below. @@ -389,34 +389,34 @@ After SUMMARY.md, update STATE.md using gsd-tools: ```bash # Advance plan counter (handles edge cases automatically) -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state advance-plan +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state advance-plan # Recalculate progress bar from disk state -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state update-progress +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state update-progress # Record execution metrics -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state record-metric \ +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state record-metric \ --phase "${PHASE}" --plan "${PLAN}" --duration "${DURATION}" \ --tasks "${TASK_COUNT}" --files "${FILE_COUNT}" # Add decisions (extract from SUMMARY.md key-decisions) for decision in "${DECISIONS[@]}"; do - node ~/.claude/get-shit-done/bin/gsd-tools.cjs state add-decision \ + node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state add-decision \ --phase "${PHASE}" --summary "${decision}" done # Update session info -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state record-session \ +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state record-session \ --stopped-at "Completed ${PHASE}-${PLAN}-PLAN.md" ``` ```bash # Update ROADMAP.md progress for this phase (plan counts, status) -node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap update-plan-progress "${PHASE_NUMBER}" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap update-plan-progress "${PHASE_NUMBER}" # Mark completed requirements from PLAN.md frontmatter # Extract the `requirements` array from the plan's frontmatter, then mark each complete -node ~/.claude/get-shit-done/bin/gsd-tools.cjs requirements mark-complete ${REQ_IDS} +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" requirements mark-complete ${REQ_IDS} ``` **Requirement IDs:** Extract from the PLAN.md frontmatter `requirements:` field (e.g., `requirements: [AUTH-01, AUTH-02]`). Pass all IDs to `requirements mark-complete`. If the plan has no requirements field, skip this step. @@ -434,13 +434,13 @@ node ~/.claude/get-shit-done/bin/gsd-tools.cjs requirements mark-complete ${REQ_ **For blockers found during execution:** ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state add-blocker "Blocker description" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state add-blocker "Blocker description" ``` ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md ``` Separate from per-task commits — captures execution results only. diff --git a/agents/gsd-phase-researcher.md b/agents/gsd-phase-researcher.md index 58dbd8593..981489dfb 100644 --- a/agents/gsd-phase-researcher.md +++ b/agents/gsd-phase-researcher.md @@ -120,7 +120,7 @@ When researching "best library for X": find what the ecosystem actually uses, do Check `brave_search` from init context. If `true`, use Brave Search for higher quality results: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs websearch "your query" --limit 10 +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" websearch "your query" --limit 10 ``` **Options:** @@ -359,7 +359,7 @@ Orchestrator provides: phase number/name, description/goal, requirements, constr Load phase context using init command: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init phase-op "${PHASE}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE}") ``` Extract from init JSON: `phase_dir`, `padded_phase`, `phase_number`, `commit_docs`. @@ -461,7 +461,7 @@ Write to: `$PHASE_DIR/$PADDED_PHASE-RESEARCH.md` ## Step 7: Commit Research (optional) ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs($PHASE): research phase domain" --files "$PHASE_DIR/$PADDED_PHASE-RESEARCH.md" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs($PHASE): research phase domain" --files "$PHASE_DIR/$PADDED_PHASE-RESEARCH.md" ``` ## Step 8: Return Structured Result diff --git a/agents/gsd-plan-checker.md b/agents/gsd-plan-checker.md index 8f5539389..958dbd0de 100644 --- a/agents/gsd-plan-checker.md +++ b/agents/gsd-plan-checker.md @@ -365,7 +365,7 @@ If FAIL: return to planner with specific fixes. Same revision loop as other dime Load phase operation context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init phase-op "${PHASE_ARG}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE_ARG}") ``` Extract from init JSON: `phase_dir`, `phase_number`, `has_plans`, `plan_count`. @@ -376,7 +376,7 @@ Orchestrator provides CONTEXT.md content in the verification prompt. If provided ls "$phase_dir"/*-PLAN.md 2>/dev/null # Read research for Nyquist validation data cat "$phase_dir"/*-RESEARCH.md 2>/dev/null -node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "$phase_number" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "$phase_number" ls "$phase_dir"/*-BRIEF.md 2>/dev/null ``` @@ -389,7 +389,7 @@ Use gsd-tools to validate plan structure: ```bash for plan in "$PHASE_DIR"/*-PLAN.md; do echo "=== $plan ===" - PLAN_STRUCTURE=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs verify plan-structure "$plan") + PLAN_STRUCTURE=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify plan-structure "$plan") echo "$PLAN_STRUCTURE" done ``` @@ -407,7 +407,7 @@ Map errors/warnings to verification dimensions: Extract must_haves from each plan using gsd-tools: ```bash -MUST_HAVES=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs frontmatter get "$PLAN_PATH" --field must_haves) +MUST_HAVES=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" frontmatter get "$PLAN_PATH" --field must_haves) ``` Returns JSON: `{ truths: [...], artifacts: [...], key_links: [...] }` @@ -452,7 +452,7 @@ For each requirement: find covering task(s), verify action is specific, flag gap Use gsd-tools plan-structure verification (already run in Step 2): ```bash -PLAN_STRUCTURE=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs verify plan-structure "$PLAN_PATH") +PLAN_STRUCTURE=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify plan-structure "$PLAN_PATH") ``` The `tasks` array in the result shows each task's completeness: diff --git a/agents/gsd-planner.md b/agents/gsd-planner.md index 89096d69f..dac65fd99 100644 --- a/agents/gsd-planner.md +++ b/agents/gsd-planner.md @@ -920,7 +920,7 @@ Group by plan, dimension, severity. ### Step 6: Commit ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "fix($PHASE): revise plans based on checker feedback" --files .planning/phases/$PHASE-*/$PHASE-*-PLAN.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "fix($PHASE): revise plans based on checker feedback" --files .planning/phases/$PHASE-*/$PHASE-*-PLAN.md ``` ### Step 7: Return Revision Summary @@ -959,7 +959,7 @@ node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "fix($PHASE): revise plans Load planning context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init plan-phase "${PHASE}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init plan-phase "${PHASE}") ``` Extract from init JSON: `planner_model`, `researcher_model`, `checker_model`, `commit_docs`, `research_enabled`, `phase_dir`, `phase_number`, `has_research`, `has_context`. @@ -1015,7 +1015,7 @@ Apply discovery level protocol (see discovery_levels section). **Step 1 — Generate digest index:** ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs history-digest +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" history-digest ``` **Step 2 — Select relevant phases (typically 2-4):** @@ -1143,7 +1143,7 @@ Include all frontmatter fields. Validate each created PLAN.md using gsd-tools: ```bash -VALID=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs frontmatter validate "$PLAN_PATH" --schema plan) +VALID=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" frontmatter validate "$PLAN_PATH" --schema plan) ``` Returns JSON: `{ valid, missing, present, schema }` @@ -1156,7 +1156,7 @@ Required plan frontmatter fields: Also validate plan structure: ```bash -STRUCTURE=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs verify plan-structure "$PLAN_PATH") +STRUCTURE=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify plan-structure "$PLAN_PATH") ``` Returns JSON: `{ valid, errors, warnings, task_count, tasks }` @@ -1193,7 +1193,7 @@ Plans: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs($PHASE): create phase plan" --files .planning/phases/$PHASE-*/$PHASE-*-PLAN.md .planning/ROADMAP.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs($PHASE): create phase plan" --files .planning/phases/$PHASE-*/$PHASE-*-PLAN.md .planning/ROADMAP.md ``` diff --git a/agents/gsd-project-researcher.md b/agents/gsd-project-researcher.md index cbf5554bc..4bd9fe71b 100644 --- a/agents/gsd-project-researcher.md +++ b/agents/gsd-project-researcher.md @@ -99,7 +99,7 @@ Always include current year. Use multiple query variations. Mark WebSearch-only Check `brave_search` from orchestrator context. If `true`, use Brave Search for higher quality results: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs websearch "your query" --limit 10 +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" websearch "your query" --limit 10 ``` **Options:** diff --git a/agents/gsd-research-synthesizer.md b/agents/gsd-research-synthesizer.md index b016557ad..3bf216dc0 100644 --- a/agents/gsd-research-synthesizer.md +++ b/agents/gsd-research-synthesizer.md @@ -131,7 +131,7 @@ Write to `.planning/research/SUMMARY.md` The 4 parallel researcher agents write files but do NOT commit. You commit everything together. ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: complete project research" --files .planning/research/ +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: complete project research" --files .planning/research/ ``` ## Step 8: Return Summary diff --git a/agents/gsd-verifier.md b/agents/gsd-verifier.md index 33840cd0a..dba967774 100644 --- a/agents/gsd-verifier.md +++ b/agents/gsd-verifier.md @@ -72,7 +72,7 @@ Set `is_re_verification = false`, proceed with Step 1. ```bash ls "$PHASE_DIR"/*-PLAN.md 2>/dev/null ls "$PHASE_DIR"/*-SUMMARY.md 2>/dev/null -node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "$PHASE_NUM" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "$PHASE_NUM" grep -E "^| $PHASE_NUM" .planning/REQUIREMENTS.md 2>/dev/null ``` @@ -109,7 +109,7 @@ must_haves: If no must_haves in frontmatter, check for Success Criteria: ```bash -PHASE_DATA=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "$PHASE_NUM" --raw) +PHASE_DATA=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "$PHASE_NUM" --raw) ``` Parse the `success_criteria` array from the JSON output. If non-empty: @@ -152,7 +152,7 @@ For each truth: Use gsd-tools for artifact verification against must_haves in PLAN frontmatter: ```bash -ARTIFACT_RESULT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs verify artifacts "$PLAN_PATH") +ARTIFACT_RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify artifacts "$PLAN_PATH") ``` Parse JSON result: `{ all_passed, passed, total, artifacts: [{path, exists, issues, passed}] }` @@ -201,7 +201,7 @@ Key links are critical connections. If broken, the goal fails even with all arti Use gsd-tools for key link verification against must_haves in PLAN frontmatter: ```bash -LINKS_RESULT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs verify key-links "$PLAN_PATH") +LINKS_RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify key-links "$PLAN_PATH") ``` Parse JSON result: `{ all_verified, verified, total, links: [{from, to, via, verified, detail}] }` @@ -283,12 +283,12 @@ Identify files modified in this phase from SUMMARY.md key-files section, or extr ```bash # Option 1: Extract from SUMMARY frontmatter -SUMMARY_FILES=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs summary-extract "$PHASE_DIR"/*-SUMMARY.md --fields key-files) +SUMMARY_FILES=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" summary-extract "$PHASE_DIR"/*-SUMMARY.md --fields key-files) # Option 2: Verify commits exist (if commit hashes documented) COMMIT_HASHES=$(grep -oE "[a-f0-9]{7,40}" "$PHASE_DIR"/*-SUMMARY.md | head -10) if [ -n "$COMMIT_HASHES" ]; then - COMMITS_VALID=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs verify commits $COMMIT_HASHES) + COMMITS_VALID=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify commits $COMMIT_HASHES) fi # Fallback: grep for files diff --git a/commands/gsd/debug.md b/commands/gsd/debug.md index 145a3d2c9..4dc1bde79 100644 --- a/commands/gsd/debug.md +++ b/commands/gsd/debug.md @@ -31,12 +31,12 @@ ls .planning/debug/*.md 2>/dev/null | grep -v resolved | head -5 ## 0. Initialize Context ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs state load) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state load) ``` Extract `commit_docs` from init JSON. Resolve debugger model: ```bash -debugger_model=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs resolve-model gsd-debugger --raw) +debugger_model=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" resolve-model gsd-debugger --raw) ``` ## 1. Check Active Sessions diff --git a/commands/gsd/research-phase.md b/commands/gsd/research-phase.md index ad022bf00..be3d9a0eb 100644 --- a/commands/gsd/research-phase.md +++ b/commands/gsd/research-phase.md @@ -34,20 +34,20 @@ Normalize phase input in step 1 before any directory lookups. ## 0. Initialize Context ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init phase-op "$ARGUMENTS") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "$ARGUMENTS") ``` Extract from init JSON: `phase_dir`, `phase_number`, `phase_name`, `phase_found`, `commit_docs`, `has_research`, `state_path`, `requirements_path`, `context_path`, `research_path`. Resolve researcher model: ```bash -RESEARCHER_MODEL=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs resolve-model gsd-phase-researcher --raw) +RESEARCHER_MODEL=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" resolve-model gsd-phase-researcher --raw) ``` ## 1. Validate Phase ```bash -PHASE_INFO=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "${phase_number}") +PHASE_INFO=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${phase_number}") ``` **If `found` is false:** Error and exit. **If `found` is true:** Extract `phase_number`, `phase_name`, `goal` from JSON. diff --git a/get-shit-done/references/decimal-phase-calculation.md b/get-shit-done/references/decimal-phase-calculation.md index 8597d7e30..b8da32114 100644 --- a/get-shit-done/references/decimal-phase-calculation.md +++ b/get-shit-done/references/decimal-phase-calculation.md @@ -6,7 +6,7 @@ Calculate the next decimal phase number for urgent insertions. ```bash # Get next decimal phase after phase 6 -node ~/.claude/get-shit-done/bin/gsd-tools.cjs phase next-decimal 6 +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase next-decimal 6 ``` Output: @@ -32,14 +32,14 @@ With existing decimals: ## Extract Values ```bash -DECIMAL_INFO=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs phase next-decimal "${AFTER_PHASE}") +DECIMAL_INFO=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase next-decimal "${AFTER_PHASE}") DECIMAL_PHASE=$(echo "$DECIMAL_INFO" | jq -r '.next') BASE_PHASE=$(echo "$DECIMAL_INFO" | jq -r '.base_phase') ``` Or with --raw flag: ```bash -DECIMAL_PHASE=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs phase next-decimal "${AFTER_PHASE}" --raw) +DECIMAL_PHASE=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase next-decimal "${AFTER_PHASE}" --raw) # Returns just: 06.1 ``` @@ -57,7 +57,7 @@ DECIMAL_PHASE=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs phase next-decima Decimal phase directories use the full decimal number: ```bash -SLUG=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs generate-slug "$DESCRIPTION" --raw) +SLUG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" generate-slug "$DESCRIPTION" --raw) PHASE_DIR=".planning/phases/${DECIMAL_PHASE}-${SLUG}" mkdir -p "$PHASE_DIR" ``` diff --git a/get-shit-done/references/git-integration.md b/get-shit-done/references/git-integration.md index df086b9c1..1e0a9d1b4 100644 --- a/get-shit-done/references/git-integration.md +++ b/get-shit-done/references/git-integration.md @@ -51,7 +51,7 @@ Phases: What to commit: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: initialize [project-name] ([N] phases)" --files .planning/ +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: initialize [project-name] ([N] phases)" --files .planning/ ``` @@ -129,7 +129,7 @@ SUMMARY: .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md What to commit: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-PLAN.md .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-PLAN.md .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md ``` **Note:** Code files NOT included - already committed per-task. @@ -149,7 +149,7 @@ Current: [task name] What to commit: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "wip: [phase-name] paused at task [X]/[Y]" --files .planning/ +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "wip: [phase-name] paused at task [X]/[Y]" --files .planning/ ``` diff --git a/get-shit-done/references/git-planning-commit.md b/get-shit-done/references/git-planning-commit.md index aad427440..56e00d5cb 100644 --- a/get-shit-done/references/git-planning-commit.md +++ b/get-shit-done/references/git-planning-commit.md @@ -7,7 +7,7 @@ Commit planning artifacts using the gsd-tools CLI, which automatically checks `c Always use `gsd-tools.cjs commit` for `.planning/` files — it handles `commit_docs` and gitignore checks automatically: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs({scope}): {description}" --files .planning/STATE.md .planning/ROADMAP.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs({scope}): {description}" --files .planning/STATE.md .planning/ROADMAP.md ``` The CLI will return `skipped` (with reason) if `commit_docs` is `false` or `.planning/` is gitignored. No manual conditional checks needed. @@ -17,7 +17,7 @@ The CLI will return `skipped` (with reason) if `commit_docs` is `false` or `.pla To fold `.planning/` file changes into the previous commit: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "" --files .planning/codebase/*.md --amend +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "" --files .planning/codebase/*.md --amend ``` ## Commit Message Patterns diff --git a/get-shit-done/references/phase-argument-parsing.md b/get-shit-done/references/phase-argument-parsing.md index 85f90651b..6ae9c508a 100644 --- a/get-shit-done/references/phase-argument-parsing.md +++ b/get-shit-done/references/phase-argument-parsing.md @@ -14,7 +14,7 @@ From `$ARGUMENTS`: The `find-phase` command handles normalization and validation in one step: ```bash -PHASE_INFO=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs find-phase "${PHASE}") +PHASE_INFO=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" find-phase "${PHASE}") ``` Returns JSON with: @@ -45,7 +45,7 @@ fi Use `roadmap get-phase` to validate phase exists: ```bash -PHASE_CHECK=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "${PHASE}") +PHASE_CHECK=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}") if [ "$(echo "$PHASE_CHECK" | jq -r '.found')" = "false" ]; then echo "ERROR: Phase ${PHASE} not found in roadmap" exit 1 @@ -57,5 +57,5 @@ fi Use `find-phase` for directory lookup: ```bash -PHASE_DIR=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs find-phase "${PHASE}" --raw) +PHASE_DIR=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" find-phase "${PHASE}" --raw) ``` diff --git a/get-shit-done/references/planning-config.md b/get-shit-done/references/planning-config.md index a7a1c451a..946f5aaea 100644 --- a/get-shit-done/references/planning-config.md +++ b/get-shit-done/references/planning-config.md @@ -40,14 +40,14 @@ Configuration options for `.planning/` directory behavior. ```bash # Commit with automatic commit_docs + gitignore checks: -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: update state" --files .planning/STATE.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: update state" --files .planning/STATE.md # Load config via state load (returns JSON): -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs state load) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state load) # commit_docs is available in the JSON output # Or use init commands which include commit_docs: -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init execute-phase "1") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init execute-phase "1") # commit_docs is included in all init command outputs ``` @@ -56,7 +56,7 @@ INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init execute-phase "1") **Commit via CLI (handles checks automatically):** ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: update state" --files .planning/STATE.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: update state" --files .planning/STATE.md ``` The CLI checks `commit_docs` config and gitignore status internally — no manual conditionals needed. @@ -144,13 +144,13 @@ To use uncommitted mode: Use `init execute-phase` which returns all config as JSON: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init execute-phase "1") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init execute-phase "1") # JSON output includes: branching_strategy, phase_branch_template, milestone_branch_template ``` Or use `state load` for the config values: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs state load) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state load) # Parse branching_strategy, phase_branch_template, milestone_branch_template from JSON ``` diff --git a/get-shit-done/workflows/add-phase.md b/get-shit-done/workflows/add-phase.md index c64727b2e..56eb41868 100644 --- a/get-shit-done/workflows/add-phase.md +++ b/get-shit-done/workflows/add-phase.md @@ -29,7 +29,7 @@ Exit. Load phase operation context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init phase-op "0") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "0") ``` Check `roadmap_exists` from init JSON. If false: @@ -44,7 +44,7 @@ Exit. **Delegate the phase addition to gsd-tools:** ```bash -RESULT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs phase add "${description}") +RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase add "${description}") ``` The CLI handles: diff --git a/get-shit-done/workflows/add-tests.md b/get-shit-done/workflows/add-tests.md index e8cc8eac4..6dfc03bd6 100644 --- a/get-shit-done/workflows/add-tests.md +++ b/get-shit-done/workflows/add-tests.md @@ -33,7 +33,7 @@ Exit. Load phase operation context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init phase-op "${PHASE_ARG}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE_ARG}") ``` Extract from init JSON: `phase_dir`, `phase_number`, `phase_name`. @@ -296,7 +296,7 @@ Create a test coverage report and present to user: Record test generation in project state: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state-snapshot +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state-snapshot ``` If there are passing tests to commit: diff --git a/get-shit-done/workflows/add-todo.md b/get-shit-done/workflows/add-todo.md index e8834a21f..cd15cc8a9 100644 --- a/get-shit-done/workflows/add-todo.md +++ b/get-shit-done/workflows/add-todo.md @@ -12,7 +12,7 @@ Read all files referenced by the invoking prompt's execution_context before star Load todo context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init todos) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init todos) ``` Extract from init JSON: `commit_docs`, `date`, `timestamp`, `todo_count`, `todos`, `pending_dir`, `todos_dir_exists`. @@ -83,7 +83,7 @@ Use values from init context: `timestamp` and `date` are already available. Generate slug for the title: ```bash -slug=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs generate-slug "$title" --raw) +slug=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" generate-slug "$title" --raw) ``` Write to `.planning/todos/pending/${date}-${slug}.md`: @@ -118,7 +118,7 @@ If `.planning/STATE.md` exists: Commit the todo and any updated state: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: capture todo - [title]" --files .planning/todos/pending/[filename] .planning/STATE.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: capture todo - [title]" --files .planning/todos/pending/[filename] .planning/STATE.md ``` Tool respects `commit_docs` config and gitignore automatically. diff --git a/get-shit-done/workflows/audit-milestone.md b/get-shit-done/workflows/audit-milestone.md index 1997c4479..7eee93975 100644 --- a/get-shit-done/workflows/audit-milestone.md +++ b/get-shit-done/workflows/audit-milestone.md @@ -11,21 +11,21 @@ Read all files referenced by the invoking prompt's execution_context before star ## 0. Initialize Milestone Context ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init milestone-op) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init milestone-op) ``` Extract from init JSON: `milestone_version`, `milestone_name`, `phase_count`, `completed_phases`, `commit_docs`. Resolve integration checker model: ```bash -integration_checker_model=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs resolve-model gsd-integration-checker --raw) +integration_checker_model=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" resolve-model gsd-integration-checker --raw) ``` ## 1. Determine Milestone Scope ```bash # Get phases in milestone (sorted numerically, handles decimals) -node ~/.claude/get-shit-done/bin/gsd-tools.cjs phases list +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phases list ``` - Parse version from arguments or detect current from ROADMAP.md @@ -39,7 +39,7 @@ For each phase directory, read the VERIFICATION.md: ```bash # For each phase, use find-phase to resolve the directory (handles archived phases) -PHASE_INFO=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs find-phase 01 --raw) +PHASE_INFO=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" find-phase 01 --raw) # Extract directory from JSON, then read VERIFICATION.md from that directory # Repeat for each phase number from ROADMAP.md ``` @@ -104,7 +104,7 @@ For each phase's VERIFICATION.md, extract the expanded requirements table: For each phase's SUMMARY.md, extract `requirements-completed` from YAML frontmatter: ```bash for summary in .planning/phases/*-*/*-SUMMARY.md; do - node ~/.claude/get-shit-done/bin/gsd-tools.cjs summary-extract "$summary" --fields requirements_completed | jq -r '.requirements_completed' + node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" summary-extract "$summary" --fields requirements_completed | jq -r '.requirements_completed' done ``` diff --git a/get-shit-done/workflows/check-todos.md b/get-shit-done/workflows/check-todos.md index ce6d3eee4..43598fc71 100644 --- a/get-shit-done/workflows/check-todos.md +++ b/get-shit-done/workflows/check-todos.md @@ -12,7 +12,7 @@ Read all files referenced by the invoking prompt's execution_context before star Load todo context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init todos) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init todos) ``` Extract from init JSON: `todo_count`, `todos`, `pending_dir`. @@ -154,7 +154,7 @@ If todo was moved to done/, commit the change: ```bash git rm --cached .planning/todos/pending/[filename] 2>/dev/null || true -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: start work on todo - [title]" --files .planning/todos/done/[filename] .planning/STATE.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: start work on todo - [title]" --files .planning/todos/done/[filename] .planning/STATE.md ``` Tool respects `commit_docs` config and gitignore automatically. diff --git a/get-shit-done/workflows/cleanup.md b/get-shit-done/workflows/cleanup.md index 670fb93f4..c1f772e77 100644 --- a/get-shit-done/workflows/cleanup.md +++ b/get-shit-done/workflows/cleanup.md @@ -122,7 +122,7 @@ Repeat for all milestones in the cleanup set. Commit the changes: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "chore: archive phase directories from completed milestones" --files .planning/milestones/ .planning/phases/ +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "chore: archive phase directories from completed milestones" --files .planning/milestones/ .planning/phases/ ``` diff --git a/get-shit-done/workflows/complete-milestone.md b/get-shit-done/workflows/complete-milestone.md index 63bcf6519..d1a77b6c5 100644 --- a/get-shit-done/workflows/complete-milestone.md +++ b/get-shit-done/workflows/complete-milestone.md @@ -40,7 +40,7 @@ When a milestone completes: **Use `roadmap analyze` for comprehensive readiness check:** ```bash -ROADMAP=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap analyze) +ROADMAP=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap analyze) ``` This returns all phases with plan/summary counts and disk status. Use this to verify: @@ -154,7 +154,7 @@ Extract one-liners from SUMMARY.md files using summary-extract: ```bash # For each phase in milestone, extract one-liner for summary in .planning/phases/*-*/*-SUMMARY.md; do - node ~/.claude/get-shit-done/bin/gsd-tools.cjs summary-extract "$summary" --fields one_liner | jq -r '.one_liner' + node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" summary-extract "$summary" --fields one_liner | jq -r '.one_liner' done ``` @@ -367,7 +367,7 @@ Update `.planning/ROADMAP.md` — group completed milestone phases: **Delegate archival to gsd-tools:** ```bash -ARCHIVE=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs milestone complete "v[X.Y]" --name "[Milestone Name]") +ARCHIVE=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" milestone complete "v[X.Y]" --name "[Milestone Name]") ``` The CLI handles: @@ -494,7 +494,7 @@ If the "## Cross-Milestone Trends" section exists, update the tables with new da **Commit:** ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: update retrospective for v${VERSION}" --files .planning/RETROSPECTIVE.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: update retrospective for v${VERSION}" --files .planning/RETROSPECTIVE.md ``` @@ -528,7 +528,7 @@ Check branching strategy and offer merge options. Use `init milestone-op` for context, or load config directly: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init execute-phase "1") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init execute-phase "1") ``` Extract `branching_strategy`, `phase_branch_template`, `milestone_branch_template`, and `commit_docs` from init JSON. @@ -676,7 +676,7 @@ git push origin v[X.Y] Commit milestone completion. ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "chore: complete v[X.Y] milestone" --files .planning/milestones/v[X.Y]-ROADMAP.md .planning/milestones/v[X.Y]-REQUIREMENTS.md .planning/milestones/v[X.Y]-MILESTONE-AUDIT.md .planning/MILESTONES.md .planning/PROJECT.md .planning/STATE.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "chore: complete v[X.Y] milestone" --files .planning/milestones/v[X.Y]-ROADMAP.md .planning/milestones/v[X.Y]-REQUIREMENTS.md .planning/milestones/v[X.Y]-MILESTONE-AUDIT.md .planning/MILESTONES.md .planning/PROJECT.md .planning/STATE.md ``` ``` diff --git a/get-shit-done/workflows/diagnose-issues.md b/get-shit-done/workflows/diagnose-issues.md index 27e40a5b7..274b50c57 100644 --- a/get-shit-done/workflows/diagnose-issues.md +++ b/get-shit-done/workflows/diagnose-issues.md @@ -158,7 +158,7 @@ Update status in frontmatter to "diagnosed". Commit the updated UAT.md: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs({phase_num}): add root causes from diagnosis" --files ".planning/phases/XX-name/{phase_num}-UAT.md" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs({phase_num}): add root causes from diagnosis" --files ".planning/phases/XX-name/{phase_num}-UAT.md" ``` diff --git a/get-shit-done/workflows/discuss-phase.md b/get-shit-done/workflows/discuss-phase.md index b3ef81055..225dd0713 100644 --- a/get-shit-done/workflows/discuss-phase.md +++ b/get-shit-done/workflows/discuss-phase.md @@ -113,7 +113,7 @@ Phase: "API documentation" Phase number from argument (required). ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init phase-op "${PHASE}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE}") ``` Parse JSON for: `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_research`, `has_context`, `has_plans`, `has_verification`, `plan_count`, `roadmap_exists`, `planning_exists`. @@ -486,7 +486,7 @@ Created: .planning/phases/${PADDED_PHASE}-${SLUG}/${PADDED_PHASE}-CONTEXT.md Commit phase context (uses `commit_docs` from init internally): ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs(${padded_phase}): capture phase context" --files "${phase_dir}/${padded_phase}-CONTEXT.md" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs(${padded_phase}): capture phase context" --files "${phase_dir}/${padded_phase}-CONTEXT.md" ``` Confirm: "Committed: docs(${padded_phase}): capture phase context" @@ -496,7 +496,7 @@ Confirm: "Committed: docs(${padded_phase}): capture phase context" Update STATE.md with session info: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state record-session \ +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state record-session \ --stopped-at "Phase ${PHASE} context gathered" \ --resume-file "${phase_dir}/${padded_phase}-CONTEXT.md" ``` @@ -504,7 +504,7 @@ node ~/.claude/get-shit-done/bin/gsd-tools.cjs state record-session \ Commit STATE.md: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs(state): record phase ${PHASE} context session" --files .planning/STATE.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs(state): record phase ${PHASE} context session" --files .planning/STATE.md ``` @@ -514,12 +514,12 @@ Check for auto-advance trigger: 1. Parse `--auto` flag from $ARGUMENTS 2. Read `workflow.auto_advance` from config: ```bash - AUTO_CFG=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false") + AUTO_CFG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow.auto_advance 2>/dev/null || echo "false") ``` **If `--auto` flag present AND `AUTO_CFG` is not true:** Persist auto-advance to config (handles direct `--auto` usage without new-project): ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-set workflow.auto_advance true +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-set workflow.auto_advance true ``` **If `--auto` flag present OR `AUTO_CFG` is true:** diff --git a/get-shit-done/workflows/execute-phase.md b/get-shit-done/workflows/execute-phase.md index b4fa4982f..5149594ce 100644 --- a/get-shit-done/workflows/execute-phase.md +++ b/get-shit-done/workflows/execute-phase.md @@ -16,7 +16,7 @@ Read STATE.md before any operation to load project context. Load all context in one call: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init execute-phase "${PHASE_ARG}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init execute-phase "${PHASE_ARG}") ``` Parse JSON for: `executor_model`, `verifier_model`, `commit_docs`, `parallelization`, `branching_strategy`, `branch_name`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `plans`, `incomplete_plans`, `plan_count`, `incomplete_count`, `state_exists`, `roadmap_exists`, `phase_req_ids`. @@ -51,7 +51,7 @@ Report: "Found {plan_count} plans in {phase_dir} ({incomplete_count} incomplete) Load plan inventory with wave grouping in one call: ```bash -PLAN_INDEX=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs phase-plan-index "${PHASE_NUMBER}") +PLAN_INDEX=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase-plan-index "${PHASE_NUMBER}") ``` Parse JSON for: `phase`, `plans[]` (each with `id`, `wave`, `autonomous`, `objective`, `files_modified`, `task_count`, `has_summary`), `waves` (map of wave number → plan IDs), `incomplete`, `has_checkpoints`. @@ -181,7 +181,7 @@ Plans with `autonomous: false` require user interaction. Read auto-advance config: ```bash -AUTO_CFG=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false") +AUTO_CFG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow.auto_advance 2>/dev/null || echo "false") ``` When executor returns a checkpoint AND `AUTO_CFG` is `"true"`: @@ -256,7 +256,7 @@ fi **2. Find parent UAT file:** ```bash -PARENT_INFO=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs find-phase "${PARENT_PHASE}" --raw) +PARENT_INFO=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" find-phase "${PARENT_PHASE}" --raw) # Extract directory from PARENT_INFO JSON, then find UAT file in that directory ``` @@ -287,7 +287,7 @@ mv .planning/debug/{slug}.md .planning/debug/resolved/ **6. Commit updated artifacts:** ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs(phase-${PARENT_PHASE}): resolve UAT gaps and debug sessions after ${PHASE_NUMBER} gap closure" --files .planning/phases/*${PARENT_PHASE}*/*-UAT.md .planning/debug/resolved/*.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs(phase-${PARENT_PHASE}): resolve UAT gaps and debug sessions after ${PHASE_NUMBER} gap closure" --files .planning/phases/*${PARENT_PHASE}*/*-UAT.md .planning/debug/resolved/*.md ``` @@ -358,7 +358,7 @@ Gap closure cycle: `/gsd:plan-phase {X} --gaps` reads VERIFICATION.md → create **Mark phase complete and update all tracking files:** ```bash -COMPLETION=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs phase complete "${PHASE_NUMBER}") +COMPLETION=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase complete "${PHASE_NUMBER}") ``` The CLI handles: @@ -371,7 +371,7 @@ The CLI handles: Extract from result: `next_phase`, `next_phase_name`, `is_last_phase`. ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs(phase-{X}): complete phase execution" --files .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md {phase_dir}/*-VERIFICATION.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs(phase-{X}): complete phase execution" --files .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md {phase_dir}/*-VERIFICATION.md ``` @@ -407,7 +407,7 @@ STOP. Do not proceed to auto-advance or transition. 1. Parse `--auto` flag from $ARGUMENTS 2. Read `workflow.auto_advance` from config: ```bash - AUTO_CFG=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false") + AUTO_CFG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow.auto_advance 2>/dev/null || echo "false") ``` **If `--auto` flag present OR `AUTO_CFG` is true (AND verification passed with no gaps):** diff --git a/get-shit-done/workflows/execute-plan.md b/get-shit-done/workflows/execute-plan.md index a838b0c73..180dfcc29 100644 --- a/get-shit-done/workflows/execute-plan.md +++ b/get-shit-done/workflows/execute-plan.md @@ -15,7 +15,7 @@ Read config.json for planning behavior settings. Load execution context (paths only to minimize orchestrator context): ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init execute-phase "${PHASE}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init execute-phase "${PHASE}") ``` Extract from init JSON: `executor_model`, `commit_docs`, `phase_dir`, `phase_number`, `plans`, `summaries`, `incomplete_plans`, `state_path`, `config_path`. @@ -124,7 +124,7 @@ This IS the execution instructions. Follow exactly. If plan references CONTEXT.m ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs phases list --type summaries --raw +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phases list --type summaries --raw # Extract the second-to-last summary from the JSON result ``` If previous SUMMARY has unresolved "Issues Encountered" or "Next Phase Readiness" blockers: AskUserQuestion(header="Previous Issues", options: "Proceed anyway" | "Address first" | "Review previous"). @@ -334,13 +334,13 @@ Update STATE.md using gsd-tools: ```bash # Advance plan counter (handles last-plan edge case) -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state advance-plan +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state advance-plan # Recalculate progress bar from disk state -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state update-progress +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state update-progress # Record execution metrics -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state record-metric \ +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state record-metric \ --phase "${PHASE}" --plan "${PLAN}" --duration "${DURATION}" \ --tasks "${TASK_COUNT}" --files "${FILE_COUNT}" ``` @@ -352,11 +352,11 @@ From SUMMARY: Extract decisions and add to STATE.md: ```bash # Add each decision from SUMMARY key-decisions # Prefer file inputs for shell-safe text (preserves `$`, `*`, etc. exactly) -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state add-decision \ +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state add-decision \ --phase "${PHASE}" --summary-file "${DECISION_TEXT_FILE}" --rationale-file "${RATIONALE_FILE}" # Add blockers if any found -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state add-blocker --text-file "${BLOCKER_TEXT_FILE}" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state add-blocker --text-file "${BLOCKER_TEXT_FILE}" ``` @@ -364,7 +364,7 @@ node ~/.claude/get-shit-done/bin/gsd-tools.cjs state add-blocker --text-file "${ Update session info using gsd-tools: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs state record-session \ +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state record-session \ --stopped-at "Completed ${PHASE}-${PLAN}-PLAN.md" \ --resume-file "None" ``` @@ -378,7 +378,7 @@ If SUMMARY "Issues Encountered" ≠ "None": yolo → log and continue. Interacti ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap update-plan-progress "${PHASE}" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap update-plan-progress "${PHASE}" ``` Counts PLAN vs SUMMARY files on disk. Updates progress table row with correct count and status (`In Progress` or `Complete` with date). @@ -387,7 +387,7 @@ Counts PLAN vs SUMMARY files on disk. Updates progress table row with correct co Mark completed requirements from the PLAN.md frontmatter `requirements:` field: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs requirements mark-complete ${REQ_IDS} +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" requirements mark-complete ${REQ_IDS} ``` Extract requirement IDs from the plan's frontmatter (e.g., `requirements: [AUTH-01, AUTH-02]`). If no requirements field, skip. @@ -397,7 +397,7 @@ Extract requirement IDs from the plan's frontmatter (e.g., `requirements: [AUTH- Task code already committed per-task. Commit plan metadata: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md ``` @@ -412,7 +412,7 @@ git diff --name-only ${FIRST_TASK}^..HEAD 2>/dev/null Update only structural changes: new src/ dir → STRUCTURE.md | deps → STACK.md | file pattern → CONVENTIONS.md | API client → INTEGRATIONS.md | config → STACK.md | renamed → update paths. Skip code-only/bugfix/content changes. ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "" --files .planning/codebase/*.md --amend +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "" --files .planning/codebase/*.md --amend ``` diff --git a/get-shit-done/workflows/health.md b/get-shit-done/workflows/health.md index 377d69673..3dec273b6 100644 --- a/get-shit-done/workflows/health.md +++ b/get-shit-done/workflows/health.md @@ -25,7 +25,7 @@ fi **Run health validation:** ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs validate health $REPAIR_FLAG +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" validate health $REPAIR_FLAG ``` Parse JSON output: @@ -112,7 +112,7 @@ If yes, re-run with --repair flag and display results. Re-run health check without --repair to confirm issues are resolved: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs validate health +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" validate health ``` Report final status. diff --git a/get-shit-done/workflows/insert-phase.md b/get-shit-done/workflows/insert-phase.md index 9d411b537..8f2569c46 100644 --- a/get-shit-done/workflows/insert-phase.md +++ b/get-shit-done/workflows/insert-phase.md @@ -34,7 +34,7 @@ Validate first argument is an integer. Load phase operation context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init phase-op "${after_phase}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${after_phase}") ``` Check `roadmap_exists` from init JSON. If false: @@ -48,7 +48,7 @@ Exit. **Delegate the phase insertion to gsd-tools:** ```bash -RESULT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs phase insert "${after_phase}" "${description}") +RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase insert "${after_phase}" "${description}") ``` The CLI handles: diff --git a/get-shit-done/workflows/map-codebase.md b/get-shit-done/workflows/map-codebase.md index 605c1b481..c44babc86 100644 --- a/get-shit-done/workflows/map-codebase.md +++ b/get-shit-done/workflows/map-codebase.md @@ -26,7 +26,7 @@ Documents are reference material for Claude when planning/executing. Always incl Load codebase mapping context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init map-codebase) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init map-codebase) ``` Extract from init JSON: `mapper_model`, `commit_docs`, `codebase_dir`, `existing_maps`, `has_maps`, `codebase_dir_exists`. @@ -250,7 +250,7 @@ Continue to commit_codebase_map. Commit the codebase map: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: map existing codebase" --files .planning/codebase/*.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: map existing codebase" --files .planning/codebase/*.md ``` Continue to offer_next. diff --git a/get-shit-done/workflows/new-milestone.md b/get-shit-done/workflows/new-milestone.md index 3b4c11bd1..252694ae4 100644 --- a/get-shit-done/workflows/new-milestone.md +++ b/get-shit-done/workflows/new-milestone.md @@ -71,13 +71,13 @@ Keep Accumulated Context section from previous milestone. Delete MILESTONE-CONTEXT.md if exists (consumed). ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: start milestone v[X.Y] [Name]" --files .planning/PROJECT.md .planning/STATE.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: start milestone v[X.Y] [Name]" --files .planning/PROJECT.md .planning/STATE.md ``` ## 7. Load Context and Resolve Models ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init new-milestone) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init new-milestone) ``` Extract from init JSON: `researcher_model`, `synthesizer_model`, `roadmapper_model`, `commit_docs`, `research_enabled`, `current_milestone`, `project_exists`, `roadmap_exists`. @@ -92,10 +92,10 @@ AskUserQuestion: "Research the domain ecosystem for new features before defining ```bash # If "Research first": persist true -node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-set workflow.research true +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-set workflow.research true # If "Skip research": persist false -node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-set workflow.research false +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-set workflow.research false ``` **If "Research first":** @@ -253,7 +253,7 @@ If "adjust": Return to scoping. **Commit requirements:** ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: define milestone v[X.Y] requirements" --files .planning/REQUIREMENTS.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: define milestone v[X.Y] requirements" --files .planning/REQUIREMENTS.md ``` ## 10. Create Roadmap @@ -330,7 +330,7 @@ Success criteria: **Commit roadmap** (after approval): ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: create milestone v[X.Y] roadmap ([N] phases)" --files .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: create milestone v[X.Y] roadmap ([N] phases)" --files .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md ``` ## 11. Done diff --git a/get-shit-done/workflows/new-project.md b/get-shit-done/workflows/new-project.md index b925dbbdc..e7c56a4a9 100644 --- a/get-shit-done/workflows/new-project.md +++ b/get-shit-done/workflows/new-project.md @@ -46,7 +46,7 @@ The document should describe what you want to build. **MANDATORY FIRST STEP — Execute these checks before ANY user interaction:** ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init new-project) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init new-project) ``` Parse JSON for: `researcher_model`, `synthesizer_model`, `roadmapper_model`, `commit_docs`, `project_exists`, `has_codebase_map`, `planning_exists`, `has_existing_code`, `has_package_file`, `is_brownfield`, `needs_codebase_map`, `has_git`, `project_path`. @@ -188,13 +188,13 @@ Create `.planning/config.json` with mode set to "yolo": ```bash mkdir -p .planning -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "chore: add project config" --files .planning/config.json +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "chore: add project config" --files .planning/config.json ``` **Persist auto-advance to config (survives context compaction):** ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-set workflow.auto_advance true +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-set workflow.auto_advance true ``` Proceed to Step 4 (skip Steps 3 and 5). @@ -338,7 +338,7 @@ Do not compress. Capture everything gathered. ```bash mkdir -p .planning -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: initialize project" --files .planning/PROJECT.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: initialize project" --files .planning/PROJECT.md ``` ## 5. Workflow Preferences @@ -490,7 +490,7 @@ Create `.planning/config.json` with all settings: **Commit config.json:** ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "chore: add project config" --files .planning/config.json +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "chore: add project config" --files .planning/config.json ``` **Note:** Run `/gsd:settings` anytime to update these preferences. @@ -887,7 +887,7 @@ If "adjust": Return to scoping. **Commit requirements:** ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: define v1 requirements" --files .planning/REQUIREMENTS.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: define v1 requirements" --files .planning/REQUIREMENTS.md ``` ## 8. Create Roadmap @@ -1017,7 +1017,7 @@ Use AskUserQuestion: **Commit roadmap (after approval or auto mode):** ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: create roadmap ([N] phases)" --files .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: create roadmap ([N] phases)" --files .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md ``` ## 9. Done diff --git a/get-shit-done/workflows/pause-work.md b/get-shit-done/workflows/pause-work.md index dde5b1a76..f723ef81a 100644 --- a/get-shit-done/workflows/pause-work.md +++ b/get-shit-done/workflows/pause-work.md @@ -86,13 +86,13 @@ Be specific enough for a fresh Claude to understand immediately. Use `current-timestamp` for last_updated field. You can use init todos (which provides timestamps) or call directly: ```bash -timestamp=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs current-timestamp full --raw) +timestamp=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" current-timestamp full --raw) ``` ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "wip: [phase-name] paused at task [X]/[Y]" --files .planning/phases/*/.continue-here.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "wip: [phase-name] paused at task [X]/[Y]" --files .planning/phases/*/.continue-here.md ``` diff --git a/get-shit-done/workflows/plan-milestone-gaps.md b/get-shit-done/workflows/plan-milestone-gaps.md index 73945bca0..373147bd2 100644 --- a/get-shit-done/workflows/plan-milestone-gaps.md +++ b/get-shit-done/workflows/plan-milestone-gaps.md @@ -65,7 +65,7 @@ Gap: Flow "View dashboard" broken at data fetch Find highest existing phase: ```bash # Get sorted phase list, extract last one -PHASES=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs phases list) +PHASES=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phases list) HIGHEST=$(echo "$PHASES" | jq -r '.directories[-1]') ``` @@ -147,7 +147,7 @@ mkdir -p ".planning/phases/{NN}-{name}" ## 9. Commit Roadmap and Requirements Update ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs(roadmap): add gap closure phases {N}-{M}" --files .planning/ROADMAP.md .planning/REQUIREMENTS.md +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs(roadmap): add gap closure phases {N}-{M}" --files .planning/ROADMAP.md .planning/REQUIREMENTS.md ``` ## 10. Offer Next Steps diff --git a/get-shit-done/workflows/plan-phase.md b/get-shit-done/workflows/plan-phase.md index eaf1f3459..7bf31efba 100644 --- a/get-shit-done/workflows/plan-phase.md +++ b/get-shit-done/workflows/plan-phase.md @@ -15,7 +15,7 @@ Read all files referenced by the invoking prompt's execution_context before star Load all context in one call (paths only to minimize orchestrator context): ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init plan-phase "$PHASE") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init plan-phase "$PHASE") ``` Parse JSON for: `researcher_model`, `planner_model`, `checker_model`, `research_enabled`, `plan_checker_enabled`, `nyquist_validation_enabled`, `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_research`, `has_context`, `has_plans`, `plan_count`, `planning_exists`, `roadmap_exists`, `phase_req_ids`. @@ -42,7 +42,7 @@ mkdir -p ".planning/phases/${padded_phase}-${phase_slug}" ## 3. Validate Phase ```bash -PHASE_INFO=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "${PHASE}") +PHASE_INFO=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}") ``` **If `found` is false:** Error with available phases. **If `found` is true:** Extract `phase_number`, `phase_name`, `goal` from JSON. @@ -128,7 +128,7 @@ Generating CONTEXT.md from requirements... 5. Commit: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs(${padded_phase}): generate context from PRD" --files "${phase_dir}/${padded_phase}-CONTEXT.md" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs(${padded_phase}): generate context from PRD" --files "${phase_dir}/${padded_phase}-CONTEXT.md" ``` 6. Set `context_content` to the generated CONTEXT.md content and continue to step 5 (Handle Research). @@ -175,7 +175,7 @@ Display banner: ### Spawn gsd-phase-researcher ```bash -PHASE_DESC=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "${PHASE}" | jq -r '.section') +PHASE_DESC=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}" | jq -r '.section') ``` Research prompt: @@ -235,7 +235,7 @@ grep -l "## Validation Architecture" "${PHASE_DIR}"/*-RESEARCH.md 2>/dev/null 3. Fill frontmatter: replace `{N}` with phase number, `{phase-slug}` with phase slug, `{date}` with current date 4. If `commit_docs` is true: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit-docs "docs(phase-${PHASE}): add validation strategy" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit-docs "docs(phase-${PHASE}): add validation strategy" ``` **If not found (and nyquist enabled):** Display warning: @@ -443,7 +443,7 @@ Check for auto-advance trigger: 1. Parse `--auto` flag from $ARGUMENTS 2. Read `workflow.auto_advance` from config: ```bash - AUTO_CFG=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false") + AUTO_CFG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow.auto_advance 2>/dev/null || echo "false") ``` **If `--auto` flag present OR `AUTO_CFG` is true:** diff --git a/get-shit-done/workflows/progress.md b/get-shit-done/workflows/progress.md index ea124fb08..e1dcc2eb1 100644 --- a/get-shit-done/workflows/progress.md +++ b/get-shit-done/workflows/progress.md @@ -12,7 +12,7 @@ Read all files referenced by the invoking prompt's execution_context before star **Load progress context (paths only):** ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init progress) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init progress) ``` Extract from init JSON: `project_exists`, `roadmap_exists`, `state_exists`, `phases`, `current_phase`, `next_phase`, `milestone_version`, `completed_count`, `phase_count`, `paused_at`, `state_path`, `roadmap_path`, `project_path`, `config_path`. @@ -40,8 +40,8 @@ If missing both ROADMAP.md and PROJECT.md: suggest `/gsd:new-project`. **Use structured extraction from gsd-tools:** Instead of reading full files, use targeted tools to get only the data needed for the report: -- `ROADMAP=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap analyze)` -- `STATE=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs state-snapshot)` +- `ROADMAP=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap analyze)` +- `STATE=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state-snapshot)` This minimizes orchestrator context usage. @@ -50,7 +50,7 @@ This minimizes orchestrator context usage. **Get comprehensive roadmap analysis (replaces manual parsing):** ```bash -ROADMAP=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap analyze) +ROADMAP=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap analyze) ``` This returns structured JSON with: @@ -69,7 +69,7 @@ Use this instead of manually reading/parsing ROADMAP.md. - Find the 2-3 most recent SUMMARY.md files - Use `summary-extract` for efficient parsing: ```bash - node ~/.claude/get-shit-done/bin/gsd-tools.cjs summary-extract --fields one_liner + node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" summary-extract --fields one_liner ``` - This shows "what we've been working on" @@ -88,7 +88,7 @@ Use this instead of manually reading/parsing ROADMAP.md. ```bash # Get formatted progress bar -PROGRESS_BAR=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs progress bar --raw) +PROGRESS_BAR=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" progress bar --raw) ``` Present: diff --git a/get-shit-done/workflows/quick.md b/get-shit-done/workflows/quick.md index 9dfaf8cc3..e68f14043 100644 --- a/get-shit-done/workflows/quick.md +++ b/get-shit-done/workflows/quick.md @@ -43,7 +43,7 @@ If `$FULL_MODE`: **Step 2: Initialize** ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init quick "$DESCRIPTION") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init quick "$DESCRIPTION") ``` Parse JSON for: `planner_model`, `executor_model`, `checker_model`, `verifier_model`, `commit_docs`, `next_num`, `slug`, `date`, `timestamp`, `quick_dir`, `task_dir`, `roadmap_exists`, `planning_exists`. @@ -392,7 +392,7 @@ Build file list: - If `$FULL_MODE` and verification file exists: `${QUICK_DIR}/${next_num}-VERIFICATION.md` ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs(quick-${next_num}): ${DESCRIPTION}" --files ${file_list} +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs(quick-${next_num}): ${DESCRIPTION}" --files ${file_list} ``` Get final commit hash: diff --git a/get-shit-done/workflows/remove-phase.md b/get-shit-done/workflows/remove-phase.md index 0b15f9cfd..cd168cd2a 100644 --- a/get-shit-done/workflows/remove-phase.md +++ b/get-shit-done/workflows/remove-phase.md @@ -29,7 +29,7 @@ Exit. Load phase operation context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init phase-op "${target}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${target}") ``` Extract: `phase_found`, `phase_dir`, `phase_number`, `commit_docs`, `roadmap_exists`. @@ -79,13 +79,13 @@ Wait for confirmation. **Delegate the entire removal operation to gsd-tools:** ```bash -RESULT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs phase remove "${target}") +RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase remove "${target}") ``` If the phase has executed plans (SUMMARY.md files), gsd-tools will error. Use `--force` only if the user confirms: ```bash -RESULT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs phase remove "${target}" --force) +RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase remove "${target}" --force) ``` The CLI handles: @@ -102,7 +102,7 @@ Extract from result: `removed`, `directory_deleted`, `renamed_directories`, `ren Stage and commit the removal: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "chore: remove phase {target} ({original-phase-name})" --files .planning/ +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "chore: remove phase {target} ({original-phase-name})" --files .planning/ ``` The commit message preserves the historical record of what was removed. diff --git a/get-shit-done/workflows/research-phase.md b/get-shit-done/workflows/research-phase.md index d4ead4536..f527e8f84 100644 --- a/get-shit-done/workflows/research-phase.md +++ b/get-shit-done/workflows/research-phase.md @@ -18,7 +18,7 @@ Resolve model for: @~/.claude/get-shit-done/references/phase-argument-parsing.md ```bash -PHASE_INFO=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "${PHASE}") +PHASE_INFO=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}") ``` If `found` is false: Error and exit. @@ -34,7 +34,7 @@ If exists: Offer update/view/skip options. ## Step 3: Gather Phase Context ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init phase-op "${PHASE}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE}") # Extract: phase_dir, padded_phase, phase_number, state_path, requirements_path, context_path ``` diff --git a/get-shit-done/workflows/resume-project.md b/get-shit-done/workflows/resume-project.md index b3de0fc39..f71cadbfa 100644 --- a/get-shit-done/workflows/resume-project.md +++ b/get-shit-done/workflows/resume-project.md @@ -20,7 +20,7 @@ Instantly restore full project context so "Where were we?" has an immediate, com Load all context in one call: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init resume) +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init resume) ``` Parse JSON for: `state_exists`, `roadmap_exists`, `project_exists`, `planning_exists`, `has_interrupted_agent`, `interrupted_agent_id`, `commit_docs`. diff --git a/get-shit-done/workflows/set-profile.md b/get-shit-done/workflows/set-profile.md index a0457075c..00c2f5d3f 100644 --- a/get-shit-done/workflows/set-profile.md +++ b/get-shit-done/workflows/set-profile.md @@ -23,8 +23,8 @@ if $ARGUMENTS.profile not in ["quality", "balanced", "budget"]: Ensure config exists and load current state: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-ensure-section -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs state load) +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-ensure-section +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state load) ``` This creates `.planning/config.json` with defaults if missing and loads current config. diff --git a/get-shit-done/workflows/settings.md b/get-shit-done/workflows/settings.md index ba1d62cb3..9677001db 100644 --- a/get-shit-done/workflows/settings.md +++ b/get-shit-done/workflows/settings.md @@ -12,8 +12,8 @@ Read all files referenced by the invoking prompt's execution_context before star Ensure config exists and load current state: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-ensure-section -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs state load) +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-ensure-section +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state load) ``` Creates `.planning/config.json` with defaults if missing and loads current config values. diff --git a/get-shit-done/workflows/transition.md b/get-shit-done/workflows/transition.md index c0e4bb431..553fc193b 100644 --- a/get-shit-done/workflows/transition.md +++ b/get-shit-done/workflows/transition.md @@ -123,7 +123,7 @@ If found, delete them — phase is complete, handoffs are stale. **Delegate ROADMAP.md and STATE.md updates to gsd-tools:** ```bash -TRANSITION=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs phase complete "${current_phase}") +TRANSITION=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase complete "${current_phase}") ``` The CLI handles: @@ -238,7 +238,7 @@ After (Phase 2 shipped JWT auth, discovered rate limiting needed): Verify the updates are correct by reading STATE.md. If the progress bar needs updating, use: ```bash -PROGRESS=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs progress bar --raw) +PROGRESS=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" progress bar --raw) ``` Update the progress bar line in STATE.md with the result. @@ -347,7 +347,7 @@ The `next_phase` and `next_phase_name` fields give you the next phase details. If you need additional context, use: ```bash -ROADMAP=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap analyze) +ROADMAP=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap analyze) ``` This returns all phases with goals, disk status, and completion info. @@ -453,7 +453,7 @@ Exit skill and invoke SlashCommand("/gsd:discuss-phase [X+1] --auto") **Clear auto-advance** — milestone boundary is the natural stopping point: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-set workflow.auto_advance false +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-set workflow.auto_advance false ``` diff --git a/get-shit-done/workflows/verify-phase.md b/get-shit-done/workflows/verify-phase.md index dc126500c..33efb834c 100644 --- a/get-shit-done/workflows/verify-phase.md +++ b/get-shit-done/workflows/verify-phase.md @@ -28,14 +28,14 @@ Then verify each level against the actual codebase. Load phase operation context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init phase-op "${PHASE_ARG}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE_ARG}") ``` Extract from init JSON: `phase_dir`, `phase_number`, `phase_name`, `has_plans`, `plan_count`. Then load phase details and list plans/summaries: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "${phase_number}" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${phase_number}" grep -E "^| ${phase_number}" .planning/REQUIREMENTS.md 2>/dev/null ls "$phase_dir"/*-SUMMARY.md "$phase_dir"/*-PLAN.md 2>/dev/null ``` @@ -50,7 +50,7 @@ Use gsd-tools to extract must_haves from each PLAN: ```bash for plan in "$PHASE_DIR"/*-PLAN.md; do - MUST_HAVES=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs frontmatter get "$plan" --field must_haves) + MUST_HAVES=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" frontmatter get "$plan" --field must_haves) echo "=== $plan ===" && echo "$MUST_HAVES" done ``` @@ -64,7 +64,7 @@ Aggregate all must_haves across plans for phase-level verification. If no must_haves in frontmatter (MUST_HAVES returns error or empty), check for Success Criteria: ```bash -PHASE_DATA=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "${phase_number}" --raw) +PHASE_DATA=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${phase_number}" --raw) ``` Parse the `success_criteria` array from the JSON output. If non-empty: @@ -100,7 +100,7 @@ Use gsd-tools for artifact verification against must_haves in each PLAN: ```bash for plan in "$PHASE_DIR"/*-PLAN.md; do - ARTIFACT_RESULT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs verify artifacts "$plan") + ARTIFACT_RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify artifacts "$plan") echo "=== $plan ===" && echo "$ARTIFACT_RESULT" done ``` @@ -132,7 +132,7 @@ Use gsd-tools for key link verification against must_haves in each PLAN: ```bash for plan in "$PHASE_DIR"/*-PLAN.md; do - LINKS_RESULT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs verify key-links "$plan") + LINKS_RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify key-links "$plan") echo "=== $plan ===" && echo "$LINKS_RESULT" done ``` diff --git a/get-shit-done/workflows/verify-work.md b/get-shit-done/workflows/verify-work.md index 47e286c83..466a80c4f 100644 --- a/get-shit-done/workflows/verify-work.md +++ b/get-shit-done/workflows/verify-work.md @@ -24,7 +24,7 @@ No Pass/Fail buttons. No severity questions. Just: "Here's what should happen. D If $ARGUMENTS contains a phase number, load context: ```bash -INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init verify-work "${PHASE_ARG}") +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init verify-work "${PHASE_ARG}") ``` Parse JSON for: `planner_model`, `checker_model`, `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `has_verification`. @@ -292,7 +292,7 @@ Clear Current Test section: Commit the UAT file: ```bash -node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "test({phase_num}): complete UAT - {passed} passed, {issues} issues" --files ".planning/phases/XX-name/{phase_num}-UAT.md" +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "test({phase_num}): complete UAT - {passed} passed, {issues} issues" --files ".planning/phases/XX-name/{phase_num}-UAT.md" ``` Present summary: