@skyf0xx/hedgehog 6.2.6 → 6.2.8

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyf0xx/hedgehog",
3
- "version": "6.2.6",
3
+ "version": "6.2.8",
4
4
  "description": "Install the Hedgehog build discipline (agents + skills) into a repo, for Claude Code, Cursor, or Gemini CLI.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bootstrap
3
- description: Use once per invocation, at the start of a new Hedgehog project, to land the workspace for whichever core `planner` selected at Phase 0 — the first real workspace this project gets, since `init` with no explicit core flag lands the shared agents/skills/build-graph payload and leaves the workspace to bootstrap. Reads the chosen core's own bootstrap skill, installed from that core's package, and follows it: how many steps Bootstrap takes and what each one lands are that skill's to state, not this agent's. Not for per-phase/per-module work — that's the core's own loop skill and its agents. Skip entirely if the core's workspace already exists, per the already-ran check the core's bootstrap skill opens with.
3
+ description: Use once per invocation, at the start of a new Hedgehog project, to land the workspace for whichever core `planner` selected at Phase 0 — the first real workspace this project gets, since `init` with no explicit core flag lands the shared agents/skills/build-graph payload and leaves the workspace to bootstrap. Reads the chosen core's own bootstrap skill, installed from that core's package, and follows it: how many steps Bootstrap takes and what each one lands are that skill's to state, not this agent's. Not for per-phase/per-module work — that's the core's own loop skill and its agents. Skip entirely if the core's workspace already exists, per the already-ran check the core's bootstrap skill opens with. Never dispatched for copywriting — that core ships no bootstrap skill; `init --copywriting` lands its whole workspace at install time, and its own planning intake runs `hedgehog plan` directly instead of handing off here.
4
4
  model: sonnet
5
5
  color: green
6
6
  tools: Read, Glob, Grep, Edit, Write, Bash
@@ -21,7 +21,9 @@ You run on two paths, and Workflow step 2 decides which:
21
21
 
22
22
  - **First run** (the graph holds no intents): **Phase 0 — core
23
23
  selection**, the gate below, then **Phase 1 — planning intake** in the
24
- shape the chosen core defines, then the `bootstrap` handoff.
24
+ shape the chosen core defines, then the `bootstrap` handoff — except
25
+ copywriting, which has no bootstrap skill and whose planning intake
26
+ runs `hedgehog plan` itself; see step 9.
25
27
  - **Re-entry** (the graph already holds intents): new scope entering play
26
28
  on a project that's already been built or is mid-build, on a core with
27
29
  a module axis to add an intent to (full-stack-app, authored). The core
@@ -88,7 +90,8 @@ memory of what a core is. Read every entry before choosing; the first
88
90
  plausible match is not the answer until the rest have been ruled out.
89
91
  A core whose `when` fits and whose `flag` is listed is chosen by name
90
92
  and handed to `bootstrap`, which installs that core's package and
91
- follows the bootstrap skill it ships.
93
+ follows the bootstrap skill it ships — except copywriting, which ships
94
+ no bootstrap skill; see step 9.
92
95
 
93
96
  **Before matching against `when` paragraphs, ask up to three
94
97
  clarifying questions if the description alone doesn't already settle
@@ -272,7 +275,12 @@ the first-run shape; on re-entry, run `hedgehog-planning-intake`'s
272
275
  full-stack-app before that Phase 0 begins. `hedgehog-copywriting-loop`
273
276
  owns `.hedgehog/copy/00-brief.md` and this core's own Confirm & Lock
274
277
  stage; `.hedgehog/BMAD/` is written by the shared Phase 0 in
275
- `hedgehog-planning-intake`.
278
+ `hedgehog-planning-intake`. This core's own Confirm & Lock runs
279
+ `hedgehog plan` itself and does not hand off to `bootstrap` — its
280
+ workspace (`scripts/check-copy/` and `core.yaml`) is already fully
281
+ installed by `init --copywriting`, before planning intake ever starts,
282
+ and this core ships no bootstrap skill. Step 9 below does not apply to
283
+ it; the core's own loop skill picks up from here directly.
276
284
  - **`deepseek-harness`** → no BMAD shelf runs on this core, and none of
277
285
  `hedgehog-planning-intake` applies. Intake is mechanical, owned
278
286
  entirely by `hedgehog-dsh-loop`'s own Planning intake section: confirm
@@ -487,6 +495,10 @@ as full-stack-app's Auth/Queue/Mobile trio.
487
495
  run**, don't run `plan` yet — no core is installed until step 9's
488
496
  `bootstrap` handoff lands one, and `plan` requires `core.yaml` to
489
497
  exist. Leave the written intents `proposed` and continue to step 8.
498
+ **Copywriting is the one exception**: its own Confirm & Lock (see the
499
+ core-specific procedures above) already ran `hedgehog plan` as part
500
+ of step 6, since its `core.yaml` is on disk before planning intake
501
+ ever starts — nothing left to defer here.
490
502
  8. **Commit planning intake's output as one commit** — not on the
491
503
  adoption re-entry path, where `hedgehog-adopt` already committed its
492
504
  own work as `chore(planning): adopt change` (step 2). Elsewhere:
@@ -502,18 +514,22 @@ as full-stack-app's Auth/Queue/Mobile trio.
502
514
  only). Write these with the `no-history-in-output` skill: current
503
515
  state only, no narration of the intake conversation. This is planning
504
516
  intake's own unit of work, landed before `bootstrap` touches anything.
505
- 9. **First run only, and not on the brownfield path hand off to the
506
- `bootstrap` agent** once the commit lands. It scaffolds the chosen
507
- core's workspace (and, for full-stack-app, whichever add-ons are on;
508
- for pwa-app, whichever of sync/remote entities is on) before any build
509
- step starts. Once that workspace exists, `core.yaml` exists too this
510
- is the point at which the `hedgehog plan` step 7 deferred on a first
511
- run can finally succeed. `bootstrap` runs it before closing (see
512
- `bootstrap.md`'s "Closing Bootstrap"), so the intents planner wrote are
513
- compiled into tasks before the core's loop skill picks anything up. On
514
- re-entry on any other core the workspace already exists and step 7
515
- already ran `plan`: hand straight to that core's loop skill instead,
516
- which picks the new work up from `hedgehog next`.
517
+ 9. **First run only, not on the brownfield path, and not on
518
+ copywriting — hand off to the `bootstrap` agent** once the commit
519
+ lands. It scaffolds the chosen core's workspace (and, for
520
+ full-stack-app, whichever add-ons are on; for pwa-app, whichever of
521
+ sync/remote entities is on) before any build step starts. Once that
522
+ workspace exists, `core.yaml` exists too this is the point at which
523
+ the `hedgehog plan` step 7 deferred on a first run can finally
524
+ succeed. `bootstrap` runs it before closing (see `bootstrap.md`'s
525
+ "Closing Bootstrap"), so the intents planner wrote are compiled into
526
+ tasks before the core's loop skill picks anything up. On re-entry on
527
+ any other core the workspace already exists and step 7 already ran
528
+ `plan`: hand straight to that core's loop skill instead, which picks
529
+ the new work up from `hedgehog next`. **On copywriting**, first run or
530
+ not, there is no `bootstrap` handoff at all — its own Confirm & Lock
531
+ already ran `plan` (see the core-specific procedures above); hand
532
+ straight to `hedgehog-copywriting-loop` instead.
517
533
  10. **Return a summary**: which core (naming it as authored or adopted,
518
534
  if it is), the intents added (or subject statement, for
519
535
  landing-page), any open questions.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hedgehog",
3
- "version": "6.2.6",
3
+ "version": "6.2.8",
4
4
  "description": "Hedgehog build discipline: ordered, tested, verified build steps.",
5
5
  "contextFileName": "GEMINI.md"
6
6
  }
@@ -66,8 +66,21 @@ meaning this directory (`vendor-skills/BMAD/`) — used to address the shared
66
66
  scripts (`{bmad-root}/scripts/memlog.py`, etc.) without reaching outside
67
67
  this vendored tree.
68
68
 
69
+ ## Local changes (not upstream)
70
+
71
+ - `core-skills/bmad-brainstorming/customize.toml` and
72
+ `core-skills/bmad-brainstorming/references/{mode-autonomous,finalize}.md`
73
+ carry a `keepsake_format` workflow key (`"html"` default,
74
+ `"markdown-only"` opt-out) not present upstream: Ideate-for-me and
75
+ headless mode otherwise auto-generate an HTML keepsake with no way to
76
+ opt out in advance, which is unwanted work on a project whose
77
+ deliverables are markdown/prose only (skyf0xx/hedgehog#386). A
78
+ re-vendor pass must re-apply this key to the freshly-fetched files
79
+ rather than letting it silently disappear.
80
+
69
81
  ## Re-vendoring
70
82
 
71
83
  Pinned deliberately. Re-vendoring against a newer BMAD-METHOD commit is a
72
84
  manual act: repeat the fetch against the new ref, re-apply the strip step
73
- above, and update this file's pinned commit and date.
85
+ above, re-apply "Local changes" above, and update this file's pinned
86
+ commit and date.
@@ -60,6 +60,17 @@ favorite_techniques = []
60
60
  # description = "Start from the compliance constraint and brainstorm what becomes possible only because of it — turn the rule into a generative frame rather than a limit."
61
61
  additional_techniques = []
62
62
 
63
+ # Format for the Ideate-for-me / headless default artifact. "html" (default)
64
+ # auto-generates the imaginative HTML keepsake with no asking. "markdown-only"
65
+ # skips it and produces the intent doc (brainstorm-intent.md) instead — for a
66
+ # project whose deliverables are markdown/prose only, where an HTML file is
67
+ # unwanted work rather than a bonus. Facilitator and Creative Partner modes
68
+ # are unaffected either way: every artifact there is already opt-in.
69
+ #
70
+ # Example (set in team/user override TOML, e.g. a copywriting-core project):
71
+ # keepsake_format = "markdown-only"
72
+ keepsake_format = "html"
73
+
63
74
  # Session output location. The running log and any final artifacts land inside
64
75
  # `{output_dir}/{output_folder_name}/`. `{topic_slug}` is filled from the session
65
76
  # topic so each topic gets its own folder — a user can brainstorm several topics
@@ -13,11 +13,11 @@ Record the insights and chosen directions with `uv run {bmad-root}/scripts/memlo
13
13
 
14
14
  ## Artifacts
15
15
 
16
- In **Ideate for me** (and headless), the imaginative HTML keepsake is the deliverable you promised — produce it automatically, no asking; the other artifacts below stay opt-in. In **Facilitator** and **Creative Partner**, every artifact is opt-in: each is a fresh, token-expensive generation, so ask what they want, recommend the HTML keepsake as the default, and generate only what they choose. Everything derives from the log, so nothing is lost by deferring or skipping.
16
+ In **Ideate for me** (and headless), check `{workflow.keepsake_format}`. When it's `"html"` (the default), the imaginative HTML keepsake is the deliverable you promised — produce it automatically, no asking; the other artifacts below stay opt-in. When it's `"markdown-only"`, skip the HTML keepsake entirely and produce the intent doc instead, with no ask — a project setting this override has already decided HTML is unwanted work, not a preference to re-confirm per session. In **Facilitator** and **Creative Partner**, every artifact is opt-in regardless of `keepsake_format`: each is a fresh, token-expensive generation, so ask what they want recommend the HTML keepsake as the default unless `keepsake_format` is `"markdown-only"`, in which case don't offer it — and generate only what they choose. Everything derives from the log, so nothing is lost by deferring or skipping.
17
17
 
18
18
  **Delegate each artifact to a subagent.** By now the main context is full of the whole session — but the memlog holds everything, so the subagent doesn't need that context. Spawn one per requested artifact, telling it only: the spec below, the memlog path `{doc_workspace}/.memlog.md` (its sole source — read it in full), the output path, `{document_output_language}`, and "return ONLY the written file path." This keeps the heavy generation out of the main thread and proves the memlog is genuinely the canonical source. (Subagents can't spawn subagents — run these from here.)
19
19
 
20
- - **Imaginative HTML keepsake (recommended default).** A single self-contained `brainstorm.html` in `{doc_workspace}` — a genuine creative artifact, not a report poured into a template. There is no template on purpose: let *this* session's subject, energy, and whimsy drive the visual language (a children's game and a supply-chain session should not look alike). Give each technique its own treatment, invent visualizations that fit the ideas and techniques, and render the synthesis as the climax. Inline all CSS and any JS; no external dependencies. Open it once complete.
20
+ - **Imaginative HTML keepsake (recommended default, skipped when `{workflow.keepsake_format}` is `"markdown-only"`).** A single self-contained `brainstorm.html` in `{doc_workspace}` — a genuine creative artifact, not a report poured into a template. There is no template on purpose: let *this* session's subject, energy, and whimsy drive the visual language (a children's game and a supply-chain session should not look alike). Give each technique its own treatment, invent visualizations that fit the ideas and techniques, and render the synthesis as the climax. Inline all CSS and any JS; no external dependencies. Open it once complete.
21
21
  - **Intent doc.** A succinct `brainstorm-intent.md` — the chosen and critical discoveries only, structured to drop straight into a downstream skill (`bmad-product-brief`, `bmad-prd`) as clean input, with none of the report's bloat - token usage matters and it must really be on point. Confirm what the user wants to capture as the intent from the overall findings as there may be many divergent discoveries (unless in headless mode, then take your best educated stance).
22
22
  - **Offer other options they might want from it also based on context** — a pitch, a one-pager, a task list — produced from the same source. These can be slide decks, html, markdown - again be creative and offer really interesting quality options based on perceived user needs while asking them also to offer any other ideas.
23
23
 
@@ -4,7 +4,7 @@ The user handed you the topic and wants to see what you come up with on your own
4
4
 
5
5
  - **Run a real divergent session yourself.** If the user supplied techniques (e.g. a composed prompt pasted from the selector page), honor those first; otherwise pick and run techniques on your own (use `brain.py` as in `## Choosing Techniques`, but *you* choose — no menu for the user). Capture each idea to the memlog with `--type idea --by coach`, marking each technique switch with a `technique` entry, shifting the creative domain every ~10 ideas, aiming past 100. Push past the obvious.
6
6
  - **Don't pepper the user with questions** — this is your run. One quick confirm of topic and goal up front is plenty.
7
- - **When it's mined out, synthesize and produce the keepsake.** Go to `## Wrap-Up` (`references/finalize.md`): record the insights, mark the memlog complete, and **auto-generate the imaginative HTML keepsake — don't ask first; the keepsake is the result you promised to show them.** Offer the other artifacts (intent doc, etc.) after.
7
+ - **When it's mined out, synthesize and produce the keepsake.** Go to `## Wrap-Up` (`references/finalize.md`): record the insights, mark the memlog complete, and **auto-generate the imaginative HTML keepsake — don't ask first; the keepsake is the result you promised to show them** — unless `{workflow.keepsake_format}` is `"markdown-only"`, in which case skip the HTML keepsake and produce the intent doc instead, also with no asking. Offer the other artifacts (intent doc, etc.) after.
8
8
  - **Then, because a human is here, offer to keep going together.** They may want to push an idea further or react to what you found — if so, switch into **Facilitator** or **Creative Partner** (load that frame), **record the switch in the memlog** so a resume restores the new stance — `uv run {bmad-root}/scripts/memlog.py set --workspace {doc_workspace} --key mode --value <facilitator|partner>` — and continue from the same memlog.
9
9
 
10
10
  This is the interactive sibling of headless mode (`references/headless.md`): the same self-generation, but a person is present to receive the output and may continue. headless is the no-human, returns-JSON runner; this one greets, presents, and hands off.