gsd-opencode 1.10.2 → 1.20.0

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
@@ -1,5 +1,5 @@
1
1
  <overview>
2
- Plans execute autonomously. Checkpoints formalize the interaction points where human verification or decisions are needed.
2
+ Plans execute autonomously. Checkpoints formalize interaction points where human verification or decisions are needed.
3
3
 
4
4
  **Core principle:** OpenCode automates everything with CLI/API. Checkpoints are for verification and decisions, not manual work.
5
5
 
@@ -8,6 +8,7 @@ Plans execute autonomously. Checkpoints formalize the interaction points where h
8
8
  2. **OpenCode sets up the verification environment** - Start dev servers, seed databases, configure env vars
9
9
  3. **User only does what requires human judgment** - Visual checks, UX evaluation, "does this feel right?"
10
10
  4. **Secrets come from user, automation comes from OpenCode** - Ask for API keys, then OpenCode uses them via CLI
11
+ 5. **Auto-mode bypasses verification/decision checkpoints** — When `workflow.auto_advance` is true in config: human-verify auto-approves, decision auto-selects first option, human-action still stops (auth gates cannot be automated)
11
12
  </overview>
12
13
 
13
14
  <checkpoint_types>
@@ -36,34 +37,7 @@ Plans execute autonomously. Checkpoints formalize the interaction points where h
36
37
  </task>
37
38
  ```
38
39
 
39
- **Key elements:**
40
- - `<what-built>`: What OpenCode automated (deployed, built, configured)
41
- - `<how-to-verify>`: Exact steps to confirm it works (numbered, specific)
42
- - `<resume-signal>`: Clear indication of how to continue
43
-
44
- **Example: Vercel Deployment**
45
- ```xml
46
- <task type="auto">
47
- <name>Deploy to Vercel</name>
48
- <files>.vercel/, vercel.json</files>
49
- <action>Run `vercel --yes` to create project and deploy. Capture deployment URL from output.</action>
50
- <verify>vercel ls shows deployment, curl {url} returns 200</verify>
51
- <done>App deployed, URL captured</done>
52
- </task>
53
-
54
- <task type="checkpoint:human-verify" gate="blocking">
55
- <what-built>Deployed to Vercel at https://myapp-abc123.vercel.app</what-built>
56
- <how-to-verify>
57
- Visit https://myapp-abc123.vercel.app and confirm:
58
- - Homepage loads without errors
59
- - Login form is visible
60
- - No console errors in browser DevTools
61
- </how-to-verify>
62
- <resume-signal>Type "approved" to continue, or describe issues to fix</resume-signal>
63
- </task>
64
- ```
65
-
66
- **Example: UI Component**
40
+ **Example: UI Component (shows key pattern: OpenCode starts server BEFORE checkpoint)**
67
41
  ```xml
68
42
  <task type="auto">
69
43
  <name>Build responsive dashboard layout</name>
@@ -93,8 +67,6 @@ Plans execute autonomously. Checkpoints formalize the interaction points where h
93
67
  </task>
94
68
  ```
95
69
 
96
- **Key pattern:** OpenCode starts the dev server BEFORE the checkpoint. User only needs to visit the URL.
97
-
98
70
  **Example: Xcode Build**
99
71
  ```xml
100
72
  <task type="auto">
@@ -152,12 +124,6 @@ Plans execute autonomously. Checkpoints formalize the interaction points where h
152
124
  </task>
153
125
  ```
154
126
 
155
- **Key elements:**
156
- - `<decision>`: What's being decided
157
- - `<context>`: Why this matters
158
- - `<options>`: Each option with balanced pros/cons (not prescriptive)
159
- - `<resume-signal>`: How to indicate choice
160
-
161
127
  **Example: Auth Provider Selection**
162
128
  ```xml
163
129
  <task type="checkpoint:decision" gate="blocking">
@@ -222,19 +188,18 @@ Plans execute autonomously. Checkpoints formalize the interaction points where h
222
188
  **When:** Action has NO CLI/API and requires human-only interaction, OR OpenCode hit an authentication gate during automation.
223
189
 
224
190
  **Use ONLY for:**
225
- - **Authentication gates** - OpenCode tried to use CLI/API but needs credentials to continue (this is NOT a failure)
226
- - Email verification links (account creation requires clicking email)
191
+ - **Authentication gates** - OpenCode tried CLI/API but needs credentials (this is NOT a failure)
192
+ - Email verification links (clicking email)
227
193
  - SMS 2FA codes (phone verification)
228
- - Manual account approvals (platform requires human review before API access)
194
+ - Manual account approvals (platform requires human review)
229
195
  - Credit card 3D Secure flows (web-based payment authorization)
230
- - OAuth app approvals (some platforms require web-based approval)
196
+ - OAuth app approvals (web-based approval)
231
197
 
232
198
  **Do NOT use for pre-planned manual work:**
233
- - Manually deploying to Vercel (use `vercel` CLI - auth gate if needed)
234
- - Manually creating Stripe webhooks (use Stripe API - auth gate if needed)
235
- - Manually creating databases (use provider CLI - auth gate if needed)
236
- - Running builds/tests manually (use bash tool)
237
- - Creating files manually (use write tool)
199
+ - Deploying (use CLI - auth gate if needed)
200
+ - Creating webhooks/databases (use API/CLI - auth gate if needed)
201
+ - Running builds/tests (use bash tool)
202
+ - Creating files (use write tool)
238
203
 
239
204
  **Structure:**
240
205
  ```xml
@@ -249,8 +214,6 @@ Plans execute autonomously. Checkpoints formalize the interaction points where h
249
214
  </task>
250
215
  ```
251
216
 
252
- **Key principle:** OpenCode automates EVERYTHING possible first, only asks human for the truly unavoidable manual step.
253
-
254
217
  **Example: Email Verification**
255
218
  ```xml
256
219
  <task type="auto">
@@ -271,26 +234,6 @@ Plans execute autonomously. Checkpoints formalize the interaction points where h
271
234
  </task>
272
235
  ```
273
236
 
274
- **Example: Credit Card 3D Secure**
275
- ```xml
276
- <task type="auto">
277
- <name>Create Stripe payment intent</name>
278
- <action>Use Stripe API to create payment intent for $99. Generate checkout URL.</action>
279
- <verify>Stripe API returns payment intent ID and URL</verify>
280
- <done>Payment intent created</done>
281
- </task>
282
-
283
- <task type="checkpoint:human-action" gate="blocking">
284
- <action>Complete 3D Secure authentication</action>
285
- <instructions>
286
- I created the payment intent: https://checkout.stripe.com/pay/cs_test_abc123
287
- Visit that URL and complete the 3D Secure verification flow with your test card.
288
- </instructions>
289
- <verification>Stripe webhook receives payment_intent.succeeded event</verification>
290
- <resume-signal>Type "done" when payment completes</resume-signal>
291
- </task>
292
- ```
293
-
294
237
  **Example: Authentication Gate (Dynamic Checkpoint)**
295
238
  ```xml
296
239
  <task type="auto">
@@ -322,7 +265,7 @@ Plans execute autonomously. Checkpoints formalize the interaction points where h
322
265
  </task>
323
266
  ```
324
267
 
325
- **Key distinction:** Authentication gates are created dynamically when OpenCode encounters auth errors during automation. They're NOT pre-planned - OpenCode tries to automate first, only asks for credentials when blocked.
268
+ **Key distinction:** Auth gates are created dynamically when OpenCode encounters auth errors. NOT pre-planned OpenCode automates first, asks for credentials only when blocked.
326
269
  </type>
327
270
  </checkpoint_types>
328
271
 
@@ -343,16 +286,15 @@ When OpenCode encounters `type="checkpoint:*"`:
343
286
  ╚═══════════════════════════════════════════════════════╝
344
287
 
345
288
  Progress: 5/8 tasks complete
346
- Task: Responsive dashboard layout
289
+ task: Responsive dashboard layout
347
290
 
348
291
  Built: Responsive dashboard at /dashboard
349
292
 
350
293
  How to verify:
351
- 1. Run: npm run dev
352
- 2. Visit: http://localhost:3000/dashboard
353
- 3. Desktop (>1024px): Sidebar visible, content fills remaining space
354
- 4. Tablet (768px): Sidebar collapses to icons
355
- 5. Mobile (375px): Sidebar hidden, hamburger menu appears
294
+ 1. Visit: http://localhost:3000/dashboard
295
+ 2. Desktop (>1024px): Sidebar visible, content fills remaining space
296
+ 3. Tablet (768px): Sidebar collapses to icons
297
+ 4. Mobile (375px): Sidebar hidden, hamburger menu appears
356
298
 
357
299
  ────────────────────────────────────────────────────────
358
300
  → YOUR ACTION: Type "approved" or describe issues
@@ -366,7 +308,7 @@ How to verify:
366
308
  ╚═══════════════════════════════════════════════════════╝
367
309
 
368
310
  Progress: 2/6 tasks complete
369
- Task: Select authentication provider
311
+ task: Select authentication provider
370
312
 
371
313
  Decision: Which auth provider should we use?
372
314
 
@@ -397,7 +339,7 @@ Options:
397
339
  ╚═══════════════════════════════════════════════════════╝
398
340
 
399
341
  Progress: 3/8 tasks complete
400
- Task: Deploy to Vercel
342
+ task: Deploy to Vercel
401
343
 
402
344
  Attempted: vercel --yes
403
345
  Error: Not authenticated. Please run 'vercel login'
@@ -417,9 +359,9 @@ I'll verify: vercel whoami returns your account
417
359
 
418
360
  <authentication_gates>
419
361
 
420
- **Critical:** When OpenCode tries CLI/API and gets auth error, this is NOT a failure - it's a gate requiring human input to unblock automation.
362
+ **Auth gate = OpenCode tried CLI/API, got auth error.** Not a failure a gate requiring human input to unblock.
421
363
 
422
- **Pattern:** OpenCode tries automation → auth error → creates checkpoint → you authenticate → OpenCode retries → continues
364
+ **Pattern:** OpenCode tries automation → auth error → creates checkpoint:human-actionuser authenticates → OpenCode retries → continues
423
365
 
424
366
  **Gate protocol:**
425
367
  1. Recognize it's not a failure - missing auth is expected
@@ -430,46 +372,6 @@ I'll verify: vercel whoami returns your account
430
372
  6. Retry the original task
431
373
  7. Continue normally
432
374
 
433
- **Example execution flow (Vercel auth gate):**
434
-
435
- ```
436
- OpenCode: Running `vercel --yes` to deploy...
437
-
438
- Error: Not authenticated. Please run 'vercel login'
439
-
440
- ╔═══════════════════════════════════════════════════════╗
441
- ║ CHECKPOINT: Action Required ║
442
- ╚═══════════════════════════════════════════════════════╝
443
-
444
- Progress: 2/8 tasks complete
445
- Task: Deploy to Vercel
446
-
447
- Attempted: vercel --yes
448
- Error: Not authenticated
449
-
450
- What you need to do:
451
- 1. Run: vercel login
452
- 2. Complete browser authentication
453
-
454
- I'll verify: vercel whoami returns your account
455
-
456
- ────────────────────────────────────────────────────────
457
- → YOUR ACTION: Type "done" when authenticated
458
- ────────────────────────────────────────────────────────
459
-
460
- User: done
461
-
462
- OpenCode: Verifying authentication...
463
- Running: vercel whoami
464
- ✓ Authenticated as: user@example.com
465
-
466
- Retrying deployment...
467
- Running: vercel --yes
468
- ✓ Deployed to: https://myapp-abc123.vercel.app
469
-
470
- Task 3 complete. Continuing to task 4...
471
- ```
472
-
473
375
  **Key distinction:**
474
376
  - Pre-planned checkpoint: "I need you to do X" (wrong - OpenCode should automate)
475
377
  - Auth gate: "I tried to automate X but need credentials" (correct - unblocks automation)
@@ -510,7 +412,7 @@ Task 3 complete. Continuing to task 4...
510
412
  | Fly | `fly secrets set` | `fly secrets set DATABASE_URL=...` |
511
413
  | Supabase | `supabase secrets set` | `supabase secrets set MY_SECRET=value` |
512
414
 
513
- **Pattern for secret collection:**
415
+ **Secret collection pattern:**
514
416
  ```xml
515
417
  <!-- WRONG: Asking user to add env vars in dashboard -->
516
418
  <task type="checkpoint:human-action">
@@ -522,11 +424,11 @@ Task 3 complete. Continuing to task 4...
522
424
  <task type="checkpoint:human-action">
523
425
  <action>Provide your OpenAI API key</action>
524
426
  <instructions>
525
- I need your OpenAI API key to configure the Convex backend.
427
+ I need your OpenAI API key for Convex backend.
526
428
  Get it from: https://platform.openai.com/api-keys
527
429
  Paste the key (starts with sk-)
528
430
  </instructions>
529
- <verification>I'll add it via `npx convex env set` and verify it's configured</verification>
431
+ <verification>I'll add it via `npx convex env set` and verify</verification>
530
432
  <resume-signal>Paste your API key</resume-signal>
531
433
  </task>
532
434
 
@@ -539,8 +441,6 @@ Task 3 complete. Continuing to task 4...
539
441
 
540
442
  ## Dev Server Automation
541
443
 
542
- **OpenCode starts servers, user visits URLs:**
543
-
544
444
  | Framework | Start Command | Ready Signal | Default URL |
545
445
  |-----------|---------------|--------------|-------------|
546
446
  | Next.js | `npm run dev` | "Ready in" or "started server" | http://localhost:3000 |
@@ -549,53 +449,22 @@ Task 3 complete. Continuing to task 4...
549
449
  | Express | `npm start` | "listening on port" | http://localhost:3000 |
550
450
  | Django | `python manage.py runserver` | "Starting development server" | http://localhost:8000 |
551
451
 
552
- ### Server Lifecycle Protocol
553
-
554
- **Starting servers:**
452
+ **Server lifecycle:**
555
453
  ```bash
556
- # Run in background, capture PID for cleanup
454
+ # Run in background, capture PID
557
455
  npm run dev &
558
456
  DEV_SERVER_PID=$!
559
457
 
560
- # Wait for ready signal (max 30s)
458
+ # Wait for ready (max 30s)
561
459
  timeout 30 bash -c 'until curl -s localhost:3000 > /dev/null 2>&1; do sleep 1; done'
562
460
  ```
563
461
 
564
- **Port conflicts:**
565
- If default port is in use, check what's running and either:
566
- 1. Kill the existing process if it's stale: `lsof -ti:3000 | xargs kill`
567
- 2. Use alternate port: `npm run dev -- --port 3001`
568
-
569
- **Server stays running** for the duration of the checkpoint. After user approves, server continues running for subsequent tasks. Only kill explicitly if:
570
- - Plan is complete and no more verification needed
571
- - Switching to production deployment
572
- - Port needed for different service
573
-
574
- **Pattern:**
575
- ```xml
576
- <!-- OpenCode starts server before checkpoint -->
577
- <task type="auto">
578
- <name>Start dev server</name>
579
- <action>Run `npm run dev` in background, wait for ready signal</action>
580
- <verify>curl http://localhost:3000 returns 200</verify>
581
- <done>Dev server running</done>
582
- </task>
462
+ **Port conflicts:** Kill stale process (`lsof -ti:3000 | xargs kill`) or use alternate port (`--port 3001`).
583
463
 
584
- <!-- User only visits URL -->
585
- <task type="checkpoint:human-verify">
586
- <what-built>Feature X - dev server running at http://localhost:3000</what-built>
587
- <how-to-verify>
588
- Visit http://localhost:3000/feature and verify:
589
- 1. [Visual check 1]
590
- 2. [Visual check 2]
591
- </how-to-verify>
592
- </task>
593
- ```
464
+ **Server stays running** through checkpoints. Only kill when plan complete, switching to production, or port needed for different service.
594
465
 
595
466
  ## CLI Installation Handling
596
467
 
597
- **When a required CLI is not installed:**
598
-
599
468
  | CLI | Auto-install? | Command |
600
469
  |-----|---------------|---------|
601
470
  | npm/pnpm/yarn | No - ask user | User chooses package manager |
@@ -607,36 +476,20 @@ If default port is in use, check what's running and either:
607
476
  | fly | Yes | `brew install flyctl` or curl installer |
608
477
  | railway | Yes | `npm i -g @railway/cli` |
609
478
 
610
- **Protocol:**
611
- 1. Try the command
612
- 2. If "command not found", check if auto-installable
613
- 3. If yes: install silently, retry command
614
- 4. If no: create checkpoint asking user to install
615
-
616
- ```xml
617
- <!-- Example: vercel not found -->
618
- <task type="auto">
619
- <name>Install Vercel CLI</name>
620
- <action>Run `npm i -g vercel`</action>
621
- <verify>`vercel --version` succeeds</verify>
622
- <done>Vercel CLI installed</done>
623
- </task>
624
- ```
479
+ **Protocol:** Try command → "command not found" → auto-installable? → yes: install silently, retry → no: checkpoint asking user to install.
625
480
 
626
481
  ## Pre-Checkpoint Automation Failures
627
482
 
628
- **When setup fails before checkpoint:**
629
-
630
483
  | Failure | Response |
631
484
  |---------|----------|
632
- | Server won't start | Check error output, fix issue, retry (don't proceed to checkpoint) |
485
+ | Server won't start | Check error, fix issue, retry (don't proceed to checkpoint) |
633
486
  | Port in use | Kill stale process or use alternate port |
634
487
  | Missing dependency | Run `npm install`, retry |
635
- | Build error | Fix the error first (this is a bug, not a checkpoint issue) |
488
+ | Build error | Fix the error first (bug, not checkpoint issue) |
636
489
  | Auth error | Create auth gate checkpoint |
637
490
  | Network timeout | Retry with backoff, then checkpoint if persistent |
638
491
 
639
- **Key principle:** Never present a checkpoint with broken verification environment. If `curl localhost:3000` fails, don't ask user to "visit localhost:3000".
492
+ **Never present a checkpoint with broken verification environment.** If `curl localhost:3000` fails, don't ask user to "visit localhost:3000".
640
493
 
641
494
  ```xml
642
495
  <!-- WRONG: Checkpoint with broken environment -->
@@ -650,7 +503,6 @@ If default port is in use, check what's running and either:
650
503
  <name>Fix server startup issue</name>
651
504
  <action>Investigate error, fix root cause, restart server</action>
652
505
  <verify>curl http://localhost:3000 returns 200</verify>
653
- <done>Server running correctly</done>
654
506
  </task>
655
507
 
656
508
  <task type="checkpoint:human-verify">
@@ -659,7 +511,7 @@ If default port is in use, check what's running and either:
659
511
  </task>
660
512
  ```
661
513
 
662
- ## Quick Reference
514
+ ## Automatable Quick Reference
663
515
 
664
516
  | Action | Automatable? | OpenCode does it? |
665
517
  |--------|--------------|-----------------|
@@ -685,17 +537,15 @@ If default port is in use, check what's running and either:
685
537
  **DO:**
686
538
  - Automate everything with CLI/API before checkpoint
687
539
  - Be specific: "Visit https://myapp.vercel.app" not "check deployment"
688
- - Number verification steps: easier to follow
540
+ - Number verification steps
689
541
  - State expected outcomes: "You should see X"
690
542
  - Provide context: why this checkpoint exists
691
- - Make verification executable: clear, testable steps
692
543
 
693
544
  **DON'T:**
694
- - Ask human to do work OpenCode can automate (deploy, create resources, run builds)
545
+ - Ask human to do work OpenCode can automate
695
546
  - Assume knowledge: "Configure the usual settings" ❌
696
- - Skip steps: "Set up database" (too vague)
697
- - Mix multiple verifications in one checkpoint (split them)
698
- - Make verification impossible (OpenCode can't check visual appearance without user confirmation)
547
+ - Skip steps: "Set up database" (too vague)
548
+ - Mix multiple verifications in one checkpoint
699
549
 
700
550
  **Placement:**
701
551
  - **After automation completes** - not before OpenCode does the work
@@ -703,53 +553,14 @@ If default port is in use, check what's running and either:
703
553
  - **Before dependent work** - decisions before implementation
704
554
  - **At integration points** - after configuring external services
705
555
 
706
- **Bad placement:**
707
- - Before OpenCode automates (asking human to do automatable work) ❌
708
- - Too frequent (every other task is a checkpoint) ❌
709
- - Too late (checkpoint is last task, but earlier tasks needed its result) ❌
556
+ **Bad placement:** Before automation ❌ | Too frequent ❌ | Too late (dependent tasks already needed the result) ❌
710
557
  </writing_guidelines>
711
558
 
712
559
  <examples>
713
560
 
714
- ### Example 1: Deployment Flow (Correct)
715
-
716
- ```xml
717
- <!-- OpenCode automates everything -->
718
- <task type="auto">
719
- <name>Deploy to Vercel</name>
720
- <files>.vercel/, vercel.json, package.json</files>
721
- <action>
722
- 1. Run `vercel --yes` to create project and deploy
723
- 2. Capture deployment URL from output
724
- 3. Set environment variables with `vercel env add`
725
- 4. Trigger production deployment with `vercel --prod`
726
- </action>
727
- <verify>
728
- - vercel ls shows deployment
729
- - curl {url} returns 200
730
- - Environment variables set correctly
731
- </verify>
732
- <done>App deployed to production, URL captured</done>
733
- </task>
734
-
735
- <!-- Human verifies visual/functional correctness -->
736
- <task type="checkpoint:human-verify" gate="blocking">
737
- <what-built>Deployed to https://myapp.vercel.app</what-built>
738
- <how-to-verify>
739
- Visit https://myapp.vercel.app and confirm:
740
- - Homepage loads correctly
741
- - All images/assets load
742
- - Navigation works
743
- - No console errors
744
- </how-to-verify>
745
- <resume-signal>Type "approved" or describe issues</resume-signal>
746
- </task>
747
- ```
748
-
749
- ### Example 2: Database Setup (No Checkpoint Needed)
561
+ ### Example 1: Database Setup (No Checkpoint Needed)
750
562
 
751
563
  ```xml
752
- <!-- OpenCode automates everything -->
753
564
  <task type="auto">
754
565
  <name>Create Upstash Redis database</name>
755
566
  <files>.env</files>
@@ -770,39 +581,7 @@ If default port is in use, check what's running and either:
770
581
  <!-- NO CHECKPOINT NEEDED - OpenCode automated everything and verified programmatically -->
771
582
  ```
772
583
 
773
- ### Example 3: Stripe Webhooks (Correct)
774
-
775
- ```xml
776
- <!-- OpenCode automates everything -->
777
- <task type="auto">
778
- <name>Configure Stripe webhooks</name>
779
- <files>.env, src/app/api/webhooks/route.ts</files>
780
- <action>
781
- 1. Use Stripe API to create webhook endpoint pointing to /api/webhooks
782
- 2. Subscribe to events: payment_intent.succeeded, customer.subscription.updated
783
- 3. Save webhook signing secret to .env
784
- 4. Implement webhook handler in route.ts
785
- </action>
786
- <verify>
787
- - Stripe API returns webhook endpoint ID
788
- - .env contains STRIPE_WEBHOOK_SECRET
789
- - curl webhook endpoint returns 200
790
- </verify>
791
- <done>Stripe webhooks configured and handler implemented</done>
792
- </task>
793
-
794
- <!-- Human verifies in Stripe dashboard -->
795
- <task type="checkpoint:human-verify" gate="blocking">
796
- <what-built>Stripe webhook configured via API</what-built>
797
- <how-to-verify>
798
- Visit Stripe Dashboard > Developers > Webhooks
799
- Confirm: Endpoint shows https://myapp.com/api/webhooks with correct events
800
- </how-to-verify>
801
- <resume-signal>Type "yes" if correct</resume-signal>
802
- </task>
803
- ```
804
-
805
- ### Example 4: Full Auth Flow Verification (Correct)
584
+ ### Example 2: Full Auth Flow (Single checkpoint at end)
806
585
 
807
586
  ```xml
808
587
  <task type="auto">
@@ -833,7 +612,7 @@ If default port is in use, check what's running and either:
833
612
  <done>Dev server running at http://localhost:3000</done>
834
613
  </task>
835
614
 
836
- <!-- ONE checkpoint at end verifies the complete flow - OpenCode already started server -->
615
+ <!-- ONE checkpoint at end verifies the complete flow -->
837
616
  <task type="checkpoint:human-verify" gate="blocking">
838
617
  <what-built>Complete authentication flow - dev server running at http://localhost:3000</what-built>
839
618
  <how-to-verify>
@@ -885,63 +664,16 @@ If default port is in use, check what's running and either:
885
664
  </task>
886
665
  ```
887
666
 
888
- ### ❌ BAD: Asking user to add env vars in dashboard
889
-
890
- ```xml
891
- <task type="checkpoint:human-action" gate="blocking">
892
- <action>Add environment variables to Convex</action>
893
- <instructions>
894
- 1. Go to dashboard.convex.dev
895
- 2. Select your project
896
- 3. Navigate to Settings → Environment Variables
897
- 4. Add OPENAI_API_KEY with your key
898
- </instructions>
899
- </task>
900
- ```
901
-
902
- **Why bad:** Convex has `npx convex env set`. OpenCode should ask for the key value, then run the CLI command.
903
-
904
- ### ✅ GOOD: OpenCode collects secret, adds via CLI
905
-
906
- ```xml
907
- <task type="checkpoint:human-action" gate="blocking">
908
- <action>Provide your OpenAI API key</action>
909
- <instructions>
910
- I need your OpenAI API key. Get it from: https://platform.openai.com/api-keys
911
- Paste the key below (starts with sk-)
912
- </instructions>
913
- <verification>I'll configure it via CLI</verification>
914
- <resume-signal>Paste your key</resume-signal>
915
- </task>
916
-
917
- <task type="auto">
918
- <name>Add OpenAI key to Convex</name>
919
- <action>Run `npx convex env set OPENAI_API_KEY {key}`</action>
920
- <verify>`npx convex env get` shows OPENAI_API_KEY configured</verify>
921
- </task>
922
- ```
923
-
924
- ### ❌ BAD: Asking human to deploy
667
+ ### ❌ BAD: Asking human to deploy / GOOD: OpenCode automates
925
668
 
926
669
  ```xml
670
+ <!-- BAD: Asking user to deploy via dashboard -->
927
671
  <task type="checkpoint:human-action" gate="blocking">
928
672
  <action>Deploy to Vercel</action>
929
- <instructions>
930
- 1. Visit vercel.com/new
931
- 2. Import Git repository
932
- 3. Click Deploy
933
- 4. Copy deployment URL
934
- </instructions>
935
- <verification>Deployment exists</verification>
936
- <resume-signal>Paste URL</resume-signal>
673
+ <instructions>Visit vercel.com/new → Import repo → Click Deploy → Copy URL</instructions>
937
674
  </task>
938
- ```
939
-
940
- **Why bad:** Vercel has a CLI. OpenCode should run `vercel --yes`.
941
675
 
942
- ### GOOD: OpenCode automates, human verifies
943
-
944
- ```xml
676
+ <!-- GOOD: OpenCode deploys, user verifies -->
945
677
  <task type="auto">
946
678
  <name>Deploy to Vercel</name>
947
679
  <action>Run `vercel --yes`. Capture URL.</action>
@@ -955,22 +687,18 @@ If default port is in use, check what's running and either:
955
687
  </task>
956
688
  ```
957
689
 
958
- ### ❌ BAD: Too many checkpoints
690
+ ### ❌ BAD: Too many checkpoints / ✅ GOOD: Single checkpoint
959
691
 
960
692
  ```xml
693
+ <!-- BAD: Checkpoint after every task -->
961
694
  <task type="auto">Create schema</task>
962
695
  <task type="checkpoint:human-verify">Check schema</task>
963
696
  <task type="auto">Create API route</task>
964
697
  <task type="checkpoint:human-verify">Check API</task>
965
698
  <task type="auto">Create UI form</task>
966
699
  <task type="checkpoint:human-verify">Check form</task>
967
- ```
968
-
969
- **Why bad:** Verification fatigue. Combine into one checkpoint at end.
970
700
 
971
- ### GOOD: Single verification checkpoint
972
-
973
- ```xml
701
+ <!-- GOOD: One checkpoint at end -->
974
702
  <task type="auto">Create schema</task>
975
703
  <task type="auto">Create API route</task>
976
704
  <task type="auto">Create UI form</task>
@@ -982,36 +710,16 @@ If default port is in use, check what's running and either:
982
710
  </task>
983
711
  ```
984
712
 
985
- ### ❌ BAD: Asking for automatable file operations
986
-
987
- ```xml
988
- <task type="checkpoint:human-action">
989
- <action>Create .env file</action>
990
- <instructions>
991
- 1. Create .env in project root
992
- 2. Add: DATABASE_URL=...
993
- 3. Add: STRIPE_KEY=...
994
- </instructions>
995
- </task>
996
- ```
997
-
998
- **Why bad:** OpenCode has write tool. This should be `type="auto"`.
999
-
1000
- ### ❌ BAD: Vague verification steps
713
+ ### ❌ BAD: Vague verification / GOOD: Specific steps
1001
714
 
1002
715
  ```xml
716
+ <!-- BAD -->
1003
717
  <task type="checkpoint:human-verify">
1004
718
  <what-built>Dashboard</what-built>
1005
719
  <how-to-verify>Check it works</how-to-verify>
1006
- <resume-signal>Continue</resume-signal>
1007
720
  </task>
1008
- ```
1009
-
1010
- **Why bad:** No specifics. User doesn't know what to test or what "works" means.
1011
721
 
1012
- ### GOOD: Specific verification steps (server already running)
1013
-
1014
- ```xml
722
+ <!-- GOOD -->
1015
723
  <task type="checkpoint:human-verify">
1016
724
  <what-built>Responsive dashboard - server running at http://localhost:3000</what-built>
1017
725
  <how-to-verify>
@@ -1025,16 +733,12 @@ If default port is in use, check what's running and either:
1025
733
  </task>
1026
734
  ```
1027
735
 
1028
- ### ❌ BAD: Asking user to run any CLI command
736
+ ### ❌ BAD: Asking user to run CLI commands
1029
737
 
1030
738
  ```xml
1031
739
  <task type="checkpoint:human-action">
1032
740
  <action>Run database migrations</action>
1033
- <instructions>
1034
- 1. Run: npx prisma migrate deploy
1035
- 2. Run: npx prisma db seed
1036
- 3. Verify tables exist
1037
- </instructions>
741
+ <instructions>Run: npx prisma migrate deploy && npx prisma db seed</instructions>
1038
742
  </task>
1039
743
  ```
1040
744
 
@@ -1045,13 +749,7 @@ If default port is in use, check what's running and either:
1045
749
  ```xml
1046
750
  <task type="checkpoint:human-action">
1047
751
  <action>Configure webhook URL in Stripe</action>
1048
- <instructions>
1049
- 1. Copy the deployment URL from terminal
1050
- 2. Go to Stripe Dashboard → Webhooks
1051
- 3. Add endpoint with URL + /api/webhooks
1052
- 4. Copy webhook signing secret
1053
- 5. Add to .env file
1054
- </instructions>
752
+ <instructions>Copy deployment URL → Stripe Dashboard → Webhooks → Add endpoint → Copy secret → Add to .env</instructions>
1055
753
  </task>
1056
754
  ```
1057
755
 
@@ -1061,18 +759,18 @@ If default port is in use, check what's running and either:
1061
759
 
1062
760
  <summary>
1063
761
 
1064
- Checkpoints formalize human-in-the-loop points. Use them when OpenCode cannot complete a task autonomously OR when human verification is required for correctness.
762
+ Checkpoints formalize human-in-the-loop points for verification and decisions, not manual work.
1065
763
 
1066
764
  **The golden rule:** If OpenCode CAN automate it, OpenCode MUST automate it.
1067
765
 
1068
766
  **Checkpoint priority:**
1069
- 1. **checkpoint:human-verify** (90% of checkpoints) - OpenCode automated everything, human confirms visual/functional correctness
1070
- 2. **checkpoint:decision** (9% of checkpoints) - Human makes architectural/technology choices
1071
- 3. **checkpoint:human-action** (1% of checkpoints) - Truly unavoidable manual steps with no API/CLI
767
+ 1. **checkpoint:human-verify** (90%) - OpenCode automated everything, human confirms visual/functional correctness
768
+ 2. **checkpoint:decision** (9%) - Human makes architectural/technology choices
769
+ 3. **checkpoint:human-action** (1%) - Truly unavoidable manual steps with no API/CLI
1072
770
 
1073
771
  **When NOT to use checkpoints:**
1074
- - Things OpenCode can verify programmatically (tests pass, build succeeds)
1075
- - File operations (OpenCode can read files to verify)
1076
- - Code correctness (use tests and static analysis)
772
+ - Things OpenCode can verify programmatically (tests, builds)
773
+ - File operations (OpenCode can read files)
774
+ - Code correctness (tests and static analysis)
1077
775
  - Anything automatable via CLI/API
1078
776
  </summary>