* feat(#2790): consolidate 86 gsd-* skills to 59 — zero functional loss Closes #2790 - `capture.md` — absorbs add-todo (default), note (--note), add-backlog (--backlog), plant-seed (--seed), check-todos (--list) - `phase.md` — absorbs add-phase (default), insert-phase (--insert), remove-phase (--remove), edit-phase (--edit) - `config.md` — absorbs settings-advanced (--advanced), settings-integrations (--integrations), set-profile (--profile); settings.md retained as-is - `workspace.md` — absorbs new-workspace (--new), list-workspaces (--list), remove-workspace (--remove) - `update.md` — adds --sync (absorbs sync-skills) and --reapply (absorbs reapply-patches) - `sketch.md` — adds --wrap-up (absorbs sketch-wrap-up) - `spike.md` — adds --wrap-up (absorbs spike-wrap-up) - `map-codebase.md` — adds --fast (absorbs scan) and --query (absorbs intel) - `code-review.md` — adds --fix (absorbs code-review-fix) - `progress.md` — adds --next (absorbs next) and --do (absorbs do) join-discord, research-phase, session-report, from-gsd2, analyze-dependencies, list-phase-assumptions, plan-milestone-gaps autonomous.md: updated Skill(skill="gsd:code-review-fix") → Skill(skill="gsd:code-review", args="--fix --auto") to match the consolidated skill name - New: tests/enh-2790-skill-consolidation.test.cjs (48 tests) - Updated: 14 existing test files redirected from deleted command paths to their consolidated equivalents - docs/INVENTORY.md: Commands count 86→59, ghost rows removed, new consolidated rows added - docs/INVENTORY-MANIFEST.json: regenerated to match filesystem Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(#2790): add CHANGELOG entry for skill consolidation * docs(#2790): update COMMANDS.md for 86→59 skill consolidation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(#2790): address CodeRabbit review findings - CHANGELOG.md: add --next alongside --do in progress flag list - config.md: remove trailing space from --profile code span (MD038) - COMMANDS.md: add required descriptions to /gsd-phase examples; /gsd-phase without args errors, not interactive - COMMANDS.md: add --next and --do to /gsd-progress flags table + examples - test: convert content.includes('--reapply') to structural frontmatter parse; add allow-test-rule comment for workflow content assertions - test: replace redundant existsSync duplicate with assertion that verifies the full consolidated flag surface (--sync | --reapply) in argument-hint Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(#2790): restore reapply-patches workflow and strengthen test assertions - Create get-shit-done/workflows/reapply-patches.md: the #2790 consolidation deleted the 14K combined command+workflow file (reapply-patches.md) but update.md already referenced the workflow via execution_context_extended. Restoring it fixes a silent behavioral gap where --reapply had no workflow to load. Includes full three-way merge logic, hunk verification table (Step 4), and the Hunk Verification Gate (Step 5) that blocks cleanup until all user-added hunks are confirmed present in the merged output. - Fix update.md: /gsd-reapply-patches → /gsd-update --reapply (stale ref) - Fix reapply-verify-hunks.test.cjs: was checking existsSync(update.md) 8×; now points to the workflow file and asserts real behavioral content (Post-merge verification, Hunk presence check, Line-count check, backup reference, per-file tracking, structural ordering) - Fix reapply-patches.test.cjs: replace content.includes() stubs with frontmatter-parsed argument-hint assertions; replace 4 existsSync(update.md) no-ops with real assertions against the workflow content - Fix edit-phase.test.cjs: /gsd-edit-phase → /gsd-phase (COMMANDS.md now documents the consolidated command with --edit flag) - Fix next-safety-gates.test.cjs: split OR predicates into independent assertions — --next in progress.md and --force in next.md workflow - Fix workspace.test.cjs: add allow-test-rule comment for routing content checks (command routing text IS the deployed behavioral contract) - Fix bug-2439 test: strengthen pre-flight assertion to verify gsd-sdk is referenced (not just --profile) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: address CodeRabbit review findings (CR round 2) - INVENTORY.md: update sync-skills.md row to reference /gsd-update --sync instead of stale /gsd-sync-skills (absorbed in #2790) - enh-2380-sync-skills.test.cjs: align INVENTORY.md assertion with the corrected reference; was asserting the old /gsd-sync-skills name while the manifest test correctly asserted /gsd-update, creating conflicting expectations in the same suite - reapply-verify-hunks.test.cjs: add explicit notEqual(-1) assertions for all three anchors before the ordering check so a missing anchor produces a clear failure instead of a false positive (writeIdx=-1 < verifyIdx=5 is true) - bug-2439-set-profile-gsd-sdk-preflight.test.cjs: defer fs.readFileSync until after the existence assertion; eager describe-level read caused the suite to crash before the existence test could run, making it effectively dead code Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(#2790): address CR — INVENTORY routing + reapply test contract wording Two unresolved CodeRabbit findings (Major): - docs/INVENTORY.md: workflow-file table still pointed at obsolete /gsd-do, /gsd-next, /gsd-note, /gsd-add-todo, /gsd-add-backlog, /gsd-check-todos, /gsd-plant-seed slash commands. Re-route to the consolidated /gsd-progress (--next, --do) and /gsd-capture (--note, --backlog, --seed, --list) so the inventory is internally consistent. - tests/reapply-verify-hunks.test.cjs: 'verification tracks per-file status' asserted on phrasing that doesn't appear in reapply-patches.md (the 'per-file' substring only matched accidentally via 'sequential integer per file'). Switch to the actual contract text — Hunk Verification Table, one row per hunk per file, verified column. * test(#2790): update CR-INTEGRATION tests for consolidated --fix invocation After the merge of main (which carries #2843's hyphen-form fix), the consolidation in this branch absorbs gsd-code-review-fix into gsd-code-review as the --fix flag. Update the two CR-INTEGRATION tests that previously asserted on the standalone gsd-code-review-fix skill name to instead assert on a gsd-code-review invocation carrying --fix in its arg tokens. Tests still parse Skill() invocations structurally; only the asserted skill-name + arg-token shape changed. * test(#2790): scope success_criteria check to the <success_criteria> block CodeRabbit nitpick: 'success criteria includes verification' did a whole-file substring check, which can false-pass if the phrase appears elsewhere in the document. Extract the <success_criteria>...</success_criteria> block first via extractTagBlock() and assert against that scope only. * fix(#2790): post-rebase reconciliation with main - INVENTORY.md/JSON: add reapply-patches workflow row + bump count to 85 - autonomous.md: switch consolidated --fix invocation to hyphen Skill name - analyze-dependencies test: assert COMMANDS.md does NOT document the consolidated-away /gsd-analyze-dependencies entry (was: bare .includes()) * fix(#2790): address remaining CR findings — strengthen contract tests Doc-fixes: - INVENTORY.md: route transition.md & edit-phase.md rows to consolidated /gsd-progress --next and /gsd-phase --edit (was: deleted /gsd-next, /gsd-edit-phase) - config.md --profile branch: document #2439 pre-flight `command -v gsd-sdk` guard + install hint BEFORE the gsd-sdk invocation (closes opaque "command not found: gsd-sdk" regression path) Test discipline (no-source-grep contract): - bug-2439: replace bare `content.includes('gsd-sdk')` with structured parse of <context> block + --profile branch; assert pre-flight token, install hint, #2439 citation, and ordering vs gsd-sdk invocation - edit-phase: parse INVENTORY.md edit-phase.md row's "Invoked by" column and assert `/gsd-phase --edit` (not the deleted /gsd-edit-phase) - next-safety-gates: tighten `--next` documentation contract — require --next AND --force AND completeness routing (was OR-based, passed when only --next present) - reapply-patches: parse argument-hint flag list structurally; scan ALL <execution_context*> blocks for the @-include of reapply-patches.md; parse Hunk Verification Table header columns directly; locate Step 5 via heading parsing then assert (i) table reference, (ii) verified=no gate, (iii) STOP/halt directive, (iv) explicit absent-table halt path - workspace: parse frontmatter, tokenize argument-hint across multiple bracketed segments, parse @-include targets from <execution_context> rather than substring-matching the file body --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,79 +0,0 @@
|
||||
---
|
||||
name: gsd:add-backlog
|
||||
description: Add an idea to the backlog parking lot (999.x numbering)
|
||||
argument-hint: <description>
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
---
|
||||
|
||||
<objective>
|
||||
Add a backlog item to the roadmap using 999.x numbering. Backlog items are
|
||||
unsequenced ideas that aren't ready for active planning — they live outside
|
||||
the normal phase sequence and accumulate context over time.
|
||||
</objective>
|
||||
|
||||
<process>
|
||||
|
||||
1. **Read ROADMAP.md** to find existing backlog entries:
|
||||
```bash
|
||||
cat .planning/ROADMAP.md
|
||||
```
|
||||
|
||||
2. **Find next backlog number:**
|
||||
```bash
|
||||
NEXT=$(gsd-sdk query phase.next-decimal 999 --raw)
|
||||
```
|
||||
If no 999.x phases exist, start at 999.1.
|
||||
|
||||
3. **Add to ROADMAP.md** under a `## Backlog` section. If the section doesn't exist, create it at the end.
|
||||
Write the ROADMAP entry BEFORE creating the directory — this ensures directory existence is always
|
||||
a reliable indicator that the phase is already registered, which prevents false duplicate detection
|
||||
in any hook that checks for existing 999.x directories (#2280):
|
||||
|
||||
```markdown
|
||||
## Backlog
|
||||
|
||||
### Phase {NEXT}: {description} (BACKLOG)
|
||||
|
||||
**Goal:** [Captured for future planning]
|
||||
**Requirements:** TBD
|
||||
**Plans:** 0 plans
|
||||
|
||||
Plans:
|
||||
- [ ] TBD (promote with /gsd-review-backlog when ready)
|
||||
```
|
||||
|
||||
4. **Create the phase directory:**
|
||||
```bash
|
||||
SLUG=$(gsd-sdk query generate-slug "$ARGUMENTS" --raw)
|
||||
mkdir -p ".planning/phases/${NEXT}-${SLUG}"
|
||||
touch ".planning/phases/${NEXT}-${SLUG}/.gitkeep"
|
||||
```
|
||||
|
||||
5. **Commit:**
|
||||
```bash
|
||||
gsd-sdk query commit "docs: add backlog item ${NEXT} — ${ARGUMENTS}" --files .planning/ROADMAP.md ".planning/phases/${NEXT}-${SLUG}/.gitkeep"
|
||||
```
|
||||
|
||||
6. **Report:**
|
||||
```
|
||||
## 📋 Backlog Item Added
|
||||
|
||||
Phase {NEXT}: {description}
|
||||
Directory: .planning/phases/{NEXT}-{slug}/
|
||||
|
||||
This item lives in the backlog parking lot.
|
||||
Use /gsd-discuss-phase {NEXT} to explore it further.
|
||||
Use /gsd-review-backlog to promote items to active milestone.
|
||||
```
|
||||
|
||||
</process>
|
||||
|
||||
<notes>
|
||||
- 999.x numbering keeps backlog items out of the active phase sequence
|
||||
- Phase directories are created immediately, so /gsd-discuss-phase and /gsd-plan-phase work on them
|
||||
- No `Depends on:` field — backlog items are unsequenced by definition
|
||||
- Sparse numbering is fine (999.1, 999.3) — always uses next-decimal
|
||||
</notes>
|
||||
@@ -1,43 +0,0 @@
|
||||
---
|
||||
name: gsd:add-phase
|
||||
description: Add phase to end of current milestone in roadmap
|
||||
argument-hint: <description>
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
---
|
||||
|
||||
<objective>
|
||||
Add a new integer phase to the end of the current milestone in the roadmap.
|
||||
|
||||
Routes to the add-phase workflow which handles:
|
||||
- Phase number calculation (next sequential integer)
|
||||
- Directory creation with slug generation
|
||||
- Roadmap structure updates
|
||||
- STATE.md roadmap evolution tracking
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/add-phase.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Arguments: $ARGUMENTS (phase description)
|
||||
|
||||
Roadmap and state are resolved in-workflow via `init phase-op` and targeted tool calls.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
**Follow the add-phase workflow** from `@~/.claude/get-shit-done/workflows/add-phase.md`.
|
||||
|
||||
The workflow handles all logic including:
|
||||
1. Argument parsing and validation
|
||||
2. Roadmap existence checking
|
||||
3. Current milestone identification
|
||||
4. Next phase number calculation (ignoring decimals)
|
||||
5. Slug generation from description
|
||||
6. Phase directory creation
|
||||
7. Roadmap entry insertion
|
||||
8. STATE.md updates
|
||||
</process>
|
||||
@@ -1,47 +0,0 @@
|
||||
---
|
||||
name: gsd:add-todo
|
||||
description: Capture idea or task as todo from current conversation context
|
||||
argument-hint: [optional description]
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
<objective>
|
||||
Capture an idea, task, or issue that surfaces during a GSD session as a structured todo for later work.
|
||||
|
||||
Routes to the add-todo workflow which handles:
|
||||
- Directory structure creation
|
||||
- Content extraction from arguments or conversation
|
||||
- Area inference from file paths
|
||||
- Duplicate detection and resolution
|
||||
- Todo file creation with frontmatter
|
||||
- STATE.md updates
|
||||
- Git commits
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/add-todo.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Arguments: $ARGUMENTS (optional todo description)
|
||||
|
||||
State is resolved in-workflow via `init todos` and targeted reads.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
**Follow the add-todo workflow** from `@~/.claude/get-shit-done/workflows/add-todo.md`.
|
||||
|
||||
The workflow handles all logic including:
|
||||
1. Directory ensuring
|
||||
2. Existing area checking
|
||||
3. Content extraction (arguments or conversation)
|
||||
4. Area inference
|
||||
5. Duplicate checking
|
||||
6. File creation with slug generation
|
||||
7. STATE.md updates
|
||||
8. Git commits
|
||||
</process>
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
name: gsd:analyze-dependencies
|
||||
description: Analyze phase dependencies and suggest Depends on entries for ROADMAP.md
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
- Glob
|
||||
- Grep
|
||||
- AskUserQuestion
|
||||
---
|
||||
<objective>
|
||||
Analyze the phase dependency graph for the current milestone. For each phase pair, determine if there is a dependency relationship based on:
|
||||
- File overlap (phases that modify the same files must be ordered)
|
||||
- Semantic dependencies (a phase that uses an API built by another phase)
|
||||
- Data flow (a phase that consumes output from another phase)
|
||||
|
||||
Then suggest `Depends on` updates to ROADMAP.md.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/analyze-dependencies.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
No arguments required. Requires an active milestone with ROADMAP.md.
|
||||
|
||||
Run this command BEFORE `/gsd-manager` to fill in missing `Depends on` fields and prevent merge conflicts from unordered parallel execution.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
Execute the analyze-dependencies workflow from @~/.claude/get-shit-done/workflows/analyze-dependencies.md end-to-end.
|
||||
Present dependency suggestions clearly and apply confirmed updates to ROADMAP.md.
|
||||
</process>
|
||||
62
commands/gsd/capture.md
Normal file
62
commands/gsd/capture.md
Normal file
@@ -0,0 +1,62 @@
|
||||
---
|
||||
name: gsd:capture
|
||||
description: Capture ideas, tasks, notes, and seeds to their destination
|
||||
argument-hint: "[--note | --backlog | --seed | --list] [text]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Edit
|
||||
- Bash
|
||||
- Glob
|
||||
- Grep
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
<objective>
|
||||
Capture ideas, tasks, notes, and seeds to their appropriate destination in the GSD system.
|
||||
|
||||
Mode routing:
|
||||
- **default** (no flag): Capture as a structured todo for later work → add-todo workflow
|
||||
- **--note**: Zero-friction idea capture (append/list/promote) → note workflow
|
||||
- **--backlog**: Add an idea to the backlog parking lot (999.x numbering) → add-backlog workflow
|
||||
- **--seed**: Capture a forward-looking idea with trigger conditions → plant-seed workflow
|
||||
- **--list**: List pending todos and select one to work on → check-todos workflow
|
||||
</objective>
|
||||
|
||||
<routing>
|
||||
|
||||
| Flag | Destination | Workflow |
|
||||
|------|-------------|----------|
|
||||
| (none) | Structured todo in .planning/todos/ | add-todo |
|
||||
| --note | Timestamped note file, list, or promote | note |
|
||||
| --backlog | ROADMAP.md backlog section (999.x) | add-backlog |
|
||||
| --seed | .planning/seeds/SEED-NNN-slug.md | plant-seed |
|
||||
| --list | Interactive todo browser + action router | check-todos |
|
||||
|
||||
</routing>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/add-todo.md
|
||||
@~/.claude/get-shit-done/workflows/note.md
|
||||
@~/.claude/get-shit-done/workflows/add-backlog.md
|
||||
@~/.claude/get-shit-done/workflows/plant-seed.md
|
||||
@~/.claude/get-shit-done/workflows/check-todos.md
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Arguments: $ARGUMENTS
|
||||
|
||||
Parse the first token of $ARGUMENTS:
|
||||
- If it is `--note`: strip the flag, pass remainder to note workflow
|
||||
- If it is `--backlog`: strip the flag, pass remainder to add-backlog workflow
|
||||
- If it is `--seed`: strip the flag, pass remainder to plant-seed workflow
|
||||
- If it is `--list`: pass remainder (optional area filter) to check-todos workflow
|
||||
- Otherwise: pass all of $ARGUMENTS to add-todo workflow
|
||||
</context>
|
||||
|
||||
<process>
|
||||
1. Parse the leading flag (if any) from $ARGUMENTS.
|
||||
2. Load and execute the appropriate workflow end-to-end based on the routing table above.
|
||||
3. Preserve all workflow gates from the target workflow (directory structure, duplicate detection, commits, etc.).
|
||||
</process>
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
name: gsd:check-todos
|
||||
description: List pending todos and select one to work on
|
||||
argument-hint: [area filter]
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
<objective>
|
||||
List all pending todos, allow selection, load full context for the selected todo, and route to appropriate action.
|
||||
|
||||
Routes to the check-todos workflow which handles:
|
||||
- Todo counting and listing with area filtering
|
||||
- Interactive selection with full context loading
|
||||
- Roadmap correlation checking
|
||||
- Action routing (work now, add to phase, brainstorm, create phase)
|
||||
- STATE.md updates and git commits
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/check-todos.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Arguments: $ARGUMENTS (optional area filter)
|
||||
|
||||
Todo state and roadmap correlation are loaded in-workflow using `init todos` and targeted reads.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
**Follow the check-todos workflow** from `@~/.claude/get-shit-done/workflows/check-todos.md`.
|
||||
|
||||
The workflow handles all logic including:
|
||||
1. Todo existence checking
|
||||
2. Area filtering
|
||||
3. Interactive listing and selection
|
||||
4. Full context loading with file summaries
|
||||
5. Roadmap correlation checking
|
||||
6. Action offering and execution
|
||||
7. STATE.md updates
|
||||
8. Git commits
|
||||
</process>
|
||||
@@ -1,52 +0,0 @@
|
||||
---
|
||||
name: gsd:code-review-fix
|
||||
description: Auto-fix issues found by code review in REVIEW.md; commits each fix atomically.
|
||||
argument-hint: "<phase-number> [--all] [--auto]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
- Glob
|
||||
- Grep
|
||||
- Write
|
||||
- Edit
|
||||
- Task
|
||||
---
|
||||
<objective>
|
||||
Auto-fix issues found by code review. Reads REVIEW.md from the specified phase, spawns gsd-code-fixer agent to apply fixes, and produces REVIEW-FIX.md summary.
|
||||
|
||||
Arguments:
|
||||
- Phase number (required) — which phase's REVIEW.md to fix (e.g., "2" or "02")
|
||||
- `--all` (optional) — include Info findings in fix scope (default: Critical + Warning only)
|
||||
- `--auto` (optional) — enable fix + re-review iteration loop, capped at 3 iterations
|
||||
|
||||
Output: {padded_phase}-REVIEW-FIX.md in phase directory + inline summary of fixes applied
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/code-review-fix.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Phase: $ARGUMENTS (first positional argument is phase number)
|
||||
|
||||
Optional flags parsed from $ARGUMENTS:
|
||||
- `--all` — Include Info findings in fix scope. Default behavior fixes Critical + Warning only.
|
||||
- `--auto` — Enable fix + re-review iteration loop. After applying fixes, re-run code-review at same depth. If new issues found, iterate. Cap at 3 iterations total. Without this flag, single fix pass only.
|
||||
|
||||
Context files (CLAUDE.md, REVIEW.md, phase state) are resolved inside the workflow via `gsd-sdk query init.phase-op` and delegated to agent via config blocks.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
This command is a thin dispatch layer. It parses arguments and delegates to the workflow.
|
||||
|
||||
Execute the code-review-fix workflow from @~/.claude/get-shit-done/workflows/code-review-fix.md end-to-end.
|
||||
|
||||
The workflow (not this command) enforces these gates:
|
||||
- Phase validation (before config gate)
|
||||
- Config gate check (workflow.code_review)
|
||||
- REVIEW.md existence check (error if missing)
|
||||
- REVIEW.md status check (skip if clean/skipped)
|
||||
- Agent spawning (gsd-code-fixer)
|
||||
- Iteration loop (if --auto, capped at 3 iterations)
|
||||
- Result presentation (inline summary + next steps)
|
||||
</process>
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gsd:code-review
|
||||
description: Review source files changed during a phase for bugs, security issues, and code quality problems
|
||||
argument-hint: "<phase-number> [--depth=quick|standard|deep] [--files file1,file2,...]"
|
||||
argument-hint: "<phase-number> [--depth=quick|standard|deep] [--files file1,file2,...] [--fix [--all] [--auto]]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
@@ -22,6 +22,9 @@ Arguments:
|
||||
- standard: Per-file analysis with language-specific checks (~5-15 min, default)
|
||||
- deep: Cross-file analysis including import graphs and call chains (~15-30 min)
|
||||
- `--files file1,file2,...` (optional) — explicit comma-separated file list, skips SUMMARY/git scoping (highest precedence for scoping)
|
||||
- `--fix` (optional) — after review completes (or if REVIEW.md already exists), auto-apply fixes found. Spawns gsd-code-fixer agent. Accepts sub-flags:
|
||||
- `--all` — include Info findings in fix scope (default: Critical + Warning only)
|
||||
- `--auto` — enable fix + re-review iteration loop, capped at 3 iterations
|
||||
|
||||
Output: {padded_phase}-REVIEW.md in phase directory + inline summary of findings
|
||||
</objective>
|
||||
|
||||
57
commands/gsd/config.md
Normal file
57
commands/gsd/config.md
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
name: gsd:config
|
||||
description: Configure GSD settings — workflow toggles, advanced knobs, integrations, and model profile
|
||||
argument-hint: "[--advanced | --integrations | --profile <name>]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
<objective>
|
||||
Configure GSD settings interactively with a single consolidated command.
|
||||
|
||||
Mode routing:
|
||||
- **default** (no flag): Common-case toggles (model, research, plan_check, verifier, branching) → settings workflow
|
||||
- **--advanced**: Power-user knobs (planning tuning, timeouts, branch templates, cross-AI execution) → settings-advanced workflow
|
||||
- **--integrations**: Third-party API keys, code-review CLI routing, agent-skill injection → settings-integrations workflow
|
||||
- **--profile <name>**: Switch model profile (quality|balanced|budget|inherit) → set-profile (inline)
|
||||
</objective>
|
||||
|
||||
<routing>
|
||||
|
||||
| Flag | Action | Workflow |
|
||||
|------|--------|----------|
|
||||
| (none) | Interactive 5-question common-case config prompt | settings |
|
||||
| --advanced | Power-user knobs: planning, execution, discussion, cross-AI, git, runtime | settings-advanced |
|
||||
| --integrations | API keys (Brave/Firecrawl/Exa), review CLI routing, agent skills | settings-integrations |
|
||||
| --profile <name> | Switch model profile without interactive prompt | gsd-sdk config-set-model-profile |
|
||||
|
||||
</routing>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/settings.md
|
||||
@~/.claude/get-shit-done/workflows/settings-advanced.md
|
||||
@~/.claude/get-shit-done/workflows/settings-integrations.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Arguments: $ARGUMENTS
|
||||
|
||||
Parse the first token of $ARGUMENTS:
|
||||
- If it is `--advanced`: strip the flag, execute settings-advanced workflow
|
||||
- If it is `--integrations`: strip the flag, execute settings-integrations workflow
|
||||
- If it starts with `--profile`: extract the profile name (remainder after `--profile`), then:
|
||||
1. **Pre-flight check (#2439):** verify `gsd-sdk` is on PATH via `command -v gsd-sdk`.
|
||||
If absent, emit the install hint `Install GSD via 'npm i -g get-shit-done'` and stop —
|
||||
do NOT invoke `gsd-sdk` directly (avoids the opaque `command not found: gsd-sdk` failure).
|
||||
2. Run: `gsd-sdk query config-set-model-profile <profile-name> --raw` and display the output verbatim.
|
||||
- Otherwise: execute settings workflow (no argument needed)
|
||||
</context>
|
||||
|
||||
<process>
|
||||
1. Parse the leading flag (if any) from $ARGUMENTS.
|
||||
2. Load and execute the appropriate workflow end-to-end, or run the inline SDK command for --profile.
|
||||
3. Preserve all workflow gates from the target workflow.
|
||||
</process>
|
||||
@@ -1,30 +0,0 @@
|
||||
---
|
||||
name: gsd:do
|
||||
description: Route freeform text to the right GSD command automatically
|
||||
argument-hint: "<description of what you want to do>"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
- AskUserQuestion
|
||||
---
|
||||
<objective>
|
||||
Analyze freeform natural language input and dispatch to the most appropriate GSD command.
|
||||
|
||||
Acts as a smart dispatcher — never does the work itself. Matches intent to the best GSD command using routing rules, confirms the match, then hands off.
|
||||
|
||||
Use when you know what you want but don't know which `/gsd-*` command to run.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/do.md
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
$ARGUMENTS
|
||||
</context>
|
||||
|
||||
<process>
|
||||
Execute the do workflow from @~/.claude/get-shit-done/workflows/do.md end-to-end.
|
||||
Route user intent to the best GSD command and invoke it.
|
||||
</process>
|
||||
@@ -1,35 +0,0 @@
|
||||
---
|
||||
name: gsd:edit-phase
|
||||
description: Edit any field of an existing roadmap phase in place, preserving number and position
|
||||
argument-hint: <phase-number> [--force]
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
---
|
||||
|
||||
<objective>
|
||||
Modify any field of an existing phase in ROADMAP.md in place.
|
||||
|
||||
Supports:
|
||||
- Editing individual fields (title, description/goal, requirements, success criteria, depends_on)
|
||||
- Full regeneration of all fields from a clarified intent
|
||||
- Guarded edits: refuses in_progress/completed phases unless --force is passed
|
||||
- Depends-on validation: blocks invalid references with a clear error
|
||||
- Diff + confirmation before writing
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/edit-phase.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Arguments: $ARGUMENTS (format: <phase-number> [--force])
|
||||
|
||||
Roadmap and state are resolved in-workflow via `init phase-op` and targeted reads.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
Execute the edit-phase workflow from @~/.claude/get-shit-done/workflows/edit-phase.md end-to-end.
|
||||
Preserve all validation gates (phase existence, status guard, depends_on validation, diff + confirmation).
|
||||
</process>
|
||||
@@ -1,47 +0,0 @@
|
||||
---
|
||||
name: gsd:from-gsd2
|
||||
description: Import a GSD-2 (.gsd/) project back to GSD v1 (.planning/) format
|
||||
argument-hint: "[--path <dir>] [--force]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
type: prompt
|
||||
---
|
||||
|
||||
<objective>
|
||||
Reverse-migrate a GSD-2 project (`.gsd/` directory) back to GSD v1 (`.planning/`) format.
|
||||
|
||||
Maps the GSD-2 hierarchy (Milestone → Slice → Task) to the GSD v1 hierarchy (Milestone sections in ROADMAP.md → Phase → Plan), preserving completion state, research files, and summaries.
|
||||
|
||||
**CJS-only:** `from-gsd2` is not on the `gsd-sdk query` registry; call `gsd-tools.cjs` as shown below (see `docs/CLI-TOOLS.md`).
|
||||
</objective>
|
||||
|
||||
<process>
|
||||
|
||||
1. **Locate the .gsd/ directory** — check the current working directory (or `--path` argument):
|
||||
```bash
|
||||
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" from-gsd2 --dry-run
|
||||
```
|
||||
If no `.gsd/` is found, report the error and stop.
|
||||
|
||||
2. **Show the dry-run preview** — present the full file list and migration statistics to the user. Ask for confirmation before writing anything.
|
||||
|
||||
3. **Run the migration** after confirmation:
|
||||
```bash
|
||||
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" from-gsd2
|
||||
```
|
||||
Use `--force` if `.planning/` already exists and the user has confirmed overwrite.
|
||||
|
||||
4. **Report the result** — show the `filesWritten` count, `planningDir` path, and the preview summary.
|
||||
|
||||
</process>
|
||||
|
||||
<notes>
|
||||
- The migration is non-destructive: `.gsd/` is never modified or removed.
|
||||
- Pass `--path <dir>` to migrate a project at a different path than the current directory.
|
||||
- Slices are numbered sequentially across all milestones (M001/S01 → phase 01, M001/S02 → phase 02, M002/S01 → phase 03, etc.).
|
||||
- Tasks within each slice become plans (T01 → plan 01, T02 → plan 02, etc.).
|
||||
- Completed slices and tasks carry their done state into ROADMAP.md checkboxes and SUMMARY.md files.
|
||||
- GSD-2 cost/token ledger, database state, and VS Code extension state cannot be migrated.
|
||||
</notes>
|
||||
@@ -1,31 +0,0 @@
|
||||
---
|
||||
name: gsd:insert-phase
|
||||
description: Insert urgent work as decimal phase (e.g., 72.1) between existing phases
|
||||
argument-hint: <after> <description>
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
---
|
||||
|
||||
<objective>
|
||||
Insert a decimal phase for urgent work discovered mid-milestone that must be completed between existing integer phases.
|
||||
|
||||
Uses decimal numbering (72.1, 72.2, etc.) to preserve the logical sequence of planned phases while accommodating urgent insertions.
|
||||
|
||||
Purpose: Handle urgent work discovered during execution without renumbering entire roadmap.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/insert-phase.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Arguments: $ARGUMENTS (format: <after-phase-number> <description>)
|
||||
|
||||
Roadmap and state are resolved in-workflow via `init phase-op` and targeted tool calls.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
Execute the insert-phase workflow from @~/.claude/get-shit-done/workflows/insert-phase.md end-to-end.
|
||||
Preserve all validation gates (argument parsing, phase verification, decimal calculation, roadmap updates).
|
||||
</process>
|
||||
@@ -1,179 +0,0 @@
|
||||
---
|
||||
name: gsd:intel
|
||||
description: "Query, inspect, or refresh codebase intelligence files in .planning/intel/"
|
||||
argument-hint: "[query <term>|status|diff|refresh]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
- Task
|
||||
---
|
||||
|
||||
**STOP -- DO NOT READ THIS FILE. You are already reading it. This prompt was injected into your context by Claude Code's command system. Using the Read tool on this file wastes tokens. Begin executing Step 0 immediately.**
|
||||
|
||||
## Step 0 -- Banner
|
||||
|
||||
**Before ANY tool calls**, display this banner:
|
||||
|
||||
```
|
||||
GSD > INTEL
|
||||
```
|
||||
|
||||
Then proceed to Step 1.
|
||||
|
||||
## Step 1 -- Config Gate
|
||||
|
||||
Check if intel is enabled by reading `.planning/config.json` directly using the Read tool.
|
||||
|
||||
**DO NOT use the gsd-tools config get-value command** -- it hard-exits on missing keys.
|
||||
|
||||
1. Read `.planning/config.json` using the Read tool
|
||||
2. If the file does not exist: display the disabled message below and **STOP**
|
||||
3. Parse the JSON content. Check if `config.intel && config.intel.enabled === true`
|
||||
4. If `intel.enabled` is NOT explicitly `true`: display the disabled message below and **STOP**
|
||||
5. If `intel.enabled` is `true`: proceed to Step 2
|
||||
|
||||
**Disabled message:**
|
||||
|
||||
```
|
||||
GSD > INTEL
|
||||
|
||||
Intel system is disabled. To activate:
|
||||
|
||||
gsd-sdk query config-set intel.enabled true
|
||||
|
||||
Then run /gsd-intel refresh to build the initial index.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 2 -- Parse Argument
|
||||
|
||||
Parse `$ARGUMENTS` to determine the operation mode:
|
||||
|
||||
| Argument | Action |
|
||||
|----------|--------|
|
||||
| `query <term>` | Run inline query (Step 2a) |
|
||||
| `status` | Run inline status check (Step 2b) |
|
||||
| `diff` | Run inline diff check (Step 2c) |
|
||||
| `refresh` | Spawn intel-updater agent (Step 3) |
|
||||
| No argument or unknown | Show usage message |
|
||||
|
||||
**Usage message** (shown when no argument or unrecognized argument):
|
||||
|
||||
```
|
||||
GSD > INTEL
|
||||
|
||||
Usage: /gsd-intel <mode>
|
||||
|
||||
Modes:
|
||||
query <term> Search intel files for a term
|
||||
status Show intel file freshness and staleness
|
||||
diff Show changes since last snapshot
|
||||
refresh Rebuild all intel files from codebase analysis
|
||||
```
|
||||
|
||||
### Step 2a -- Query
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
gsd-sdk query intel.query <term>
|
||||
```
|
||||
|
||||
Parse the JSON output and display results:
|
||||
- If the output contains `"disabled": true`, display the disabled message from Step 1 and **STOP**
|
||||
- If no matches found, display: `No intel matches for '<term>'. Try /gsd-intel refresh to build the index.`
|
||||
- Otherwise, display matching entries grouped by intel file
|
||||
|
||||
**STOP** after displaying results. Do not spawn an agent.
|
||||
|
||||
### Step 2b -- Status
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
gsd-sdk query intel.status
|
||||
```
|
||||
|
||||
Parse the JSON output and display each intel file with:
|
||||
- File name
|
||||
- Last `updated_at` timestamp
|
||||
- STALE or FRESH status (stale if older than 24 hours or missing)
|
||||
|
||||
**STOP** after displaying status. Do not spawn an agent.
|
||||
|
||||
### Step 2c -- Diff
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
gsd-sdk query intel.diff
|
||||
```
|
||||
|
||||
Parse the JSON output and display:
|
||||
- Added entries since last snapshot
|
||||
- Removed entries since last snapshot
|
||||
- Changed entries since last snapshot
|
||||
|
||||
If no snapshot exists, suggest running `refresh` first.
|
||||
|
||||
**STOP** after displaying diff. Do not spawn an agent.
|
||||
|
||||
---
|
||||
|
||||
## Step 3 -- Refresh (Agent Spawn)
|
||||
|
||||
Display before spawning:
|
||||
|
||||
```
|
||||
GSD > Spawning intel-updater agent to analyze codebase...
|
||||
```
|
||||
|
||||
Spawn a Task:
|
||||
|
||||
```
|
||||
Task(
|
||||
description="Refresh codebase intelligence files",
|
||||
prompt="You are the gsd-intel-updater agent. Your job is to analyze this codebase and write/update intelligence files in .planning/intel/.
|
||||
|
||||
Project root: ${CWD}
|
||||
Prefer: gsd-sdk query <subcommand> (installed gsd-sdk on PATH). Legacy: node $HOME/.claude/get-shit-done/bin/gsd-tools.cjs
|
||||
|
||||
Instructions:
|
||||
1. Analyze the codebase structure, dependencies, APIs, and architecture
|
||||
2. Write JSON intel files to .planning/intel/ (stack.json, api-map.json, dependency-graph.json, file-roles.json, arch-decisions.json)
|
||||
3. Each file must have a _meta object with updated_at timestamp
|
||||
4. Use `gsd-sdk query intel.extract-exports <file>` to analyze source files
|
||||
5. Use `gsd-sdk query intel.patch-meta <file>` to update timestamps after writing
|
||||
6. Use `gsd-sdk query intel.validate` to check your output
|
||||
|
||||
When complete, output: ## INTEL UPDATE COMPLETE
|
||||
If something fails, output: ## INTEL UPDATE FAILED with details."
|
||||
)
|
||||
```
|
||||
|
||||
Wait for the agent to complete.
|
||||
|
||||
---
|
||||
|
||||
## Step 4 -- Post-Refresh Summary
|
||||
|
||||
After the agent completes, run:
|
||||
|
||||
```bash
|
||||
gsd-sdk query intel.status
|
||||
```
|
||||
|
||||
Display a summary showing:
|
||||
- Which intel files were written or updated
|
||||
- Last update timestamps
|
||||
- Overall health of the intel index
|
||||
|
||||
---
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
1. DO NOT spawn an agent for query/status/diff operations -- these are inline CLI calls
|
||||
2. DO NOT modify intel files directly -- the agent handles writes during refresh
|
||||
3. DO NOT skip the config gate check
|
||||
4. DO NOT use the gsd-tools config get-value CLI for the config gate -- it exits on missing keys
|
||||
@@ -1,19 +0,0 @@
|
||||
---
|
||||
name: gsd:join-discord
|
||||
description: Join the GSD Discord community
|
||||
allowed-tools: []
|
||||
---
|
||||
|
||||
<objective>
|
||||
Display the Discord invite link for the GSD community server.
|
||||
</objective>
|
||||
|
||||
<output>
|
||||
# Join the GSD Discord
|
||||
|
||||
Connect with other GSD users, get help, share what you're building, and stay updated.
|
||||
|
||||
**Invite link:** https://discord.gg/mYgfVNfA2r
|
||||
|
||||
Click the link or paste it into your browser to join.
|
||||
</output>
|
||||
@@ -1,46 +0,0 @@
|
||||
---
|
||||
name: gsd:list-phase-assumptions
|
||||
description: Surface Claude's assumptions about a phase approach before planning
|
||||
argument-hint: "[phase]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
- Grep
|
||||
- Glob
|
||||
---
|
||||
|
||||
<objective>
|
||||
Analyze a phase and present Claude's assumptions about technical approach, implementation order, scope boundaries, risk areas, and dependencies.
|
||||
|
||||
Purpose: Help users see what Claude thinks BEFORE planning begins - enabling course correction early when assumptions are wrong.
|
||||
Output: Conversational output only (no file creation) - ends with "What do you think?" prompt
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/list-phase-assumptions.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Phase number: $ARGUMENTS (required)
|
||||
|
||||
Project state and roadmap are loaded in-workflow using targeted reads.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
1. Validate phase number argument (error if missing or invalid)
|
||||
2. Check if phase exists in roadmap
|
||||
3. Follow list-phase-assumptions.md workflow:
|
||||
- Analyze roadmap description
|
||||
- Surface assumptions about: technical approach, implementation order, scope, risks, dependencies
|
||||
- Present assumptions clearly
|
||||
- Prompt "What do you think?"
|
||||
4. Gather feedback and offer next steps
|
||||
</process>
|
||||
|
||||
<success_criteria>
|
||||
|
||||
- Phase validated against roadmap
|
||||
- Assumptions surfaced across five areas
|
||||
- User prompted for feedback
|
||||
- User knows next steps (discuss context, plan phase, or correct assumptions)
|
||||
</success_criteria>
|
||||
@@ -1,19 +0,0 @@
|
||||
---
|
||||
name: gsd:list-workspaces
|
||||
description: List active GSD workspaces and their status
|
||||
allowed-tools:
|
||||
- Bash
|
||||
- Read
|
||||
---
|
||||
<objective>
|
||||
Scan `~/gsd-workspaces/` for workspace directories containing `WORKSPACE.md` manifests. Display a summary table with name, path, repo count, strategy, and GSD project status.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/list-workspaces.md
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</execution_context>
|
||||
|
||||
<process>
|
||||
Execute the list-workspaces workflow from @~/.claude/get-shit-done/workflows/list-workspaces.md end-to-end.
|
||||
</process>
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gsd:map-codebase
|
||||
description: Analyze codebase with parallel mapper agents to produce .planning/codebase/ documents
|
||||
argument-hint: "[optional: specific area to map, e.g., 'api' or 'auth']"
|
||||
argument-hint: "[--fast [--focus tech|arch|quality|concerns]] [--query <term>|status|diff|refresh] [area]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
@@ -23,8 +23,19 @@ Output: .planning/codebase/ folder with 7 structured documents about the codebas
|
||||
@~/.claude/get-shit-done/workflows/map-codebase.md
|
||||
</execution_context>
|
||||
|
||||
<flags>
|
||||
- **--fast**: Lightweight scan mode — spawns one mapper agent instead of four. Accepts an optional `--focus` value: `tech`, `arch`, `quality`, `concerns`, or `tech+arch` (default). Faster and lower-context than the full map.
|
||||
- **--query**: Codebase intelligence query mode. Sub-commands: `query <term>`, `status`, `diff`, `refresh`. Requires intel to be enabled in config (`intel.enabled: true`). Runs inline for query/status/diff; spawns an agent for refresh.
|
||||
- **(no flag)**: Full parallel map — spawns 4 mapper agents to produce all 7 codebase documents.
|
||||
</flags>
|
||||
|
||||
<context>
|
||||
Focus area: $ARGUMENTS (optional - if provided, tells agents to focus on specific subsystem)
|
||||
Arguments: $ARGUMENTS
|
||||
|
||||
Parse the first token of $ARGUMENTS:
|
||||
- If it is `--fast`: strip the flag, run the scan workflow (passing remaining args including optional --focus).
|
||||
- If it is `--query`: strip the flag, run the intel workflow (passing remaining args as the subcommand).
|
||||
- Otherwise: pass all of $ARGUMENTS as focus area to the map-codebase workflow.
|
||||
|
||||
**Load project state if exists:**
|
||||
Check for .planning/STATE.md - loads context if project already initialized
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
---
|
||||
name: gsd:new-workspace
|
||||
description: Create an isolated workspace with repo copies and independent .planning/
|
||||
argument-hint: "--name <name> [--repos repo1,repo2] [--path /target] [--strategy worktree|clone] [--branch name] [--auto]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
- Write
|
||||
- AskUserQuestion
|
||||
---
|
||||
<context>
|
||||
**Flags:**
|
||||
- `--name` (required) — Workspace name
|
||||
- `--repos` — Comma-separated repo paths or names. If omitted, interactive selection from child git repos in cwd
|
||||
- `--path` — Target directory. Defaults to `~/gsd-workspaces/<name>`
|
||||
- `--strategy` — `worktree` (default, lightweight) or `clone` (fully independent)
|
||||
- `--branch` — Branch to checkout. Defaults to `workspace/<name>`
|
||||
- `--auto` — Skip interactive questions, use defaults
|
||||
</context>
|
||||
|
||||
<objective>
|
||||
Create a physical workspace directory containing copies of specified git repos (as worktrees or clones) with an independent `.planning/` directory for isolated GSD sessions.
|
||||
|
||||
**Use cases:**
|
||||
- Multi-repo orchestration: work on a subset of repos in parallel with isolated GSD state
|
||||
- Feature branch isolation: create a worktree of the current repo with its own `.planning/`
|
||||
|
||||
**Creates:**
|
||||
- `<path>/WORKSPACE.md` — workspace manifest
|
||||
- `<path>/.planning/` — independent planning directory
|
||||
- `<path>/<repo>/` — git worktree or clone for each specified repo
|
||||
|
||||
**After this command:** `cd` into the workspace and run `/gsd-new-project` to initialize GSD.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/new-workspace.md
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</execution_context>
|
||||
|
||||
<process>
|
||||
Execute the new-workspace workflow from @~/.claude/get-shit-done/workflows/new-workspace.md end-to-end.
|
||||
Preserve all workflow gates (validation, approvals, commits, routing).
|
||||
</process>
|
||||
@@ -1,28 +0,0 @@
|
||||
---
|
||||
name: gsd:next
|
||||
description: Automatically advance to the next logical step in the GSD workflow
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
- Grep
|
||||
- Glob
|
||||
- SlashCommand
|
||||
---
|
||||
<objective>
|
||||
Detect the current project state and automatically invoke the next logical GSD workflow step.
|
||||
No arguments needed — reads STATE.md, ROADMAP.md, and phase directories to determine what comes next.
|
||||
|
||||
Designed for rapid multi-project workflows where remembering which phase/step you're on is overhead.
|
||||
|
||||
Supports `--force` flag to bypass safety gates (checkpoint, error state, verification failures, and prior-phase completeness scan).
|
||||
|
||||
Before routing to the next step, scans all prior phases for incomplete work: plans that ran without producing summaries, verification failures without overrides, and phases where discussion happened but planning never ran. When incomplete work is found, shows a structured report and offers three options: defer the gaps to the backlog and continue, stop and resolve manually, or force advance without recording. When prior phases are clean, routes silently with no interruption.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/next.md
|
||||
</execution_context>
|
||||
|
||||
<process>
|
||||
Execute the next workflow from @~/.claude/get-shit-done/workflows/next.md end-to-end.
|
||||
</process>
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
name: gsd:note
|
||||
description: Zero-friction idea capture. Append, list, or promote notes to todos.
|
||||
argument-hint: "<text> | list | promote <N> [--global]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Glob
|
||||
- Grep
|
||||
---
|
||||
<objective>
|
||||
Zero-friction idea capture — one Write call, one confirmation line.
|
||||
|
||||
Three subcommands:
|
||||
- **append** (default): Save a timestamped note file. No questions, no formatting.
|
||||
- **list**: Show all notes from project and global scopes.
|
||||
- **promote**: Convert a note into a structured todo.
|
||||
|
||||
Runs inline — no Task, no AskUserQuestion, no Bash.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/note.md
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
$ARGUMENTS
|
||||
</context>
|
||||
|
||||
<process>
|
||||
Execute the note workflow from @~/.claude/get-shit-done/workflows/note.md end-to-end.
|
||||
Capture the note, list notes, or promote to todo — depending on arguments.
|
||||
</process>
|
||||
56
commands/gsd/phase.md
Normal file
56
commands/gsd/phase.md
Normal file
@@ -0,0 +1,56 @@
|
||||
---
|
||||
name: gsd:phase
|
||||
description: CRUD for phases in ROADMAP.md — add, insert, remove, or edit phases
|
||||
argument-hint: "[--insert | --remove | --edit] <phase-name-or-number>"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
- Glob
|
||||
---
|
||||
|
||||
<objective>
|
||||
Manage phases in ROADMAP.md with a single consolidated command.
|
||||
|
||||
Mode routing:
|
||||
- **default** (no flag): Add a new integer phase to the end of the current milestone → add-phase workflow
|
||||
- **--insert**: Insert urgent work as a decimal phase (e.g., 72.1) between existing phases → insert-phase workflow
|
||||
- **--remove**: Remove a future phase and renumber subsequent phases → remove-phase workflow
|
||||
- **--edit**: Edit any field of an existing phase in place → edit-phase workflow
|
||||
</objective>
|
||||
|
||||
<routing>
|
||||
|
||||
| Flag | Action | Workflow |
|
||||
|------|--------|----------|
|
||||
| (none) | Add new integer phase at end of milestone | add-phase |
|
||||
| --insert | Insert decimal phase (e.g., 72.1) after specified phase | insert-phase |
|
||||
| --remove | Remove future phase, renumber subsequent | remove-phase |
|
||||
| --edit | Edit fields of existing phase in place | edit-phase |
|
||||
|
||||
</routing>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/add-phase.md
|
||||
@~/.claude/get-shit-done/workflows/insert-phase.md
|
||||
@~/.claude/get-shit-done/workflows/remove-phase.md
|
||||
@~/.claude/get-shit-done/workflows/edit-phase.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Arguments: $ARGUMENTS
|
||||
|
||||
Parse the first token of $ARGUMENTS:
|
||||
- If it is `--insert`: strip the flag, pass remainder (format: <after-phase-number> <description>) to insert-phase workflow
|
||||
- If it is `--remove`: strip the flag, pass remainder (phase number) to remove-phase workflow
|
||||
- If it is `--edit`: strip the flag, pass remainder (phase-number [--force]) to edit-phase workflow
|
||||
- Otherwise: pass all of $ARGUMENTS (phase description) to add-phase workflow
|
||||
|
||||
Roadmap and state are resolved in-workflow via `init phase-op` and targeted reads.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
1. Parse the leading flag (if any) from $ARGUMENTS.
|
||||
2. Load and execute the appropriate workflow end-to-end based on the routing table above.
|
||||
3. Preserve all validation gates from the target workflow.
|
||||
</process>
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
name: gsd:plan-milestone-gaps
|
||||
description: Create phases to close all gaps identified by milestone audit
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
- Glob
|
||||
- Grep
|
||||
- AskUserQuestion
|
||||
---
|
||||
<objective>
|
||||
Create all phases necessary to close gaps identified by `/gsd-audit-milestone`.
|
||||
|
||||
Reads MILESTONE-AUDIT.md, groups gaps into logical phases, creates phase entries in ROADMAP.md, and offers to plan each phase.
|
||||
|
||||
One command creates all fix phases — no manual `/gsd-add-phase` per gap.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/plan-milestone-gaps.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
**Audit results:**
|
||||
Glob: .planning/v*-MILESTONE-AUDIT.md (use most recent)
|
||||
|
||||
Original intent and current planning state are loaded on demand inside the workflow.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
Execute the plan-milestone-gaps workflow from @~/.claude/get-shit-done/workflows/plan-milestone-gaps.md end-to-end.
|
||||
Preserve all workflow gates (audit loading, prioritization, phase grouping, user confirmation, roadmap updates).
|
||||
</process>
|
||||
@@ -1,28 +0,0 @@
|
||||
---
|
||||
name: gsd:plant-seed
|
||||
description: Capture a forward-looking idea that surfaces automatically at the right milestone.
|
||||
argument-hint: "[idea summary]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Edit
|
||||
- Bash
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
<objective>
|
||||
Capture an idea that's too big for now but should surface automatically when the right
|
||||
milestone arrives. Seeds solve context rot: instead of a one-liner in Deferred that nobody
|
||||
reads, a seed preserves the full WHY, WHEN to surface, and breadcrumbs to details.
|
||||
|
||||
Creates: .planning/seeds/SEED-NNN-slug.md
|
||||
Consumed by: /gsd-new-milestone (scans seeds and presents matches)
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/plant-seed.md
|
||||
</execution_context>
|
||||
|
||||
<process>
|
||||
Execute the plant-seed workflow from @~/.claude/get-shit-done/workflows/plant-seed.md end-to-end.
|
||||
</process>
|
||||
@@ -1,25 +1,44 @@
|
||||
---
|
||||
name: gsd:progress
|
||||
description: Check project progress, show context, and route to the next action (execute or plan).
|
||||
argument-hint: "[--forensic]"
|
||||
description: Check progress, advance workflow, or dispatch freeform intent — the unified GSD situational command
|
||||
argument-hint: "[--forensic | --next | --do \"task description\"]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
- Grep
|
||||
- Glob
|
||||
- SlashCommand
|
||||
- AskUserQuestion
|
||||
---
|
||||
<objective>
|
||||
Check project progress, summarize recent work and what's ahead, then intelligently route to the next action - either executing an existing plan or creating the next one.
|
||||
Check project progress, summarize recent work and what's ahead, then intelligently route to the next action.
|
||||
|
||||
Provides situational awareness before continuing work.
|
||||
Three modes:
|
||||
- **default**: Show progress report + intelligently route to the next action (execute or plan). Provides situational awareness before continuing work.
|
||||
- **--next**: Automatically advance to the next logical step without manual route selection. Reads STATE.md, ROADMAP.md, and phase directories. Supports `--force` to bypass safety gates.
|
||||
- **--do "task description"**: Analyze freeform natural language and dispatch to the most appropriate GSD command. Never does the work itself — matches intent, confirms, hands off.
|
||||
- **--forensic**: Append a 6-check integrity audit after the standard progress report.
|
||||
</objective>
|
||||
|
||||
<flags>
|
||||
- **--next**: Detect current project state and automatically invoke the next logical GSD workflow step. Scans all prior phases for incomplete work before routing. `--next --force` bypasses safety gates.
|
||||
- **--do "..."**: Smart dispatcher — match freeform intent to the best GSD command using routing rules, confirm the match, then hand off.
|
||||
- **--forensic**: Run 6-check integrity audit after the standard progress report.
|
||||
- **(no flag)**: Standard progress check + intelligent routing (Routes A through F).
|
||||
</flags>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/progress.md
|
||||
@~/.claude/get-shit-done/workflows/next.md
|
||||
@~/.claude/get-shit-done/workflows/do.md
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</execution_context>
|
||||
|
||||
<process>
|
||||
Execute the progress workflow from @~/.claude/get-shit-done/workflows/progress.md end-to-end.
|
||||
Preserve all routing logic (Routes A through F) and edge case handling.
|
||||
Parse the first token of $ARGUMENTS:
|
||||
- If it is `--next`: strip the flag, execute the next workflow (passing remaining args e.g. --force).
|
||||
- If it is `--do`: strip the flag, pass remainder as freeform intent to the do workflow.
|
||||
- Otherwise: execute the progress workflow end-to-end (pass --forensic through if present).
|
||||
|
||||
Preserve all routing logic from the target workflow.
|
||||
</process>
|
||||
|
||||
@@ -1,331 +0,0 @@
|
||||
---
|
||||
name: gsd:reapply-patches
|
||||
description: Reapply local modifications after a GSD update
|
||||
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
|
||||
---
|
||||
|
||||
<purpose>
|
||||
After a GSD update wipes and reinstalls files, this command merges user's previously saved local modifications back into the new version. Uses three-way comparison (pristine baseline, user-modified backup, newly installed version) to reliably distinguish user customizations from version drift.
|
||||
|
||||
**Critical invariant:** Every file in `gsd-local-patches/` was backed up because the installer's hash comparison detected it was modified. The workflow must NEVER conclude "no custom content" for any backed-up file — that is a logical contradiction. When in doubt, classify as CONFLICT requiring user review, not SKIP.
|
||||
</purpose>
|
||||
|
||||
<process>
|
||||
|
||||
## Step 1: Detect backed-up patches
|
||||
|
||||
Check for local patches directory:
|
||||
|
||||
```bash
|
||||
expand_home() {
|
||||
case "$1" in
|
||||
"~/"*) printf '%s/%s\n' "$HOME" "${1#~/}" ;;
|
||||
*) printf '%s\n' "$1" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
PATCHES_DIR=""
|
||||
|
||||
# Env overrides first — covers custom config directories used with --config-dir
|
||||
if [ -n "$KILO_CONFIG_DIR" ]; then
|
||||
candidate="$(expand_home "$KILO_CONFIG_DIR")/gsd-local-patches"
|
||||
if [ -d "$candidate" ]; then
|
||||
PATCHES_DIR="$candidate"
|
||||
fi
|
||||
elif [ -n "$KILO_CONFIG" ]; then
|
||||
candidate="$(dirname "$(expand_home "$KILO_CONFIG")")/gsd-local-patches"
|
||||
if [ -d "$candidate" ]; then
|
||||
PATCHES_DIR="$candidate"
|
||||
fi
|
||||
elif [ -n "$XDG_CONFIG_HOME" ]; then
|
||||
candidate="$(expand_home "$XDG_CONFIG_HOME")/kilo/gsd-local-patches"
|
||||
if [ -d "$candidate" ]; then
|
||||
PATCHES_DIR="$candidate"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$PATCHES_DIR" ] && [ -n "$OPENCODE_CONFIG_DIR" ]; then
|
||||
candidate="$(expand_home "$OPENCODE_CONFIG_DIR")/gsd-local-patches"
|
||||
if [ -d "$candidate" ]; then
|
||||
PATCHES_DIR="$candidate"
|
||||
fi
|
||||
elif [ -z "$PATCHES_DIR" ] && [ -n "$OPENCODE_CONFIG" ]; then
|
||||
candidate="$(dirname "$(expand_home "$OPENCODE_CONFIG")")/gsd-local-patches"
|
||||
if [ -d "$candidate" ]; then
|
||||
PATCHES_DIR="$candidate"
|
||||
fi
|
||||
elif [ -z "$PATCHES_DIR" ] && [ -n "$XDG_CONFIG_HOME" ]; then
|
||||
candidate="$(expand_home "$XDG_CONFIG_HOME")/opencode/gsd-local-patches"
|
||||
if [ -d "$candidate" ]; then
|
||||
PATCHES_DIR="$candidate"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$PATCHES_DIR" ] && [ -n "$GEMINI_CONFIG_DIR" ]; then
|
||||
candidate="$(expand_home "$GEMINI_CONFIG_DIR")/gsd-local-patches"
|
||||
if [ -d "$candidate" ]; then
|
||||
PATCHES_DIR="$candidate"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$PATCHES_DIR" ] && [ -n "$CODEX_HOME" ]; then
|
||||
candidate="$(expand_home "$CODEX_HOME")/gsd-local-patches"
|
||||
if [ -d "$candidate" ]; then
|
||||
PATCHES_DIR="$candidate"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$PATCHES_DIR" ] && [ -n "$CLAUDE_CONFIG_DIR" ]; then
|
||||
candidate="$(expand_home "$CLAUDE_CONFIG_DIR")/gsd-local-patches"
|
||||
if [ -d "$candidate" ]; then
|
||||
PATCHES_DIR="$candidate"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Global install — detect runtime config directory defaults
|
||||
if [ -z "$PATCHES_DIR" ]; then
|
||||
if [ -d "$HOME/.config/kilo/gsd-local-patches" ]; then
|
||||
PATCHES_DIR="$HOME/.config/kilo/gsd-local-patches"
|
||||
elif [ -d "$HOME/.config/opencode/gsd-local-patches" ]; then
|
||||
PATCHES_DIR="$HOME/.config/opencode/gsd-local-patches"
|
||||
elif [ -d "$HOME/.opencode/gsd-local-patches" ]; then
|
||||
PATCHES_DIR="$HOME/.opencode/gsd-local-patches"
|
||||
elif [ -d "$HOME/.gemini/gsd-local-patches" ]; then
|
||||
PATCHES_DIR="$HOME/.gemini/gsd-local-patches"
|
||||
elif [ -d "$HOME/.codex/gsd-local-patches" ]; then
|
||||
PATCHES_DIR="$HOME/.codex/gsd-local-patches"
|
||||
else
|
||||
PATCHES_DIR="$HOME/.claude/gsd-local-patches"
|
||||
fi
|
||||
fi
|
||||
# Local install fallback — check all runtime directories
|
||||
if [ ! -d "$PATCHES_DIR" ]; then
|
||||
for dir in .config/kilo .kilo .config/opencode .opencode .gemini .codex .claude; do
|
||||
if [ -d "./$dir/gsd-local-patches" ]; then
|
||||
PATCHES_DIR="./$dir/gsd-local-patches"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
```
|
||||
|
||||
Read `backup-meta.json` from the patches directory.
|
||||
|
||||
**If no patches found:**
|
||||
```
|
||||
No local patches found. Nothing to reapply.
|
||||
|
||||
Local patches are automatically saved when you run /gsd-update
|
||||
after modifying any GSD workflow, command, or agent files.
|
||||
```
|
||||
Exit.
|
||||
|
||||
## Step 2: Determine baseline for three-way comparison
|
||||
|
||||
The quality of the merge depends on having a **pristine baseline** — the original unmodified version of each file from the pre-update GSD release. This enables three-way comparison:
|
||||
- **Pristine baseline** (original GSD file before any user edits)
|
||||
- **User's version** (backed up in `gsd-local-patches/`)
|
||||
- **New version** (freshly installed after update)
|
||||
|
||||
Check for baseline sources in priority order:
|
||||
|
||||
### Option A: Pristine hash from backup-meta.json + git history (most reliable)
|
||||
If the config directory is a git repository:
|
||||
```bash
|
||||
CONFIG_DIR=$(dirname "$PATCHES_DIR")
|
||||
if git -C "$CONFIG_DIR" rev-parse --git-dir >/dev/null 2>&1; then
|
||||
HAS_GIT=true
|
||||
fi
|
||||
```
|
||||
When `HAS_GIT=true`, use the `pristine_hashes` recorded in `backup-meta.json` to locate the correct baseline commit. For each file, iterate commits that touched it and find the one whose blob SHA-256 matches the recorded pristine hash:
|
||||
```bash
|
||||
# Get the expected pristine SHA-256 from backup-meta.json
|
||||
PRISTINE_HASH=$(jq -r ".pristine_hashes[\"${file_path}\"] // empty" "$PATCHES_DIR/backup-meta.json")
|
||||
|
||||
BASELINE_COMMIT=""
|
||||
if [ -n "$PRISTINE_HASH" ]; then
|
||||
# Walk commits that touched this file, pick the one matching the pristine hash
|
||||
while IFS= read -r commit_hash; do
|
||||
blob_hash=$(git -C "$CONFIG_DIR" show "${commit_hash}:${file_path}" 2>/dev/null | sha256sum | cut -d' ' -f1)
|
||||
if [ "$blob_hash" = "$PRISTINE_HASH" ]; then
|
||||
BASELINE_COMMIT="$commit_hash"
|
||||
break
|
||||
fi
|
||||
done < <(git -C "$CONFIG_DIR" log --format="%H" -- "${file_path}")
|
||||
fi
|
||||
|
||||
# Fallback: if no pristine hash in backup-meta (older installer), use first-add commit
|
||||
if [ -z "$BASELINE_COMMIT" ]; then
|
||||
BASELINE_COMMIT=$(git -C "$CONFIG_DIR" log --diff-filter=A --format="%H" -- "${file_path}" | tail -1)
|
||||
fi
|
||||
```
|
||||
Extract the pristine version from the matched commit:
|
||||
```bash
|
||||
git -C "$CONFIG_DIR" show "${BASELINE_COMMIT}:${file_path}"
|
||||
```
|
||||
|
||||
**Why this matters:** `git log --diff-filter=A` returns the commit that *first added* the file, which is the wrong baseline on repos that have been through multiple GSD update cycles. The `pristine_hashes` field in `backup-meta.json` records the SHA-256 of the file as it existed in the pre-update GSD release — matching against it finds the correct baseline regardless of how many updates have occurred.
|
||||
|
||||
### Option B: Pristine snapshot directory
|
||||
Check if a `gsd-pristine/` directory exists alongside `gsd-local-patches/`:
|
||||
```bash
|
||||
PRISTINE_DIR="$CONFIG_DIR/gsd-pristine"
|
||||
```
|
||||
If it exists, the installer saved pristine copies at install time. Use these as the baseline.
|
||||
|
||||
### Option C: No baseline available (two-way fallback)
|
||||
If neither git history nor pristine snapshots are available, fall back to two-way comparison — but with **strengthened heuristics** (see Step 3).
|
||||
|
||||
## Step 3: Show patch summary
|
||||
|
||||
```
|
||||
## Local Patches to Reapply
|
||||
|
||||
**Backed up from:** v{from_version}
|
||||
**Current version:** {read VERSION file}
|
||||
**Files modified:** {count}
|
||||
**Merge strategy:** {three-way (git) | three-way (pristine) | two-way (enhanced)}
|
||||
|
||||
| # | File | Status |
|
||||
|---|------|--------|
|
||||
| 1 | {file_path} | Pending |
|
||||
| 2 | {file_path} | Pending |
|
||||
```
|
||||
|
||||
## Step 4: Merge each file
|
||||
|
||||
For each file in `backup-meta.json`:
|
||||
|
||||
1. **Read the backed-up version** (user's modified copy from `gsd-local-patches/`)
|
||||
2. **Read the newly installed version** (current file after update)
|
||||
3. **If available, read the pristine baseline** (from git history or `gsd-pristine/`)
|
||||
|
||||
### Three-way merge (when baseline is available)
|
||||
|
||||
Compare the three versions to isolate changes:
|
||||
- **User changes** = diff(pristine → user's version) — these are the customizations to preserve
|
||||
- **Upstream changes** = diff(pristine → new version) — these are version updates to accept
|
||||
|
||||
**Merge rules:**
|
||||
- Sections changed only by user → apply user's version
|
||||
- Sections changed only by upstream → accept upstream version
|
||||
- Sections changed by both → flag as CONFLICT, show both, ask user
|
||||
- Sections unchanged by either → use new version (identical to all three)
|
||||
|
||||
### Two-way merge (fallback when no baseline)
|
||||
|
||||
When no pristine baseline is available, use these **strengthened heuristics**:
|
||||
|
||||
**CRITICAL RULE: Every file in this backup directory was explicitly detected as modified by the installer's SHA-256 hash comparison. "No custom content" is never a valid conclusion.**
|
||||
|
||||
For each file:
|
||||
a. Read both versions completely
|
||||
b. Identify ALL differences, then classify each as:
|
||||
- **Mechanical drift** — path substitutions (e.g. `/Users/xxx/.claude/` → `$HOME/.claude/`), variable additions (`${GSD_WS}`, `${AGENT_SKILLS_*}`), error handling additions (`|| true`)
|
||||
- **User customization** — added steps/sections, removed sections, reordered content, changed behavior, added frontmatter fields, modified instructions
|
||||
|
||||
c. **If ANY differences remain after filtering out mechanical drift → those are user customizations. Merge them.**
|
||||
d. **If ALL differences appear to be mechanical drift → still flag as CONFLICT.** The installer's hash check already proved this file was modified. Ask the user: "This file appears to only have path/variable differences. Were there intentional customizations?" Do NOT silently skip.
|
||||
|
||||
### Git-enhanced two-way merge
|
||||
|
||||
When the config directory is a git repo but the pristine install commit can't be found, use commit history to identify user changes:
|
||||
```bash
|
||||
# Find non-update commits that touched this file
|
||||
git -C "$CONFIG_DIR" log --oneline --no-merges -- "{file_path}" | grep -v "gsd:update\|GSD update\|gsd-install"
|
||||
```
|
||||
Each matching commit represents an intentional user modification. Use the commit messages and diffs to understand what was changed and why.
|
||||
|
||||
4. **Write merged result** to the installed location
|
||||
|
||||
### Post-merge verification
|
||||
|
||||
After writing each merged file, verify that user modifications survived the merge:
|
||||
|
||||
1. **Line-count check:** Count lines in the backup and the merged result. If the merged result has fewer lines than the backup minus the expected upstream removals, flag for review.
|
||||
2. **Hunk presence check:** For each user-added section identified during diff analysis, search the merged output for at least the first significant line (non-blank, non-comment) of each addition. Missing signature lines indicate a dropped hunk.
|
||||
3. **Report warnings inline** (do not block):
|
||||
```
|
||||
⚠ Potential dropped content in {file_path}:
|
||||
- Missing hunk near line {N}: "{first_line_preview}..." ({line_count} lines)
|
||||
- Backup available: {patches_dir}/{file_path}
|
||||
```
|
||||
4. **Produce a Hunk Verification Table** — one row per hunk per file. This table is **mandatory output** and must be produced before Step 5 can proceed. Format:
|
||||
|
||||
| file | hunk_id | signature_line | line_count | verified |
|
||||
|------|---------|----------------|------------|----------|
|
||||
| {file_path} | {N} | {first_significant_line} | {count} | yes |
|
||||
| {file_path} | {N} | {first_significant_line} | {count} | no |
|
||||
|
||||
- `hunk_id` — sequential integer per file (1, 2, 3…)
|
||||
- `signature_line` — first non-blank, non-comment line of the user-added section
|
||||
- `line_count` — total lines in the hunk
|
||||
- `verified` — `yes` if the signature_line is present in the merged output, `no` otherwise
|
||||
|
||||
5. **Track verification status** — add to per-file report: `Merged (verified)` vs `Merged (⚠ {N} hunks may be missing)`
|
||||
|
||||
6. **Report status per file:**
|
||||
- `Merged` — user modifications applied cleanly (show summary of what was preserved)
|
||||
- `Conflict` — user reviewed and chose resolution
|
||||
- `Incorporated` — user's modification was already adopted upstream (only valid when pristine baseline confirms this)
|
||||
|
||||
**Never report `Skipped — no custom content`.** If a file is in the backup, it has custom content.
|
||||
|
||||
## Step 5: Hunk Verification Gate
|
||||
|
||||
Before proceeding to cleanup, evaluate the Hunk Verification Table produced in Step 4.
|
||||
|
||||
**If the Hunk Verification Table is absent** (Step 4 did not produce it), STOP immediately and report to the user:
|
||||
```
|
||||
ERROR: Hunk Verification Table is missing. Post-merge verification was not completed.
|
||||
Rerun /gsd-reapply-patches to retry with full verification.
|
||||
```
|
||||
|
||||
**If any row in the Hunk Verification Table shows `verified: no`**, STOP and report to the user:
|
||||
```
|
||||
ERROR: {N} hunk(s) failed verification — content may have been dropped during merge.
|
||||
|
||||
Unverified hunks:
|
||||
{file} hunk {hunk_id}: signature line "{signature_line}" not found in merged output
|
||||
|
||||
The backup is preserved at: {patches_dir}/{file}
|
||||
Review the merged file manually, then either:
|
||||
(a) Re-merge the missing content by hand, or
|
||||
(b) Restore from backup: cp {patches_dir}/{file} {installed_path}
|
||||
```
|
||||
|
||||
Do not proceed to cleanup until the user confirms they have resolved all unverified hunks.
|
||||
|
||||
**Only when all rows show `verified: yes`** (or when all files had zero user-added hunks) may execution continue to Step 6.
|
||||
|
||||
## Step 6: Cleanup option
|
||||
|
||||
Ask user:
|
||||
- "Keep patch backups for reference?" → preserve `gsd-local-patches/`
|
||||
- "Clean up patch backups?" → remove `gsd-local-patches/` directory
|
||||
|
||||
## Step 7: Report
|
||||
|
||||
```
|
||||
## Patches Reapplied
|
||||
|
||||
| # | File | Result | User Changes Preserved |
|
||||
|---|------|--------|----------------------|
|
||||
| 1 | {file_path} | Merged | Added step X, modified section Y |
|
||||
| 2 | {file_path} | Incorporated | Already in upstream v{version} |
|
||||
| 3 | {file_path} | Conflict resolved | User chose: keep custom section |
|
||||
|
||||
{count} file(s) updated. Your local modifications are active again.
|
||||
```
|
||||
|
||||
</process>
|
||||
|
||||
<success_criteria>
|
||||
- [ ] All backed-up patches processed — zero files left unhandled
|
||||
- [ ] No file classified as "no custom content" or "SKIP" — every backed-up file is definitionally modified
|
||||
- [ ] Three-way merge used when pristine baseline available (git history or gsd-pristine/)
|
||||
- [ ] User modifications identified and merged into new version
|
||||
- [ ] Conflicts surfaced to user with both versions shown
|
||||
- [ ] Status reported for each file with summary of what was preserved
|
||||
- [ ] Post-merge verification checks each file for dropped hunks and warns if content appears missing
|
||||
</success_criteria>
|
||||
@@ -1,31 +0,0 @@
|
||||
---
|
||||
name: gsd:remove-phase
|
||||
description: Remove a future phase from roadmap and renumber subsequent phases
|
||||
argument-hint: <phase-number>
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
- Glob
|
||||
---
|
||||
<objective>
|
||||
Remove an unstarted future phase from the roadmap and renumber all subsequent phases to maintain a clean, linear sequence.
|
||||
|
||||
Purpose: Clean removal of work you've decided not to do, without polluting context with cancelled/deferred markers.
|
||||
Output: Phase deleted, all subsequent phases renumbered, git commit as historical record.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/remove-phase.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Phase: $ARGUMENTS
|
||||
|
||||
Roadmap and state are resolved in-workflow via `init phase-op` and targeted reads.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
Execute the remove-phase workflow from @~/.claude/get-shit-done/workflows/remove-phase.md end-to-end.
|
||||
Preserve all validation gates (future phase check, work check), renumbering logic, and commit.
|
||||
</process>
|
||||
@@ -1,26 +0,0 @@
|
||||
---
|
||||
name: gsd:remove-workspace
|
||||
description: Remove a GSD workspace and clean up worktrees
|
||||
argument-hint: "<workspace-name>"
|
||||
allowed-tools:
|
||||
- Bash
|
||||
- Read
|
||||
- AskUserQuestion
|
||||
---
|
||||
<context>
|
||||
**Arguments:**
|
||||
- `<workspace-name>` (required) — Name of the workspace to remove
|
||||
</context>
|
||||
|
||||
<objective>
|
||||
Remove a workspace directory after confirmation. For worktree strategy, runs `git worktree remove` for each member repo first. Refuses if any repo has uncommitted changes.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/remove-workspace.md
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</execution_context>
|
||||
|
||||
<process>
|
||||
Execute the remove-workspace workflow from @~/.claude/get-shit-done/workflows/remove-workspace.md end-to-end.
|
||||
</process>
|
||||
@@ -1,195 +0,0 @@
|
||||
---
|
||||
name: gsd:research-phase
|
||||
description: Research how to implement a phase (standalone - usually use /gsd-plan-phase instead)
|
||||
argument-hint: "[phase]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
- Task
|
||||
---
|
||||
|
||||
<objective>
|
||||
Research how to implement a phase. Spawns gsd-phase-researcher agent with phase context.
|
||||
|
||||
**Note:** This is a standalone research command. For most workflows, use `/gsd-plan-phase` which integrates research automatically.
|
||||
|
||||
**Use this command when:**
|
||||
- You want to research without planning yet
|
||||
- You want to re-research after planning is complete
|
||||
- You need to investigate before deciding if a phase is feasible
|
||||
|
||||
**Orchestrator role:** Parse phase, validate against roadmap, check existing research, gather context, spawn researcher agent, present results.
|
||||
|
||||
**Why subagent:** Research burns context fast (WebSearch, Context7 queries, source verification). Fresh 200k context for investigation. Main context stays lean for user interaction.
|
||||
</objective>
|
||||
|
||||
<available_agent_types>
|
||||
Valid GSD subagent types (use exact names — do not fall back to 'general-purpose'):
|
||||
- gsd-phase-researcher — Researches technical approaches for a phase
|
||||
</available_agent_types>
|
||||
|
||||
<context>
|
||||
Phase number: $ARGUMENTS (required)
|
||||
|
||||
Normalize phase input in step 1 before any directory lookups.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
|
||||
## 0. Initialize Context
|
||||
|
||||
```bash
|
||||
INIT=$(gsd-sdk query init.phase-op "$ARGUMENTS")
|
||||
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
||||
```
|
||||
|
||||
Extract from init JSON: `phase_dir`, `phase_number`, `phase_name`, `phase_found`, `commit_docs`, `has_research`, `state_path`, `requirements_path`, `context_path`, `research_path`.
|
||||
|
||||
Resolve researcher model:
|
||||
```bash
|
||||
RESEARCHER_MODEL=$(gsd-sdk query resolve-model gsd-phase-researcher --raw)
|
||||
```
|
||||
|
||||
## 1. Validate Phase
|
||||
|
||||
```bash
|
||||
PHASE_INFO=$(gsd-sdk query roadmap.get-phase "${phase_number}")
|
||||
```
|
||||
|
||||
**If `found` is false:** Error and exit. **If `found` is true:** Extract `phase_number`, `phase_name`, `goal` from JSON.
|
||||
|
||||
## 2. Check Existing Research
|
||||
|
||||
```bash
|
||||
ls .planning/phases/${PHASE}-*/RESEARCH.md 2>/dev/null
|
||||
```
|
||||
|
||||
**If exists:** Offer: 1) Update research, 2) View existing, 3) Skip. Wait for response.
|
||||
|
||||
**If doesn't exist:** Continue.
|
||||
|
||||
## 3. Gather Phase Context
|
||||
|
||||
Use paths from INIT (do not inline file contents in orchestrator context):
|
||||
- `requirements_path`
|
||||
- `context_path`
|
||||
- `state_path`
|
||||
|
||||
Present summary with phase description and what files the researcher will load.
|
||||
|
||||
## 4. Spawn gsd-phase-researcher Agent
|
||||
|
||||
Research modes: ecosystem (default), feasibility, implementation, comparison.
|
||||
|
||||
```markdown
|
||||
<research_type>
|
||||
Phase Research — investigating HOW to implement a specific phase well.
|
||||
</research_type>
|
||||
|
||||
<key_insight>
|
||||
The question is NOT "which library should I use?"
|
||||
|
||||
The question is: "What do I not know that I don't know?"
|
||||
|
||||
For this phase, discover:
|
||||
- What's the established architecture pattern?
|
||||
- What libraries form the standard stack?
|
||||
- What problems do people commonly hit?
|
||||
- What's SOTA vs what Claude's training thinks is SOTA?
|
||||
- What should NOT be hand-rolled?
|
||||
</key_insight>
|
||||
|
||||
<objective>
|
||||
Research implementation approach for Phase {phase_number}: {phase_name}
|
||||
Mode: ecosystem
|
||||
</objective>
|
||||
|
||||
<files_to_read>
|
||||
- {requirements_path} (Requirements)
|
||||
- {context_path} (Phase context from discuss-phase, if exists)
|
||||
- {state_path} (Prior project decisions and blockers)
|
||||
</files_to_read>
|
||||
|
||||
<additional_context>
|
||||
**Phase description:** {phase_description}
|
||||
</additional_context>
|
||||
|
||||
<downstream_consumer>
|
||||
Your RESEARCH.md will be loaded by `/gsd-plan-phase` which uses specific sections:
|
||||
- `## Standard Stack` → Plans use these libraries
|
||||
- `## Architecture Patterns` → Task structure follows these
|
||||
- `## Don't Hand-Roll` → Tasks NEVER build custom solutions for listed problems
|
||||
- `## Common Pitfalls` → Verification steps check for these
|
||||
- `## Code Examples` → Task actions reference these patterns
|
||||
|
||||
Be prescriptive, not exploratory. "Use X" not "Consider X or Y."
|
||||
</downstream_consumer>
|
||||
|
||||
<quality_gate>
|
||||
Before declaring complete, verify:
|
||||
- [ ] All domains investigated (not just some)
|
||||
- [ ] Negative claims verified with official docs
|
||||
- [ ] Multiple sources for critical claims
|
||||
- [ ] Confidence levels assigned honestly
|
||||
- [ ] Section names match what plan-phase expects
|
||||
</quality_gate>
|
||||
|
||||
<output>
|
||||
Write to: .planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
|
||||
</output>
|
||||
```
|
||||
|
||||
```
|
||||
Task(
|
||||
prompt=filled_prompt,
|
||||
subagent_type="gsd-phase-researcher",
|
||||
model="{researcher_model}",
|
||||
description="Research Phase {phase}"
|
||||
)
|
||||
```
|
||||
|
||||
## 5. Handle Agent Return
|
||||
|
||||
**`## RESEARCH COMPLETE`:** Display summary, offer: Plan phase, Dig deeper, Review full, Done.
|
||||
|
||||
**`## CHECKPOINT REACHED`:** Present to user, get response, spawn continuation.
|
||||
|
||||
**`## RESEARCH INCONCLUSIVE`:** Show what was attempted, offer: Add context, Try different mode, Manual.
|
||||
|
||||
## 6. Spawn Continuation Agent
|
||||
|
||||
```markdown
|
||||
<objective>
|
||||
Continue research for Phase {phase_number}: {phase_name}
|
||||
</objective>
|
||||
|
||||
<prior_state>
|
||||
<files_to_read>
|
||||
- .planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md (Existing research)
|
||||
</files_to_read>
|
||||
</prior_state>
|
||||
|
||||
<checkpoint_response>
|
||||
**Type:** {checkpoint_type}
|
||||
**Response:** {user_response}
|
||||
</checkpoint_response>
|
||||
```
|
||||
|
||||
```
|
||||
Task(
|
||||
prompt=continuation_prompt,
|
||||
subagent_type="gsd-phase-researcher",
|
||||
model="{researcher_model}",
|
||||
description="Continue research Phase {phase}"
|
||||
)
|
||||
```
|
||||
|
||||
</process>
|
||||
|
||||
<success_criteria>
|
||||
- [ ] Phase validated against roadmap
|
||||
- [ ] Existing research checked
|
||||
- [ ] gsd-phase-researcher spawned with context
|
||||
- [ ] Checkpoints handled correctly
|
||||
- [ ] User knows next steps
|
||||
</success_criteria>
|
||||
@@ -1,26 +0,0 @@
|
||||
---
|
||||
name: gsd:scan
|
||||
description: Rapid codebase assessment — lightweight alternative to /gsd-map-codebase
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
- Grep
|
||||
- Glob
|
||||
- Agent
|
||||
- AskUserQuestion
|
||||
---
|
||||
<objective>
|
||||
Run a focused codebase scan for a single area, producing targeted documents in `.planning/codebase/`.
|
||||
Accepts an optional `--focus` flag: `tech`, `arch`, `quality`, `concerns`, or `tech+arch` (default).
|
||||
|
||||
Lightweight alternative to `/gsd-map-codebase` — spawns one mapper agent instead of four parallel ones.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/scan.md
|
||||
</execution_context>
|
||||
|
||||
<process>
|
||||
Execute the scan workflow from @~/.claude/get-shit-done/workflows/scan.md end-to-end.
|
||||
</process>
|
||||
@@ -1,19 +0,0 @@
|
||||
---
|
||||
name: gsd:session-report
|
||||
description: Generate a session report with token usage estimates, work summary, and outcomes
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
- Write
|
||||
---
|
||||
<objective>
|
||||
Generate a structured SESSION_REPORT.md document capturing session outcomes, work performed, and estimated resource usage. Provides a shareable artifact for post-session review.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/session-report.md
|
||||
</execution_context>
|
||||
|
||||
<process>
|
||||
Execute the session-report workflow from @~/.claude/get-shit-done/workflows/session-report.md end-to-end.
|
||||
</process>
|
||||
@@ -1,12 +0,0 @@
|
||||
---
|
||||
name: gsd:set-profile
|
||||
description: Switch model profile for GSD agents (quality/balanced/budget/inherit)
|
||||
argument-hint: <profile (quality|balanced|budget|inherit)>
|
||||
model: haiku
|
||||
allowed-tools:
|
||||
- Bash
|
||||
---
|
||||
|
||||
Show the following output to the user verbatim, with no extra commentary:
|
||||
|
||||
!`if ! command -v gsd-sdk >/dev/null 2>&1; then printf '⚠ gsd-sdk not found in PATH — /gsd-set-profile requires it.\n\nInstall the GSD SDK:\n npm install -g @gsd-build/sdk\n\nOr update GSD to get the latest packages:\n /gsd-update\n'; exit 1; fi; gsd-sdk query config-set-model-profile $ARGUMENTS --raw`
|
||||
@@ -1,39 +0,0 @@
|
||||
---
|
||||
name: gsd:settings-advanced
|
||||
description: Power-user configuration for plan bounce, timeouts, branch templates, and cross-AI execution.
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
<objective>
|
||||
Interactive configuration of GSD power-user knobs that don't belong in the common-case `/gsd-settings` prompt.
|
||||
|
||||
Routes to the settings-advanced workflow which handles:
|
||||
- Config existence ensuring (workstream-aware path resolution)
|
||||
- Current settings reading and parsing
|
||||
- Sectioned prompts: Planning Tuning, Execution Tuning, Discussion Tuning, Cross-AI Execution, Git Customization, Runtime / Output
|
||||
- Config merging that preserves every unrelated key
|
||||
- Confirmation table display
|
||||
|
||||
Use `/gsd-settings` for the common-case toggles (model profile, research/plan_check/verifier, branching strategy, context warnings). Use `/gsd-settings-advanced` once those are set and you want to tune the internals.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/settings-advanced.md
|
||||
</execution_context>
|
||||
|
||||
<process>
|
||||
**Follow the settings-advanced workflow** from `@~/.claude/get-shit-done/workflows/settings-advanced.md`.
|
||||
|
||||
The workflow handles all logic including:
|
||||
1. Config file creation with defaults if missing (via `gsd-sdk query config-ensure-section`)
|
||||
2. Current config reading
|
||||
3. Six sectioned AskUserQuestion batches with current values pre-selected
|
||||
4. Numeric-input validation (non-numeric rejected, empty input keeps current)
|
||||
5. Answer parsing and config merging (preserves unrelated keys)
|
||||
6. File writing (atomic)
|
||||
7. Confirmation table display
|
||||
</process>
|
||||
@@ -1,44 +0,0 @@
|
||||
---
|
||||
name: gsd:settings-integrations
|
||||
description: Configure third-party API keys, code-review CLI routing, and agent-skill injection
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
<objective>
|
||||
Interactive configuration of GSD's third-party integration surface:
|
||||
- Search API keys: `brave_search`, `firecrawl`, `exa_search`, and
|
||||
the `search_gitignored` toggle
|
||||
- Code-review CLI routing: `review.models.{claude,codex,gemini,opencode}`
|
||||
- Agent-skill injection: `agent_skills.<agent-type>`
|
||||
|
||||
API keys are stored plaintext in `.planning/config.json` but are masked
|
||||
(`****<last-4>`) in every piece of interactive output. The workflow never
|
||||
echoes plaintext to stdout, stderr, or any log.
|
||||
|
||||
This command is deliberately distinct from `/gsd-settings` (workflow toggles)
|
||||
and any `/gsd-settings-advanced` tuning surface. It handles *connectivity*,
|
||||
not pipeline shape.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/settings-integrations.md
|
||||
</execution_context>
|
||||
|
||||
<process>
|
||||
**Follow the settings-integrations workflow** from
|
||||
`@~/.claude/get-shit-done/workflows/settings-integrations.md`.
|
||||
|
||||
The workflow handles:
|
||||
1. Resolving `$GSD_CONFIG_PATH` (flat vs workstream)
|
||||
2. Reading current integration values (masked for display)
|
||||
3. Section 1 — Search Integrations: Brave / Firecrawl / Exa / search_gitignored
|
||||
4. Section 2 — Review CLI Routing: review.models.{claude,codex,gemini,opencode}
|
||||
5. Section 3 — Agent Skills Injection: agent_skills.<agent-type>
|
||||
6. Writing values via `gsd-sdk query config-set` (which merges, preserving
|
||||
unrelated keys)
|
||||
7. Masked confirmation display
|
||||
</process>
|
||||
@@ -1,31 +0,0 @@
|
||||
---
|
||||
name: gsd:sketch-wrap-up
|
||||
description: Package sketch design findings into a persistent project skill for future build conversations
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Edit
|
||||
- Bash
|
||||
- Grep
|
||||
- Glob
|
||||
- AskUserQuestion
|
||||
---
|
||||
<objective>
|
||||
Curate sketch design findings and package them into a persistent project skill that Claude
|
||||
auto-loads when building the real UI. Also writes a summary to `.planning/sketches/` for
|
||||
project history. Output skill goes to `./.claude/skills/sketch-findings-[project]/` (project-local).
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/sketch-wrap-up.md
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</execution_context>
|
||||
|
||||
<runtime_note>
|
||||
**Copilot (VS Code):** Use `vscode_askquestions` wherever this workflow calls `AskUserQuestion`.
|
||||
</runtime_note>
|
||||
|
||||
<process>
|
||||
Execute the sketch-wrap-up workflow from @~/.claude/get-shit-done/workflows/sketch-wrap-up.md end-to-end.
|
||||
Preserve all curation gates (per-sketch review, grouping approval, CLAUDE.md routing line).
|
||||
</process>
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gsd:sketch
|
||||
description: Sketch UI/design ideas with throwaway HTML mockups, or propose what to sketch next (frontier mode)
|
||||
argument-hint: "[design idea to explore] [--quick] [--text] or [frontier]"
|
||||
argument-hint: "[design idea to explore] [--quick] [--text] [--wrap-up] or [frontier]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
@@ -46,6 +46,7 @@ Design idea: $ARGUMENTS
|
||||
|
||||
**Available flags:**
|
||||
- `--quick` — Skip mood/direction intake, jump straight to decomposition and building. Use when the design direction is already clear.
|
||||
- `--wrap-up` — Package sketch design findings into a persistent project skill for future build conversations. Runs the sketch-wrap-up workflow.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
---
|
||||
name: gsd:spike-wrap-up
|
||||
description: Package spike findings into a persistent project skill for future build conversations
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Edit
|
||||
- Bash
|
||||
- Grep
|
||||
- Glob
|
||||
- AskUserQuestion
|
||||
---
|
||||
<objective>
|
||||
Curate spike experiment findings and package them into a persistent project skill that Claude
|
||||
auto-loads in future build conversations. Also writes a summary to `.planning/spikes/` for
|
||||
project history. Output skill goes to `./.claude/skills/spike-findings-[project]/` (project-local).
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/spike-wrap-up.md
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</execution_context>
|
||||
|
||||
<runtime_note>
|
||||
**Copilot (VS Code):** Use `vscode_askquestions` wherever this workflow calls `AskUserQuestion`.
|
||||
</runtime_note>
|
||||
|
||||
<process>
|
||||
Execute the spike-wrap-up workflow from @~/.claude/get-shit-done/workflows/spike-wrap-up.md end-to-end.
|
||||
Preserve all workflow gates (auto-include, feature-area grouping, skill synthesis, CLAUDE.md routing line, intelligent next-step routing).
|
||||
</process>
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gsd:spike
|
||||
description: Spike an idea through experiential exploration, or propose what to spike next (frontier mode)
|
||||
argument-hint: "[idea to validate] [--quick] [--text] or [frontier]"
|
||||
argument-hint: "[idea to validate] [--quick] [--text] [--wrap-up] or [frontier]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
@@ -43,6 +43,7 @@ Idea: $ARGUMENTS
|
||||
**Available flags:**
|
||||
- `--quick` — Skip decomposition/alignment, jump straight to building. Use when you already know what to spike.
|
||||
- `--text` — Use plain-text numbered lists instead of AskUserQuestion (for non-Claude runtimes).
|
||||
- `--wrap-up` — Package spike findings into a persistent project skill for future build conversations. Runs the spike-wrap-up workflow.
|
||||
</context>
|
||||
|
||||
<process>
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
---
|
||||
name: gsd:sync-skills
|
||||
description: Sync managed GSD skills across runtime roots so multi-runtime users stay aligned after an update
|
||||
allowed-tools:
|
||||
- Bash
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
<objective>
|
||||
Sync managed `gsd-*` skill directories from one canonical runtime's skills root to one or more destination runtime skills roots.
|
||||
|
||||
Routes to the sync-skills workflow which handles:
|
||||
- Argument parsing (--from, --to, --dry-run, --apply)
|
||||
- Runtime skills root resolution via install.js --skills-root
|
||||
- Diff computation (CREATE / UPDATE / REMOVE per destination)
|
||||
- Dry-run reporting (default — no writes)
|
||||
- Apply execution (copy and remove with idempotency)
|
||||
- Non-GSD skill preservation (only gsd-* dirs are touched)
|
||||
</objective>
|
||||
@@ -1,8 +1,14 @@
|
||||
---
|
||||
name: gsd:update
|
||||
description: Update GSD to latest version with changelog display
|
||||
argument-hint: "[--sync | --reapply]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Edit
|
||||
- Bash
|
||||
- Glob
|
||||
- Grep
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
@@ -22,10 +28,19 @@ Routes to the update workflow which handles:
|
||||
@~/.claude/get-shit-done/workflows/update.md
|
||||
</execution_context>
|
||||
|
||||
<process>
|
||||
**Follow the update workflow** from `@~/.claude/get-shit-done/workflows/update.md`.
|
||||
<flags>
|
||||
- **--sync**: Sync managed GSD skills across runtime roots so multi-runtime users stay aligned after an update. Runs the sync-skills workflow (--from, --to, --dry-run, --apply flags supported).
|
||||
- **--reapply**: Reapply local modifications after a GSD update. Uses three-way comparison (pristine baseline, user-modified backup, newly installed version) to merge user customizations back. Runs the reapply-patches workflow.
|
||||
- **(no flag)**: Standard update — check for new version, show changelog, install.
|
||||
</flags>
|
||||
|
||||
The workflow handles all logic including:
|
||||
<process>
|
||||
Parse the first token of $ARGUMENTS:
|
||||
- If it is `--sync`: strip the flag, execute the sync-skills workflow (passing remaining args for --from/--to/--dry-run/--apply).
|
||||
- If it is `--reapply`: strip the flag, execute the reapply-patches workflow.
|
||||
- Otherwise: **Follow the update workflow** from `@~/.claude/get-shit-done/workflows/update.md`.
|
||||
|
||||
The update workflow handles all logic including:
|
||||
1. Installed version detection (local/global)
|
||||
2. Latest version checking via npm
|
||||
3. Version comparison
|
||||
@@ -35,3 +50,8 @@ The workflow handles all logic including:
|
||||
7. Update execution
|
||||
8. Cache clearing
|
||||
</process>
|
||||
|
||||
<execution_context_extended>
|
||||
@~/.claude/get-shit-done/workflows/sync-skills.md
|
||||
@~/.claude/get-shit-done/workflows/reapply-patches.md
|
||||
</execution_context_extended>
|
||||
|
||||
52
commands/gsd/workspace.md
Normal file
52
commands/gsd/workspace.md
Normal file
@@ -0,0 +1,52 @@
|
||||
---
|
||||
name: gsd:workspace
|
||||
description: Manage GSD workspaces — create, list, or remove isolated workspace environments
|
||||
argument-hint: "[--new | --list | --remove] [name]"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Bash
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
<objective>
|
||||
Manage GSD workspaces with a single consolidated command.
|
||||
|
||||
Mode routing:
|
||||
- **--new**: Create an isolated workspace with repo copies and independent .planning/ → new-workspace workflow
|
||||
- **--list**: List active GSD workspaces and their status → list-workspaces workflow
|
||||
- **--remove**: Remove a GSD workspace and clean up worktrees → remove-workspace workflow
|
||||
</objective>
|
||||
|
||||
<routing>
|
||||
|
||||
| Flag | Action | Workflow |
|
||||
|------|--------|----------|
|
||||
| --new | Create workspace with worktree/clone strategy | new-workspace |
|
||||
| --list | Scan ~/gsd-workspaces/, show summary table | list-workspaces |
|
||||
| --remove | Confirm and remove workspace directory | remove-workspace |
|
||||
|
||||
</routing>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/new-workspace.md
|
||||
@~/.claude/get-shit-done/workflows/list-workspaces.md
|
||||
@~/.claude/get-shit-done/workflows/remove-workspace.md
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Arguments: $ARGUMENTS
|
||||
|
||||
Parse the first token of $ARGUMENTS:
|
||||
- If it is `--new`: strip the flag, pass remainder (--name, --repos, --path, --strategy, --branch, --auto flags) to new-workspace workflow
|
||||
- If it is `--list`: execute list-workspaces workflow (no argument needed)
|
||||
- If it is `--remove`: strip the flag, pass remainder (workspace-name) to remove-workspace workflow
|
||||
- Otherwise (no flag): show usage — one of --new, --list, or --remove is required
|
||||
</context>
|
||||
|
||||
<process>
|
||||
1. Parse the leading flag from $ARGUMENTS.
|
||||
2. Load and execute the appropriate workflow end-to-end based on the routing table above.
|
||||
3. Preserve all workflow gates from the target workflow (validation, approvals, commits, routing).
|
||||
</process>
|
||||
Reference in New Issue
Block a user