@skyf0xx/hedgehog 3.0.12 → 3.0.14
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 +3 -3
- package/bin/cli.mjs +11 -9
- package/package.json +3 -3
- package/src/agents/backend-eng.md +6 -8
- package/src/agents/front-end-eng.md +14 -18
- package/src/agents/layer-eng.md +2 -3
- package/src/agents/planner.md +119 -76
- package/src/agents/tweaker.md +43 -20
- package/src/skills/hedgehog-authored-loop/SKILL.md +38 -36
- package/src/skills/hedgehog-bootstrap/SKILL.md +2 -5
- package/src/skills/hedgehog-bootstrap-full-stack-app-core/SKILL.md +10 -23
- package/src/skills/hedgehog-core-design/SKILL.md +23 -6
- package/src/skills/hedgehog-landing-loop/SKILL.md +72 -45
- package/src/skills/hedgehog-loop/SKILL.md +58 -8
- package/src/skills/hedgehog-planning-intake/SKILL.md +119 -18
- package/src/skills/landing-copy-cta/SKILL.md +5 -13
- package/src/skills/landing-copy-headline/SKILL.md +3 -3
- package/src/skills/landing-copy-hero/SKILL.md +1 -5
- package/src/skills/landing-copy-mechanism/SKILL.md +1 -6
- package/src/skills/landing-copy-objection/SKILL.md +3 -8
- package/src/skills/landing-copy-problem/SKILL.md +1 -5
- package/src/skills/landing-copy-proof/SKILL.md +1 -8
- package/src/skills/landing-shapes/SKILL.md +6 -9
- package/src/skills/nx-generate/SKILL.md +1 -4
- package/src/skills/nx-run-tasks/SKILL.md +1 -5
- package/src/skills/nx-workspace/SKILL.md +3 -28
- package/src/templates/CLAUDE.core.authored.md +11 -4
- package/src/templates/CLAUDE.core.full-stack-app.md +8 -4
- package/src/templates/CLAUDE.core.landing-page.md +10 -1
- package/src/templates/CLAUDE.md +41 -11
- package/{skills → vendor-skills}/BMAD/ATTRIBUTION.md +1 -1
- package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/SKILL.md +1 -1
- /package/{skills → vendor-skills}/BMAD/LICENSE +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/agents/artifact-analyzer.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/agents/web-researcher.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/assets/prfaq-template.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/bmad-manifest.json +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/customer-faq.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/internal-faq.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/press-release.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/verdict.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-product-brief/assets/brief-template.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-product-brief/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/headless-schemas.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-template.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-validation-checklist.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/validation-report-template.html +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/references/headless.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/references/validate.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/color-themes.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-directions.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-editorial.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-mobile.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-shadcn.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/excalidraw-wireframe.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-mobile.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-shadcn.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/headless-schemas.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/key-screens.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/validation-report-template.html +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/creative-tools.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/design-md-spec.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/headless.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/validate.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/assets/methods.csv +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/scripts/pick_methods.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/scripts/tests/test_pick_methods.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/assets/brain-icons.json +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/assets/brain-methods.csv +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/assets/brain-selector.html +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/converge.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/finalize.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/headless.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/in-chat-techniques.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/mode-autonomous.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/mode-facilitator.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/mode-partner.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/resume.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/scripts/brain.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/scripts/tests/test_brain.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/assets/research.template.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/draft.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/finalize.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/html-briefing.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/lifecycle.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/process.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/run.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/selection.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/synthesis.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/verification.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/scripts/recon_kit.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/scripts/tests/test_recon_kit.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/academic-lit.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/competitive.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/domain.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/market.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/technical.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/user-voice.md +0 -0
- /package/{skills → vendor-skills}/BMAD/scripts/memlog.py +0 -0
- /package/{skills → vendor-skills}/BMAD/scripts/resolve_customization.py +0 -0
- /package/{skills → vendor-skills}/BMAD/scripts/tests/test_memlog.py +0 -0
- /package/{skills → vendor-skills}/GSAP/ATTRIBUTION.md +0 -0
- /package/{skills → vendor-skills}/GSAP/LICENSE +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-core/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-frameworks/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-performance/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-plugins/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-react/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-scrolltrigger/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-timeline/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-utils/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/llms.txt +0 -0
package/README.md
CHANGED
|
@@ -55,7 +55,7 @@ The build order is encoded into the project. The AI does not have to remember wh
|
|
|
55
55
|
Unlike stories and epics, **the graph locks build order** into an **signal-dense, context-light** path the agents can use.
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
|
-
npx @skyf0xx/hedgehog graph
|
|
58
|
+
npx @skyf0xx/hedgehog graph # show graph
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|

|
|
@@ -165,7 +165,7 @@ npx @skyf0xx/hedgehog update
|
|
|
165
165
|
This refreshes the installed agents and skills — for every coding agent
|
|
166
166
|
the project was set up for — along with the `AGENTS.md` index derived
|
|
167
167
|
from them. It never touches the instructions file, the build graph, the
|
|
168
|
-
core workspace, or `skills/BMAD`, since those carry project-specific or
|
|
168
|
+
core workspace, or `vendor-skills/BMAD`, since those carry project-specific or
|
|
169
169
|
write-once content.
|
|
170
170
|
|
|
171
171
|
## Why Hedgehog
|
|
@@ -200,7 +200,7 @@ The `nx-generate`, `nx-run-tasks`, `nx-workspace`, and
|
|
|
200
200
|
(`nrwl/nx-ai-agents-config`) MIT-licensed, pinned to commit `9609810`
|
|
201
201
|
(2026-07-23) and rewritten for Hedgehog's pnpm-only workspace convention.
|
|
202
202
|
|
|
203
|
-
`front-end-eng`'s animation skills (`skills/GSAP/`) are vendored from
|
|
203
|
+
`front-end-eng`'s animation skills (`vendor-skills/GSAP/`) are vendored from
|
|
204
204
|
[gsap-skills](https://github.com/greensock/gsap-skills)
|
|
205
205
|
(`greensock/gsap-skills`) MIT-licensed, pinned to commit `aed9cfd`
|
|
206
206
|
(2026-07-27).
|
package/bin/cli.mjs
CHANGED
|
@@ -108,12 +108,12 @@ function plan(core, host = DEFAULT_HOST, { hostOnly = false } = {}) {
|
|
|
108
108
|
: [
|
|
109
109
|
// The vendored BMAD-METHOD planning shelf that
|
|
110
110
|
// hedgehog-planning-intake runs — referenced by repo-root-relative
|
|
111
|
-
// path (skills/BMAD/...), so it lands there rather than under
|
|
112
|
-
// host's own directory.
|
|
113
|
-
{ type: 'dir', from: 'skills/BMAD', to: 'skills/BMAD' },
|
|
111
|
+
// path (vendor-skills/BMAD/...), so it lands there rather than under
|
|
112
|
+
// a host's own directory.
|
|
113
|
+
{ type: 'dir', from: 'vendor-skills/BMAD', to: 'vendor-skills/BMAD' },
|
|
114
114
|
// The vendored GSAP animation skill shelf that front-end-eng loads
|
|
115
115
|
// for motion work — same repo-root-relative referencing.
|
|
116
|
-
{ type: 'dir', from: 'skills/GSAP', to: 'skills/GSAP' },
|
|
116
|
+
{ type: 'dir', from: 'vendor-skills/GSAP', to: 'vendor-skills/GSAP' },
|
|
117
117
|
];
|
|
118
118
|
|
|
119
119
|
const base = [...perHost, ...shared];
|
|
@@ -157,8 +157,9 @@ function plan(core, host = DEFAULT_HOST, { hostOnly = false } = {}) {
|
|
|
157
157
|
// this, always overwriting, since a consuming project's installed agents
|
|
158
158
|
// and skills are supposed to match upstream verbatim. The bootstrap file
|
|
159
159
|
// carries project-filled content, the build graph and core workspace are
|
|
160
|
-
// verified once by their own init/bootstrap-core steps, and
|
|
161
|
-
// and skills/GSAP are re-vendored only
|
|
160
|
+
// verified once by their own init/bootstrap-core steps, and
|
|
161
|
+
// vendor-skills/BMAD and vendor-skills/GSAP are re-vendored only
|
|
162
|
+
// deliberately (a manual re-vendor,
|
|
162
163
|
// per each shelf's ATTRIBUTION.md) — none of those belong in an update.
|
|
163
164
|
function updatePlan(host = DEFAULT_HOST) {
|
|
164
165
|
const h = HOSTS[host];
|
|
@@ -293,8 +294,9 @@ derived from them) from the installed Hedgehog version, so an
|
|
|
293
294
|
already-bootstrapped project can pick up changes from a newer release. It
|
|
294
295
|
refreshes every host the project was installed for, always overwriting
|
|
295
296
|
those directories. The instructions file, the build graph, the core
|
|
296
|
-
workspace, and skills/BMAD and skills/GSAP stay as they
|
|
297
|
-
project-specific or updated deliberately, not by this
|
|
297
|
+
workspace, and vendor-skills/BMAD and vendor-skills/GSAP stay as they
|
|
298
|
+
are — those are project-specific or updated deliberately, not by this
|
|
299
|
+
command.
|
|
298
300
|
`);
|
|
299
301
|
}
|
|
300
302
|
|
|
@@ -452,7 +454,7 @@ async function update({ hosts }) {
|
|
|
452
454
|
console.log(
|
|
453
455
|
dim(
|
|
454
456
|
`${bootstraps}, the build graph, the core workspace, and\n` +
|
|
455
|
-
'skills/BMAD and skills/GSAP are untouched — those carry\n' +
|
|
457
|
+
'vendor-skills/BMAD and vendor-skills/GSAP are untouched — those carry\n' +
|
|
456
458
|
'project-specific or write-once content.',
|
|
457
459
|
),
|
|
458
460
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skyf0xx/hedgehog",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.14",
|
|
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": {
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"src/skills",
|
|
26
26
|
"src/templates",
|
|
27
27
|
"src/golden-cores",
|
|
28
|
-
"skills/BMAD",
|
|
29
|
-
"skills/GSAP"
|
|
28
|
+
"vendor-skills/BMAD",
|
|
29
|
+
"vendor-skills/GSAP"
|
|
30
30
|
],
|
|
31
31
|
"engines": {
|
|
32
32
|
"node": ">=22.5.0"
|
|
@@ -31,11 +31,10 @@ gated by `hedgehog verify` before the next starts.
|
|
|
31
31
|
`controller` layer's packet, verified by that layer's own check.
|
|
32
32
|
- **PostgreSQL** via Docker Compose — never a natively-installed Postgres.
|
|
33
33
|
|
|
34
|
-
Use
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
when a new package needs wiring into a consumer's dependencies.
|
|
34
|
+
Use `nx-run-tasks` (build/lint/test/typecheck), `nx-workspace` (inspecting
|
|
35
|
+
project/target config), `nx-generate` (scaffolding a new library/app), and
|
|
36
|
+
`link-workspace-packages` (wiring a new package into a consumer) as
|
|
37
|
+
needed.
|
|
39
38
|
|
|
40
39
|
## Core Responsibilities
|
|
41
40
|
|
|
@@ -87,9 +86,8 @@ when a new package needs wiring into a consumer's dependencies.
|
|
|
87
86
|
|
|
88
87
|
## Constraints
|
|
89
88
|
|
|
90
|
-
- Never self-certify a task as done
|
|
91
|
-
|
|
92
|
-
`complete`. Never run `git commit` for the task's own changes.
|
|
89
|
+
- Never self-certify a task as done or run `git commit` for its changes —
|
|
90
|
+
see Workflow step 3.
|
|
93
91
|
- Never import another module's repository, service, or schema directly
|
|
94
92
|
— cross-module references are FK-by-ID, resolved at the
|
|
95
93
|
contract/controller layer (parallel calls) or via a same-repository
|
|
@@ -29,17 +29,16 @@ exactly what its ALLOWED SCOPE names, one layer at a time, gated by
|
|
|
29
29
|
you talk to the API. Never call `fetch`/`axios` against `apps/api`
|
|
30
30
|
routes directly.
|
|
31
31
|
|
|
32
|
-
Use
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
when a new package needs wiring into a consumer's dependencies.
|
|
32
|
+
Use `nx-run-tasks` (build/lint/test/typecheck), `nx-workspace` (inspecting
|
|
33
|
+
project/target config), `nx-generate` (scaffolding a new library/app), and
|
|
34
|
+
`link-workspace-packages` (wiring a new package into a consumer) as
|
|
35
|
+
needed.
|
|
37
36
|
|
|
38
37
|
If the screen step calls for animation or motion — entrances, sequencing,
|
|
39
38
|
scroll-driven effects, drag, SVG/morph effects — use GSAP, loading the
|
|
40
|
-
relevant skill from `skills/GSAP/` (`gsap-core`, `gsap-timeline`,
|
|
39
|
+
relevant skill from `vendor-skills/GSAP/` (`gsap-core`, `gsap-timeline`,
|
|
41
40
|
`gsap-scrolltrigger`, `gsap-plugins`, `gsap-utils`, `gsap-react`,
|
|
42
|
-
`gsap-performance`, `gsap-frameworks`; see `skills/GSAP/llms.txt` for
|
|
41
|
+
`gsap-performance`, `gsap-frameworks`; see `vendor-skills/GSAP/llms.txt` for
|
|
43
42
|
which to load). GSAP is the one animation library in the locked stack —
|
|
44
43
|
don't reach for a second one.
|
|
45
44
|
|
|
@@ -48,14 +47,12 @@ don't reach for a second one.
|
|
|
48
47
|
- **`hook`**: build the TanStack Query hook in `packages/hooks`, wrapping
|
|
49
48
|
the ts-rest contract client. One hook per contract operation, typed end
|
|
50
49
|
to end from the Zod contract. The client's base URL comes from a
|
|
51
|
-
`NEXT_PUBLIC_`-prefixed env var (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
moment either port changes and produces a silent 404 that looks like a
|
|
58
|
-
routing bug, not a config bug.
|
|
50
|
+
`NEXT_PUBLIC_`-prefixed env var (add to `packages/config/env.schema.ts`
|
|
51
|
+
if missing) — never a hardcoded `http://localhost:<port>` fallback,
|
|
52
|
+
which silently drifts out of sync with `apps/api`'s dev port (`3333`,
|
|
53
|
+
per `hedgehog-bootstrap-full-stack-app-core` — chosen to not collide
|
|
54
|
+
with `apps/web`'s `next dev` default of `3000`) and produces a 404 that
|
|
55
|
+
looks like a routing bug, not a config bug.
|
|
59
56
|
- **`screen`**: build the screen/component in `apps/web` and/or
|
|
60
57
|
`apps/mobile`, consuming the hook and `ux-planner`'s rationale for that
|
|
61
58
|
module (screen inventory, interaction pattern, information hierarchy).
|
|
@@ -92,9 +89,8 @@ don't reach for a second one.
|
|
|
92
89
|
|
|
93
90
|
## Constraints
|
|
94
91
|
|
|
95
|
-
- Never self-certify a task as done
|
|
96
|
-
|
|
97
|
-
`complete`. Never run `git commit` for the task's own changes.
|
|
92
|
+
- Never self-certify a task as done or run `git commit` for its changes —
|
|
93
|
+
see Workflow step 3.
|
|
98
94
|
- Never add a data-fetching call that bypasses the hook/contract layer —
|
|
99
95
|
the Nx boundary rule (`scope:web` / `scope:mobile` only depend on
|
|
100
96
|
`scope:contracts`, `scope:hooks`, `scope:shared`) makes a direct
|
package/src/agents/layer-eng.md
CHANGED
|
@@ -68,9 +68,8 @@ parsing and typing, and the layer after it consumes the result.
|
|
|
68
68
|
|
|
69
69
|
## Constraints
|
|
70
70
|
|
|
71
|
-
- Never self-certify a task as done
|
|
72
|
-
|
|
73
|
-
`complete`. Never run `git commit` for the task's own changes.
|
|
71
|
+
- Never self-certify a task as done or run `git commit` for its changes —
|
|
72
|
+
see Workflow step 4.
|
|
74
73
|
- Never write outside the packet's ALLOWED SCOPE. Scope is what stops
|
|
75
74
|
this layer from quietly rewriting the previous one's work; `hedgehog
|
|
76
75
|
verify` enforces it, and a change that needs to land elsewhere is a
|
package/src/agents/planner.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: planner
|
|
3
|
-
description: Use for planning intake (core selection, then scope boundary + domain vocabulary or Chain Method brief, depending on core)
|
|
3
|
+
description: Use for planning intake (core selection, then scope boundary + domain vocabulary or Chain Method brief, depending on core) at the start of a project, and for re-entry when new scope enters play on a project already built or mid-build — including after a build has reached its Stop Condition, where it is the exit `tweaker` routes new scope to. Runs a first-run or a re-entry path depending on whether the build graph already holds intents. Not a per-step planner — the step sequence within a project and the build graph already handle that.
|
|
4
4
|
model: sonnet
|
|
5
5
|
color: yellow
|
|
6
6
|
tools: Read, Glob, Grep, Edit, Write, Bash
|
|
@@ -19,23 +19,35 @@ artifact gets written.
|
|
|
19
19
|
|
|
20
20
|
## When you run
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
- **
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
You run on two paths, and Workflow step 2 decides which:
|
|
23
|
+
|
|
24
|
+
- **First run** (the graph holds no intents): **Phase 0 — core
|
|
25
|
+
selection**, the gate below, then **Phase 1 — planning intake** in the
|
|
26
|
+
shape the chosen core defines, then the `bootstrap` handoff.
|
|
27
|
+
- **Re-entry** (the graph already holds intents): new scope entering play
|
|
28
|
+
on a project that's already been built or is mid-build, on a core with
|
|
29
|
+
a module axis to add an intent to (full-stack-app, authored). The core
|
|
30
|
+
is already chosen and its workspace already scaffolded, so Phase 0 and
|
|
31
|
+
the `bootstrap` handoff are both skipped — run
|
|
32
|
+
`hedgehog-planning-intake`'s **Re-entry pass** instead, which mines new
|
|
33
|
+
scope into additional intents without re-running the BMAD shelf.
|
|
34
|
+
Landing-page has no module axis, so this path doesn't apply to it — see
|
|
35
|
+
the landing-page constraint below for where its new scope actually
|
|
36
|
+
goes.
|
|
37
|
+
|
|
38
|
+
Either path is entered when the user says "plan", "scope", "break down",
|
|
39
|
+
asks for something that's new scope rather than a tweak (routed here by
|
|
40
|
+
`tweaker`), or before a large refactor that might cross module boundaries
|
|
41
|
+
(full-stack-app).
|
|
33
42
|
|
|
34
43
|
## Phase 0 — which core applies
|
|
35
44
|
|
|
36
|
-
Before invoking any planning-intake skill, on a
|
|
37
|
-
|
|
38
|
-
always *which* core — "no core fits" is a
|
|
45
|
+
Before invoking any planning-intake skill, on a first run only (Workflow
|
|
46
|
+
step 2 establishes which run this is), decide which core the description
|
|
47
|
+
calls for. The real question is always *which* core — "no core fits" is a
|
|
48
|
+
narrow case, handled below. On re-entry this whole phase is skipped: the
|
|
49
|
+
core is a settled fact of the project, readable from `.hedgehog/core.yaml`
|
|
50
|
+
and the scaffolded workspace.
|
|
39
51
|
|
|
40
52
|
- **`full-stack-app`** — the description names persistent domain data
|
|
41
53
|
with its own lifecycle: something that gets created, changes state,
|
|
@@ -93,7 +105,9 @@ rather than guess.
|
|
|
93
105
|
|
|
94
106
|
## Phase 1 — planning intake
|
|
95
107
|
|
|
96
|
-
Once Phase 0 picks a core, run that core's own intake procedure
|
|
108
|
+
Once Phase 0 picks a core, run that core's own intake procedure. This is
|
|
109
|
+
the first-run shape; on re-entry, run `hedgehog-planning-intake`'s
|
|
110
|
+
**Re-entry pass** instead of anything below.
|
|
97
111
|
|
|
98
112
|
- **`full-stack-app`** → open `hedgehog-planning-intake` and follow it in
|
|
99
113
|
full: Phase 0 runs the vendored BMAD-METHOD shelf
|
|
@@ -178,77 +192,85 @@ accounts get added where there were none).
|
|
|
178
192
|
## Core Responsibilities
|
|
179
193
|
|
|
180
194
|
- Decide which core applies before running any planning-intake skill —
|
|
181
|
-
Phase 0 above.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
- **
|
|
187
|
-
person's description of a problem into planning documents, then mine
|
|
188
|
-
`04-prd.md` only into intent records — one `intents` row per §4
|
|
189
|
-
Feature, its FR Consequences and feature-specific rules as
|
|
190
|
-
`requirements`, its §3 Glossary relationships as `intent_dependencies`
|
|
191
|
-
(spec: "Mapping BMAD output to intents") — written via `hedgehog intent
|
|
192
|
-
add`, plus the Add-ons decision (see "The Add-ons decision" above),
|
|
193
|
-
written to `.hedgehog/addons.yaml`. Own `.hedgehog/BMAD/` (archival,
|
|
194
|
-
written once, never edited after) and `.hedgehog/addons.yaml` as
|
|
195
|
-
artifacts; the intent records themselves live in the build graph, not
|
|
196
|
-
a file this agent owns.
|
|
197
|
-
- **landing-page**: run the same vendored BMAD shelf in full, then mine
|
|
198
|
-
its output into a draft subject statement (subject, audience, single
|
|
199
|
-
page job) instead of intent records — shown back at this core's own
|
|
200
|
-
Confirm & Lock for the user to accept or correct. Own `.hedgehog/BMAD/`
|
|
201
|
-
(archival, written once, never edited after) and
|
|
195
|
+
Phase 0 above.
|
|
196
|
+
- **full-stack-app**: owns `.hedgehog/BMAD/` (archival, written once,
|
|
197
|
+
never edited after) and `.hedgehog/addons.yaml` as artifacts; the
|
|
198
|
+
intent records Phase 1 writes via `hedgehog intent add` live in the
|
|
199
|
+
build graph, not a file this agent owns.
|
|
200
|
+
- **landing-page**: owns `.hedgehog/BMAD/` and
|
|
202
201
|
`.hedgehog/chain/00-brief.md` as artifacts.
|
|
203
202
|
|
|
204
203
|
## Workflow
|
|
205
204
|
|
|
206
205
|
1. **Read the requirement** fully before doing anything.
|
|
207
|
-
2. **
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
206
|
+
2. **Run `hedgehog status` and decide which path you're on.** This is a
|
|
207
|
+
branch, not a survey — the rest of the workflow depends on its answer:
|
|
208
|
+
- **No intents in the graph → first run.** Continue at step 3.
|
|
209
|
+
- **One or more intents → re-entry.** Skip steps 3, 4, and 9 entirely
|
|
210
|
+
and go to step 5's re-entry branch. The core is already chosen and
|
|
211
|
+
its workspace already scaffolded; re-deciding either is destructive,
|
|
212
|
+
not a fresh start.
|
|
213
|
+
|
|
214
|
+
Read the commit log alongside it for what's already built —
|
|
215
|
+
full-stack-app: `feat(<module>): api` commits and each task's status in
|
|
216
|
+
the graph mark modules with a closed Phase A. Landing-page: a
|
|
217
|
+
`complete` phase task marks that phase's artifact as committed.
|
|
211
218
|
Authored core: each `complete` task marks that layer committed, per
|
|
212
|
-
`.hedgehog/core.yaml`'s own commit messages.
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
219
|
+
`.hedgehog/core.yaml`'s own commit messages. On re-entry this is what
|
|
220
|
+
tells you which modules the new scope can depend on.
|
|
221
|
+
3. **First run only — run Phase 0, which core applies.** A shipped core
|
|
222
|
+
fitting, no core fitting but something being built (authored core), or
|
|
223
|
+
nothing to build (stop and say so) — the three outcomes above.
|
|
224
|
+
4. **First run only, on an authored core, design it before mining**: run
|
|
217
225
|
`hedgehog-planning-intake`'s Phase 0, then `hedgehog-core-design`
|
|
218
226
|
through its own Confirm & Lock, which writes `.hedgehog/core.yaml` and
|
|
219
227
|
`.hedgehog/core-design.md`. Then continue at step 5 with that core's
|
|
220
228
|
Phase 1 mining — its Phase 0 has already run, so don't run the BMAD
|
|
221
|
-
shelf twice.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
229
|
+
shelf twice. On re-entry these two files are locked; a layer sequence
|
|
230
|
+
that turns out to be wrong is a Correction Protocol case, not a quiet
|
|
231
|
+
rewrite here.
|
|
232
|
+
5. **Run planning intake**, in the shape this path calls for:
|
|
233
|
+
- **First run, full-stack-app**: run the vendored BMAD shelf, then
|
|
234
|
+
mine `04-prd.md` only into intent records per the PRD→graph-row
|
|
226
235
|
table (spec: "Mapping BMAD output to intents") and the Add-ons
|
|
227
236
|
decision (see above) — asking the user directly only for whatever
|
|
228
237
|
the PRD leaves unresolved.
|
|
229
|
-
- landing-page
|
|
230
|
-
`.hedgehog/BMAD/` into a draft subject statement
|
|
231
|
-
single page job) — asking the user directly only
|
|
232
|
-
BMAD's docs leave unresolved.
|
|
233
|
-
|
|
238
|
+
- **First run, landing-page**: run the same vendored BMAD shelf in
|
|
239
|
+
full, then mine `.hedgehog/BMAD/` into a draft subject statement
|
|
240
|
+
(subject, audience, single page job) — asking the user directly only
|
|
241
|
+
for whatever BMAD's docs leave unresolved.
|
|
242
|
+
- **Re-entry (any core)**: run `hedgehog-planning-intake`'s **Re-entry
|
|
243
|
+
pass**. It reads the existing `.hedgehog/BMAD/` as context and elicits
|
|
244
|
+
only what's new — the BMAD shelf does not run again.
|
|
245
|
+
6. **Run the matching Confirm & Lock** before writing anything — the
|
|
246
|
+
first-run stage on a first run, the extension variant on re-entry.
|
|
234
247
|
7. **Write the intent records**: full-stack-app writes each intent via
|
|
235
|
-
`hedgehog intent add`, one call per PRD Feature,
|
|
236
|
-
`.hedgehog/addons.yaml`; landing-page writes
|
|
237
|
-
per its own Confirm & Lock, in the shape
|
|
238
|
-
planning-intake section defines
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
248
|
+
`hedgehog intent add`, one call per PRD Feature (per new module, on
|
|
249
|
+
re-entry), plus `.hedgehog/addons.yaml`; landing-page writes
|
|
250
|
+
`.hedgehog/chain/00-brief.md` per its own Confirm & Lock, in the shape
|
|
251
|
+
`hedgehog-landing-loop`'s planning-intake section defines — on a first
|
|
252
|
+
run only, since re-entry there requires the existing brief to still
|
|
253
|
+
hold. Then run **`hedgehog plan`** to compile those intents into
|
|
254
|
+
tasks. On re-entry this is append-only: `plan` only reads intents still
|
|
255
|
+
`proposed`/`planned`, so already-compiled work is untouched and its
|
|
256
|
+
`complete` tasks keep their status.
|
|
257
|
+
8. **Commit planning intake's output as one commit** —
|
|
258
|
+
`chore(planning): intake` on a first run, `chore(planning): extend
|
|
259
|
+
scope` on re-entry, so the two passes are distinguishable in the log.
|
|
260
|
+
It carries the committed `.hedgehog/hedgehog.db` (its new intent and
|
|
261
|
+
task rows on full-stack-app), `.hedgehog/addons.yaml` (full-stack-app
|
|
262
|
+
only, and on re-entry only if a trigger actually changed), this core's
|
|
263
|
+
own archival planning output (`.hedgehog/BMAD/` or `.hedgehog/chain/`,
|
|
264
|
+
first run only), the authored core's `.hedgehog/core.yaml` and
|
|
265
|
+
`.hedgehog/core-design.md` if step 4 ran, and root `CLAUDE.md`'s filled
|
|
266
|
+
placeholders (first run only). This is planning intake's own unit of
|
|
267
|
+
work, landed before `bootstrap` touches anything.
|
|
268
|
+
9. **First run only — hand off to the `bootstrap` agent** once the
|
|
269
|
+
commit lands. It scaffolds the chosen core's workspace (and, for
|
|
249
270
|
full-stack-app, whichever add-ons are on) before any build step
|
|
250
|
-
starts.
|
|
251
|
-
|
|
271
|
+
starts. On re-entry the workspace already exists: hand straight to
|
|
272
|
+
this core's loop skill instead, which picks the new work up from
|
|
273
|
+
`hedgehog next`.
|
|
252
274
|
10. **Return a summary**: which core (naming it as authored, if it is),
|
|
253
275
|
the intents added (or subject statement, for landing-page), any open
|
|
254
276
|
questions.
|
|
@@ -272,13 +294,34 @@ accounts get added where there were none).
|
|
|
272
294
|
or "improve."
|
|
273
295
|
- Archival planning output is write-once on every core. Once a file is
|
|
274
296
|
written, it's historical record — don't edit it to reflect a later
|
|
275
|
-
decision.
|
|
276
|
-
|
|
277
|
-
re-
|
|
278
|
-
|
|
297
|
+
decision. `.hedgehog/BMAD/` and `.hedgehog/chain/00-brief.md` are
|
|
298
|
+
written exactly once, on the first run, and read as context on every
|
|
299
|
+
re-entry after. A re-entry pass never rewrites them: what's new lives
|
|
300
|
+
in the new intents it adds, and the commit log carries the rest.
|
|
279
301
|
- Never invent scope. Ambiguous scope means stop and ask — this applies
|
|
280
302
|
equally to a full-stack-app module boundary and a landing-page subject
|
|
281
303
|
statement, whether or not BMAD's docs offered a mineable answer.
|
|
304
|
+
- **On landing-page, new scope after the build is complete is governed by
|
|
305
|
+
the subject statement, not by page or section count — and it is not
|
|
306
|
+
routed to you.** This core has no module axis, so there's no intent for
|
|
307
|
+
a later `planner` run to add: the single `landing` intent already
|
|
308
|
+
compiles into the fixed five-phase chain. `.hedgehog/chain/00-brief.md`
|
|
309
|
+
is the root every downstream phase's traceability audit walks back to,
|
|
310
|
+
so the only question is whether it still holds:
|
|
311
|
+
- **It holds** (a pricing section on a page whose subject is
|
|
312
|
+
unchanged — the page still sells the same thing to the same audience
|
|
313
|
+
for the same job): this is additive work inside the existing chain,
|
|
314
|
+
handled by `hedgehog-landing-loop`'s Correction Protocol post-build
|
|
315
|
+
entry, not by you.
|
|
316
|
+
- **It doesn't hold** (a different product, a different audience, a
|
|
317
|
+
different job): that's a new subject, and a new subject is a new
|
|
318
|
+
landing-page project through your first run there — not an edit to
|
|
319
|
+
this one's locked brief.
|
|
320
|
+
|
|
321
|
+
If a request like this reaches you anyway, read `00-brief.md`, say
|
|
322
|
+
which of the two it is, and route it correctly rather than absorbing
|
|
323
|
+
it. Never rewrite the brief to accommodate new scope; that inverts the
|
|
324
|
+
traceability the whole core rests on.
|
|
282
325
|
- Never default a full-stack-app add-on on or off without either a
|
|
283
326
|
concrete trigger in BMAD's docs or a direct answer to a gap-fill
|
|
284
327
|
question — an unresolved add-on left as a guess is the same mistake as
|
package/src/agents/tweaker.md
CHANGED
|
@@ -54,10 +54,27 @@ discipline as the rest of the build (`fix(<scope>): <what>` or
|
|
|
54
54
|
|
|
55
55
|
A tweak is a small, targeted edit to something that already exists —
|
|
56
56
|
not a new module, not a new phase, not scope growth. If a request turns
|
|
57
|
-
out to be either of those, say so and route it
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
out to be either of those, say so and route it onward — a completed
|
|
58
|
+
build is extendable, not sealed, and the user should not hear "no" where
|
|
59
|
+
the answer is "that's a different session." Where it routes depends on
|
|
60
|
+
the core:
|
|
61
|
+
|
|
62
|
+
- **full-stack-app** — a new domain module, or a feature that needs one,
|
|
63
|
+
routes to `planner`, which runs `hedgehog-planning-intake`'s
|
|
64
|
+
**Re-entry pass**: it adds intents for the new work without re-running
|
|
65
|
+
planning from scratch, and without disturbing anything already built.
|
|
66
|
+
- **authored core** — new scope on the module axis routes to `planner`'s
|
|
67
|
+
Re-entry pass the same way. A change to the layer sequence itself is
|
|
68
|
+
the Correction Protocol instead (`.hedgehog/core.yaml` is locked).
|
|
69
|
+
- **landing-page** — the test is whether `.hedgehog/chain/00-brief.md`
|
|
70
|
+
still holds. This core has no module axis, so a new section under a
|
|
71
|
+
brief that still holds does **not** route to `planner` — it routes to
|
|
72
|
+
the Correction Protocol's post-build entry (this core's own loop skill),
|
|
73
|
+
which re-runs the sequencer and copy phases for that section and
|
|
74
|
+
rebuilds the artifact. A different subject, audience, or job is a
|
|
75
|
+
different page and belongs in its own landing-page project — say so
|
|
76
|
+
rather than routing it, and never rewrite `00-brief.md` to fit new
|
|
77
|
+
scope into the old chain.
|
|
61
78
|
|
|
62
79
|
### Job 2 — Friction review, user feedback, and issue suggestion
|
|
63
80
|
|
|
@@ -191,18 +208,17 @@ discipline as `.hedgehog/BMAD/`. A later related incident is its own new
|
|
|
191
208
|
asking.
|
|
192
209
|
- Entries (or feedback items) that trace to the same underlying gap were
|
|
193
210
|
grouped into one issue, not filed as duplicates.
|
|
194
|
-
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
summary of what will be filed, and not silently altered after the user
|
|
198
|
-
approved it.
|
|
199
|
-
- No issue was created without an explicit final approval on that
|
|
200
|
-
specific issue's exact shown content — approval on one pattern was
|
|
201
|
-
never treated as approval for another.
|
|
211
|
+
- Shown content is literal/final and correctly labeled — never a
|
|
212
|
+
summary, never altered post-approval, and never created without an
|
|
213
|
+
explicit approval on that specific issue's exact shown content.
|
|
202
214
|
- Every tweak is its own commit, scoped to what the user actually asked
|
|
203
215
|
for — no drive-by refactor riding along on a color change.
|
|
204
|
-
- A request that's actually new scope (a new module
|
|
205
|
-
|
|
216
|
+
- A request that's actually new scope (a new module on full-stack-app or
|
|
217
|
+
an authored core, or a new landing-page section whose subject
|
|
218
|
+
statement still holds) was routed onward — to `planner`'s Re-entry
|
|
219
|
+
pass, or on landing-page to the Correction Protocol's post-build entry
|
|
220
|
+
— not built here, and the user was told the build is extendable, not
|
|
221
|
+
that the request was refused.
|
|
206
222
|
|
|
207
223
|
## Constraints
|
|
208
224
|
|
|
@@ -214,10 +230,12 @@ discipline as `.hedgehog/BMAD/`. A later related incident is its own new
|
|
|
214
230
|
having happened in this conversation. A user saying "yes, file it"
|
|
215
231
|
before the content was shown verbatim doesn't count — show first, then
|
|
216
232
|
ask.
|
|
217
|
-
- **If delegated**,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
233
|
+
- **If delegated**, the orchestrating session relays approval on the
|
|
234
|
+
user's behalf. A quoted, attributed relay (`user said: "<exact
|
|
235
|
+
words>"`) **is** sufficient approval — treat it as you would the user
|
|
236
|
+
typing it directly. A bare unquoted assertion ("the user approved") is
|
|
237
|
+
not. Don't demand the user type "here" when they have no channel to do
|
|
238
|
+
so.
|
|
221
239
|
- File one issue per distinct real pattern or feedback item, not one per
|
|
222
240
|
log entry or remark, and not capped at a single issue per source — a
|
|
223
241
|
log (or a round of feedback) with several unrelated genuine points gets
|
|
@@ -242,8 +260,13 @@ discipline as `.hedgehog/BMAD/`. A later related incident is its own new
|
|
|
242
260
|
write-once per row, same as `.hedgehog/BMAD/`.
|
|
243
261
|
- Don't expand a tweak into a rebuild. If a "tweak" actually requires
|
|
244
262
|
redoing a phase (e.g. the voice spec itself needs to change, not just
|
|
245
|
-
one line of copy), that's the Correction Protocol
|
|
246
|
-
|
|
263
|
+
one line of copy), that's the Correction Protocol — say so and route it
|
|
264
|
+
there rather than patching around it here. Use its **post-build entry**
|
|
265
|
+
(in this core's own loop skill): the build is already at its Stop
|
|
266
|
+
Condition, so there's no task in flight to stop and no loop to resume,
|
|
267
|
+
and the correction is fixed forward in new commits rather than by
|
|
268
|
+
reopening a `complete` task. The orchestrating session runs it and owns
|
|
269
|
+
the commits, the same way `hedgehog verify` always is.
|
|
247
270
|
- Don't run job 2's friction detection against anything other than
|
|
248
271
|
`hedgehog friction list` — don't re-scan the whole commit log or
|
|
249
272
|
conversation history looking for friction; if it wasn't logged, it
|