diff --git a/.changeset/195-workflow-gsd-tools-query.md b/.changeset/195-workflow-gsd-tools-query.md
new file mode 100644
index 000000000..28c9415a8
--- /dev/null
+++ b/.changeset/195-workflow-gsd-tools-query.md
@@ -0,0 +1,6 @@
+---
+type: Changed
+pr: 195
+---
+Replaced workflow markdown `gsd-sdk` query references with `gsd-tools.cjs query` command usage and removed global `gsd-sdk` fallback in workflow runtime command resolution blocks.
+
diff --git a/get-shit-done/workflows/add-backlog.md b/get-shit-done/workflows/add-backlog.md
index b61b417c2..5e8185780 100644
--- a/get-shit-done/workflows/add-backlog.md
+++ b/get-shit-done/workflows/add-backlog.md
@@ -19,14 +19,12 @@ cat .planning/ROADMAP.md
## Step 2: Find next backlog number
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/add-phase.md b/get-shit-done/workflows/add-phase.md
index c9dd72641..9a767d02e 100644
--- a/get-shit-done/workflows/add-phase.md
+++ b/get-shit-done/workflows/add-phase.md
@@ -29,14 +29,12 @@ Exit.
Load phase operation context:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -53,7 +51,7 @@ Exit.
-**Delegate the phase addition to `gsd-sdk query phase.add`:**
+**Delegate the phase addition to `gsd-tools.cjs query phase.add`:**
```bash
RESULT=$($GSD_SDK query phase.add "${description}")
@@ -115,7 +113,7 @@ Roadmap updated: .planning/ROADMAP.md
-- [ ] `gsd-sdk query phase.add` executed successfully
+- [ ] `gsd-tools.cjs query phase.add` executed successfully
- [ ] Phase directory created
- [ ] Roadmap updated with new phase entry
- [ ] STATE.md updated with roadmap evolution note
diff --git a/get-shit-done/workflows/add-tests.md b/get-shit-done/workflows/add-tests.md
index 086d05a33..3cc242605 100644
--- a/get-shit-done/workflows/add-tests.md
+++ b/get-shit-done/workflows/add-tests.md
@@ -33,14 +33,12 @@ Exit.
Load phase operation context:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/add-todo.md b/get-shit-done/workflows/add-todo.md
index 65dcf3905..a46ae23a1 100644
--- a/get-shit-done/workflows/add-todo.md
+++ b/get-shit-done/workflows/add-todo.md
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Load todo context:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/ai-integration-phase.md b/get-shit-done/workflows/ai-integration-phase.md
index e2ec6ed68..3ef951732 100644
--- a/get-shit-done/workflows/ai-integration-phase.md
+++ b/get-shit-done/workflows/ai-integration-phase.md
@@ -20,14 +20,12 @@ This prevents the two most common AI development failures: choosing the wrong fr
## 1. Initialize
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/audit-fix.md b/get-shit-done/workflows/audit-fix.md
index 4d0028a22..057baf52d 100644
--- a/get-shit-done/workflows/audit-fix.md
+++ b/get-shit-done/workflows/audit-fix.md
@@ -32,14 +32,12 @@ Invoke the source audit command and capture output.
For `audit-uat` source:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/audit-milestone.md b/get-shit-done/workflows/audit-milestone.md
index a75d2bdc1..1108f9fc4 100644
--- a/get-shit-done/workflows/audit-milestone.md
+++ b/get-shit-done/workflows/audit-milestone.md
@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 0. Initialize Milestone Context
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/audit-uat.md b/get-shit-done/workflows/audit-uat.md
index 2daea6ee3..c6749dac1 100644
--- a/get-shit-done/workflows/audit-uat.md
+++ b/get-shit-done/workflows/audit-uat.md
@@ -8,14 +8,12 @@ Cross-phase audit of all UAT and verification files. Finds every outstanding ite
Run the CLI audit:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/autonomous.md b/get-shit-done/workflows/autonomous.md
index 964eab083..a1a6aa880 100644
--- a/get-shit-done/workflows/autonomous.md
+++ b/get-shit-done/workflows/autonomous.md
@@ -48,14 +48,12 @@ When `--interactive` is set, discuss runs inline with questions (not auto-answer
Bootstrap via milestone-level init:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/check-todos.md b/get-shit-done/workflows/check-todos.md
index 3cfc6adc6..d6b14bf0e 100644
--- a/get-shit-done/workflows/check-todos.md
+++ b/get-shit-done/workflows/check-todos.md
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Load todo context:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/cleanup.md b/get-shit-done/workflows/cleanup.md
index 7150056cc..76627b3f2 100644
--- a/get-shit-done/workflows/cleanup.md
+++ b/get-shit-done/workflows/cleanup.md
@@ -124,14 +124,12 @@ Repeat for all milestones in the cleanup set.
Commit the changes:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/code-review-fix.md b/get-shit-done/workflows/code-review-fix.md
index 07452cd9c..a9b0e903a 100644
--- a/get-shit-done/workflows/code-review-fix.md
+++ b/get-shit-done/workflows/code-review-fix.md
@@ -18,14 +18,12 @@ Parse arguments and load project state:
```bash
PHASE_ARG="${1}"
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/code-review.md b/get-shit-done/workflows/code-review.md
index 7a53b955d..777633da4 100644
--- a/get-shit-done/workflows/code-review.md
+++ b/get-shit-done/workflows/code-review.md
@@ -18,14 +18,12 @@ Parse arguments and load project state:
```bash
PHASE_ARG="${1}"
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -101,7 +99,7 @@ Default is true — only skip on explicit false. This check runs AFTER phase val
Determine review depth with priority order:
1. DEPTH_OVERRIDE from --depth flag (highest priority)
-2. Config value: `gsd-sdk query config-get workflow.code_review_depth 2>/dev/null`
+2. Config value: `gsd-tools.cjs query config-get workflow.code_review_depth 2>/dev/null`
3. Default: "standard"
```bash
diff --git a/get-shit-done/workflows/complete-milestone.md b/get-shit-done/workflows/complete-milestone.md
index 721bca3e7..61dfff33e 100644
--- a/get-shit-done/workflows/complete-milestone.md
+++ b/get-shit-done/workflows/complete-milestone.md
@@ -41,14 +41,12 @@ When a milestone completes:
Before proceeding with milestone close, run the comprehensive open artifact audit.
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -68,7 +66,7 @@ These items are open. Choose an action:
```
If user chooses [A] (Acknowledge):
-1. Re-run `gsd-sdk query audit-open --json` to get structured data
+1. Re-run `gsd-tools.cjs query audit-open --json` to get structured data
2. Write acknowledged items to STATE.md under `## Deferred Items` section:
```markdown
## Deferred Items
@@ -229,7 +227,7 @@ Key accomplishments for this milestone:
-**Note:** MILESTONES.md entry is now created automatically by `gsd-sdk query milestone.complete` in the archive_milestone step. The entry includes version, date, phase/plan/task counts, and accomplishments extracted from SUMMARY.md files.
+**Note:** MILESTONES.md entry is now created automatically by `gsd-tools.cjs query milestone.complete` in the archive_milestone step. The entry includes version, date, phase/plan/task counts, and accomplishments extracted from SUMMARY.md files.
If additional details are needed (e.g., user-provided "Delivered" summary, git range, LOC stats), add them manually after the CLI creates the base entry.
@@ -420,7 +418,7 @@ Update `.planning/ROADMAP.md` — group completed milestone phases:
-**Delegate archival to `gsd-sdk query milestone.complete`:**
+**Delegate archival to `gsd-tools.cjs query milestone.complete`:**
```bash
ARCHIVE=$($GSD_SDK query milestone.complete "v[X.Y]" --name "[Milestone Name]")
@@ -736,7 +734,7 @@ fi
-Read `git.create_tag` via `gsd-sdk query config-get git.create_tag 2>/dev/null || echo "true"`.
+Read `git.create_tag` via `gsd-tools.cjs query config-get git.create_tag 2>/dev/null || echo "true"`.
If the result is `false` → skip this step entirely and proceed to `git_commit_milestone`.
diff --git a/get-shit-done/workflows/debug.md b/get-shit-done/workflows/debug.md
index de2442c78..e3838e6df 100644
--- a/get-shit-done/workflows/debug.md
+++ b/get-shit-done/workflows/debug.md
@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 0. Initialize Context
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/diagnose-issues.md b/get-shit-done/workflows/diagnose-issues.md
index 8d20d4096..1d108fbf6 100644
--- a/get-shit-done/workflows/diagnose-issues.md
+++ b/get-shit-done/workflows/diagnose-issues.md
@@ -58,14 +58,12 @@ gaps = [
**Read worktree config:**
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/discuss-phase-assumptions.md b/get-shit-done/workflows/discuss-phase-assumptions.md
index 0e5767b82..0c0db4e8a 100644
--- a/get-shit-done/workflows/discuss-phase-assumptions.md
+++ b/get-shit-done/workflows/discuss-phase-assumptions.md
@@ -64,14 +64,12 @@ plain-text numbered list and ask the user to type their choice number.
Phase number from argument (required).
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/discuss-phase.md b/get-shit-done/workflows/discuss-phase.md
index e848a659a..116a124cf 100644
--- a/get-shit-done/workflows/discuss-phase.md
+++ b/get-shit-done/workflows/discuss-phase.md
@@ -109,7 +109,7 @@ Phase: "API documentation" → Structure/navigation, Code examples depth,
Phase number from argument (required).
```bash
-GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"; [ -f "$GSD_TOOLS" ] && GSD_SDK="node $GSD_TOOLS" || { command -v gsd-sdk >/dev/null 2>&1 && GSD_SDK=gsd-sdk || { echo "ERROR: gsd-sdk not found. Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2; exit 1; }; }
+GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"; [ -f "$GSD_TOOLS" ] && GSD_SDK="node $GSD_TOOLS" || { echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2; exit 1; }
INIT=$($GSD_SDK query init.phase-op "${PHASE}"); [[ "$INIT" == @file:* ]] && INIT=$(cat "${INIT#@file:}")
AGENT_SKILLS_ADVISOR=$($GSD_SDK query agent-skills gsd-advisor-researcher)
```
diff --git a/get-shit-done/workflows/discuss-phase/modes/text.md b/get-shit-done/workflows/discuss-phase/modes/text.md
index cfc7ea197..84309d099 100644
--- a/get-shit-done/workflows/discuss-phase/modes/text.md
+++ b/get-shit-done/workflows/discuss-phase/modes/text.md
@@ -18,7 +18,7 @@ Claude App cannot forward TUI menu selections back to the host.
- Per-session: pass `--text` flag to any command (e.g.,
`/gsd:discuss-phase --text`)
-- Per-project: `gsd-sdk query config-set workflow.text_mode true`
+- Per-project: `gsd-tools.cjs query config-set workflow.text_mode true`
Text mode applies to ALL workflows in the session, not just discuss-phase.
diff --git a/get-shit-done/workflows/do.md b/get-shit-done/workflows/do.md
index 0afc32e21..aedd3bde7 100644
--- a/get-shit-done/workflows/do.md
+++ b/get-shit-done/workflows/do.md
@@ -26,15 +26,13 @@ Wait for response before continuing.
**Check if project exists.**
```bash
-# SDK resolution: prefer local node shim, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local node shim, fail if local gsd-tools.cjs is missing (#3668)
_GSD_SHIM_NAME="gsd-tools.cjs"
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/${_GSD_SHIM_NAME}"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/docs-update.md b/get-shit-done/workflows/docs-update.md
index 6f1444df1..2d6570621 100644
--- a/get-shit-done/workflows/docs-update.md
+++ b/get-shit-done/workflows/docs-update.md
@@ -14,14 +14,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
Load docs-update context:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/edit-phase.md b/get-shit-done/workflows/edit-phase.md
index 6dd0e1ab4..e0a19ab96 100644
--- a/get-shit-done/workflows/edit-phase.md
+++ b/get-shit-done/workflows/edit-phase.md
@@ -34,14 +34,12 @@ Exit.
Load phase operation context:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/eval-review.md b/get-shit-done/workflows/eval-review.md
index ed510474b..2f8ddb2b9 100644
--- a/get-shit-done/workflows/eval-review.md
+++ b/get-shit-done/workflows/eval-review.md
@@ -13,14 +13,12 @@ Use after /gsd:execute-phase to verify that the evaluation strategy from AI-SPEC
## 0. Initialize
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/execute-phase.md b/get-shit-done/workflows/execute-phase.md
index 1381fa141..435ed9898 100644
--- a/get-shit-done/workflows/execute-phase.md
+++ b/get-shit-done/workflows/execute-phase.md
@@ -66,14 +66,12 @@ If `--wave` is absent, preserve the current behavior of executing all incomplete
Load all context in one call:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -376,7 +374,7 @@ CROSS_AI_TIMEOUT=$($GSD_SDK query config-get workflow.cross_ai_timeout 2>/dev/nu
**If no plans are marked for cross-AI:** Skip to execute_waves.
**If plans are marked but `cross_ai_command` is empty:** Error — tell user to set
-`workflow.cross_ai_command` via `gsd-sdk query config-set workflow.cross_ai_command ""`.
+`workflow.cross_ai_command` via `gsd-tools.cjs query config-set workflow.cross_ai_command ""`.
**For each cross-AI plan (sequentially):**
@@ -951,7 +949,7 @@ increases monotonically across waves. `{status}` is `complete` (success),
Report failed plan and ask Continue/Stop; continuing may cascade into dependent plan failures.
7b. **Pre-wave dependency check (waves 2+ only):**
- Before wave N+1, run `gsd-sdk query verify.key-links {phase_dir}/{plan}-PLAN.md` for each upcoming plan.
+ Before wave N+1, run `gsd-tools.cjs query verify.key-links {phase_dir}/{plan}-PLAN.md` for each upcoming plan.
If any PRIOR-wave artifact link fails, present:
- `## Cross-Plan Wiring Gap` with plan/link/from/pattern rows
- Options: investigate+fix before continue, or continue with cascade risk
@@ -1702,7 +1700,7 @@ For 1M+ context models, consider:
-- **Quota / rate-limit (any runtime — #3095):** Agent return body contains a sentinel like `usage limit`, `rate limit`, `429`, `too many requests`, `RESOURCE_EXHAUSTED`, `usage_limit_reached`. Route via `gsd-sdk query agent.classify-failure` → `class: "quota-exceeded"`. Do not offer retry-now; the right action is wait-for-reset and resume.
+- **Quota / rate-limit (any runtime — #3095):** Agent return body contains a sentinel like `usage limit`, `rate limit`, `429`, `too many requests`, `RESOURCE_EXHAUSTED`, `usage_limit_reached`. Route via `gsd-tools.cjs query agent.classify-failure` → `class: "quota-exceeded"`. Do not offer retry-now; the right action is wait-for-reset and resume.
- **classifyHandoffIfNeeded false failure:** Agent reports "failed" but error is `classifyHandoffIfNeeded is not defined` → Claude Code bug, not GSD. Spot-check (SUMMARY exists, commits present) → if pass, treat as success
- **Agent fails mid-plan:** Missing SUMMARY.md → report, ask user how to proceed
- **Dependency chain breaks:** Wave 1 fails → Wave 2 dependents likely fail → user chooses attempt or skip
diff --git a/get-shit-done/workflows/execute-plan.md b/get-shit-done/workflows/execute-plan.md
index b9f725d1f..442be5a6e 100644
--- a/get-shit-done/workflows/execute-plan.md
+++ b/get-shit-done/workflows/execute-plan.md
@@ -30,14 +30,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
Load execution context (paths only to minimize orchestrator context):
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -61,7 +59,7 @@ Find first PLAN without matching SUMMARY. Decimal phases supported (`01.1-hotfix
```bash
PHASE=$(echo "$PLAN_PATH" | grep -oE '[0-9]+(\.[0-9]+)?-[0-9]+')
-# config settings can be fetched via gsd-sdk query config-get if needed
+# config settings can be fetched via gsd-tools.cjs query config-get if needed
```
@@ -386,7 +384,7 @@ Next: more plans → "Ready for {next-plan}" | last → "Phase complete, ready f
handles STATE.md/ROADMAP.md updates centrally after merging worktrees to avoid
merge conflicts).
-Update STATE.md using gsd-sdk query (or legacy gsd-tools) state mutations:
+Update STATE.md using gsd-tools.cjs query (or legacy gsd-tools) state mutations:
```bash
# Auto-detect parallel mode: .git is a file in worktrees, a directory in main repo
@@ -423,7 +421,7 @@ $GSD_SDK query state.add-blocker --text-file "${BLOCKER_TEXT_FILE}"
-Update session info using gsd-sdk query (or legacy gsd-tools):
+Update session info using gsd-tools.cjs query (or legacy gsd-tools):
```bash
$GSD_SDK query state.record-session \
diff --git a/get-shit-done/workflows/explore.md b/get-shit-done/workflows/explore.md
index 91c219ea8..317e5ede4 100644
--- a/get-shit-done/workflows/explore.md
+++ b/get-shit-done/workflows/explore.md
@@ -115,14 +115,12 @@ For each selected output, write the file:
Commit if `commit_docs` is enabled:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/extract-learnings.md b/get-shit-done/workflows/extract-learnings.md
index 7ce2b9f93..2e98e7519 100644
--- a/get-shit-done/workflows/extract-learnings.md
+++ b/get-shit-done/workflows/extract-learnings.md
@@ -16,14 +16,12 @@ Analyze completed phase artifacts (PLAN.md, SUMMARY.md, VERIFICATION.md, UAT.md,
Parse arguments and load project state:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/forensics.md b/get-shit-done/workflows/forensics.md
index 82975d352..891312b24 100644
--- a/get-shit-done/workflows/forensics.md
+++ b/get-shit-done/workflows/forensics.md
@@ -272,14 +272,12 @@ gh issue create \
## Step 8: Update STATE.md
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/graduation.md b/get-shit-done/workflows/graduation.md
index be5bc90dc..d12d7fcd0 100644
--- a/get-shit-done/workflows/graduation.md
+++ b/get-shit-done/workflows/graduation.md
@@ -21,14 +21,12 @@ Read from project config (`config.json`):
## Step 1: Guard Checks
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/health.md b/get-shit-done/workflows/health.md
index 5c2cd82f2..8157cff6f 100644
--- a/get-shit-done/workflows/health.md
+++ b/get-shit-done/workflows/health.md
@@ -49,14 +49,12 @@ available — replace the prompt with a plain-text two-question sequence
plain text from the user's response.
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/import.md b/get-shit-done/workflows/import.md
index 24953d5f2..e4dbc7fdf 100644
--- a/get-shit-done/workflows/import.md
+++ b/get-shit-done/workflows/import.md
@@ -176,14 +176,12 @@ Apply GSD naming convention for the output filename:
Determine the target directory by querying `init.phase-op` for the phase number extracted in `plan_read_input`. This ensures the `project_code` prefix from `.planning/config.json` is applied:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/insert-phase.md b/get-shit-done/workflows/insert-phase.md
index b492a4846..db56f75d6 100644
--- a/get-shit-done/workflows/insert-phase.md
+++ b/get-shit-done/workflows/insert-phase.md
@@ -34,14 +34,12 @@ Validate first argument is an integer.
Load phase operation context:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -57,7 +55,7 @@ Exit.
-**Delegate the phase insertion to `gsd-sdk query phase.insert`:**
+**Delegate the phase insertion to `gsd-tools.cjs query phase.insert`:**
```bash
RESULT=$($GSD_SDK query phase.insert "${after_phase}" "${description}")
@@ -153,10 +151,10 @@ Project state updated: .planning/STATE.md
Phase insertion is complete when:
-- [ ] `gsd-sdk query phase.insert` executed successfully
+- [ ] `gsd-tools.cjs query phase.insert` executed successfully
- [ ] Phase directory created
- [ ] Roadmap updated with new phase entry (includes "(INSERTED)" marker)
-- [ ] `gsd-sdk query state.add-roadmap-evolution ...` returned `{ added: true }` or `{ added: false, reason: "duplicate" }`
-- [ ] `gsd-sdk query state.patch` returned matched next-phase pointer field(s)
+- [ ] `gsd-tools.cjs query state.add-roadmap-evolution ...` returned `{ added: true }` or `{ added: false, reason: "duplicate" }`
+- [ ] `gsd-tools.cjs query state.patch` returned matched next-phase pointer field(s)
- [ ] User informed of next steps and dependency implications
diff --git a/get-shit-done/workflows/list-workspaces.md b/get-shit-done/workflows/list-workspaces.md
index 92664926d..a702b6366 100644
--- a/get-shit-done/workflows/list-workspaces.md
+++ b/get-shit-done/workflows/list-workspaces.md
@@ -11,14 +11,12 @@ Read all files referenced by the invoking prompt's execution_context before star
## 1. Setup
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/manager.md b/get-shit-done/workflows/manager.md
index b9979e082..352eb7906 100644
--- a/get-shit-done/workflows/manager.md
+++ b/get-shit-done/workflows/manager.md
@@ -19,14 +19,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Bootstrap via manager init:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -41,7 +39,7 @@ Parse JSON for: `milestone_version`, `milestone_name`, `phase_count`, `completed
- `manager_flags.plan` — appended to plan agent init command
- `manager_flags.execute` — appended to execute agent init command
-These are empty strings by default. Set via: `gsd-sdk query config-set manager.flags.discuss "--auto --analyze"`
+These are empty strings by default. Set via: `gsd-tools.cjs query config-set manager.flags.discuss "--auto --analyze"`
**If error:** Display the error message and exit.
diff --git a/get-shit-done/workflows/map-codebase.md b/get-shit-done/workflows/map-codebase.md
index 31aa82106..d5b368ecc 100644
--- a/get-shit-done/workflows/map-codebase.md
+++ b/get-shit-done/workflows/map-codebase.md
@@ -69,14 +69,12 @@ documents refreshed.
Load codebase mapping context:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/milestone-summary.md b/get-shit-done/workflows/milestone-summary.md
index 6bb75a440..691ea2c9a 100644
--- a/get-shit-done/workflows/milestone-summary.md
+++ b/get-shit-done/workflows/milestone-summary.md
@@ -53,14 +53,12 @@ Read all files that exist. Missing files are fine — the summary adapts to what
Find all phase directories:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/mvp-phase.md b/get-shit-done/workflows/mvp-phase.md
index 6be97d256..85b1bed40 100644
--- a/get-shit-done/workflows/mvp-phase.md
+++ b/get-shit-done/workflows/mvp-phase.md
@@ -34,14 +34,12 @@ Normalize per `@~/.claude/get-shit-done/references/phase-argument-parsing.md` (z
## 2. Validate phase exists and check status
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/new-milestone.md b/get-shit-done/workflows/new-milestone.md
index 6ec345337..c9faa2346 100644
--- a/get-shit-done/workflows/new-milestone.md
+++ b/get-shit-done/workflows/new-milestone.md
@@ -181,14 +181,12 @@ blockers, todos) is preserved across the switch — symmetric with
`milestone.complete`.
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/new-project.md b/get-shit-done/workflows/new-project.md
index 2f17bd5b8..fca0f5454 100644
--- a/get-shit-done/workflows/new-project.md
+++ b/get-shit-done/workflows/new-project.md
@@ -57,14 +57,12 @@ The document should describe what you want to build.
**MANDATORY FIRST STEP — Execute these checks before ANY user interaction:**
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/new-workspace.md b/get-shit-done/workflows/new-workspace.md
index a54c7bf23..b512467e9 100644
--- a/get-shit-done/workflows/new-workspace.md
+++ b/get-shit-done/workflows/new-workspace.md
@@ -13,14 +13,12 @@ Read all files referenced by the invoking prompt's execution_context before star
**MANDATORY FIRST STEP — Execute init command:**
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/next.md b/get-shit-done/workflows/next.md
index e317f1377..a488f37f9 100644
--- a/get-shit-done/workflows/next.md
+++ b/get-shit-done/workflows/next.md
@@ -14,14 +14,12 @@ Read project state to determine current position:
```bash
# Get state snapshot
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -94,7 +92,7 @@ Use `--force` to bypass this check.
Exit.
**Prior-phase completeness scan:**
-After passing all three hard-stop gates, scan all phases that precede the current phase in ROADMAP.md order for incomplete work. For each prior phase number `N`, use `gsd-sdk query find-phase ` JSON (plans, summaries, incomplete_plans, etc.) to inspect that phase.
+After passing all three hard-stop gates, scan all phases that precede the current phase in ROADMAP.md order for incomplete work. For each prior phase number `N`, use `gsd-tools.cjs query find-phase ` JSON (plans, summaries, incomplete_plans, etc.) to inspect that phase.
Detect three categories of incomplete work:
1. **Plans without summaries** — a PLAN.md exists in a prior phase directory but no matching SUMMARY.md exists (execution started but not completed).
diff --git a/get-shit-done/workflows/pause-work.md b/get-shit-done/workflows/pause-work.md
index 55b5fd23a..3bd87ffa3 100644
--- a/get-shit-done/workflows/pause-work.md
+++ b/get-shit-done/workflows/pause-work.md
@@ -66,14 +66,12 @@ Report any summaries with placeholder content as incomplete items.
**Write structured handoff to `.planning/HANDOFF.json`:**
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/plan-milestone-gaps.md b/get-shit-done/workflows/plan-milestone-gaps.md
index d8f1e6d89..e4c4a6e5f 100644
--- a/get-shit-done/workflows/plan-milestone-gaps.md
+++ b/get-shit-done/workflows/plan-milestone-gaps.md
@@ -65,14 +65,12 @@ Gap: Flow "View dashboard" broken at data fetch
Find highest existing phase:
```bash
# Get sorted phase list, extract last one
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/plan-phase.md b/get-shit-done/workflows/plan-phase.md
index 6356a5a31..f37ccf75b 100644
--- a/get-shit-done/workflows/plan-phase.md
+++ b/get-shit-done/workflows/plan-phase.md
@@ -31,14 +31,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
Load all context in one call (paths only to minimize orchestrator context):
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -329,7 +327,7 @@ $GSD_SDK query commit "docs(${padded_phase}): generate context from PRD" --files
3. Status gate: reject `superseded`/`rejected`/`deprecated`; warn on `proposed`; missing status defaults to `accepted`.
4. Empty-decisions fallback: if all parsed ADRs have zero `decisions[]`, emit `ADR ingest produced no locked decisions; fall back to discuss-phase for this phase.` and exit with `/gsd:discuss-phase {N}` guidance.
5. Generate CONTEXT.md using ``, ``, ``, ``, ``, ``, map `consequences_positive[]` to Success Criteria and `consequences_negative[]` to Risk Summary, and include `**Source:** ADR Ingest Express Path ({INGEST_PATH})`.
-6. Commit with `gsd-sdk query commit "docs(${padded_phase}): generate context from ADR ingest" --files "${phase_dir}/${padded_phase}-CONTEXT.md"` and set `context_content`; continue to step 5.
+6. Commit with `gsd-tools.cjs query commit "docs(${padded_phase}): generate context from ADR ingest" --files "${phase_dir}/${padded_phase}-CONTEXT.md"` and set `context_content`; continue to step 5.
**Effect:** This bypasses step 4 (Load CONTEXT.md) since CONTEXT.md was synthesized from ADR input.
@@ -801,7 +799,7 @@ VALIDATION_EXISTS=$(ls "${PHASE_DIR}"/*-VALIDATION.md 2>/dev/null | head -1)
If missing and Nyquist is still enabled/applicable — ask user:
1. Re-run: `/gsd:plan-phase {PHASE} --research ${GSD_WS}`
2. Disable Nyquist with the exact command:
- `gsd-sdk query config-set workflow.nyquist_validation false`
+ `gsd-tools.cjs query config-set workflow.nyquist_validation false`
3. Continue anyway (plans fail Dimension 8)
Proceed to Step 7.8 (or Step 8 if pattern mapper is disabled) only if user selects 2 or 3.
diff --git a/get-shit-done/workflows/plan-review-convergence.md b/get-shit-done/workflows/plan-review-convergence.md
index d0520e637..cbe57172a 100644
--- a/get-shit-done/workflows/plan-review-convergence.md
+++ b/get-shit-done/workflows/plan-review-convergence.md
@@ -43,14 +43,12 @@ echo "$ARGUMENTS" | grep -qE '\-\-ws\s+\S+' && GSD_WS=$(echo "$ARGUMENTS" | grep
## 1.5. Config Gate (feature disabled by default)
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/plant-seed.md b/get-shit-done/workflows/plant-seed.md
index 817d82980..60eeba366 100644
--- a/get-shit-done/workflows/plant-seed.md
+++ b/get-shit-done/workflows/plant-seed.md
@@ -135,14 +135,12 @@ Store relevant file paths as `$BREADCRUMBS`.
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/profile-user.md b/get-shit-done/workflows/profile-user.md
index b28388486..5e6c8eff6 100644
--- a/get-shit-done/workflows/profile-user.md
+++ b/get-shit-done/workflows/profile-user.md
@@ -1,7 +1,7 @@
Orchestrate the full developer profiling flow: consent, session analysis (or questionnaire fallback), profile generation, result display, and artifact creation.
-This workflow wires Phase 1 (session pipeline) and Phase 2 (profiling engine) into a cohesive user-facing experience. All heavy lifting is done by existing `gsd-sdk query` handlers (with legacy `gsd-tools.cjs` parity where needed) and the gsd-user-profiler agent -- this workflow orchestrates the sequence, handles branching, and provides the UX.
+This workflow wires Phase 1 (session pipeline) and Phase 2 (profiling engine) into a cohesive user-facing experience. All heavy lifting is done by existing `gsd-tools.cjs query` handlers (with legacy `gsd-tools.cjs` parity where needed) and the gsd-user-profiler agent -- this workflow orchestrates the sequence, handles branching, and provides the UX.
@@ -130,14 +130,12 @@ Display: "◆ Scanning sessions..."
Run session scan:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -382,7 +380,7 @@ $GSD_SDK query generate-claude-profile --analysis "$ANALYSIS_PATH" --global --js
Display: "✓ Added profile section to $HOME/.claude/CLAUDE.md"
-**Error handling:** If any `gsd-sdk query` or gsd-tools.cjs call fails, display the error message and use AskUserQuestion to offer "Retry" or "Skip this artifact". On retry, re-run the command. On skip, continue to next artifact.
+**Error handling:** If any `gsd-tools.cjs query` or gsd-tools.cjs call fails, display the error message and use AskUserQuestion to offer "Retry" or "Skip this artifact". On retry, re-run the command. On skip, continue to next artifact.
---
@@ -457,7 +455,7 @@ rm -f "$ANALYSIS_PATH" 2>/dev/null
- [ ] Profile written to USER-PROFILE.md via write-profile subcommand
- [ ] Result display shows report card table and highlight reel with evidence
- [ ] Artifact selection uses multiSelect with all options pre-selected
-- [ ] Artifacts generated sequentially via gsd-sdk query (or gsd-tools.cjs) subcommands
+- [ ] Artifacts generated sequentially via gsd-tools.cjs query (or gsd-tools.cjs) subcommands
- [ ] Refresh diff shows changed dimensions when --refresh was used
- [ ] Temp files cleaned up on completion
diff --git a/get-shit-done/workflows/progress.md b/get-shit-done/workflows/progress.md
index a241021ba..c9e815812 100644
--- a/get-shit-done/workflows/progress.md
+++ b/get-shit-done/workflows/progress.md
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
**Load progress context (paths only):**
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -53,11 +51,11 @@ If missing both ROADMAP.md and PROJECT.md: suggest `/gsd:new-project`.
-**Use structured extraction from `gsd-sdk query` (or legacy gsd-tools.cjs):**
+**Use structured extraction from `gsd-tools.cjs query` (or legacy gsd-tools.cjs):**
Instead of reading full files, use targeted tools to get only the data needed for the report:
-- `ROADMAP=$(gsd-sdk query roadmap.analyze)`
-- `STATE=$(gsd-sdk query state-snapshot)`
+- `ROADMAP=$(gsd-tools.cjs query roadmap.analyze)`
+- `STATE=$(gsd-tools.cjs query state-snapshot)`
This minimizes orchestrator context usage.
@@ -105,7 +103,7 @@ Use this instead of manually reading/parsing ROADMAP.md.
> blocks are a secondary config aid that may be significantly stale — do NOT use the
> CLAUDE.md project description as a source for any progress report field.
-**Generate progress bar from `gsd-sdk query progress` / `progress.json`, then present rich status report:**
+**Generate progress bar from `gsd-tools.cjs query progress` / `progress.json`, then present rich status report:**
```bash
# Get formatted progress bar
diff --git a/get-shit-done/workflows/quick.md b/get-shit-done/workflows/quick.md
index 8ba14522d..e301045ae 100644
--- a/get-shit-done/workflows/quick.md
+++ b/get-shit-done/workflows/quick.md
@@ -125,14 +125,12 @@ If `$VALIDATE_MODE` only:
**Step 2: Initialize**
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -961,7 +959,7 @@ Use Edit tool to make these changes atomically
**Step 8: Final commit and completion**
-Stage and commit quick task artifacts. This step MUST always run — even if the executor already committed some files (e.g. when running without worktree isolation). The `gsd-sdk query commit` command (or legacy `gsd-tools.cjs` commit) handles already-committed files gracefully.
+Stage and commit quick task artifacts. This step MUST always run — even if the executor already committed some files (e.g. when running without worktree isolation). The `gsd-tools.cjs query commit` command (or legacy `gsd-tools.cjs` commit) handles already-committed files gracefully.
Build file list:
- `${QUICK_DIR}/${quick_id}-PLAN.md`
diff --git a/get-shit-done/workflows/remove-phase.md b/get-shit-done/workflows/remove-phase.md
index b87064b45..a61c4e3f6 100644
--- a/get-shit-done/workflows/remove-phase.md
+++ b/get-shit-done/workflows/remove-phase.md
@@ -29,14 +29,12 @@ Exit.
Load phase operation context:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -88,7 +86,7 @@ Wait for confirmation.
-**Delegate the entire removal operation to `gsd-sdk query phase.remove`:**
+**Delegate the entire removal operation to `gsd-tools.cjs query phase.remove`:**
```bash
RESULT=$($GSD_SDK query phase.remove "${target}")
@@ -151,7 +149,7 @@ Would you like to:
- Don't remove completed phases (have SUMMARY.md files) without --force
- Don't remove current or past phases
-- Don't manually renumber — use `gsd-sdk query phase.remove` which handles all renumbering
+- Don't manually renumber — use `gsd-tools.cjs query phase.remove` which handles all renumbering
- Don't add "removed phase" notes to STATE.md — git commit is the record
- Don't modify completed phase directories
@@ -160,7 +158,7 @@ Would you like to:
Phase removal is complete when:
- [ ] Target phase validated as future/unstarted
-- [ ] `gsd-sdk query phase.remove` executed successfully
+- [ ] `gsd-tools.cjs query phase.remove` executed successfully
- [ ] Changes committed with descriptive message
- [ ] User informed of changes
diff --git a/get-shit-done/workflows/remove-workspace.md b/get-shit-done/workflows/remove-workspace.md
index b9ec76139..d04ba6356 100644
--- a/get-shit-done/workflows/remove-workspace.md
+++ b/get-shit-done/workflows/remove-workspace.md
@@ -13,14 +13,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Extract workspace name from $ARGUMENTS.
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/resume-project.md b/get-shit-done/workflows/resume-project.md
index 74e026175..d7dbe5b6b 100644
--- a/get-shit-done/workflows/resume-project.md
+++ b/get-shit-done/workflows/resume-project.md
@@ -20,14 +20,12 @@ Instantly restore full project context so "Where were we?" has an immediate, com
Load all context in one call:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/review.md b/get-shit-done/workflows/review.md
index d14ed4378..8e35a4982 100644
--- a/get-shit-done/workflows/review.md
+++ b/get-shit-done/workflows/review.md
@@ -24,14 +24,12 @@ command -v qwen >/dev/null 2>&1 && echo "qwen:available" || echo "qwen:missing"
command -v cursor >/dev/null 2>&1 && echo "cursor:available" || echo "cursor:missing"
# Check local model servers (OpenAI-compatible HTTP API — no CLI binary required)
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -223,7 +221,7 @@ Note: The variable names above (`INSTRUCTIONS_BLOCK_FILE`, `ROADMAP_SECTION_FILE
Read model preferences from planning config. Null/missing values fall back to CLI defaults.
```bash
-# JSON scalars from gsd-sdk query; use jq -r to strip JSON string quotes (install jq if missing)
+# JSON scalars from gsd-tools.cjs query; use jq -r to strip JSON string quotes (install jq if missing)
GEMINI_MODEL=$($GSD_SDK query config-get review.models.gemini 2>/dev/null | jq -r '.' 2>/dev/null || true)
CLAUDE_MODEL=$($GSD_SDK query config-get review.models.claude 2>/dev/null | jq -r '.' 2>/dev/null || true)
CODEX_MODEL=$($GSD_SDK query config-get review.models.codex 2>/dev/null | jq -r '.' 2>/dev/null || true)
diff --git a/get-shit-done/workflows/scan.md b/get-shit-done/workflows/scan.md
index ef258cbc0..7a81f2ac3 100644
--- a/get-shit-done/workflows/scan.md
+++ b/get-shit-done/workflows/scan.md
@@ -39,14 +39,12 @@ Exit.
## Step 2: Check for existing documents
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/secure-phase.md b/get-shit-done/workflows/secure-phase.md
index cfcb26f81..ce314eee1 100644
--- a/get-shit-done/workflows/secure-phase.md
+++ b/get-shit-done/workflows/secure-phase.md
@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 0. Initialize
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/settings-advanced.md b/get-shit-done/workflows/settings-advanced.md
index 129fc92f1..8b7114ad7 100644
--- a/get-shit-done/workflows/settings-advanced.md
+++ b/get-shit-done/workflows/settings-advanced.md
@@ -20,14 +20,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Ensure config exists and resolve the workstream-aware config path (mirrors `settings.md`):
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -432,7 +430,7 @@ AskUserQuestion([
If "Other (Group B or custom)" is selected, prompt the user to enter the runtime name as a free-text string.
If the selected runtime differs from the stored `runtime` key, update `runtime` via
-`gsd-sdk query config-set runtime ` before proceeding to Step C.
+`gsd-tools.cjs query config-set runtime ` before proceeding to Step C.
**Step C — Configure tier overrides for the selected runtime:**
@@ -492,7 +490,7 @@ change.
Merge the new settings into the existing config at `$GSD_CONFIG_PATH`. This merge is the
core correctness invariant: **preserve every unrelated key** — do not clobber siblings.
-Apply each selected value via `gsd-sdk query config-set ` so the central
+Apply each selected value via `gsd-tools.cjs query config-set ` so the central
validator (`isValidConfigKey`) accepts the write and the deep-merge preserves unrelated
keys and sibling sub-objects.
@@ -557,7 +555,7 @@ anything not listed in Sections 1–7 MUST survive the update):
```
Never emit a full overwrite of the file that omits keys the user did not touch. Always
-route each write through `gsd-sdk query config-set` so sibling preservation is handled by
+route each write through `gsd-tools.cjs query config-set` so sibling preservation is handled by
the central setter.
@@ -612,7 +610,7 @@ UI/AI phase gates), use /gsd:settings.
- [ ] Numeric inputs validated — non-numeric rejected and re-prompted
- [ ] Branch-template inputs validated — non-default must contain a placeholder
- [ ] Null-allowed fields accept an empty input as a clear
-- [ ] Writes routed through `gsd-sdk query config-set` so unrelated keys are preserved
+- [ ] Writes routed through `gsd-tools.cjs query config-set` so unrelated keys are preserved
- [ ] Section 7 shows current runtime and built-in tier table
- [ ] Group B runtimes display "(no built-in default — your runtime handles model selection)"
- [ ] Override set/clear/keep paths all work correctly for each tier
diff --git a/get-shit-done/workflows/settings-integrations.md b/get-shit-done/workflows/settings-integrations.md
index 447b0bad0..cebb51613 100644
--- a/get-shit-done/workflows/settings-integrations.md
+++ b/get-shit-done/workflows/settings-integrations.md
@@ -2,7 +2,7 @@
Interactive configuration of third-party integrations for GSD — search API keys
(Brave / Firecrawl / Exa), code-review CLI routing (`review.models.`), and
agent-skill injection (`agent_skills.`). Writes to
-`.planning/config.json` via `gsd-sdk`/`gsd-tools` so unrelated keys are
+`.planning/config.json` via `gsd-tools` so unrelated keys are
preserved, never clobbered.
This command is deliberately separate from `/gsd:settings` (workflow toggles)
@@ -42,14 +42,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Ensure config exists and resolve the active config path (flat vs workstream, #2282):
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/settings.md b/get-shit-done/workflows/settings.md
index 2a328f204..2f269aae6 100644
--- a/get-shit-done/workflows/settings.md
+++ b/get-shit-done/workflows/settings.md
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Ensure config exists and load current state:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -424,7 +422,7 @@ Merge new settings into existing config.json:
}
```
-**Safe merge:** Apply each chosen value via `gsd-sdk query config-set ` so unrelated keys are never clobbered. `code_review_depth` is written only if the code_review question was answered `on`; otherwise leave the existing value in place. `model_profile` is written on Q1 "Adaptive (Recommended)" (→ adaptive) or Q1 "Inherit" (→ inherit) immediately; for Q1 "Standard tier…", `model_profile` is written from Q2's answer. If Q1 = "Standard tier…" but Q2 is cancelled, leave the existing `model_profile` value unchanged — do not write any new value.
+**Safe merge:** Apply each chosen value via `gsd-tools.cjs query config-set ` so unrelated keys are never clobbered. `code_review_depth` is written only if the code_review question was answered `on`; otherwise leave the existing value in place. `model_profile` is written on Q1 "Adaptive (Recommended)" (→ adaptive) or Q1 "Inherit" (→ inherit) immediately; for Q1 "Standard tier…", `model_profile` is written from Q2's answer. If Q1 = "Standard tier…" but Q2 is cancelled, leave the existing `model_profile` value unchanged — do not write any new value.
Write updated config to `$GSD_CONFIG_PATH` (the workstream-aware path resolved in `ensure_and_load_config`). Never hardcode `.planning/config.json` — workstream installs route to `.planning/workstreams//config.json`.
diff --git a/get-shit-done/workflows/ship.md b/get-shit-done/workflows/ship.md
index 9b1bcf55f..79a599043 100644
--- a/get-shit-done/workflows/ship.md
+++ b/get-shit-done/workflows/ship.md
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Parse arguments and load project state:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/sketch-wrap-up.md b/get-shit-done/workflows/sketch-wrap-up.md
index e8fa2be7f..3695ac51d 100644
--- a/get-shit-done/workflows/sketch-wrap-up.md
+++ b/get-shit-done/workflows/sketch-wrap-up.md
@@ -37,14 +37,12 @@ Exit.
Check `commit_docs` config:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/sketch.md b/get-shit-done/workflows/sketch.md
index f27dff7a9..f27c006b3 100644
--- a/get-shit-done/workflows/sketch.md
+++ b/get-shit-done/workflows/sketch.md
@@ -99,14 +99,12 @@ ls -d .planning/sketches/[0-9][0-9][0-9]-* 2>/dev/null | sort | tail -1
Check `commit_docs` config:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/spike-wrap-up.md b/get-shit-done/workflows/spike-wrap-up.md
index 408825a3e..28250cefa 100644
--- a/get-shit-done/workflows/spike-wrap-up.md
+++ b/get-shit-done/workflows/spike-wrap-up.md
@@ -37,14 +37,12 @@ Exit.
Check `commit_docs` config:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/spike.md b/get-shit-done/workflows/spike.md
index 379c224d3..e41429ede 100644
--- a/get-shit-done/workflows/spike.md
+++ b/get-shit-done/workflows/spike.md
@@ -96,14 +96,12 @@ ls -d .planning/spikes/[0-9][0-9][0-9]-* 2>/dev/null | sort | tail -1
Check `commit_docs` config:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/stats.md b/get-shit-done/workflows/stats.md
index 8915b8f1a..73f4b4014 100644
--- a/get-shit-done/workflows/stats.md
+++ b/get-shit-done/workflows/stats.md
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Gather project statistics:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -63,7 +61,7 @@ If no `.planning/` directory exists, inform the user to run `/gsd:new-project` f
-**MVP phase summary.** Read all phases via `gsd-sdk query roadmap.analyze` (Phase 1's `cmdRoadmapAnalyze` surfaces a `mode` field per phase). Count phases by mode:
+**MVP phase summary.** Read all phases via `gsd-tools.cjs query roadmap.analyze` (Phase 1's `cmdRoadmapAnalyze` surfaces a `mode` field per phase). Count phases by mode:
```bash
ANALYZE=$($GSD_SDK query roadmap.analyze)
diff --git a/get-shit-done/workflows/thread.md b/get-shit-done/workflows/thread.md
index 8348ff44c..f7d3f465c 100644
--- a/get-shit-done/workflows/thread.md
+++ b/get-shit-done/workflows/thread.md
@@ -28,14 +28,12 @@ ls .planning/threads/*.md 2>/dev/null
For each thread file found:
- Read frontmatter `status` field via:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -227,6 +225,6 @@ updated: {today ISO date}
- Slugs from $ARGUMENTS are sanitized before use in file paths: only [a-z0-9-] allowed, max 60 chars, reject ".." and "/"
- File names from readdir/ls are sanitized before display: strip non-printable chars and ANSI sequences
- Artifact content (thread titles, goal sections, next steps) rendered as plain text only — never executed or passed to agent prompts without DATA_START/DATA_END boundaries
-- Status fields read via gsd-sdk query frontmatter.get — never eval'd or shell-expanded
-- The generate-slug call for new threads runs through gsd-sdk query (or gsd-tools) which sanitizes input — keep that pattern
+- Status fields read via gsd-tools.cjs query frontmatter.get — never eval'd or shell-expanded
+- The generate-slug call for new threads runs through gsd-tools.cjs query (or gsd-tools) which sanitizes input — keep that pattern
diff --git a/get-shit-done/workflows/transition.md b/get-shit-done/workflows/transition.md
index 2e80c1c6d..c700eb58e 100644
--- a/get-shit-done/workflows/transition.md
+++ b/get-shit-done/workflows/transition.md
@@ -160,17 +160,15 @@ If found, delete them — phase is complete, handoffs are stale.
-**Delegate ROADMAP.md and STATE.md updates to `gsd-sdk query phase.complete`:**
+**Delegate ROADMAP.md and STATE.md updates to `gsd-tools.cjs query phase.complete`:**
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -306,7 +304,7 @@ This step is fully delegated to `graduation.md`. It handles guard checks (featur
-**Note:** Basic position updates (Current Phase, Status, Current Plan, Last Activity) were already handled by `gsd-sdk query phase.complete` in the update_roadmap_and_state step.
+**Note:** Basic position updates (Current Phase, Status, Current Plan, Last Activity) were already handled by `gsd-tools.cjs query phase.complete` in the update_roadmap_and_state step.
Verify the updates are correct by reading STATE.md. If the progress bar needs updating, use:
@@ -410,7 +408,7 @@ Resume file: None
**MANDATORY: Verify milestone status before presenting next steps.**
-**Use the transition result from `gsd-sdk query phase.complete`:**
+**Use the transition result from `gsd-tools.cjs query phase.complete`:**
The `is_last_phase` field from the phase complete result tells you directly:
- `is_last_phase: false` → More phases remain → Go to **Route A**
diff --git a/get-shit-done/workflows/ui-phase.md b/get-shit-done/workflows/ui-phase.md
index 7e731073e..40d1b812e 100644
--- a/get-shit-done/workflows/ui-phase.md
+++ b/get-shit-done/workflows/ui-phase.md
@@ -19,14 +19,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 1. Initialize
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/ui-review.md b/get-shit-done/workflows/ui-review.md
index e1165b29b..9a81f7448 100644
--- a/get-shit-done/workflows/ui-review.md
+++ b/get-shit-done/workflows/ui-review.md
@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 0. Initialize
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/ultraplan-phase.md b/get-shit-done/workflows/ultraplan-phase.md
index d35ea85f4..84be39a52 100644
--- a/get-shit-done/workflows/ultraplan-phase.md
+++ b/get-shit-done/workflows/ultraplan-phase.md
@@ -66,14 +66,12 @@ unplanned phase from the roadmap (same logic as /gsd:plan-phase).
Load GSD phase context:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/update.md b/get-shit-done/workflows/update.md
index 16a5044f4..92d3be874 100644
--- a/get-shit-done/workflows/update.md
+++ b/get-shit-done/workflows/update.md
@@ -457,9 +457,9 @@ installer does not know about and will delete during the wipe.
**Do not use bash path-stripping (`${filepath#$RUNTIME_DIR/}`) or `node -e require()`
inline** — those patterns fail when `$RUNTIME_DIR` is unset and the stripped
relative path may not match manifest key format, which causes CUSTOM_COUNT=0
-even when custom files exist (bug #1997). Use `gsd-sdk query detect-custom-files`
-when `gsd-sdk` is on `PATH`, or the bundled `gsd-tools.cjs detect-custom-files`
-otherwise — both resolve paths reliably with Node.js `path.relative()`.
+even when custom files exist (bug #1997). Use `gsd-tools.cjs query detect-custom-files`
+or the bundled `gsd-tools.cjs detect-custom-files` path — both resolve paths
+reliably with Node.js `path.relative()`.
First, resolve the config directory (`RUNTIME_DIR`) from the install scope
detected in `get_installed_version`:
@@ -480,15 +480,13 @@ fi
If `RUNTIME_DIR` is empty or does not exist, skip this step (no config dir to
inspect).
-Otherwise run `detect-custom-files` (prefer SDK when available):
+Otherwise run `detect-custom-files`:
```bash
GSD_TOOLS="$RUNTIME_DIR/get-shit-done/bin/gsd-tools.cjs"
CUSTOM_JSON=''
if [ -f "$GSD_TOOLS" ] && [ -n "$RUNTIME_DIR" ]; then
CUSTOM_JSON=$(node "$GSD_TOOLS" detect-custom-files --config-dir "$RUNTIME_DIR" 2>/dev/null)
-elif [ -n "$RUNTIME_DIR" ] && command -v gsd-sdk >/dev/null 2>&1; then
- CUSTOM_JSON=$(gsd-sdk query detect-custom-files --config-dir "$RUNTIME_DIR" 2>/dev/null)
fi
if [ -z "$CUSTOM_JSON" ]; then
CUSTOM_JSON='{"custom_files":[],"custom_count":0}'
diff --git a/get-shit-done/workflows/validate-phase.md b/get-shit-done/workflows/validate-phase.md
index 334be6955..1b6fef90f 100644
--- a/get-shit-done/workflows/validate-phase.md
+++ b/get-shit-done/workflows/validate-phase.md
@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 0. Initialize
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
diff --git a/get-shit-done/workflows/verify-phase.md b/get-shit-done/workflows/verify-phase.md
index 509e63043..772b91548 100644
--- a/get-shit-done/workflows/verify-phase.md
+++ b/get-shit-done/workflows/verify-phase.md
@@ -29,14 +29,12 @@ Then verify each level against the actual codebase.
Load phase operation context:
```bash
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -64,7 +62,7 @@ Extract **phase goal** from ROADMAP.md (the outcome to verify, not tasks), **req
**Option A: Must-haves in PLAN frontmatter**
-Use `gsd-sdk query` verify handlers (or legacy gsd-tools) to extract must_haves from each PLAN:
+Use `gsd-tools.cjs query` verify handlers (or legacy gsd-tools) to extract must_haves from each PLAN:
```bash
for plan in "$PHASE_DIR"/*-PLAN.md; do
@@ -114,7 +112,7 @@ For each truth: identify supporting artifacts → check artifact status → chec
-Use `gsd-sdk query verify.artifacts` (or legacy gsd-tools) for artifact verification against must_haves in each PLAN:
+Use `gsd-tools.cjs query verify.artifacts` (or legacy gsd-tools) for artifact verification against must_haves in each PLAN:
```bash
for plan in "$PHASE_DIR"/*-PLAN.md; do
@@ -157,7 +155,7 @@ wiring or leftover code from plan revisions.
-Use `gsd-sdk query verify.key-links` (or legacy gsd-tools) for key link verification against must_haves in each PLAN:
+Use `gsd-tools.cjs query verify.key-links` (or legacy gsd-tools) for key link verification against must_haves in each PLAN:
```bash
for plan in "$PHASE_DIR"/*-PLAN.md; do
diff --git a/get-shit-done/workflows/verify-work.md b/get-shit-done/workflows/verify-work.md
index 05352d57c..cee9a984e 100644
--- a/get-shit-done/workflows/verify-work.md
+++ b/get-shit-done/workflows/verify-work.md
@@ -34,14 +34,12 @@ GSD_WS=""
echo "$ARGUMENTS" | grep -qE -- '--ws[[:space:]]+[^[:space:]]+' && GSD_WS=$(echo "$ARGUMENTS" | grep -oE -- '--ws[[:space:]]+[^[:space:]]+')
PHASE_ARG=$(echo "$ARGUMENTS" | sed -E 's/--ws[[:space:]]+[^[:space:]]+//g' | xargs)
-# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
+# SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS"
-elif command -v gsd-sdk >/dev/null 2>&1; then
- GSD_SDK="gsd-sdk"
else
- echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
+ echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1
fi
@@ -506,7 +504,7 @@ All tests passed. Phase {phase} marked complete.
Run phase artifact scan to surface any open items before marking phase verified:
-`audit-open` is CJS-only until registered on `gsd-sdk query`:
+`audit-open` is CJS-only until registered on `gsd-tools.cjs query`:
```bash
$GSD_SDK query audit-open --json