gsd-opencode 1.10.2 → 1.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/agents/gsd-codebase-mapper.md +29 -3
  2. package/agents/gsd-debugger.md +19 -21
  3. package/agents/gsd-executor.md +213 -528
  4. package/agents/gsd-integration-checker.md +20 -0
  5. package/agents/gsd-phase-researcher.md +189 -267
  6. package/agents/gsd-plan-checker.md +278 -279
  7. package/agents/gsd-planner.md +299 -490
  8. package/agents/gsd-project-researcher.md +103 -345
  9. package/agents/gsd-research-synthesizer.md +5 -22
  10. package/agents/gsd-roadmapper.md +43 -6
  11. package/agents/gsd-verifier.md +158 -377
  12. package/{lib → bin/dm/lib}/constants.js +10 -3
  13. package/{src → bin/dm/src}/commands/install.js +5 -4
  14. package/{src → bin/dm/src}/commands/uninstall.js +3 -1
  15. package/{src → bin/dm/src}/services/backup-manager.js +1 -1
  16. package/{src → bin/dm/src}/services/config.js +1 -1
  17. package/{src → bin/dm/src}/services/file-ops.js +20 -4
  18. package/{src → bin/dm/src}/services/health-checker.js +3 -1
  19. package/{src → bin/dm/src}/services/repair-service.js +3 -1
  20. package/{src → bin/dm/src}/services/settings.js +1 -1
  21. package/{src → bin/dm/src}/services/update-service.js +2 -2
  22. package/bin/gsd-install.js +0 -0
  23. package/bin/gsd.js +9 -9
  24. package/commands/gsd/gsd-add-phase.md +43 -0
  25. package/commands/gsd/gsd-add-todo.md +47 -0
  26. package/commands/gsd/gsd-audit-milestone.md +36 -0
  27. package/commands/gsd/gsd-check-todos.md +45 -0
  28. package/commands/gsd/gsd-cleanup.md +18 -0
  29. package/commands/gsd/{complete-milestone.md → gsd-complete-milestone.md} +1 -1
  30. package/commands/gsd/{debug.md → gsd-debug.md} +16 -21
  31. package/commands/gsd/{discuss-phase.md → gsd-discuss-phase.md} +6 -9
  32. package/commands/gsd/gsd-execute-phase.md +41 -0
  33. package/commands/gsd/gsd-health.md +22 -0
  34. package/commands/gsd/gsd-help.md +22 -0
  35. package/commands/gsd/gsd-insert-phase.md +32 -0
  36. package/commands/gsd/gsd-join-discord.md +18 -0
  37. package/commands/gsd/{list-phase-assumptions.md → gsd-list-phase-assumptions.md} +3 -7
  38. package/commands/gsd/{map-codebase.md → gsd-map-codebase.md} +3 -3
  39. package/commands/gsd/gsd-new-milestone.md +44 -0
  40. package/commands/gsd/gsd-new-project.md +42 -0
  41. package/commands/gsd/gsd-pause-work.md +38 -0
  42. package/commands/gsd/gsd-plan-milestone-gaps.md +34 -0
  43. package/commands/gsd/gsd-plan-phase.md +44 -0
  44. package/commands/gsd/gsd-progress.md +24 -0
  45. package/commands/gsd/gsd-quick.md +41 -0
  46. package/commands/gsd/gsd-reapply-patches.md +119 -0
  47. package/commands/gsd/gsd-remove-phase.md +31 -0
  48. package/commands/gsd/{research-phase.md → gsd-research-phase.md} +38 -49
  49. package/commands/gsd/{resume-work.md → gsd-resume-work.md} +2 -2
  50. package/commands/gsd/gsd-set-profile.md +34 -0
  51. package/commands/gsd/gsd-settings.md +36 -0
  52. package/commands/gsd/gsd-update.md +37 -0
  53. package/commands/gsd/gsd-verify-work.md +38 -0
  54. package/get-shit-done/bin/gsd-tools.cjs +553 -0
  55. package/get-shit-done/bin/gsd-tools.test.cjs +2346 -0
  56. package/get-shit-done/bin/lib/commands.cjs +556 -0
  57. package/get-shit-done/bin/lib/config.cjs +162 -0
  58. package/get-shit-done/bin/lib/core.cjs +377 -0
  59. package/get-shit-done/bin/lib/frontmatter.cjs +299 -0
  60. package/get-shit-done/bin/lib/init.cjs +694 -0
  61. package/get-shit-done/bin/lib/milestone.cjs +215 -0
  62. package/get-shit-done/bin/lib/phase.cjs +877 -0
  63. package/get-shit-done/bin/lib/roadmap.cjs +298 -0
  64. package/get-shit-done/bin/lib/state.cjs +490 -0
  65. package/get-shit-done/bin/lib/template.cjs +222 -0
  66. package/get-shit-done/bin/lib/verify.cjs +772 -0
  67. package/get-shit-done/references/checkpoints.md +62 -364
  68. package/get-shit-done/references/decimal-phase-calculation.md +65 -0
  69. package/get-shit-done/references/git-integration.md +10 -16
  70. package/get-shit-done/references/git-planning-commit.md +38 -0
  71. package/get-shit-done/references/model-profile-resolution.md +34 -0
  72. package/get-shit-done/references/model-profiles.md +54 -66
  73. package/get-shit-done/references/phase-argument-parsing.md +61 -0
  74. package/get-shit-done/references/planning-config.md +112 -10
  75. package/get-shit-done/references/questioning.md +4 -0
  76. package/get-shit-done/references/ui-brand.md +1 -1
  77. package/get-shit-done/templates/UAT.md +1 -1
  78. package/get-shit-done/templates/VALIDATION.md +104 -0
  79. package/get-shit-done/templates/codebase/structure.md +6 -6
  80. package/get-shit-done/templates/config.json +37 -0
  81. package/get-shit-done/templates/context.md +2 -10
  82. package/get-shit-done/templates/continue-here.md +6 -6
  83. package/get-shit-done/templates/debug-subagent-prompt.md +2 -2
  84. package/get-shit-done/templates/discovery.md +6 -6
  85. package/get-shit-done/templates/milestone-archive.md +3 -3
  86. package/get-shit-done/templates/phase-prompt.md +9 -7
  87. package/get-shit-done/templates/planner-subagent-prompt.md +6 -6
  88. package/get-shit-done/templates/research-project/ARCHITECTURE.md +1 -1
  89. package/get-shit-done/templates/research.md +29 -6
  90. package/get-shit-done/templates/roadmap.md +1 -1
  91. package/get-shit-done/templates/state.md +0 -30
  92. package/get-shit-done/templates/summary-complex.md +59 -0
  93. package/get-shit-done/templates/summary-minimal.md +41 -0
  94. package/get-shit-done/templates/summary-standard.md +48 -0
  95. package/get-shit-done/templates/summary.md +16 -37
  96. package/get-shit-done/templates/user-setup.md +1 -13
  97. package/get-shit-done/templates/verification-report.md +5 -5
  98. package/get-shit-done/workflows/add-phase.md +111 -0
  99. package/{commands/gsd → get-shit-done/workflows}/add-todo.md +24 -60
  100. package/{commands/gsd → get-shit-done/workflows}/audit-milestone.md +83 -63
  101. package/{commands/gsd → get-shit-done/workflows}/check-todos.md +21 -73
  102. package/get-shit-done/workflows/cleanup.md +152 -0
  103. package/get-shit-done/workflows/complete-milestone.md +251 -312
  104. package/get-shit-done/workflows/diagnose-issues.md +6 -31
  105. package/get-shit-done/workflows/discovery-phase.md +11 -11
  106. package/get-shit-done/workflows/discuss-phase.md +156 -49
  107. package/get-shit-done/workflows/execute-phase.md +238 -396
  108. package/get-shit-done/workflows/execute-plan.md +180 -1609
  109. package/get-shit-done/workflows/health.md +156 -0
  110. package/{commands/gsd → get-shit-done/workflows}/help.md +33 -35
  111. package/get-shit-done/workflows/insert-phase.md +129 -0
  112. package/get-shit-done/workflows/list-phase-assumptions.md +3 -3
  113. package/get-shit-done/workflows/map-codebase.md +73 -80
  114. package/get-shit-done/workflows/new-milestone.md +382 -0
  115. package/{commands/gsd → get-shit-done/workflows}/new-project.md +281 -234
  116. package/get-shit-done/workflows/oc-set-profile.md +320 -0
  117. package/{commands/gsd → get-shit-done/workflows}/pause-work.md +31 -43
  118. package/{commands/gsd → get-shit-done/workflows}/plan-milestone-gaps.md +29 -50
  119. package/get-shit-done/workflows/plan-phase.md +478 -0
  120. package/{commands/gsd → get-shit-done/workflows}/progress.md +64 -47
  121. package/get-shit-done/workflows/quick.md +453 -0
  122. package/get-shit-done/workflows/remove-phase.md +154 -0
  123. package/get-shit-done/workflows/research-phase.md +73 -0
  124. package/get-shit-done/workflows/resume-project.md +17 -26
  125. package/get-shit-done/workflows/set-profile.md +80 -0
  126. package/get-shit-done/workflows/settings.md +213 -0
  127. package/get-shit-done/workflows/transition.md +84 -104
  128. package/{commands/gsd → get-shit-done/workflows}/update.md +70 -28
  129. package/get-shit-done/workflows/verify-phase.md +106 -492
  130. package/get-shit-done/workflows/verify-work.md +26 -53
  131. package/package.json +7 -4
  132. package/rules/gsd-oc-work-hard.md +36 -0
  133. package/skills/gsd-oc-select-model/SKILL.md +348 -0
  134. package/skills/gsd-oc-select-model/scripts/select-models.cjs +268 -0
  135. package/agents/gsd-set-model.md +0 -287
  136. package/agents/gsd-set-profile.md +0 -239
  137. package/agents/gsd-settings.md +0 -749
  138. package/bin/install.js +0 -323
  139. package/commands/gsd/add-phase.md +0 -207
  140. package/commands/gsd/execute-phase.md +0 -339
  141. package/commands/gsd/insert-phase.md +0 -227
  142. package/commands/gsd/new-milestone.md +0 -721
  143. package/commands/gsd/plan-phase.md +0 -525
  144. package/commands/gsd/quick.md +0 -309
  145. package/commands/gsd/remove-phase.md +0 -349
  146. package/commands/gsd/set-model.md +0 -77
  147. package/commands/gsd/set-profile.md +0 -46
  148. package/commands/gsd/settings.md +0 -33
  149. package/commands/gsd/verify-work.md +0 -219
  150. package/commands/gsd/whats-new.md +0 -124
  151. /package/{src → bin/dm/src}/commands/check.js +0 -0
  152. /package/{src → bin/dm/src}/commands/config.js +0 -0
  153. /package/{src → bin/dm/src}/commands/list.js +0 -0
  154. /package/{src → bin/dm/src}/commands/repair.js +0 -0
  155. /package/{src → bin/dm/src}/commands/update.js +0 -0
  156. /package/{src → bin/dm/src}/services/manifest-manager.js +0 -0
  157. /package/{src → bin/dm/src}/services/migration-service.js +0 -0
  158. /package/{src → bin/dm/src}/services/scope-manager.js +0 -0
  159. /package/{src → bin/dm/src}/services/structure-detector.js +0 -0
  160. /package/{src → bin/dm/src}/utils/hash.js +0 -0
  161. /package/{src → bin/dm/src}/utils/interactive.js +0 -0
  162. /package/{src → bin/dm/src}/utils/logger.js +0 -0
  163. /package/{src → bin/dm/src}/utils/npm-registry.js +0 -0
  164. /package/{src → bin/dm/src}/utils/path-resolver.js +0 -0
@@ -52,7 +52,13 @@ export const PATH_PATTERNS = {
52
52
  * These are absolute references to the global config that need to be
53
53
  * replaced for local installs.
54
54
  */
55
- absoluteReference: /@~\/\.config\/opencode\//g
55
+ absoluteReference: /@~\/\.config\/opencode\//g,
56
+ /**
57
+ * Pattern to match bare ~/.config/opencode/ references (without @ prefix).
58
+ * These appear in workflow files that call gsd-tools.cjs directly.
59
+ * Must be replaced for both global and local installs to ensure correct paths.
60
+ */
61
+ tildeConfigReference: /~\/\.config\/opencode\//g
56
62
  };
57
63
 
58
64
  /**
@@ -65,7 +71,7 @@ export const PATH_PATTERNS = {
65
71
  *
66
72
  * @type {string[]}
67
73
  */
68
- export const DIRECTORIES_TO_COPY = ['agents', 'commands', 'get-shit-done'];
74
+ export const DIRECTORIES_TO_COPY = ['agents', 'commands', 'get-shit-done', 'rules', 'skills'];
69
75
 
70
76
  /**
71
77
  * Command directory mapping for source-to-destination path transformation.
@@ -149,6 +155,7 @@ export const ALLOWED_NAMESPACES = [
149
155
  /^agents\/gsd-/, // agents/gsd-* directories
150
156
  /^command\/gsd\//, // command/gsd/* files (legacy structure)
151
157
  /^commands\/gsd\//, // commands/gsd/* files (new structure)
158
+ /^rules\/gsd-/, // rules/gsd-* directories
152
159
  /^skills\/gsd-/, // skills/gsd-* directories
153
160
  /^get-shit-done\// // get-shit-done/ directory - fully owned
154
161
  ];
@@ -180,7 +187,7 @@ export const ERROR_CODES = {
180
187
  * Useful for importing all constants at once.
181
188
  *
182
189
  * @example
183
- * import constants from './lib/constants.js';
190
+ * import constants from './dm/lib/constants.js';
184
191
  * console.log(constants.DEFAULT_CONFIG_DIR);
185
192
  */
186
193
  export default {
@@ -85,7 +85,7 @@ ${cyan} ██████╗ ███████╗██████╗
85
85
  */
86
86
  async function getPackageVersion(sourceDir) {
87
87
  try {
88
- // Read from the source directory's package.json
88
+ // read from the source directory's package.json
89
89
  const packageJsonPath = path.join(sourceDir, "package.json");
90
90
 
91
91
  const content = await fs.readFile(packageJsonPath, "utf-8");
@@ -106,10 +106,10 @@ async function getPackageVersion(sourceDir) {
106
106
  function getSourceDirectory() {
107
107
  const __filename = fileURLToPath(import.meta.url);
108
108
  const __dirname = path.dirname(__filename);
109
- const packageRoot = path.resolve(__dirname, "../..");
109
+ const packageRoot = path.resolve(__dirname, "../../../..");
110
110
 
111
- // Source is the package root directory
112
- // This contains the distribution files (agents, command, get-shit-done)
111
+ // Source is the package root directory (4 levels up from commands/ to gsd-opencode/)
112
+ // This contains the distribution files (agents, commands, get-shit-done, rules, skills)
113
113
  return packageRoot;
114
114
  }
115
115
 
@@ -315,6 +315,7 @@ async function cleanupEmptyDirectories(targetDir, namespaces, logger) {
315
315
  "agents/gsd-roadmapper",
316
316
  "agents/gsd-set-model",
317
317
  "agents/gsd-verifier",
318
+ "skills/gsd-oc-select-model",
318
319
  ];
319
320
 
320
321
  for (const dir of dirsToCheck) {
@@ -284,6 +284,7 @@ async function buildFallbackManifest(targetDir) {
284
284
  "agents",
285
285
  "command/gsd", // Old structure (singular)
286
286
  "commands/gsd", // New structure (plural)
287
+ "rules",
287
288
  "skills",
288
289
  "get-shit-done",
289
290
  ];
@@ -392,12 +393,13 @@ async function categorizeItems(files, targetDir) {
392
393
  }
393
394
 
394
395
  // Ensure top-level directories in allowed namespaces are tracked for cleanup
395
- // This includes get-shit-done, agents, command, commands, skills
396
+ // This includes get-shit-done, agents, command, commands, rules, skills
396
397
  // Include both old (command) and new (commands) structures
397
398
  const topLevelDirs = [
398
399
  "agents",
399
400
  "command",
400
401
  "commands",
402
+ "rules",
401
403
  "skills",
402
404
  "get-shit-done",
403
405
  ];
@@ -211,7 +211,7 @@ export class BackupManager {
211
211
  throw error;
212
212
  }
213
213
 
214
- // Read backup directory contents
214
+ // read backup directory contents
215
215
  const entries = await fs.readdir(this._backupDir, { withFileTypes: true });
216
216
 
217
217
  // Filter for files (not directories) with date prefix
@@ -186,7 +186,7 @@ export class ConfigManager {
186
186
  // Ensure target directory exists
187
187
  await fs.mkdir(targetDir, { recursive: true });
188
188
 
189
- // Write version file
189
+ // write version file
190
190
  await fs.writeFile(versionPath, version.trim(), 'utf-8');
191
191
  } catch (error) {
192
192
  if (error.code === 'EACCES') {
@@ -471,7 +471,7 @@ export class FileOperations {
471
471
  const isMarkdown = sourcePath.endsWith('.md');
472
472
 
473
473
  if (isMarkdown) {
474
- // Read, replace, and write markdown content
474
+ // read, replace, and write markdown content
475
475
  let content = await fs.readFile(sourcePath, 'utf-8');
476
476
 
477
477
  // Optimization: Skip files that don't contain any patterns needing replacement
@@ -481,8 +481,12 @@ export class FileOperations {
481
481
  if (PATH_PATTERNS.absoluteReference) {
482
482
  PATH_PATTERNS.absoluteReference.lastIndex = 0; // Reset regex
483
483
  }
484
+ const hasTildeRef = PATH_PATTERNS.tildeConfigReference && PATH_PATTERNS.tildeConfigReference.test(content);
485
+ if (PATH_PATTERNS.tildeConfigReference) {
486
+ PATH_PATTERNS.tildeConfigReference.lastIndex = 0; // Reset regex
487
+ }
484
488
 
485
- if (!hasGsdRef && !hasAbsRef) {
489
+ if (!hasGsdRef && !hasAbsRef && !hasTildeRef) {
486
490
  await fs.copyFile(sourcePath, targetPath, fsConstants.COPYFILE_FICLONE);
487
491
  return;
488
492
  }
@@ -497,8 +501,18 @@ export class FileOperations {
497
501
  () => targetDir + '/'
498
502
  );
499
503
 
504
+ // Replace bare ~/.config/opencode/ references with actual path
505
+ // This handles workflow files that call: node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs
506
+ // This applies to BOTH global and local installs to ensure correct paths
507
+ if (PATH_PATTERNS.tildeConfigReference) {
508
+ content = content.replace(
509
+ PATH_PATTERNS.tildeConfigReference,
510
+ () => targetDir + '/'
511
+ );
512
+ }
513
+
500
514
  // For local installs, also replace @~/.config/opencode/ with local path
501
- // This handles files that have hardcoded global references
515
+ // This handles files that have hardcoded global references with @ prefix
502
516
  if (this.scopeManager.scope === 'local' && PATH_PATTERNS.absoluteReference) {
503
517
  content = content.replace(
504
518
  PATH_PATTERNS.absoluteReference,
@@ -588,9 +602,11 @@ export class FileOperations {
588
602
  // Cross-device move needed
589
603
  this.logger.debug('Cross-device move detected, using copy+delete');
590
604
  await this._crossDeviceMove(tempDir, targetDir);
591
- } else if (error.code === 'ENOTEMPTY' || error.code === 'EEXIST') {
605
+ } else if (error.code === 'ENOTEMPTY' || error.code === 'EEXIST' || error.code === 'EPERM') {
592
606
  // Target exists with other files - MERGE instead of replace
593
607
  // This preserves existing opencode configuration
608
+ // NOTE: On Windows, fs.rename throws EPERM instead of ENOTEMPTY/EEXIST
609
+ // when target directory exists. Fixed: 2026-02-26
594
610
  this.logger.debug('Target exists with existing files, merging contents');
595
611
  await this._mergeDirectories(tempDir, targetDir);
596
612
  // Clean up temp directory after merge
@@ -268,7 +268,9 @@ export class HealthChecker {
268
268
  const sampleFiles = [
269
269
  { dir: 'agents', file: 'gsd-executor.md' },
270
270
  { dir: 'command', file: 'gsd/help.md' },
271
- { dir: 'get-shit-done', file: 'templates/summary.md' }
271
+ { dir: 'get-shit-done', file: 'templates/summary.md' },
272
+ { dir: 'rules', file: 'gsd-oc-work-hard.md' },
273
+ { dir: 'skills', file: 'gsd-oc-select-model/SKILL.md' }
272
274
  ];
273
275
 
274
276
  for (const { dir, file } of sampleFiles) {
@@ -418,7 +418,9 @@ export class RepairService {
418
418
  const sampleFiles = [
419
419
  { dir: 'agents', file: 'gsd-executor.md' },
420
420
  { dir: 'command', file: 'gsd/help.md' },
421
- { dir: 'get-shit-done', file: 'templates/summary.md' }
421
+ { dir: 'get-shit-done', file: 'templates/summary.md' },
422
+ { dir: 'rules', file: 'gsd-oc-work-hard.md' },
423
+ { dir: 'skills', file: 'gsd-oc-select-model/SKILL.md' }
422
424
  ];
423
425
 
424
426
  const expectedPrefix = targetDir + '/';
@@ -355,7 +355,7 @@ export class SettingsManager {
355
355
  * Saves configuration to disk atomically.
356
356
  *
357
357
  * Private method that writes configuration using the atomic write pattern:
358
- * 1. Write to a temporary file
358
+ * 1. write to a temporary file
359
359
  * 2. Rename temp file to final location
360
360
  *
361
361
  * This ensures that the configuration file is never in a partially written
@@ -404,7 +404,7 @@ export class UpdateService {
404
404
  * Validates that the update can proceed by checking:
405
405
  * - Installation exists (if required)
406
406
  * - Target version exists
407
- * - Write permissions are available
407
+ * - write permissions are available
408
408
  *
409
409
  * @param {string|null} targetVersion - Specific version to validate (null for latest)
410
410
  * @returns {Promise<Object>} Validation result
@@ -442,7 +442,7 @@ export class UpdateService {
442
442
  } else if (error.code === 'ENOENT') {
443
443
  // Directory doesn't exist, which is fine for new installs
444
444
  } else {
445
- errors.push(`Write permission check failed: ${error.message}`);
445
+ errors.push(`write permission check failed: ${error.message}`);
446
446
  }
447
447
  }
448
448
 
File without changes
package/bin/gsd.js CHANGED
@@ -20,15 +20,15 @@
20
20
 
21
21
  import { Command } from 'commander';
22
22
  import chalk from 'chalk';
23
- import { installCommand } from '../src/commands/install.js';
24
- import { listCommand } from '../src/commands/list.js';
25
- import { uninstallCommand } from '../src/commands/uninstall.js';
26
- import { configGetCommand, configSetCommand, configResetCommand, configListCommand } from '../src/commands/config.js';
27
- import { checkCommand } from '../src/commands/check.js';
28
- import { repairCommand } from '../src/commands/repair.js';
29
- import { updateCommand } from '../src/commands/update.js';
30
- import { logger, setVerbose } from '../src/utils/logger.js';
31
- import { ERROR_CODES } from '../lib/constants.js';
23
+ import { installCommand } from './dm/src/commands/install.js';
24
+ import { listCommand } from './dm/src/commands/list.js';
25
+ import { uninstallCommand } from './dm/src/commands/uninstall.js';
26
+ import { configGetCommand, configSetCommand, configResetCommand, configListCommand } from './dm/src/commands/config.js';
27
+ import { checkCommand } from './dm/src/commands/check.js';
28
+ import { repairCommand } from './dm/src/commands/repair.js';
29
+ import { updateCommand } from './dm/src/commands/update.js';
30
+ import { logger, setVerbose } from './dm/src/utils/logger.js';
31
+ import { ERROR_CODES } from './dm/lib/constants.js';
32
32
  import { readFileSync } from 'fs';
33
33
  import { fileURLToPath } from 'url';
34
34
  import path from 'path';
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: gsd-add-phase
3
+ description: Add phase to end of current milestone in roadmap
4
+ argument-hint: <description>
5
+ allowed-tools:
6
+ - read
7
+ - write
8
+ - bash
9
+ ---
10
+
11
+ <objective>
12
+ Add a new integer phase to the end of the current milestone in the roadmap.
13
+
14
+ Routes to the add-phase workflow which handles:
15
+ - Phase number calculation (next sequential integer)
16
+ - Directory creation with slug generation
17
+ - Roadmap structure updates
18
+ - STATE.md roadmap evolution tracking
19
+ </objective>
20
+
21
+ <execution_context>
22
+ @~/.config/opencode/get-shit-done/workflows/add-phase.md
23
+ </execution_context>
24
+
25
+ <context>
26
+ Arguments: $ARGUMENTS (phase description)
27
+
28
+ Roadmap and state are resolved in-workflow via `init phase-op` and targeted tool calls.
29
+ </context>
30
+
31
+ <process>
32
+ **Follow the add-phase workflow** from `@~/.config/opencode/get-shit-done/workflows/add-phase.md`.
33
+
34
+ The workflow handles all logic including:
35
+ 1. Argument parsing and validation
36
+ 2. Roadmap existence checking
37
+ 3. Current milestone identification
38
+ 4. Next phase number calculation (ignoring decimals)
39
+ 5. Slug generation from description
40
+ 6. Phase directory creation
41
+ 7. Roadmap entry insertion
42
+ 8. STATE.md updates
43
+ </process>
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: gsd-add-todo
3
+ description: Capture idea or task as todo from current conversation context
4
+ argument-hint: [optional description]
5
+ allowed-tools:
6
+ - read
7
+ - write
8
+ - bash
9
+ - question
10
+ ---
11
+
12
+ <objective>
13
+ Capture an idea, task, or issue that surfaces during a GSD session as a structured todo for later work.
14
+
15
+ Routes to the add-todo workflow which handles:
16
+ - Directory structure creation
17
+ - Content extraction from arguments or conversation
18
+ - Area inference from file paths
19
+ - Duplicate detection and resolution
20
+ - Todo file creation with frontmatter
21
+ - STATE.md updates
22
+ - Git commits
23
+ </objective>
24
+
25
+ <execution_context>
26
+ @~/.config/opencode/get-shit-done/workflows/add-todo.md
27
+ </execution_context>
28
+
29
+ <context>
30
+ Arguments: $ARGUMENTS (optional todo description)
31
+
32
+ State is resolved in-workflow via `init todos` and targeted reads.
33
+ </context>
34
+
35
+ <process>
36
+ **Follow the add-todo workflow** from `@~/.config/opencode/get-shit-done/workflows/add-todo.md`.
37
+
38
+ The workflow handles all logic including:
39
+ 1. Directory ensuring
40
+ 2. Existing area checking
41
+ 3. Content extraction (arguments or conversation)
42
+ 4. Area inference
43
+ 5. Duplicate checking
44
+ 6. File creation with slug generation
45
+ 7. STATE.md updates
46
+ 8. Git commits
47
+ </process>
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: gsd-audit-milestone
3
+ description: Audit milestone completion against original intent before archiving
4
+ argument-hint: "[version]"
5
+ allowed-tools:
6
+ - read
7
+ - glob
8
+ - grep
9
+ - bash
10
+ - task
11
+ - write
12
+ ---
13
+ <objective>
14
+ Verify milestone achieved its definition of done. Check requirements coverage, cross-phase integration, and end-to-end flows.
15
+
16
+ **This command IS the orchestrator.** Reads existing VERIFICATION.md files (phases already verified during execute-phase), aggregates tech debt and deferred gaps, then spawns integration checker for cross-phase wiring.
17
+ </objective>
18
+
19
+ <execution_context>
20
+ @~/.config/opencode/get-shit-done/workflows/audit-milestone.md
21
+ </execution_context>
22
+
23
+ <context>
24
+ Version: $ARGUMENTS (optional — defaults to current milestone)
25
+
26
+ Core planning files are resolved in-workflow (`init milestone-op`) and loaded only as needed.
27
+
28
+ **Completed Work:**
29
+ glob: .planning/phases/*/*-SUMMARY.md
30
+ glob: .planning/phases/*/*-VERIFICATION.md
31
+ </context>
32
+
33
+ <process>
34
+ Execute the audit-milestone workflow from @~/.config/opencode/get-shit-done/workflows/audit-milestone.md end-to-end.
35
+ Preserve all workflow gates (scope determination, verification reading, integration check, requirements coverage, routing).
36
+ </process>
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: gsd-check-todos
3
+ description: List pending todos and select one to work on
4
+ argument-hint: [area filter]
5
+ allowed-tools:
6
+ - read
7
+ - write
8
+ - bash
9
+ - question
10
+ ---
11
+
12
+ <objective>
13
+ List all pending todos, allow selection, load full context for the selected todo, and route to appropriate action.
14
+
15
+ Routes to the check-todos workflow which handles:
16
+ - Todo counting and listing with area filtering
17
+ - Interactive selection with full context loading
18
+ - Roadmap correlation checking
19
+ - Action routing (work now, add to phase, brainstorm, create phase)
20
+ - STATE.md updates and git commits
21
+ </objective>
22
+
23
+ <execution_context>
24
+ @~/.config/opencode/get-shit-done/workflows/check-todos.md
25
+ </execution_context>
26
+
27
+ <context>
28
+ Arguments: $ARGUMENTS (optional area filter)
29
+
30
+ Todo state and roadmap correlation are loaded in-workflow using `init todos` and targeted reads.
31
+ </context>
32
+
33
+ <process>
34
+ **Follow the check-todos workflow** from `@~/.config/opencode/get-shit-done/workflows/check-todos.md`.
35
+
36
+ The workflow handles all logic including:
37
+ 1. Todo existence checking
38
+ 2. Area filtering
39
+ 3. Interactive listing and selection
40
+ 4. Full context loading with file summaries
41
+ 5. Roadmap correlation checking
42
+ 6. Action offering and execution
43
+ 7. STATE.md updates
44
+ 8. Git commits
45
+ </process>
@@ -0,0 +1,18 @@
1
+ ---
2
+ name: gsd-cleanup
3
+ description: Archive accumulated phase directories from completed milestones
4
+ ---
5
+ <objective>
6
+ Archive phase directories from completed milestones into `.planning/milestones/v{X.Y}-phases/`.
7
+
8
+ Use when `.planning/phases/` has accumulated directories from past milestones.
9
+ </objective>
10
+
11
+ <execution_context>
12
+ @~/.config/opencode/get-shit-done/workflows/cleanup.md
13
+ </execution_context>
14
+
15
+ <process>
16
+ Follow the cleanup workflow at @~/.config/opencode/get-shit-done/workflows/cleanup.md.
17
+ Identify completed milestones, show a dry-run summary, and archive on confirmation.
18
+ </process>
@@ -3,7 +3,7 @@ type: prompt
3
3
  name: gsd-complete-milestone
4
4
  description: Archive completed milestone and prepare for next version
5
5
  argument-hint: <version>
6
- tools:
6
+ allowed-tools:
7
7
  - read
8
8
  - write
9
9
  - bash
@@ -2,10 +2,10 @@
2
2
  name: gsd-debug
3
3
  description: Systematic debugging with persistent state across context resets
4
4
  argument-hint: [issue description]
5
- tools:
5
+ allowed-tools:
6
6
  - read
7
7
  - bash
8
-
8
+ - task
9
9
  - question
10
10
  ---
11
11
 
@@ -18,7 +18,7 @@ Debug issues using scientific method with subagent isolation.
18
18
  </objective>
19
19
 
20
20
  <context>
21
- User's issue: `$ARGUMENTS`
21
+ User's issue: $ARGUMENTS
22
22
 
23
23
  Check for active sessions:
24
24
  ```bash
@@ -28,31 +28,24 @@ ls .planning/debug/*.md 2>/dev/null | grep -v resolved | head -5
28
28
 
29
29
  <process>
30
30
 
31
- ## 0. Resolve Model Profile
32
-
33
- read model profile for agent spawning:
31
+ ## 0. Initialize Context
34
32
 
35
33
  ```bash
36
- MODEL_PROFILE=$(cat .planning/config.json 2>/dev/null | grep -o '"model_profile"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "balanced")
34
+ INIT=$(node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs state load)
37
35
  ```
38
36
 
39
- Default to "balanced" if not set.
40
-
41
- **Model lookup table:**
42
-
43
- | Agent | quality | balanced | budget |
44
- |-------|---------|----------|--------|
45
- | gsd-debugger | opus | sonnet | sonnet |
46
-
47
- Store resolved model for use in Task calls below.
37
+ Extract `commit_docs` from init JSON. Resolve debugger model:
38
+ ```bash
39
+ DEBUGGER_MODEL=$(node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs resolve-model gsd-debugger --raw)
40
+ ```
48
41
 
49
42
  ## 1. Check Active Sessions
50
43
 
51
- If active sessions exist AND no `$ARGUMENTS`:
44
+ If active sessions exist AND no $ARGUMENTS:
52
45
  - List sessions with status, hypothesis, next action
53
46
  - User picks number to resume OR describes new issue
54
47
 
55
- If `$ARGUMENTS` provided OR user describes new issue:
48
+ If $ARGUMENTS provided OR user describes new issue:
56
49
  - Continue to symptom gathering
57
50
 
58
51
  ## 2. Gather Symptoms (if new issue)
@@ -97,7 +90,7 @@ Create: .planning/debug/{slug}.md
97
90
  ```
98
91
 
99
92
  ```
100
- Task(
93
+ task(
101
94
  prompt=filled_prompt,
102
95
  subagent_type="gsd-debugger",
103
96
  model="{debugger_model}",
@@ -136,7 +129,9 @@ Continue debugging {slug}. Evidence is in the debug file.
136
129
  </objective>
137
130
 
138
131
  <prior_state>
139
- Debug file: @.planning/debug/{slug}.md
132
+ <files_to_read>
133
+ - .planning/debug/{slug}.md (Debug session state)
134
+ </files_to_read>
140
135
  </prior_state>
141
136
 
142
137
  <checkpoint_response>
@@ -150,7 +145,7 @@ goal: find_and_fix
150
145
  ```
151
146
 
152
147
  ```
153
- Task(
148
+ task(
154
149
  prompt=continuation_prompt,
155
150
  subagent_type="gsd-debugger",
156
151
  model="{debugger_model}",
@@ -1,14 +1,15 @@
1
1
  ---
2
2
  name: gsd-discuss-phase
3
3
  description: Gather phase context through adaptive questioning before planning
4
- argument-hint: "<phase>"
5
- tools:
4
+ argument-hint: "<phase> [--auto]"
5
+ allowed-tools:
6
6
  - read
7
7
  - write
8
8
  - bash
9
9
  - glob
10
10
  - grep
11
11
  - question
12
+ - task
12
13
  ---
13
14
 
14
15
  <objective>
@@ -20,7 +21,7 @@ Extract implementation decisions that downstream agents need — researcher and
20
21
  3. Deep-dive each selected area until satisfied
21
22
  4. Create CONTEXT.md with decisions that guide research and planning
22
23
 
23
- **Output:** `{phase}-CONTEXT.md` — decisions clear enough that downstream agents can act without asking the user again
24
+ **Output:** `{phase_num}-CONTEXT.md` — decisions clear enough that downstream agents can act without asking the user again
24
25
  </objective>
25
26
 
26
27
  <execution_context>
@@ -29,13 +30,9 @@ Extract implementation decisions that downstream agents need — researcher and
29
30
  </execution_context>
30
31
 
31
32
  <context>
32
- Phase number: `$ARGUMENTS` (required)
33
+ Phase number: $ARGUMENTS (required)
33
34
 
34
- **Load project state:**
35
- @.planning/STATE.md
36
-
37
- **Load roadmap:**
38
- @.planning/ROADMAP.md
35
+ Context files are resolved in-workflow using `init phase-op` and roadmap/state tool calls.
39
36
  </context>
40
37
 
41
38
  <process>
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: gsd-execute-phase
3
+ description: Execute all plans in a phase with wave-based parallelization
4
+ argument-hint: "<phase-number> [--gaps-only]"
5
+ allowed-tools:
6
+ - read
7
+ - write
8
+ - edit
9
+ - glob
10
+ - grep
11
+ - bash
12
+ - task
13
+ - todowrite
14
+ - question
15
+ ---
16
+ <objective>
17
+ Execute all plans in a phase using wave-based parallel execution.
18
+
19
+ Orchestrator stays lean: discover plans, analyze dependencies, group into waves, spawn subagents, collect results. Each subagent loads the full execute-plan context and handles its own plan.
20
+
21
+ Context budget: ~15% orchestrator, 100% fresh per subagent.
22
+ </objective>
23
+
24
+ <execution_context>
25
+ @~/.config/opencode/get-shit-done/workflows/execute-phase.md
26
+ @~/.config/opencode/get-shit-done/references/ui-brand.md
27
+ </execution_context>
28
+
29
+ <context>
30
+ Phase: $ARGUMENTS
31
+
32
+ **Flags:**
33
+ - `--gaps-only` — Execute only gap closure plans (plans with `gap_closure: true` in frontmatter). Use after verify-work creates fix plans.
34
+
35
+ Context files are resolved inside the workflow via `gsd-tools init execute-phase` and per-subagent `<files_to_read>` blocks.
36
+ </context>
37
+
38
+ <process>
39
+ Execute the execute-phase workflow from @~/.config/opencode/get-shit-done/workflows/execute-phase.md end-to-end.
40
+ Preserve all workflow gates (wave execution, checkpoint handling, verification, state updates, routing).
41
+ </process>
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: gsd-health
3
+ description: Diagnose planning directory health and optionally repair issues
4
+ argument-hint: [--repair]
5
+ allowed-tools:
6
+ - read
7
+ - bash
8
+ - write
9
+ - question
10
+ ---
11
+ <objective>
12
+ Validate `.planning/` directory integrity and report actionable issues. Checks for missing files, invalid configurations, inconsistent state, and orphaned plans.
13
+ </objective>
14
+
15
+ <execution_context>
16
+ @~/.config/opencode/get-shit-done/workflows/health.md
17
+ </execution_context>
18
+
19
+ <process>
20
+ Execute the health workflow from @~/.config/opencode/get-shit-done/workflows/health.md end-to-end.
21
+ Parse --repair flag from arguments and pass to workflow.
22
+ </process>