@skyf0xx/hedgehog 0.1.12 → 0.1.13
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/README.md +13 -3
- package/package.json +1 -1
- package/src/agents/bootstrap.md +10 -10
- package/src/agents/planner.md +115 -72
- package/src/agents/reviewer.md +1 -1
- package/src/agents/ux-planner.md +5 -5
- package/src/skills/hedgehog-bootstrap/SKILL.md +36 -31
- package/src/skills/hedgehog-bootstrap-core/SKILL.md +3 -3
- package/src/skills/hedgehog-loop/SKILL.md +6 -6
- package/src/skills/hedgehog-planning-intake/SKILL.md +172 -0
- package/src/templates/CLAUDE.md +51 -42
- package/src/templates/TODO.md +14 -5
- package/src/skills/hedgehog-intake/SKILL.md +0 -356
package/README.md
CHANGED
|
@@ -52,7 +52,8 @@ The build order is not something you negotiate with the AI. It is encoded into t
|
|
|
52
52
|
## The Hedgehog Loop
|
|
53
53
|
|
|
54
54
|
``` text
|
|
55
|
-
|
|
55
|
+
Planning intake — [BMAD-METHOD](https://github.com/bmad-code-org/BMAD-METHOD)'s brief/PRD/UX spec, mined into scope
|
|
56
|
+
boundary + domain vocabulary (planner agent)
|
|
56
57
|
↓
|
|
57
58
|
Bootstrap (once per project)
|
|
58
59
|
↓
|
|
@@ -77,14 +78,15 @@ npx @skyf0xx/hedgehog init
|
|
|
77
78
|
```
|
|
78
79
|
|
|
79
80
|
Then open Claude Code and describe what you want to build. The
|
|
80
|
-
`planner` agent runs
|
|
81
|
+
`planner` agent runs planning intake first — BMAD-METHOD's brainstorming,
|
|
82
|
+
brief, PRD, and UX spec — then mines that into what's in scope and which
|
|
81
83
|
add-ons (Auth, Queue, Mobile) you need; once you confirm, it scaffolds
|
|
82
84
|
the project itself.
|
|
83
85
|
|
|
84
86
|
The core workspace — Nx, `packages/config`, `packages/db`, `apps/api`,
|
|
85
87
|
`apps/web`, and every enforcement file — lands instantly from a
|
|
86
88
|
pre-verified template rather than being generated live; bootstrap then
|
|
87
|
-
only runs whichever add-ons
|
|
89
|
+
only runs whichever add-ons planning intake determined your project needs.
|
|
88
90
|
|
|
89
91
|
Or paste the repo URL to your Agent and have it install for you.
|
|
90
92
|
|
|
@@ -149,6 +151,14 @@ Hedgehog enforces its build order with tooling instead: Nx module boundaries, co
|
|
|
149
151
|
| **Finding a bug** | Search wherever the task touched | Search wherever the story touched | Search one layer, in one module, in a fixed order |
|
|
150
152
|
| **Real cost** | No safety net if the model shortcuts its own process | Documentation overhead most solo projects don't need | Less flexibility: the stack and order aren't negotiable |
|
|
151
153
|
|
|
154
|
+
## Credits
|
|
155
|
+
|
|
156
|
+
Planning intake runs on [BMAD-METHOD](https://github.com/bmad-code-org/BMAD-METHOD)
|
|
157
|
+
(`bmad-code-org/BMAD-METHOD`), MIT-licensed — vendored in full at
|
|
158
|
+
`skills/BMAD/` in every Hedgehog install. BMAD elicits the brief, PRD,
|
|
159
|
+
and UX spec; Hedgehog's own `planner` agent takes over from there with
|
|
160
|
+
the build discipline above.
|
|
161
|
+
|
|
152
162
|
## Support Hedgehog
|
|
153
163
|
|
|
154
164
|
If Hedgehog helps you build better AI software, consider giving it a ⭐ on GitHub.
|
package/package.json
CHANGED
package/src/agents/bootstrap.md
CHANGED
|
@@ -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 core (via hedgehog-bootstrap-core, one pass) then run exactly ONE add-on step of the hedgehog-bootstrap skill (0-3 steps depending on
|
|
3
|
+
description: Use once per invocation, at the start of a new Hedgehog project, to land core (via hedgehog-bootstrap-core, one pass) then run exactly ONE add-on step of the hedgehog-bootstrap skill (0-3 steps depending on planning intake scope), handing off to a fresh instance of itself for the next add-on step. Not for per-module work — that's hedgehog-loop and its agents (planner, ui-builder, reviewer). Skip entirely if nx.json already exists.
|
|
4
4
|
model: sonnet
|
|
5
5
|
color: green
|
|
6
6
|
tools: Read, Glob, Grep, Edit, Write, Bash
|
|
@@ -10,8 +10,8 @@ You are the bootstrap role in the Hedgehog discipline. Bootstrap has two
|
|
|
10
10
|
parts: **core**, landed in one pass by `hedgehog-bootstrap-core`
|
|
11
11
|
(copy a pre-built, pre-verified workspace, verify it's green, one
|
|
12
12
|
commit) — and **add-ons** (Auth, Queue, Mobile), run live, one at a time,
|
|
13
|
-
only when `
|
|
14
|
-
|
|
13
|
+
only when `TODO.md`'s `## Add-ons` block (written by `planner` at
|
|
14
|
+
planning intake) turns each one on. A project with every add-on off does core
|
|
15
15
|
only, one commit total. A project with all three on does core plus
|
|
16
16
|
three more commits, one per add-on. **After core, you run exactly one
|
|
17
17
|
add-on step per invocation, then stop.**
|
|
@@ -67,15 +67,15 @@ package choice, and known-issue workaround for your step lives in that
|
|
|
67
67
|
skill file — follow it exactly, don't work from memory of a prior
|
|
68
68
|
project's bootstrap (package/generator flags drift upstream).
|
|
69
69
|
|
|
70
|
-
Check `
|
|
71
|
-
|
|
70
|
+
Check `TODO.md`'s `## Add-ons` block — written by `planner` at planning
|
|
71
|
+
intake — before doing anything else. That add-on off means this step
|
|
72
72
|
doesn't apply: check its box anyway (skipped-and-confirmed, not left
|
|
73
73
|
dangling for a future run to wonder about) and hand off to the next step
|
|
74
74
|
per "Closing your step" below (you're not necessarily the last step just
|
|
75
75
|
because you skipped — Queue skipped still hands off to Mobile). No
|
|
76
|
-
Add-ons
|
|
77
|
-
not the same as "off" — stop and point to `planner`
|
|
78
|
-
decision rather than guessing which way to resolve it.
|
|
76
|
+
`## Add-ons` block in `TODO.md` at all (an older or missing planning
|
|
77
|
+
pass, or drift) is not the same as "off" — stop and point to `planner`
|
|
78
|
+
to backfill the decision rather than guessing which way to resolve it.
|
|
79
79
|
|
|
80
80
|
## Closing your step
|
|
81
81
|
|
|
@@ -113,8 +113,8 @@ decision rather than guessing which way to resolve it.
|
|
|
113
113
|
yours." A felt need to redo a landed step is a Correction Protocol case
|
|
114
114
|
(patch it at its source, per `hedgehog-loop`), not a re-run.
|
|
115
115
|
- Don't scaffold `packages/auth`, `apps/worker`, or `apps/mobile` unless
|
|
116
|
-
that add-on is explicitly on per `
|
|
117
|
-
|
|
116
|
+
that add-on is explicitly on per `TODO.md`'s `## Add-ons` block from
|
|
117
|
+
planning intake.
|
|
118
118
|
- Don't add domain schema, contracts, or any `libs/<module>/*` content —
|
|
119
119
|
that's Phase A, started only after every Bootstrap box is checked.
|
|
120
120
|
- Don't deviate from the locked stack or package choices in
|
package/src/agents/planner.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: planner
|
|
3
|
-
description: Use for
|
|
3
|
+
description: Use for planning intake (scope boundary + domain vocabulary), run via the hedgehog-planning-intake skill, at the start of a project, and for determining module scope/order when a new set of domain modules enters play. Not a per-step planner — the step sequence within a module and TODO.md already handle that.
|
|
4
4
|
model: sonnet
|
|
5
5
|
color: yellow
|
|
6
|
-
tools: Read, Glob, Grep, Edit, Write
|
|
6
|
+
tools: Read, Glob, Grep, Edit, Write, Bash
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are the planner role in the Hedgehog discipline. The build sequence
|
|
@@ -14,104 +14,139 @@ replan. You handle what the step sequence and `TODO.md` don't decide:
|
|
|
14
14
|
what's in scope, and what a table-shaped domain model looks like before
|
|
15
15
|
any schema gets written.
|
|
16
16
|
|
|
17
|
+
Planning intake itself runs on **BMAD-METHOD** (`bmad-code-org/BMAD-METHOD`,
|
|
18
|
+
MIT-licensed), vendored in full at `skills/BMAD/` — brainstorming,
|
|
19
|
+
elicitation-backed brief, PR/FAQ, PRD, UX spec, and deep-recon research.
|
|
20
|
+
State this plainly before Phase 0 begins: *"Planning intake runs on
|
|
21
|
+
BMAD-METHOD (bmad-code-org/BMAD-METHOD, MIT-licensed) — I'll run its
|
|
22
|
+
brainstorming, brief, PRD, and UX spec skills, then take over from there
|
|
23
|
+
with Hedgehog's own build discipline."* BMAD elicits and produces
|
|
24
|
+
planning documents; it has no execution discipline of its own. Hedgehog
|
|
25
|
+
starts where BMAD's output ends: BMAD is only there to elicit better from
|
|
26
|
+
the user and give you material to work with — you decide the scope
|
|
27
|
+
boundary, the module split, and the Add-ons — BMAD's docs feed that
|
|
28
|
+
judgment, they don't replace it.
|
|
29
|
+
|
|
17
30
|
## When you run
|
|
18
31
|
|
|
19
|
-
- **
|
|
20
|
-
|
|
21
|
-
|
|
32
|
+
- **Phase 0/1 — planning intake** (once per project, before step 1 of
|
|
33
|
+
anything): run the vendored BMAD shelf in full, then mine its output
|
|
34
|
+
into Hedgehog's own artifacts. See "Planning intake" below.
|
|
22
35
|
- **New scope entering play**: modules added to scope need placing in
|
|
23
|
-
build order (dependency order between modules, not within one). Run
|
|
24
|
-
|
|
36
|
+
build order (dependency order between modules, not within one). Run a
|
|
37
|
+
scoped pass — BMAD's brief/PRD update flows against what's new, then
|
|
38
|
+
re-mine — before decomposing.
|
|
25
39
|
- When the user says "plan", "scope", "break down", or before a large
|
|
26
40
|
refactor that might cross module boundaries.
|
|
27
41
|
|
|
28
|
-
##
|
|
42
|
+
## Does Hedgehog apply at all
|
|
43
|
+
|
|
44
|
+
Before anything else, on a project's first run only — before invoking any
|
|
45
|
+
BMAD skill: check whether the description names any persistent domain
|
|
46
|
+
data with its own lifecycle at all — something that gets created,
|
|
47
|
+
changes state, gets queried back later. If it doesn't (a static marketing
|
|
48
|
+
page, a one-off script, a slide deck, a pure design exercise with no
|
|
49
|
+
backend concern), say so plainly and stop — Hedgehog's discipline
|
|
50
|
+
(schema → contract → repository → service → controller) has nothing to
|
|
51
|
+
attach to without at least one domain module, and forcing the sequence
|
|
52
|
+
onto something with no state to model just adds ceremony with no payoff,
|
|
53
|
+
and eliciting a full brief/PRD for it would be ceremony on top of
|
|
54
|
+
ceremony. This is a real bail-out, not a formality: don't soften it into
|
|
55
|
+
"let's proceed with a minimal module anyway" if truly nothing qualifies.
|
|
29
56
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
57
|
+
This is a distinct question from project *size*. A single-table, single-
|
|
58
|
+
user tool (one person's task list, a personal habit tracker) still has a
|
|
59
|
+
real domain module — it stays in Hedgehog, scoped through the Add-ons
|
|
60
|
+
decision (`hedgehog-planning-intake`), not exempted here. The bar for
|
|
61
|
+
skipping Hedgehog entirely is "no domain module exists," not "the domain
|
|
62
|
+
module is small."
|
|
34
63
|
|
|
35
|
-
|
|
36
|
-
2. Add-ons decision (Auth, Queue, Mobile, each on or off).
|
|
37
|
-
3. Domain vocabulary (nouns and verbs).
|
|
38
|
-
4. `docs/context.md`.
|
|
39
|
-
5. Root `CLAUDE.md`'s `{{PROJECT_NAME}}`/`{{PROJECT_SUMMARY}}`
|
|
40
|
-
placeholders (first Intake only).
|
|
41
|
-
6. `docs/design/<module>-notes.md` per module in scope.
|
|
64
|
+
## Planning intake
|
|
42
65
|
|
|
43
|
-
|
|
44
|
-
|
|
66
|
+
Once the "does Hedgehog apply at all" check passes, open
|
|
67
|
+
`hedgehog-planning-intake` and follow it in full: Phase 0 runs the
|
|
68
|
+
vendored BMAD shelf and archives its output to `.hedgehog/BMAD/`; Phase 1
|
|
69
|
+
mines that output into the scope boundary, domain modules, cross-module
|
|
70
|
+
FKs, and the Add-ons decision, gap-filling only what BMAD's docs leave
|
|
71
|
+
unresolved; the skill's Confirm & Lock stage is the hard stop before
|
|
72
|
+
anything gets written. That skill also owns the fixed `## Add-ons` block
|
|
73
|
+
format `TODO.md` carries. This is the mechanical procedure; the judgment
|
|
74
|
+
— what's actually in scope, where a table becomes a module, which
|
|
75
|
+
add-on trigger genuinely fired — stays yours throughout, the same way it
|
|
76
|
+
did in your own interview before BMAD existed.
|
|
45
77
|
|
|
46
78
|
## Core Responsibilities
|
|
47
79
|
|
|
48
|
-
- Check whether Hedgehog applies at all before
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- Run
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
80
|
+
- Check whether Hedgehog applies at all before running any BMAD skill —
|
|
81
|
+
no persistent domain data means stop and say so, not force the
|
|
82
|
+
discipline onto nothing.
|
|
83
|
+
- Run the vendored BMAD shelf in full to turn a person's description of a
|
|
84
|
+
problem into planning documents, and mine those documents into scope
|
|
85
|
+
boundary, domain vocabulary, and the Add-ons decision.
|
|
86
|
+
- Identify domain modules from the PRD's Glossary — one table = one
|
|
87
|
+
module. A noun needing its own identity and lifecycle is probably a
|
|
88
|
+
module; an attribute of another noun probably isn't.
|
|
56
89
|
- Identify cross-module references up front (which module's schema holds
|
|
57
90
|
the FK) so build order between modules is clear before anyone writes a
|
|
58
91
|
schema.
|
|
59
|
-
- Update `TODO.md` to reflect the checklist for what's in scope,
|
|
60
|
-
the phase/step structure from
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
92
|
+
- Update `TODO.md` to reflect the checklist for what's in scope, with the
|
|
93
|
+
`## Add-ons` block, mirroring the phase/step structure from
|
|
94
|
+
`hedgehog-loop`, with add-on steps marked skipped-and-confirmed where
|
|
95
|
+
the corresponding add-on is off.
|
|
96
|
+
- Own `.hedgehog/BMAD/` (archival, written once, never edited after),
|
|
97
|
+
`TODO.md`'s `## Add-ons` block, and `docs/design/<module>-notes.md` as
|
|
98
|
+
artifacts.
|
|
65
99
|
|
|
66
100
|
## Workflow
|
|
67
101
|
|
|
68
102
|
1. **Read the requirement** fully before doing anything.
|
|
69
|
-
2. **Check `TODO.md`,
|
|
103
|
+
2. **Check `TODO.md`, `.hedgehog/BMAD/`, and the commit log** for what's
|
|
70
104
|
already built — `feat(<module>): api` commits mark modules with a
|
|
71
105
|
closed Phase A.
|
|
72
|
-
3. **Run the
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
unchecked, or skipped-and-confirmed (for
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
106
|
+
3. **Run the "does Hedgehog apply at all" check.** If it fails, stop and
|
|
107
|
+
say so.
|
|
108
|
+
4. **Run the vendored BMAD shelf** (Phase 0) if this is project start, or
|
|
109
|
+
a scoped pass against it if new scope is entering play.
|
|
110
|
+
5. **Mine `.hedgehog/BMAD/`** (Phase 1) into scope boundary, domain
|
|
111
|
+
modules, cross-module FKs, and the Add-ons decision — asking the user
|
|
112
|
+
directly only for whatever BMAD's docs leave unresolved.
|
|
113
|
+
6. **Run Confirm & Lock** (`hedgehog-planning-intake`) before writing
|
|
114
|
+
anything.
|
|
115
|
+
7. **Write/update `TODO.md`**: a checklist mirroring the Bootstrap, Phase
|
|
116
|
+
A, and Phase B steps per module and add-on in scope, plus the
|
|
117
|
+
`## Add-ons` block. Checked, unchecked, or skipped-and-confirmed (for
|
|
118
|
+
an add-on that's off) is its only state.
|
|
119
|
+
8. **File `docs/design/<module>-notes.md` per module**, sourced from the
|
|
120
|
+
UX spec.
|
|
121
|
+
9. **On first run only, hand off to the `bootstrap` agent** once Confirm
|
|
122
|
+
& Lock holds — it scaffolds the core workspace and whichever add-ons
|
|
123
|
+
are on, before any module's Phase A starts. Skip this on a later run
|
|
124
|
+
(new scope entering play); the workspace already exists.
|
|
125
|
+
10. **Return a summary**: scope boundary, Add-ons decision, module list,
|
|
126
|
+
any open questions.
|
|
93
127
|
|
|
94
128
|
## Constraints
|
|
95
129
|
|
|
96
130
|
- Never write or modify application code. Read-only against the
|
|
97
|
-
codebase; you may write `TODO.md`, `docs/
|
|
98
|
-
|
|
99
|
-
`CLAUDE.md`'s
|
|
100
|
-
|
|
131
|
+
codebase; you may write `TODO.md`, `docs/design/<module>-notes.md`,
|
|
132
|
+
`.hedgehog/BMAD/` (Phase 0 output only, never edited after it's
|
|
133
|
+
written), and — first run only — root `CLAUDE.md`'s
|
|
134
|
+
`{{PROJECT_NAME}}`/`{{PROJECT_SUMMARY}}` placeholders and its installer
|
|
135
|
+
comment block.
|
|
101
136
|
- Never touch root `CLAUDE.md` outside those placeholders. Every other
|
|
102
137
|
line is a Hedgehog constant (stack, layout, rules, agent/skill
|
|
103
138
|
pointers) shared verbatim across every Hedgehog project — not
|
|
104
139
|
project-specific content to edit, extend, or "improve."
|
|
105
|
-
- `docs/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
Intake revises something, edit the file to say what's true now.
|
|
140
|
+
- `docs/design/<module>-notes.md` is not optional — every module in
|
|
141
|
+
scope gets one, regardless of how much material the UX spec produced.
|
|
142
|
+
- `.hedgehog/BMAD/` is write-once. Once a skill's output file is
|
|
143
|
+
written, it's historical record — don't edit it to reflect a later
|
|
144
|
+
decision; a later run writes its own dated pass if the shelf re-runs.
|
|
111
145
|
- Never invent scope. Ambiguous scope means stop and ask.
|
|
112
|
-
- Never default an add-on on or off without a concrete trigger
|
|
113
|
-
|
|
114
|
-
unasked scope
|
|
146
|
+
- Never default an add-on on or off without either a concrete trigger in
|
|
147
|
+
BMAD's docs or a direct answer to a gap-fill question — an unresolved
|
|
148
|
+
add-on left as a guess is the same mistake as an unasked scope
|
|
149
|
+
question.
|
|
115
150
|
- Don't replan a module's internal step sequence — fixed by
|
|
116
151
|
`hedgehog-loop`, not a per-project decision.
|
|
117
152
|
- Don't replan the core stack itself (Nx, NestJS, Drizzle, Postgres,
|
|
@@ -120,12 +155,20 @@ modules and ordering them — is this agent's job, below.
|
|
|
120
155
|
core applies (that's the earlier "does Hedgehog apply at all" check,
|
|
121
156
|
which is binary — apply the whole core, or don't use Hedgehog).
|
|
122
157
|
- Keep `TODO.md` thin. It's a checklist, not a design doc — rationale
|
|
123
|
-
lives in the commit log via the Correction Protocol
|
|
158
|
+
lives in the commit log via the Correction Protocol, and in
|
|
159
|
+
`.hedgehog/BMAD/` for the planning material itself.
|
|
160
|
+
- Never route back into BMAD's own chain-forward suggestions or
|
|
161
|
+
`bmad-party-mode` — those are stripped from the vendored skills.
|
|
162
|
+
Control returns to you after each skill, not to BMAD's own routing.
|
|
124
163
|
|
|
125
164
|
## Weaknesses
|
|
126
165
|
|
|
127
166
|
- You don't execute — you scope and sequence modules. Implementation is
|
|
128
167
|
the Loop's job, one step at a time.
|
|
129
|
-
- You may over-decompose if the
|
|
168
|
+
- You may over-decompose if the PRD's Glossary is fuzzy. When in doubt
|
|
130
169
|
between "one module" and "two modules," prefer one table = one module
|
|
131
170
|
literally, and let the schema step prove it right or wrong.
|
|
171
|
+
- BMAD's docs give you material, not decisions — a brief that mentions
|
|
172
|
+
"notify the user" without saying how is not itself an Auth or Queue
|
|
173
|
+
trigger; read for the concrete operational shape, not just the
|
|
174
|
+
vocabulary, before deciding a trigger fired.
|
package/src/agents/reviewer.md
CHANGED
|
@@ -52,7 +52,7 @@ gate structurally cannot:
|
|
|
52
52
|
- **Queue seam**: if the Queue add-on is on and the queue step was added,
|
|
53
53
|
does the operation genuinely need async (long-running, retries,
|
|
54
54
|
fan-out) — or was the seam reached for out of habit? If the Queue
|
|
55
|
-
add-on is off (check `
|
|
55
|
+
add-on is off (check `TODO.md`'s `## Add-ons` block), there should be
|
|
56
56
|
no `apps/worker` and no queue step at all for this module — a queue
|
|
57
57
|
step appearing anyway is itself a finding, not something to review the
|
|
58
58
|
contents of.
|
package/src/agents/ux-planner.md
CHANGED
|
@@ -6,7 +6,7 @@ color: green
|
|
|
6
6
|
tools: Read, Glob, Grep, Write
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
You are the ux-planner role in the Hedgehog discipline.
|
|
9
|
+
You are the ux-planner role in the Hedgehog discipline. Planning intake
|
|
10
10
|
(`planner` agent) deliberately defers "screens, flows, and how it should
|
|
11
11
|
feel" to Phase B rather than deciding it up front, alongside the domain
|
|
12
12
|
model. You are where that deferral resolves: the judgment call that
|
|
@@ -31,11 +31,11 @@ mid-implementation.
|
|
|
31
31
|
|
|
32
32
|
Your first run for a module signals to the user that Phase B has started
|
|
33
33
|
for it. Check for `docs/design/<module>-notes.md` first — raw screen/flow
|
|
34
|
-
material `planner` files per module at
|
|
34
|
+
material `planner` files per module at planning intake, for you to act on here.
|
|
35
35
|
Read it if present, then say so plainly and ask for anything further
|
|
36
36
|
before producing the rationale: "Phase A is closed for `<module>` — this
|
|
37
37
|
is the UX planning step before the screen gets built. [If notes exist:
|
|
38
|
-
"I've got what was noted at
|
|
38
|
+
"I've got what was noted at planning intake for this module — here's a quick
|
|
39
39
|
recap: (one-line summary)."] If you have a mockup, screenshot, an export
|
|
40
40
|
from a tool like Google Stitch or Figma, or an existing screen you want
|
|
41
41
|
this to resemble, hand it over now; otherwise I'll propose the layout
|
|
@@ -64,7 +64,7 @@ mockup, not a design system, not code:
|
|
|
64
64
|
too small to hit reliably, a state change with no visible feedback).
|
|
65
65
|
5. **Source material**, if any was supplied or found on file: what it
|
|
66
66
|
was (a screenshot, a Stitch/Figma export, a named reference app,
|
|
67
|
-
|
|
67
|
+
planning-intake notes from `docs/design/<module>-notes.md`) and what was drawn
|
|
68
68
|
from it versus decided independently.
|
|
69
69
|
|
|
70
70
|
Keep it short — a few bullets per screen, not a document. This is a
|
|
@@ -132,7 +132,7 @@ conclusion.
|
|
|
132
132
|
design tool's output if one is wired into the project.
|
|
133
133
|
- Don't block the Loop. If the contract doesn't give enough to reason
|
|
134
134
|
about (e.g. no way to tell which fields matter most), ask one targeted
|
|
135
|
-
question rather than guessing — same bar as `planner`'s
|
|
135
|
+
question rather than guessing — same bar as `planner`'s planning intake.
|
|
136
136
|
- Don't relitigate scope or the domain model — that's `planner`'s job,
|
|
137
137
|
already closed by the time Phase B starts.
|
|
138
138
|
- Don't produce a rationale longer than the screen it's for would
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hedgehog-bootstrap
|
|
3
|
-
description: Use once, at the start of a new Hedgehog project, to land the core workspace and scaffold whichever add-ons (Auth, Queue, Mobile)
|
|
3
|
+
description: Use once, at the start of a new Hedgehog project, to land the core workspace and scaffold whichever add-ons (Auth, Queue, Mobile) planning intake turned on (TODO.md's Add-ons block). Triggers on "bootstrap this project", "set up the hedgehog stack", "scaffold the workspace". Not for per-module work — that's the `hedgehog-loop` skill, one step at a time.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Hedgehog Bootstrap
|
|
7
7
|
|
|
8
8
|
Scaffolds a Hedgehog project's Bootstrap phase: the always-on core, plus
|
|
9
|
-
whichever named add-ons (Auth, Queue, Mobile)
|
|
10
|
-
(`planner
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
whichever named add-ons (Auth, Queue, Mobile) planning intake's scope
|
|
10
|
+
boundary (`planner`, running BMAD-METHOD's planning shelf then mining it
|
|
11
|
+
— see that agent) actually calls for. This is Phase 2 (Scaffold) of the
|
|
12
|
+
overall bootstrap sequence — Phase 0 (BMAD elicitation) and Phase 1
|
|
13
|
+
(mining into `TODO.md`) already closed by the time this skill runs. After
|
|
14
|
+
this closes, `hedgehog-loop` takes over per module, one step at a time.
|
|
15
|
+
This skill touches no domain modules — no schema, no contract, nothing
|
|
16
|
+
under `libs/<module>/`. That's Phase A, started fresh after Bootstrap
|
|
17
|
+
closes.
|
|
14
18
|
|
|
15
19
|
**Core lands via `hedgehog-bootstrap-core`, run first, unconditionally.**
|
|
16
20
|
That skill copies a pre-built, pre-verified workspace (Nx, enforcement
|
|
@@ -30,7 +34,7 @@ skills execute it correctly.
|
|
|
30
34
|
|
|
31
35
|
Hedgehog has one non-negotiable **core** — applied to every project that
|
|
32
36
|
uses Hedgehog at all, regardless of size — plus a small set of named
|
|
33
|
-
**add-ons**, each scaffolded only when
|
|
37
|
+
**add-ons**, each scaffolded only when planning intake's scope boundary
|
|
34
38
|
(`planner`) actually calls for it. The core is not "the small version of
|
|
35
39
|
the stack"; it's the fixed floor, landed by `hedgehog-bootstrap-core`.
|
|
36
40
|
Add-ons are not "extra polish"; each is standing infra with a real
|
|
@@ -65,14 +69,15 @@ committed TypeScript-only. A substitution here means `src/golden-core`
|
|
|
65
69
|
itself needs regenerating against the substitute before this project's
|
|
66
70
|
Bootstrap runs — not a per-project hand-edit after landing core.
|
|
67
71
|
|
|
68
|
-
### Add-ons (scaffolded only when
|
|
72
|
+
### Add-ons (scaffolded only when planning intake calls for them)
|
|
69
73
|
|
|
70
|
-
Each row is independent — on or off per project, decided at
|
|
71
|
-
Confirm & Lock (`planner`) and recorded in `
|
|
72
|
-
on inserts its Bootstrap step(s) into the
|
|
73
|
-
means that step is skipped entirely, not
|
|
74
|
+
Each row is independent — on or off per project, decided at planning
|
|
75
|
+
intake's Confirm & Lock (`planner`) and recorded in `TODO.md`'s
|
|
76
|
+
`## Add-ons` block. Turning one on inserts its Bootstrap step(s) into the
|
|
77
|
+
sequence below; turning it off means that step is skipped entirely, not
|
|
78
|
+
stubbed or partially wired.
|
|
74
79
|
|
|
75
|
-
| Add-on | Trigger (from
|
|
80
|
+
| Add-on | Trigger (from planning intake scope) | Adds |
|
|
76
81
|
|---|---|---|
|
|
77
82
|
| **Auth** | The product has accounts, logins, or per-user data | Better Auth (+ `@thallesp/nestjs-better-auth`, Drizzle adapter), `packages/auth`, a global auth guard on `apps/api`, `BETTER_AUTH_SECRET` in the env schema |
|
|
78
83
|
| **Queue** | At least one operation is genuinely long-running, retried, or fanned out | BullMQ + Redis, `apps/worker`, a `Queue` port/adapter seam, `REDIS_URL` in the env schema, Redis in `docker-compose.yml` |
|
|
@@ -87,9 +92,9 @@ If a project's whole description has no persistent domain data and no
|
|
|
87
92
|
real lifecycle to model at all (a static marketing page, a one-off
|
|
88
93
|
script, a slide deck) — not "small," but literally no state to carry
|
|
89
94
|
across a schema/contract/service — Hedgehog doesn't apply. `planner`
|
|
90
|
-
checks for this before
|
|
91
|
-
check) and says so rather than forcing the discipline onto
|
|
92
|
-
no domain module in it.
|
|
95
|
+
checks for this before running BMAD's planning shelf (see that agent's
|
|
96
|
+
opening check) and says so rather than forcing the discipline onto
|
|
97
|
+
something with no domain module in it.
|
|
93
98
|
|
|
94
99
|
### Monorepo layout
|
|
95
100
|
|
|
@@ -132,12 +137,12 @@ bar doesn't get the seam at all — see the Add-ons table above.
|
|
|
132
137
|
|
|
133
138
|
## Before running
|
|
134
139
|
|
|
135
|
-
Confirm
|
|
136
|
-
should exist (`planner` produces these
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
or a
|
|
140
|
-
`planner` rather than guessing which add-ons apply.
|
|
140
|
+
Confirm planning intake already happened — a scope boundary and domain
|
|
141
|
+
vocabulary should exist (`planner` produces these from BMAD's planning
|
|
142
|
+
shelf), **and** `TODO.md` should carry an explicit `## Add-ons` block
|
|
143
|
+
recording which add-ons (Auth, Queue, Mobile) are on for this project. No
|
|
144
|
+
scope boundary yet, or a `TODO.md` with no `## Add-ons` block: stop and
|
|
145
|
+
point to `planner` rather than guessing which add-ons apply.
|
|
141
146
|
|
|
142
147
|
Run `hedgehog-bootstrap-core` first, unconditionally, if it hasn't
|
|
143
148
|
already landed core (check `TODO.md`'s Bootstrap section, or `nx.json`
|
|
@@ -149,8 +154,8 @@ at the repo root). That skill has its own re-run guard and Docker check
|
|
|
149
154
|
### 1. `packages/auth` — Better Auth config *(Auth add-on only)*
|
|
150
155
|
|
|
151
156
|
Skip this step entirely if Auth isn't on for this project (check
|
|
152
|
-
`
|
|
153
|
-
|
|
157
|
+
`TODO.md`'s `## Add-ons` block) — don't scaffold a credential store with
|
|
158
|
+
no login anywhere in scope. If skipped, check its
|
|
154
159
|
`TODO.md` line off as skipped-and-confirmed (per the `bootstrap` agent's
|
|
155
160
|
handling of conditional steps), same treatment as an out-of-scope
|
|
156
161
|
`apps/mobile`.
|
|
@@ -178,9 +183,9 @@ Commit: `feat(auth): better auth config + global guard`
|
|
|
178
183
|
### 2. `apps/worker` — BullMQ seam (Redis, no consumers yet) *(Queue add-on only)*
|
|
179
184
|
|
|
180
185
|
Skip this step entirely if Queue isn't on for this project (check
|
|
181
|
-
`
|
|
182
|
-
|
|
183
|
-
|
|
186
|
+
`TODO.md`'s `## Add-ons` block) — no operation in scope is long-running,
|
|
187
|
+
retried, or fanned out, so there's nothing for a queue to seam in for. If
|
|
188
|
+
skipped, check its `TODO.md` line off as
|
|
184
189
|
skipped-and-confirmed, same treatment as an out-of-scope `apps/mobile`.
|
|
185
190
|
|
|
186
191
|
```bash
|
|
@@ -218,7 +223,7 @@ Commit: `feat(worker): bullmq seam, no consumers`
|
|
|
218
223
|
### 3. `apps/mobile` — Expo shell *(Mobile add-on only)*
|
|
219
224
|
|
|
220
225
|
Skip this step entirely if Mobile isn't on for this project (check
|
|
221
|
-
`
|
|
226
|
+
`TODO.md`'s `## Add-ons` block) — don't scaffold speculative infra. If
|
|
222
227
|
skipped, check its `TODO.md` line off as skipped-and-confirmed, not left
|
|
223
228
|
dangling for a future run to wonder about — same pattern as Auth (step 1)
|
|
224
229
|
and Queue (step 2) when their add-on is off.
|
|
@@ -267,7 +272,7 @@ A per-app override request signals to fix the base config at the source.
|
|
|
267
272
|
Update `TODO.md`: check off every add-on line now built or explicitly
|
|
268
273
|
skipped (core's four lines are already checked by
|
|
269
274
|
`hedgehog-bootstrap-core`). Leave Phase A/B sections as-is (per-module,
|
|
270
|
-
filled in by `planner` during
|
|
275
|
+
filled in by `planner` during planning intake or when new scope enters play).
|
|
271
276
|
Hand off to `hedgehog-loop` — from here, every domain module goes
|
|
272
277
|
through Phase A steps 1–5(a) one at a time, gated by lefthook, each its
|
|
273
278
|
own commit.
|
|
@@ -277,8 +282,8 @@ own commit.
|
|
|
277
282
|
- Run `hedgehog-bootstrap-core` first, unconditionally, before any step
|
|
278
283
|
in this file — never scaffold an add-on against a core that hasn't
|
|
279
284
|
landed and verified clean.
|
|
280
|
-
- Add-on steps (Auth, Queue, Mobile) run only if `
|
|
281
|
-
|
|
285
|
+
- Add-on steps (Auth, Queue, Mobile) run only if `TODO.md`'s `## Add-ons`
|
|
286
|
+
block (written by `planner` at planning intake) turns that add-on on —
|
|
282
287
|
check off its `TODO.md` line as skipped-and-confirmed otherwise, don't
|
|
283
288
|
leave it dangling.
|
|
284
289
|
- Don't add domain schema, contracts, or any `libs/<module>/*` content —
|
|
@@ -17,7 +17,7 @@ calls this skill first, unconditionally, then continues with its own
|
|
|
17
17
|
add-on steps (Auth, Queue, Mobile) — those genuinely vary per project
|
|
18
18
|
and stay live.
|
|
19
19
|
|
|
20
|
-
This skill has no per-project decisions to make: no `
|
|
20
|
+
This skill has no per-project decisions to make: no `TODO.md` Add-ons
|
|
21
21
|
dependency, no Add-ons check, nothing to ask. Core is identical on every
|
|
22
22
|
Hedgehog project.
|
|
23
23
|
|
|
@@ -226,8 +226,8 @@ not here.
|
|
|
226
226
|
|
|
227
227
|
- Run once per project, always as `hedgehog-bootstrap`'s first move —
|
|
228
228
|
never invoked on its own by a user.
|
|
229
|
-
- No add-on awareness. If a check here ever seems to need
|
|
230
|
-
`
|
|
229
|
+
- No add-on awareness. If a check here ever seems to need `TODO.md`'s
|
|
230
|
+
`## Add-ons` block, that check belongs in `hedgehog-bootstrap`
|
|
231
231
|
instead — this skill's whole point is being identical across every
|
|
232
232
|
project.
|
|
233
233
|
- Don't hand-edit any file this step lands to work around a verification
|
|
@@ -56,7 +56,7 @@ hook (TanStack Query) — Phase B only
|
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
Plus, when an operation needs async **and the Queue add-on is on for this
|
|
59
|
-
project** (check `
|
|
59
|
+
project** (check `TODO.md`'s `## Add-ons` block): **queue = port +
|
|
60
60
|
BullMQ adapter**, same port/adapter shape as the repository. The service
|
|
61
61
|
imports only ports. If the Queue add-on is off, there's no `apps/worker`
|
|
62
62
|
and no queue step, full stop — an operation that seems to want async
|
|
@@ -98,7 +98,7 @@ Phase B starts once Phase A is done for the scope. The frontend is a pure
|
|
|
98
98
|
consumer of an already-finished API. Step 6a is where "how it should feel"
|
|
99
99
|
gets decided — once per module, after the hook exists and before
|
|
100
100
|
`ui-builder` starts the screen — via `ux-planner`, starting from whatever
|
|
101
|
-
`planner` filed in `docs/design/<module>-notes.md` at
|
|
101
|
+
`planner` filed in `docs/design/<module>-notes.md` at planning intake. Its first run
|
|
102
102
|
for a module also signals to the user that Phase B has started, and is the
|
|
103
103
|
point a mockup, screenshot, or export (Google Stitch, Figma) can be handed
|
|
104
104
|
over. It writes `docs/design/<module>.md`, not its own step commit;
|
|
@@ -176,7 +176,7 @@ Use the `reviewer` agent for this — it checks what the mechanical gate
|
|
|
176
176
|
can't (port discipline, FK-by-ID discipline, contract shape).
|
|
177
177
|
|
|
178
178
|
Before starting Phase A for a module, confirm it's inside the stated scope
|
|
179
|
-
boundary from
|
|
179
|
+
boundary from planning intake (`planner`). If not, stop and ask.
|
|
180
180
|
|
|
181
181
|
## Rules
|
|
182
182
|
|
|
@@ -185,9 +185,9 @@ boundary from Intake (`planner`). If not, stop and ask.
|
|
|
185
185
|
- **Sequential within a phase.** A step starts once the one before it
|
|
186
186
|
compiles and passes tests.
|
|
187
187
|
- **Step 5a is conditional twice over** — only if the Queue add-on is on
|
|
188
|
-
for this project at all (per `
|
|
189
|
-
when a given operation genuinely needs async (long-running,
|
|
190
|
-
fan-out); the normal case has no queue.
|
|
188
|
+
for this project at all (per `TODO.md`'s `## Add-ons` block), and even
|
|
189
|
+
then only when a given operation genuinely needs async (long-running,
|
|
190
|
+
retries, fan-out); the normal case has no queue.
|
|
191
191
|
- **A wrong step gets fixed at its source** — the Correction Protocol, not
|
|
192
192
|
a downstream workaround.
|
|
193
193
|
- **Tests gate every commit** in the sequence.
|