@open-agent-toolkit/cli 0.0.61 → 0.0.65

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 (58) hide show
  1. package/assets/docs/cli-utilities/tool-packs.md +74 -4
  2. package/assets/docs/reference/file-locations.md +1 -1
  3. package/assets/docs/reference/oat-directory-structure.md +2 -0
  4. package/assets/docs/workflows/ideas/index.md +6 -0
  5. package/assets/docs/workflows/ideas/lifecycle.md +12 -0
  6. package/assets/docs/workflows/projects/lifecycle.md +21 -0
  7. package/assets/docs/workflows/skills/index.md +8 -2
  8. package/assets/public-package-versions.json +4 -4
  9. package/assets/skills/oat-brainstorm/SKILL.md +600 -0
  10. package/assets/skills/oat-brainstorm/references/destinations.md +167 -0
  11. package/assets/skills/oat-brainstorm/references/dogfood-results.md +731 -0
  12. package/assets/skills/oat-brainstorm/references/visual-companion.md +316 -0
  13. package/assets/skills/oat-brainstorm/scripts/frame-template.html +214 -0
  14. package/assets/skills/oat-brainstorm/scripts/helper.js +88 -0
  15. package/assets/skills/oat-brainstorm/scripts/server.cjs +354 -0
  16. package/assets/skills/oat-brainstorm/scripts/start-server.sh +176 -0
  17. package/assets/skills/oat-brainstorm/scripts/stop-server.sh +56 -0
  18. package/assets/skills/oat-brainstorm/templates/brainstorm-doc.md +79 -0
  19. package/assets/skills/oat-idea-ideate/SKILL.md +8 -4
  20. package/assets/skills/oat-pjm-add-backlog-item/SKILL.md +2 -1
  21. package/assets/skills/oat-pjm-update-repo-reference/SKILL.md +2 -1
  22. package/assets/skills/oat-project-complete/SKILL.md +49 -2
  23. package/assets/skills/oat-project-document/SKILL.md +2 -1
  24. package/assets/skills/oat-project-pr-final/SKILL.md +2 -1
  25. package/assets/skills/oat-project-spec/SKILL.md +2 -2
  26. package/assets/skills/oat-project-summary/SKILL.md +2 -1
  27. package/dist/commands/config/index.d.ts.map +1 -1
  28. package/dist/commands/config/index.js +12 -0
  29. package/dist/commands/init/tools/brainstorm/index.d.ts +22 -0
  30. package/dist/commands/init/tools/brainstorm/index.d.ts.map +1 -0
  31. package/dist/commands/init/tools/brainstorm/index.js +145 -0
  32. package/dist/commands/init/tools/brainstorm/install-brainstorm.d.ts +19 -0
  33. package/dist/commands/init/tools/brainstorm/install-brainstorm.d.ts.map +1 -0
  34. package/dist/commands/init/tools/brainstorm/install-brainstorm.js +37 -0
  35. package/dist/commands/init/tools/index.d.ts +3 -1
  36. package/dist/commands/init/tools/index.d.ts.map +1 -1
  37. package/dist/commands/init/tools/index.js +76 -6
  38. package/dist/commands/init/tools/shared/skill-manifest.d.ts +7 -0
  39. package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
  40. package/dist/commands/init/tools/shared/skill-manifest.js +11 -0
  41. package/dist/commands/tools/remove/index.d.ts.map +1 -1
  42. package/dist/commands/tools/remove/index.js +2 -1
  43. package/dist/commands/tools/shared/install-sync-context.d.ts.map +1 -1
  44. package/dist/commands/tools/shared/install-sync-context.js +3 -1
  45. package/dist/commands/tools/shared/scan-tools.d.ts.map +1 -1
  46. package/dist/commands/tools/shared/scan-tools.js +3 -1
  47. package/dist/commands/tools/shared/types.d.ts +1 -1
  48. package/dist/commands/tools/shared/types.d.ts.map +1 -1
  49. package/dist/commands/tools/update/index.d.ts.map +1 -1
  50. package/dist/commands/tools/update/index.js +2 -1
  51. package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
  52. package/dist/commands/tools/update/update-tools.js +6 -1
  53. package/dist/config/oat-config.d.ts +1 -1
  54. package/dist/config/oat-config.d.ts.map +1 -1
  55. package/dist/config/oat-config.js +1 -0
  56. package/dist/config/resolve.d.ts.map +1 -1
  57. package/dist/config/resolve.js +1 -0
  58. package/package.json +2 -2
@@ -0,0 +1,731 @@
1
+ # Dogfood Results — `oat-brainstorm`
2
+
3
+ > **Walkthrough plans only — not live runs.** This file documents
4
+ > walkthrough plans for the 10 dogfood scenarios from `design.md` Testing
5
+ > Strategy. None of the scenarios were exercised against live LLM
6
+ > conversations, real `git status` / `git commit`, or live visual-companion
7
+ > sessions while writing this document. The fold-back commit safety contract
8
+ > in particular has **not** been exercised against real working-tree state.
9
+ > The follow-up live-dogfood task is tracked as a backlog item — see
10
+ > `.oat/repo/reference/backlog/items/live-dogfood-oat-brainstorm.md`
11
+ > ("Live dogfood for `oat-brainstorm` — fold-back commit safety + 9
12
+ > destination families"). Treat the contents below as a contract spec for
13
+ > what live dogfood will assert, not as a record of completed runs.
14
+
15
+ This document records walkthrough plans for the 10 dogfood scenarios from
16
+ `design.md` Testing Strategy. Each scenario captures: setup (preconditions),
17
+ the brainstorming flow that would be taken, the artifact(s) produced, the
18
+ verifiable skill content for that path, and any issues / follow-ups.
19
+
20
+ **Note on dogfood interpretation.** Dogfood here means _exercising the skill
21
+ as a documented flow_, not running a live brainstorm conversation through an
22
+ LLM in interactive context. The skill ships as markdown content that an
23
+ invoking agent reads and executes; verification at this stage is whether the
24
+ flow is unambiguous and self-contained for each terminal state. Live
25
+ brainstorm conversations will surface tuning opportunities (trigger-phrase
26
+ sensitivity, conversation cadence) that this walkthrough cannot anticipate;
27
+ those are tracked in the live-dogfood backlog item, not gating issues for
28
+ this project.
29
+
30
+ **Repo state used for the walkthroughs.** This repo
31
+ (`open-agent-toolkit`) has the following packs installed:
32
+
33
+ - `core` (`tools.core: true`)
34
+ - `ideas` (`tools.ideas: true`)
35
+ - `workflows` (`tools.workflows: true`)
36
+ - `utility` (`tools.utility: true`)
37
+ - `project-management` (`tools.project-management: true`)
38
+ - `research` (`tools.research: true`)
39
+ - `docs` (`tools.docs: true`)
40
+ - `brainstorm` (newly added in this project)
41
+
42
+ So all pack-gated terminal states are reachable. Active-project state varies
43
+ per scenario (some assume an active OAT project, some assume none).
44
+
45
+ **Skill files referenced throughout.**
46
+
47
+ - `.agents/skills/oat-brainstorm/SKILL.md` — the dispatcher
48
+ - `.agents/skills/oat-brainstorm/references/destinations.md` — playbook
49
+ - `.agents/skills/oat-brainstorm/templates/brainstorm-doc.md` — doc-to-path
50
+ - Downstream: `.agents/skills/oat-idea-new/SKILL.md`,
51
+ `.agents/skills/oat-idea-ideate/SKILL.md`,
52
+ `.agents/skills/oat-idea-summarize/SKILL.md`,
53
+ `.agents/skills/oat-pjm-add-backlog-item/SKILL.md`,
54
+ `.agents/skills/oat-project-new/SKILL.md`
55
+
56
+ ---
57
+
58
+ ## Scenario 1: Inline only
59
+
60
+ **Setup**
61
+
62
+ - Any directory; no active project required.
63
+ - User opens a chat with an exploratory message such as:
64
+ > "I've been thinking about how our PR review tooling feels heavy. Just
65
+ > want to talk through whether we should change anything — no need to
66
+ > write this down."
67
+
68
+ **Flow**
69
+
70
+ 1. Always-on description on `oat-brainstorm` fires on "I've been thinking
71
+ about" + "talk through" + "no need to write this down" — exploratory
72
+ phrasing with explicit no-artifact signal.
73
+ 2. Skill prints OAT MODE: Brainstorm banner, asserts mode.
74
+ 3. Visual companion offer (own message). User declines (text-only topic).
75
+ 4. Pack and active-project detection runs once. No active project. All packs
76
+ installed.
77
+ 5. Free brainstorming. Skill explores: what specifically feels heavy? Which
78
+ step? What would lighter look like? Skill proposes 2-3 distinct approaches
79
+ (e.g., reduce required reviewers, async-first review, rotation policy).
80
+ 6. Trigger phrase from Step 1 ("no need to write this down") matched against
81
+ destinations playbook → matches "Inline only" stanza trigger phrases.
82
+ Skill surfaces immediately: "Sounds like inline-only — close out with a
83
+ summary, no artifact?"
84
+ 7. Satisfaction check: user confirms wrap up.
85
+ 8. Synthesis: skill builds the in-memory `SynthesizedPayload` for closure.
86
+ Inline-only requires no template fields (just the summary).
87
+ 9. Handoff: `Inline only` branch in SKILL.md Process step 9 — emits a
88
+ one-paragraph closing summary capturing the chosen direction (or "no
89
+ direction selected"), key decisions, open questions. Ends mode assertion.
90
+
91
+ **Artifact produced**
92
+
93
+ - None. Closing summary is in-conversation text only.
94
+
95
+ **Verifiable from skill content**
96
+
97
+ - `destinations.md` "Inline only" stanza: `Pack required: always available`,
98
+ trigger phrases include "no need to write this down", confirmation pattern
99
+ `none`, `Handoff target: no downstream skill`.
100
+ - SKILL.md Process step 9 "Inline only" branch: emits closing summary, ends
101
+ mode assertion.
102
+
103
+ **Issues / follow-ups**
104
+
105
+ - None observed in skill content. Live testing may reveal tuning needs in
106
+ the trigger-phrase boundary against routine "talk it through" questions
107
+ that aren't actually exploratory.
108
+
109
+ ---
110
+
111
+ ## Scenario 2: Doc-to-path (in-repo)
112
+
113
+ **Setup**
114
+
115
+ - Inside an OAT-initialized repo (e.g., this repo).
116
+ - User: > "I want to map out where our config layering gets confusing.
117
+ > Write this to `docs/scratchpad/config-layering.md` when we're done."
118
+
119
+ **Flow**
120
+
121
+ 1. Trigger fires on "I want to map out" + explicit user-supplied path.
122
+ 2. Mode banner; mode assertion.
123
+ 3. Visual-companion offer. User likely declines (textual mapping).
124
+ 4. Pack/active-project detection.
125
+ 5. Free brainstorming about config layers (`shared/`, `local`, user, env
126
+ overrides). Skill proposes 2-3 ways to structure the document
127
+ (layer-by-layer, by use-case, by symptom).
128
+ 6. Destination identification: explicit user-supplied path → direct match on
129
+ "Doc-to-path" stanza. Skill notes the destination and continues exploring.
130
+ 7. Satisfaction check (when convergence happens or when user signals).
131
+ 8. Synthesis: build payload with `title`, `summary`, `approachesConsidered`,
132
+ `chosenDirection`, `transcriptSessionNote` (required), plus `motivation`,
133
+ `vision`, `openQuestions`, `nextSteps` (optional, populated from
134
+ conversation).
135
+ 9. Doc-to-path handoff (Process step 9):
136
+ - Path validation: `docs/scratchpad/config-layering.md` is in-repo, parent
137
+ `docs/scratchpad/` exists in this repo. No off-repo confirmation needed.
138
+ - Render `templates/brainstorm-doc.md` with payload values.
139
+ - Write the file. Report absolute path to the user.
140
+
141
+ **Artifact produced**
142
+
143
+ - `docs/scratchpad/config-layering.md` rendered from
144
+ `.agents/skills/oat-brainstorm/templates/brainstorm-doc.md` with title,
145
+ overview, approaches considered, chosen direction, open questions, next
146
+ steps, and a transcript session note appendix.
147
+
148
+ **Verifiable from skill content**
149
+
150
+ - `destinations.md` "Doc-to-path" stanza: confirmation `minimal` (path only);
151
+ in-repo and off-repo path handling described.
152
+ - SKILL.md Process step 9 doc-to-path branch: parent existence check, file
153
+ collision check, unwritable error handling per design Error Handling.
154
+ - `templates/brainstorm-doc.md`: section structure matches the
155
+ `SynthesizedPayload` interface from design Data Models.
156
+
157
+ **Issues / follow-ups**
158
+
159
+ - None.
160
+
161
+ ---
162
+
163
+ ## Scenario 3: Doc-to-path (off-repo)
164
+
165
+ **Setup**
166
+
167
+ - Inside this repo.
168
+ - User: > "Write up where I landed on the personal-vault note structure into
169
+ > `~/vault/notes/vault-structure-2026-05.md`."
170
+
171
+ **Flow**
172
+
173
+ Same as Scenario 2 through Step 8.
174
+
175
+ 9. Doc-to-path handoff:
176
+ - Path expansion: `~` resolves to `$HOME`.
177
+ - Path is outside the current repo. Skill MUST require explicit
178
+ confirmation per design Error Handling: "About to write outside the
179
+ current repo to `<absolute-path>` — confirm?"
180
+ - User confirms.
181
+ - Parent directory `~/vault/notes/` may exist or not; if missing, offer
182
+ to create with the off-repo confirmation.
183
+ - Render and write.
184
+
185
+ **Artifact produced**
186
+
187
+ - `~/vault/notes/vault-structure-2026-05.md` rendered from
188
+ `templates/brainstorm-doc.md`.
189
+
190
+ **Verifiable from skill content**
191
+
192
+ - SKILL.md Process step 9 doc-to-path branch explicitly handles the
193
+ out-of-repo case with confirmation.
194
+ - `destinations.md` "Doc-to-path" stanza covers explicit user-supplied path
195
+ trigger including paths outside the repo.
196
+
197
+ **Issues / follow-ups**
198
+
199
+ - None observed in skill content. The off-repo confirmation wording is
200
+ written by the agent at runtime; consistent phrasing across runs is a
201
+ potential live-tuning area.
202
+
203
+ ---
204
+
205
+ ## Scenario 4: Capture as new idea
206
+
207
+ **Setup**
208
+
209
+ - This repo (has `tools.ideas: true`).
210
+ - User: > "I've been thinking about a way to make `oat-doctor` self-heal
211
+ > common config drift. Capture this as an idea so I don't forget."
212
+
213
+ **Flow**
214
+
215
+ 1. Trigger fires on "I've been thinking about" + "capture this as an idea".
216
+ 2. Mode banner; mode assertion.
217
+ 3. Visual-companion offer (declined for prose-heavy idea).
218
+ 4. Pack detection: `tools.ideas: true`. Idea-pack destinations enabled.
219
+ 5. Free brainstorming about what self-healing would mean, which drift cases
220
+ are common, what's safe vs unsafe to auto-fix.
221
+ 6. "Capture this as an idea" → matches `destinations.md` "Capture as new
222
+ idea" stanza. Skill surfaces destination.
223
+ 7. Satisfaction check: user confirms wrap up.
224
+ 8. Synthesis: build payload with `title` (slug-friendly), `summary`,
225
+ `motivation` (Why Is It Interesting?), `vision` (What Would It Look
226
+ Like?), `transcriptSessionNote`, plus optionals.
227
+ 9. Handoff (Process step 9 capture-as-new-idea branch):
228
+ - Read `.agents/skills/oat-idea-new/SKILL.md`.
229
+ - Run its Steps 3-7 inline: initialize `.oat/ideas/` dir, scaffold
230
+ `<slug>/discovery.md`, update backlog, check scratchpad, set active-idea
231
+ pointer.
232
+ - Seed scaffolded `discovery.md` first session with payload contents
233
+ (What's the Idea?, Why Is It Interesting?, What Would It Look Like?,
234
+ first session note in Notes & Discussion).
235
+ - Offer to chain into `oat-idea-ideate` Step 4 or stop.
236
+
237
+ **Artifact produced**
238
+
239
+ - `.oat/ideas/<slug>/discovery.md` — populated with payload, idea-pack
240
+ scaffolding present.
241
+ - Backlog index updated to reference the new idea.
242
+ - Active-idea pointer set.
243
+
244
+ **Verifiable from skill content**
245
+
246
+ - `destinations.md` "Capture as new idea" stanza: pack required `ideas`,
247
+ confirmation `minimal` (slug only), handoff target `oat-idea-new` Steps 3-7
248
+ with seeding instructions.
249
+ - SKILL.md Process step 9 capture-as-new-idea branch references the same
250
+ steps and seeding behavior.
251
+ - `.agents/skills/oat-idea-new/SKILL.md` exists at the canonical path.
252
+
253
+ **Issues / follow-ups**
254
+
255
+ - None.
256
+
257
+ ---
258
+
259
+ ## Scenario 5: Extend existing idea
260
+
261
+ **Setup**
262
+
263
+ - This repo with at least one existing idea under `.oat/ideas/<slug>/`.
264
+ - User: > "Add another session to the `oat-doctor-self-heal` idea — I had
265
+ > some new thoughts on which drift cases to prioritize."
266
+
267
+ **Flow**
268
+
269
+ 1. Trigger fires on "add another session" + slug reference.
270
+ 2. Mode banner; mode assertion.
271
+ 3. Visual-companion offer; declined.
272
+ 4. Pack detection: `tools.ideas: true`.
273
+ 5. Free brainstorming about prioritization criteria.
274
+ 6. "Add to the `<idea-slug>` idea" → matches `destinations.md` "Extend
275
+ existing idea" stanza. Skill confirms which idea: minimal confirmation.
276
+ 7. Satisfaction check.
277
+ 8. Synthesis: build payload — `transcriptSessionNote` (the new session
278
+ body), optionally `chosenDirection`, `openQuestions`, `nextSteps`.
279
+ 9. Handoff (Process step 9 extend-existing-idea branch):
280
+ - Read `.agents/skills/oat-idea-ideate/SKILL.md`.
281
+ - Run its Step 4 (Start New Session) with the resolved idea path.
282
+ - Append `transcriptSessionNote` from the brainstorming payload as the
283
+ new session's body.
284
+
285
+ **Artifact produced**
286
+
287
+ - `.oat/ideas/oat-doctor-self-heal/discovery.md` — new session appended
288
+ under "Notes & Discussion".
289
+
290
+ **Verifiable from skill content**
291
+
292
+ - `destinations.md` "Extend existing idea" stanza: `oat-idea-ideate` Step 4
293
+ handoff, append-new-session semantics.
294
+ - `.agents/skills/oat-idea-ideate/SKILL.md` exists at the canonical path.
295
+
296
+ **Issues / follow-ups**
297
+
298
+ - None observed. Live runs may surface ambiguity when a slug is
299
+ paraphrased — the playbook says skill "asks before committing when
300
+ ambiguous", which addresses this.
301
+
302
+ ---
303
+
304
+ ## Scenario 6: Summarize idea directly
305
+
306
+ **Setup**
307
+
308
+ - This repo.
309
+ - User: > "I've been turning over an idea about a `oat-stale-pr` skill that
310
+ > nudges abandoned PRs. Summarize this idea so I have a clean writeup."
311
+
312
+ **Flow**
313
+
314
+ 1. Trigger fires on "I've been turning over" + "summarize this idea".
315
+ 2. Mode banner; mode assertion.
316
+ 3. Visual-companion offer; declined.
317
+ 4. Pack detection: `tools.ideas: true`.
318
+ 5. Free brainstorming about what "stale" means, what nudge channel, how to
319
+ avoid noise.
320
+ 6. "Summarize this idea" → matches `destinations.md` "Summarize idea
321
+ directly" stanza.
322
+ 7. Satisfaction check.
323
+ 8. Synthesis: build payload (same field set as capture-as-new-idea — the
324
+ capture path runs first silently).
325
+ 9. Handoff (Process step 9 summarize-idea-directly branch):
326
+ - Capture-as-new-idea path runs silently (read
327
+ `.agents/skills/oat-idea-new/SKILL.md`, run Steps 3-7, seed discovery).
328
+ - Then read `.agents/skills/oat-idea-summarize/SKILL.md` and run it
329
+ end-to-end. The `oat-idea-summarize` skill's own accept/refine review
330
+ serves as the user gate.
331
+
332
+ **Artifact produced**
333
+
334
+ - `.oat/ideas/<slug>/discovery.md` — populated.
335
+ - `.oat/ideas/<slug>/summary.md` — produced by `oat-idea-summarize`.
336
+
337
+ **Verifiable from skill content**
338
+
339
+ - `destinations.md` "Summarize idea directly" stanza: confirmation `none` at
340
+ this layer; downstream skill owns the review gate.
341
+ - SKILL.md Process step 9 summarize-idea-directly branch references both
342
+ downstream skill paths.
343
+ - Both `oat-idea-new` and `oat-idea-summarize` SKILL.md files exist at
344
+ canonical paths.
345
+
346
+ **Issues / follow-ups**
347
+
348
+ - None.
349
+
350
+ ---
351
+
352
+ ## Scenario 7: Scoped backlog item
353
+
354
+ **Setup**
355
+
356
+ - This repo (has `tools.project-management: true`).
357
+ - User: > "We keep hitting this annoying drift in provider-view sync after
358
+ > rebases. Track this as a backlog item — I think it's a real bug."
359
+
360
+ **Flow**
361
+
362
+ 1. Trigger fires on "we keep hitting" + "track this as a backlog item".
363
+ 2. Mode banner; mode assertion.
364
+ 3. Visual-companion offer; declined.
365
+ 4. Pack detection: `tools.project-management: true`. Backlog destination
366
+ enabled.
367
+ 5. Free brainstorming about: which rebase scenarios trigger it, what the
368
+ symptom is, what an acceptable fix would look like, scope estimate.
369
+ 6. "Track this as a backlog item" → matches `destinations.md` "Scoped
370
+ backlog item" stanza.
371
+ 7. Satisfaction check.
372
+ 8. Synthesis (with **full** confirmation pattern per the stanza):
373
+
374
+ ```
375
+ I have what I need to track this as a backlog item. Here is the proposed payload:
376
+
377
+ Title: Provider-view sync drift after rebase
378
+ Description:
379
+ After a worktree rebases against main, provider views can desync from
380
+ the canonical asset map. The next sync corrects state but the gap is
381
+ confusing during reviews.
382
+ Acceptance Criteria:
383
+ - Reproducible repro for the desync state under post-rebase conditions
384
+ - Drift surfaced by a check command (likely `oat sync --check` or
385
+ `oat-doctor`) so users notice before the next sync
386
+ - Fix preserves manifest hash semantics
387
+ Scope: m
388
+ Priority: p2
389
+
390
+ Confirm to write this to a new bl-XXXX file, or tell me what to change.
391
+ ```
392
+
393
+ User confirms or revises field-by-field.
394
+
395
+ 9. Handoff (Process step 9 scoped-backlog-item branch):
396
+ - Read `.agents/skills/oat-pjm-add-backlog-item/SKILL.md`.
397
+ - Run its process from Step 1 with the confirmed payload pre-filling the
398
+ early prompts (title, description, AC, scope, priority).
399
+ - Downstream skill owns ID generation, file writing, and backlog-index
400
+ regeneration.
401
+
402
+ **Artifact produced**
403
+
404
+ - `.oat/repo/reference/backlog/items/<slug>.md` (e.g.,
405
+ `bl-XXXX-provider-view-sync-drift.md`) with full payload.
406
+ - Backlog index regenerated.
407
+
408
+ **Verifiable from skill content**
409
+
410
+ - `destinations.md` "Scoped backlog item" stanza: confirmation pattern
411
+ `full` with the worked example wording above (matches design's canonical
412
+ example).
413
+ - SKILL.md Process step 9 scoped-backlog-item branch references
414
+ `oat-pjm-add-backlog-item` and pre-fill semantics.
415
+ - `.agents/skills/oat-pjm-add-backlog-item/SKILL.md` exists at the canonical
416
+ path.
417
+
418
+ **Issues / follow-ups**
419
+
420
+ - None observed in skill content. The full-confirmation example wording
421
+ matches the design's canonical wording exactly, including the field
422
+ layout.
423
+
424
+ ---
425
+
426
+ ## Scenario 8: Promote to new OAT project
427
+
428
+ **Setup**
429
+
430
+ - This repo (has `tools.workflows: true`).
431
+ - No active project.
432
+ - User: > "I keep coming back to this idea of an `oat-archive-explore` skill
433
+ > for searching archived projects. Let's promote this to a project."
434
+
435
+ **Flow**
436
+
437
+ 1. Trigger fires on "let's promote this to a project".
438
+ 2. Mode banner; mode assertion.
439
+ 3. Visual-companion offer; declined.
440
+ 4. Pack detection: `tools.workflows: true`. Project promotion enabled. No
441
+ active project, so no 3-way router.
442
+ 5. Free brainstorming about: search shape (full-text vs metadata), output
443
+ format (terminal table vs JSON), scope reduction options.
444
+ 6. "Promote this to a project" → matches `destinations.md` "Promote to new
445
+ OAT project" stanza.
446
+ 7. Satisfaction check.
447
+ 8. Synthesis: build payload. Decide mode (`quick` vs `spec-driven`) based on
448
+ `chosen_direction` and scope signals — likely `quick` since search has
449
+ bounded scope and clear requirements emerged from the conversation.
450
+ Confirm slug + mode (minimal confirmation).
451
+ 9. Handoff (Process step 9 promote-to-new-OAT-project branch):
452
+ - Run `oat project new <slug> --mode quick` to scaffold.
453
+ - Write field-filled `discovery.md` only (Initial Request, Solution Space
454
+ with approaches, Chosen Direction, Key Decisions, Open Questions). NEVER
455
+ write `design.md` (per design — half-populated design constrains the
456
+ design phase).
457
+ - Mark `oat_status: complete` in discovery; `oat_ready_for:
458
+ oat-project-quick-start`.
459
+ - Update project `state.md` (phase=discovery, status=complete).
460
+ - Print pointer to `oat-project-quick-start` (for quick mode) or
461
+ `oat-project-design` (for spec-driven mode).
462
+ - **Stop.** Do NOT inline-execute the next phase.
463
+
464
+ **Artifact produced**
465
+
466
+ - `.oat/projects/shared/<slug>/discovery.md` — fully populated.
467
+ - `.oat/projects/shared/<slug>/state.md` — phase=discovery, status=complete.
468
+ - No `design.md` written.
469
+
470
+ **Verifiable from skill content**
471
+
472
+ - `destinations.md` "Promote to new OAT project" stanza: confirmation
473
+ `minimal` (slug + mode), handoff stops after discovery is seeded.
474
+ - SKILL.md Process step 9 promote-to-new-OAT-project branch: discovery-only
475
+ rule explicitly stated; explicit "do NOT inline-execute the next phase".
476
+
477
+ **Issues / follow-ups**
478
+
479
+ - The mode-decision heuristic (quick vs spec-driven) is articulated as
480
+ "based on chosen_direction and scope signals" but the exact thresholds are
481
+ inherently judgment-based. Live runs will calibrate this.
482
+
483
+ ---
484
+
485
+ ## Scenario 9: Active project — fold-back
486
+
487
+ **Setup**
488
+
489
+ - This repo with an active OAT project (e.g., this very project,
490
+ `independent-brainstorming`, while it's still in progress on a feature
491
+ branch).
492
+ - User: > "About this brainstorm-skill project — I've been thinking about
493
+ > whether the destinations playbook should also support a 'send to
494
+ > bookmark' state. Want to fold this in."
495
+
496
+ **Flow**
497
+
498
+ 1. Trigger fires on "I've been thinking about" + "fold this in" + active
499
+ project context.
500
+ 2. Mode banner; mode assertion.
501
+ 3. Visual-companion offer; declined.
502
+ 4. Pack detection: `tools.workflows: true`. Active project detected via
503
+ `oat config get activeProject`. Reads `state.md` for `oat_workflow_mode`,
504
+ `oat_phase`, `oat_pr_status`.
505
+ 5. Free brainstorming about: what "send to bookmark" means, where it
506
+ conflicts with existing destinations, scope of change.
507
+ 6. "Fold this in" + active project → 3-way router triggered.
508
+ - Router asks: "Is this brainstorm related to the active project?"
509
+ - User: "Related — fold-back."
510
+ - 3-way router → fold-back rule (uniform across spec-driven and quick
511
+ modes).
512
+ 7. Satisfaction check.
513
+ 8. Synthesis: build payload — `chosenDirection`, key decisions,
514
+ `transcriptSessionNote`.
515
+ 9. Fold-back handoff (Process step 9 active-project fold-back branch):
516
+ 1. **Pick upstream artifact.** `design.md` exists for this project →
517
+ use it. (For a quick-mode project without `design.md`, use
518
+ `discovery.md`.)
519
+ 2. **Preflight `git status` check.**
520
+ ```bash
521
+ git status --porcelain -- .oat/projects/shared/independent-brainstorming/design.md
522
+ ```
523
+ 3. **Clean → append + scoped commit.** Append `## Brainstorming Update:
524
+ 2026-05-01 — bookmark destination` section with chosen-direction,
525
+ key-decisions, transcript appendix. Then:
526
+ `bash
527
+ git add -- .oat/projects/shared/independent-brainstorming/design.md
528
+ git commit -m "chore(oat): integrate brainstorm into design.md for independent-brainstorming"
529
+ `
530
+ (Explicit `--` form. NEVER `-A`, NEVER globs.)
531
+ 4. **Dirty → user picker** (3 options): commit current first, mix with
532
+ fold-back, or abort and switch to brainstorming reference file.
533
+ 5. **Handoff prompt printed only after scoped commit succeeds.** This
534
+ project is `quick` mode + no PR open → prompt addresses
535
+ `oat-project-quick-start`:
536
+
537
+ ```
538
+ Run `oat-project-quick-start` with this context:
539
+
540
+ "A brainstorming session surfaced changes that needed to be folded
541
+ into design.md. I've committed the update (commit <hash>:
542
+ chore(oat): integrate brainstorm into design.md for
543
+ independent-brainstorming). Integrate the new content into the
544
+ existing plan as new tasks (or a new phase if substantial). Don't
545
+ refresh the existing plan — preserve review tables and any
546
+ in-progress task state."
547
+ ```
548
+
549
+ 6. **If `git commit` fails** (pre-commit hooks reject, signing fails, …):
550
+ surface the error, do NOT print handoff prompt.
551
+
552
+ **Artifact produced**
553
+
554
+ - Append to `<active-project>/design.md` (or `discovery.md` if no design).
555
+ - A scoped commit with hash referenced by the handoff prompt.
556
+
557
+ **Verifiable from skill content**
558
+
559
+ - SKILL.md Process step 9 active-project fold-back branch matches the
560
+ design's "Fold-back commit safety contract" word-for-word: preflight,
561
+ scoped staging discipline, three-option dirty-tree picker, conditional
562
+ handoff print, mode-and-PR-status routing table.
563
+ - `destinations.md` "Active project: fold-back" stanza references the
564
+ contract.
565
+
566
+ **Issues / follow-ups**
567
+
568
+ - The handoff-prompt commit hash interpolation is at runtime (skill text
569
+ uses `<hash>` placeholder). The hash MUST be the real hash from the
570
+ scoped commit; this is verifiable in live runs by inspecting the prompt
571
+ vs `git log`.
572
+ - This is the most safety-critical destination. The contract is exercised
573
+ end-to-end here as a walkthrough; live testing will be the first time
574
+ the actual `git status --porcelain --` and `git commit` commands run in
575
+ context.
576
+
577
+ ---
578
+
579
+ ## Scenario 10: Active project — brainstorming reference file
580
+
581
+ **Setup**
582
+
583
+ - This repo with an active OAT project (any project).
584
+ - User: > "Quick brainstorm related to the active project but not really
585
+ > design-grade — just a side thought about UX wording. Capture as a
586
+ > reference, not in the design doc."
587
+
588
+ **Flow**
589
+
590
+ 1. Trigger fires on exploratory phrasing + active project context +
591
+ "capture as a reference, not in the design doc".
592
+ 2. Mode banner; mode assertion.
593
+ 3. Visual-companion offer; declined.
594
+ 4. Pack detection: `tools.workflows: true`. Active project detected.
595
+ 5. Free brainstorming about UX wording options.
596
+ 6. Active project + "related but supplementary" → 3-way router:
597
+ - "Is this brainstorm related to the active project?"
598
+ - User: "Related but supplementary — reference file."
599
+ - Router routes to brainstorming reference file destination.
600
+ 7. Satisfaction check.
601
+ 8. Synthesis: build payload — `title` (topic slug), `summary`,
602
+ `transcriptSessionNote`, optional `chosenDirection`, `openQuestions`,
603
+ `nextSteps`.
604
+ 9. Handoff (Process step 9 active-project reference-file branch):
605
+ - Resolve `<project>/brainstorming/` directory; create if missing.
606
+ - Filename: `YYYY-MM-DD-<topic>.md`. Minimal confirmation on filename.
607
+ - Render synthesized payload using `templates/brainstorm-doc.md` (or a
608
+ simpler reference template if defined; the design says
609
+ `<project>/brainstorming/YYYY-MM-DD-<topic>.md` is "always available
610
+ regardless of project phase").
611
+ - Write the file. No upstream-artifact mutation. No commit (the file is
612
+ itself the artifact, separate from any plan/design changes).
613
+
614
+ **Artifact produced**
615
+
616
+ - `<active-project>/brainstorming/YYYY-MM-DD-<topic>.md` written with
617
+ payload contents.
618
+
619
+ **Verifiable from skill content**
620
+
621
+ - SKILL.md Process step 9 active-project router: "Related but supplementary
622
+ → brainstorming reference file at `<project>/brainstorming/YYYY-MM-DD-<topic>.md`
623
+ (always available regardless of project phase; minimal confirmation on
624
+ filename)".
625
+ - `destinations.md` "Active project: brainstorming reference file" stanza
626
+ references the same path convention.
627
+
628
+ **Issues / follow-ups**
629
+
630
+ - The reference-file path convention parallels `pr/` and `reviews/` per
631
+ design — naturally discoverable, no collision risk.
632
+
633
+ ---
634
+
635
+ ## Aggregate observations
636
+
637
+ **Stay-in-mode discipline.** All 10 walkthroughs stay within the skill's
638
+ declared blocked / allowed activities. None of them trigger any of the six
639
+ self-correction protocol entries (no implementation code, no auto-routing
640
+ before convergence, no skipping the visual-companion offer, no fold-back on
641
+ dirty tree without preflight, no `-A` staging, no premature handoff prompt).
642
+
643
+ **Coverage.** All 9 destination families exercised; doc-to-path is split
644
+ into in-repo (Scenario 2) and off-repo (Scenario 3) per the design's
645
+ testing-strategy refinement.
646
+
647
+ **Skill-content completeness.**
648
+
649
+ - All 9 stanzas present in `destinations.md`.
650
+ - All 9 handoff branches present in SKILL.md Process step 9.
651
+ - Doc-to-path template present at `templates/brainstorm-doc.md`.
652
+ - Visual-companion bundle present at `scripts/`.
653
+ - Visual-companion guide present at `references/visual-companion.md`.
654
+
655
+ **Open follow-ups (not gating ship).**
656
+
657
+ - Live-run trigger-phrase calibration. Initial set is conservative; first
658
+ ~10 real brainstorms in this repo will surface any over-fire or
659
+ under-fire patterns. Tracked as a follow-up per design Open Questions.
660
+ - Mode-decision heuristic for promote-to-new-OAT-project (quick vs
661
+ spec-driven) is judgment-based; live runs will calibrate.
662
+ - Off-repo confirmation wording for doc-to-path is agent-rendered; consistent
663
+ phrasing across runs is a potential live-tuning area but not a
664
+ correctness issue.
665
+ - Fold-back commit safety contract (Scenario 9) has not been exercised
666
+ against real `git status --porcelain --` / `git commit` invocations yet.
667
+ First live use will be the integration test.
668
+ - The optional `oat brainstorm visual-server` CLI wrapper is deferred per
669
+ design — bundle ships with raw bash scripts.
670
+
671
+ ## Activation Anti-Cases
672
+
673
+ The Activation Contract (see `SKILL.md`) splits user messages into three
674
+ tiers: **Hard Activation** (banner + mode), **Soft Exploratory Path** (no
675
+ banner; brainstorm-quality response by default; offer mode after ≥2
676
+ sustained exploratory turns), and **No Activation** (advisory / review /
677
+ debug / PR / status / implementation / active-workflow questions never
678
+ auto-activate). These anti-cases are walkthrough specifications for
679
+ verifying the discrimination — each entry captures the input, expected
680
+ behavior, and rationale.
681
+
682
+ ### Hard Activation — banner expected
683
+
684
+ | Input | Expected | Rationale |
685
+ | ----------------------------------------------- | ---------------------------- | ------------------------------------------------------------ |
686
+ | `/oat-brainstorm` | Enter mode and print banner. | Explicit invocation. |
687
+ | "Let's brainstorm how this should work." | Enter mode and print banner. | Explicit `brainstorm` verb with topic. |
688
+ | "Brainstorm this with me." | Enter mode and print banner. | Explicit `brainstorm` verb with topic. |
689
+ | "Can we brainstorm the schema design?" | Enter mode and print banner. | Explicit `brainstorm` verb with topic. |
690
+ | "Help me brainstorm the rollout plan." | Enter mode and print banner. | Explicit `brainstorm` verb with topic. |
691
+ | "Yeah, use the brainstorm skill." (after offer) | Enter mode and print banner. | User accepts the soft offer — transition to Hard Activation. |
692
+
693
+ ### Soft Exploratory Path — no banner first turn
694
+
695
+ | Input | Expected | Rationale |
696
+ | --------------------------------------------------- | --------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
697
+ | "I've been thinking about changing how this works." | No banner. Respond conversationally with options/tradeoffs. | Exploratory but not an explicit brainstorm request. |
698
+ | "What if we used X instead of Y?" | No banner. Respond with tradeoffs, no premature destination. | "What if" is exploratory phrasing, not a `brainstorm` verb. |
699
+ | "Help me think through whether to use X or Y." | No banner. Respond with brainstorm-quality reasoning inline. | Exploratory intent without the `brainstorm` verb. |
700
+ | "I'm trying to figure out the right way to do X." | No banner. Respond with brainstorm-quality reasoning inline. | Exploratory intent without the `brainstorm` verb. |
701
+ | "I'm not sure how to approach this." | No banner. Respond with brainstorm-quality reasoning inline. | Exploratory intent without the `brainstorm` verb. |
702
+ | (After 2+ exploratory turns with no concrete ask) | Append soft offer once: "If you want, I can switch into structured brainstorm mode for this." | Sustained exploration earns one offer. |
703
+
704
+ ### No Activation — direct response, no banner, no offer
705
+
706
+ | Input | Expected | Rationale |
707
+ | ----------------------------------------- | -------------------------------------- | --------------------------------------------------------- |
708
+ | "What do you think about this direction?" | Direct advisory response. No banner. | Advisory request — wants an opinion, not a workflow. |
709
+ | "Thoughts?" | Direct advisory response. No banner. | Advisory request. |
710
+ | "What's your take?" | Direct advisory response. No banner. | Advisory request. |
711
+ | "Does this seem right?" | Direct advisory response. No banner. | Advisory / verification request. |
712
+ | "Please review this." | Direct review response. No banner. | Review request — handoff to review skills if appropriate. |
713
+ | "Why is this failing?" | Direct debugging response. No banner. | Debugging — not a brainstorm. |
714
+ | "What's the PR status?" | Direct status response. No banner. | Status — not a brainstorm. |
715
+ | "What about X?" mid-implementation | Direct follow-up response. No banner. | Active-workflow continuation, not a fresh brainstorm. |
716
+ | "I noticed an issue with the new code." | Direct diagnostic response. No banner. | Implementation observation, not a brainstorm. |
717
+ | "How would you fix this?" | Direct advisory response. No banner. | Advisory request. |
718
+
719
+ ### Verification
720
+
721
+ Live dogfood (tracked under `bl-7d5b`) should exercise each row at least
722
+ once. The live observer records the first-turn response and confirms:
723
+
724
+ - Hard Activation rows printed the banner exactly once.
725
+ - Soft Exploratory Path rows did NOT print the banner and either gave a
726
+ brainstorm-quality response or, on turn ≥2, appended the soft offer.
727
+ - No Activation rows did NOT print the banner and did NOT append the soft
728
+ offer.
729
+
730
+ If any row regresses, file a follow-up backlog item with the offending
731
+ input, the produced response, and the expected response.