@skyf0xx/hedgehog 3.0.2 → 3.0.3
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 +6 -5
- package/bin/cli.mjs +77 -53
- package/package.json +1 -1
- package/src/agents/bootstrap.md +7 -11
- package/src/skills/hedgehog-bootstrap-authored-core/SKILL.md +23 -58
- package/src/skills/hedgehog-bootstrap-full-stack-app-core/SKILL.md +12 -8
- package/src/skills/hedgehog-bootstrap-landing-page-core/SKILL.md +12 -9
- package/src/skills/hedgehog-core-design/SKILL.md +4 -5
package/README.md
CHANGED
|
@@ -117,11 +117,12 @@ npx @skyf0xx/hedgehog init
|
|
|
117
117
|
|
|
118
118
|
Then open Claude Code and describe what you want to build.
|
|
119
119
|
|
|
120
|
-
Plain `init` (no core flag)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
Plain `init` (no core flag) installs the agents, skills, and build graph
|
|
121
|
+
only — no workspace, no framework, nothing core-specific. Planning
|
|
122
|
+
intake designs an opinionated build order and stack for what you
|
|
123
|
+
actually describe, then bootstrap lands that workspace for the first
|
|
124
|
+
time. Don't pick `--ts-full-stack-app` or `--landing-page` by elimination
|
|
125
|
+
when neither actually fits.
|
|
125
126
|
|
|
126
127
|
To update:
|
|
127
128
|
|
package/bin/cli.mjs
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
// into the current repo, so the discipline travels with the project.
|
|
4
4
|
//
|
|
5
5
|
// Usage:
|
|
6
|
-
// npx @skyf0xx/hedgehog init
|
|
7
|
-
// npx @skyf0xx/hedgehog init --
|
|
6
|
+
// npx @skyf0xx/hedgehog init no workspace yet — planner picks the core
|
|
7
|
+
// npx @skyf0xx/hedgehog init --ts-full-stack-app scaffold the full-stack-app core now
|
|
8
|
+
// npx @skyf0xx/hedgehog init --landing-page scaffold the landing-page core now
|
|
8
9
|
// npx @skyf0xx/hedgehog init --force overwrite files that already exist
|
|
9
10
|
// npx @skyf0xx/hedgehog update refresh .claude/agents + .claude/skills
|
|
10
11
|
// npx @skyf0xx/hedgehog --help
|
|
@@ -74,8 +75,16 @@ async function availableCores() {
|
|
|
74
75
|
// Agents and skills for every core install regardless of which one is
|
|
75
76
|
// chosen — planner needs the full toolset to run core selection at all,
|
|
76
77
|
// and a project can only switch cores before it's bootstrapped anyway.
|
|
78
|
+
//
|
|
79
|
+
// `core` is `null` on a deferred install (plain `init`, no explicit
|
|
80
|
+
// flag): which core applies hasn't been decided yet, so nothing
|
|
81
|
+
// core-specific — no golden-core workspace, no filled CLAUDE.md section —
|
|
82
|
+
// gets written speculatively. `bootstrap` lands the real workspace, for
|
|
83
|
+
// whichever core `planner` picks, the first time either way. An explicit
|
|
84
|
+
// flag (`--ts-full-stack-app`, `--landing-page`) is a confirmed choice,
|
|
85
|
+
// not a guess, so it scaffolds immediately as before.
|
|
77
86
|
function plan(core) {
|
|
78
|
-
|
|
87
|
+
const base = [
|
|
79
88
|
{ type: 'dir', from: 'src/agents', to: '.claude/agents' },
|
|
80
89
|
{ type: 'dir', from: 'src/skills', to: '.claude/skills' },
|
|
81
90
|
// The vendored BMAD-METHOD planning shelf that hedgehog-planning-intake
|
|
@@ -85,26 +94,26 @@ function plan(core) {
|
|
|
85
94
|
// The vendored GSAP animation skill shelf that front-end-eng loads for
|
|
86
95
|
// motion work — same repo-root-relative referencing as skills/BMAD.
|
|
87
96
|
{ type: 'dir', from: 'skills/GSAP', to: 'skills/GSAP' },
|
|
97
|
+
];
|
|
98
|
+
|
|
99
|
+
if (core === null) {
|
|
100
|
+
return [
|
|
101
|
+
...base,
|
|
102
|
+
// The shell with its {{CORE_SECTION}} placeholder left unfilled —
|
|
103
|
+
// whichever bootstrap-core skill runs first fills it in for the
|
|
104
|
+
// core planner actually picked.
|
|
105
|
+
{ type: 'file', from: 'src/templates/CLAUDE.md', to: 'CLAUDE.md' },
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return [
|
|
110
|
+
...base,
|
|
88
111
|
{
|
|
89
112
|
type: 'merge',
|
|
90
113
|
shell: 'src/templates/CLAUDE.md',
|
|
91
114
|
include: `src/templates/CLAUDE.core.${core}.md`,
|
|
92
115
|
to: 'CLAUDE.md',
|
|
93
116
|
},
|
|
94
|
-
// The shell plus the authored-core section, landed unmerged so
|
|
95
|
-
// `hedgehog-bootstrap-authored-core` can rebuild CLAUDE.md from them
|
|
96
|
-
// when planning intake designs a core instead of taking a shipped
|
|
97
|
-
// one. Removed by that same step once it has used them.
|
|
98
|
-
{
|
|
99
|
-
type: 'file',
|
|
100
|
-
from: 'src/templates/CLAUDE.md',
|
|
101
|
-
to: '.hedgehog/templates/CLAUDE.md',
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
type: 'file',
|
|
105
|
-
from: 'src/templates/CLAUDE.core.authored.md',
|
|
106
|
-
to: '.hedgehog/templates/CLAUDE.core.authored.md',
|
|
107
|
-
},
|
|
108
117
|
// The pre-built, pre-verified workspace for the chosen core —
|
|
109
118
|
// everything a fresh project of that shape needs at repo root
|
|
110
119
|
// (lands the root package.json too, so there's no separate
|
|
@@ -182,9 +191,9 @@ CLAUDE.md template and an empty build graph (${bold('.hedgehog/hedgehog.db')})
|
|
|
182
191
|
into the repo root, so the discipline is committed alongside your code.
|
|
183
192
|
|
|
184
193
|
${bold('Usage')}
|
|
185
|
-
npx @skyf0xx/hedgehog init
|
|
186
|
-
npx @skyf0xx/hedgehog init --ts-full-stack-app scaffold the full-stack-app core
|
|
187
|
-
npx @skyf0xx/hedgehog init --landing-page scaffold the landing-page core
|
|
194
|
+
npx @skyf0xx/hedgehog init no workspace yet — planner picks the core
|
|
195
|
+
npx @skyf0xx/hedgehog init --ts-full-stack-app scaffold the full-stack-app core now
|
|
196
|
+
npx @skyf0xx/hedgehog init --landing-page scaffold the landing-page core now
|
|
188
197
|
npx @skyf0xx/hedgehog init --force overwrite existing files
|
|
189
198
|
npx @skyf0xx/hedgehog update refresh .claude/agents + .claude/skills
|
|
190
199
|
npx @skyf0xx/hedgehog db init create .hedgehog/hedgehog.db if absent
|
|
@@ -208,10 +217,10 @@ off to bootstrap.
|
|
|
208
217
|
Building something else (a CLI, library, browser extension, data
|
|
209
218
|
pipeline, desktop app, etc.)? Run plain 'init' with no core flag rather
|
|
210
219
|
than picking --ts-full-stack-app or --landing-page by elimination — it
|
|
211
|
-
|
|
212
|
-
agent designs
|
|
213
|
-
|
|
214
|
-
|
|
220
|
+
installs the agents, skills, and build graph only, nothing core-specific.
|
|
221
|
+
The planner agent designs a core at planning intake (hedgehog-core-design)
|
|
222
|
+
and bootstrap generates that workspace once it's confirmed. Describe the
|
|
223
|
+
actual project and let Phase 0 route it.
|
|
215
224
|
|
|
216
225
|
${bold('update')} re-copies only .claude/agents and .claude/skills from the
|
|
217
226
|
installed Hedgehog version, so an already-bootstrapped project can pick up
|
|
@@ -223,19 +232,22 @@ updated deliberately, not by this command.
|
|
|
223
232
|
}
|
|
224
233
|
|
|
225
234
|
async function init({ force, core, explicitCore }) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
235
|
+
if (explicitCore) {
|
|
236
|
+
const cores = await availableCores();
|
|
237
|
+
if (!cores.includes(core)) {
|
|
238
|
+
console.error(
|
|
239
|
+
`${red('Unknown core:')} ${core}\n\nAvailable cores: ${cores.join(', ')}\n`,
|
|
240
|
+
);
|
|
241
|
+
process.exitCode = 1;
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
233
244
|
}
|
|
234
245
|
|
|
235
246
|
// Resolve the full list of writes up front so we can detect conflicts
|
|
236
|
-
// before touching anything.
|
|
247
|
+
// before touching anything. A deferred install (no explicit core) plans
|
|
248
|
+
// against `null` — no golden-core workspace, nothing core-specific.
|
|
237
249
|
const groups = [];
|
|
238
|
-
for (const entry of plan(core)) {
|
|
250
|
+
for (const entry of plan(explicitCore ? core : null)) {
|
|
239
251
|
const files = await plannedFiles(entry);
|
|
240
252
|
groups.push({ entry, files });
|
|
241
253
|
}
|
|
@@ -282,30 +294,40 @@ async function init({ force, core, explicitCore }) {
|
|
|
282
294
|
)}\n`,
|
|
283
295
|
);
|
|
284
296
|
console.log('Next steps:');
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
297
|
+
if (explicitCore) {
|
|
298
|
+
console.log(` 1. ${bold('git add -A && git commit -m "chore: install Hedgehog"')}`);
|
|
299
|
+
console.log(` 2. ${bold('pnpm install')}`);
|
|
300
|
+
console.log(` 3. Open Claude Code and describe what you want to build.`);
|
|
301
|
+
} else {
|
|
302
|
+
console.log(` 1. ${bold('git add -A && git commit -m "chore: install Hedgehog"')}`);
|
|
303
|
+
console.log(` 2. Open Claude Code and describe what you want to build.`);
|
|
304
|
+
}
|
|
288
305
|
console.log(
|
|
289
306
|
dim(
|
|
290
307
|
` The ${bold('planner')} agent runs planning intake, then hands off to bootstrap.`,
|
|
291
308
|
),
|
|
292
309
|
);
|
|
293
310
|
console.log();
|
|
294
|
-
|
|
295
|
-
dim(
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
311
|
+
if (explicitCore) {
|
|
312
|
+
console.log(dim(`Core: ${bold(core)}.`));
|
|
313
|
+
console.log(
|
|
314
|
+
dim(
|
|
315
|
+
core === DEFAULT_CORE
|
|
316
|
+
? '(Nx, packages/config, packages/db, apps/api, apps/web) — bootstrap\n' +
|
|
317
|
+
'runs whichever add-ons (Auth, Queue, Mobile) intake calls for.'
|
|
318
|
+
: 'bootstrap runs whichever add-on steps this core defines, if any.',
|
|
319
|
+
),
|
|
320
|
+
);
|
|
321
|
+
} else {
|
|
322
|
+
console.log(
|
|
323
|
+
dim(
|
|
324
|
+
'Core: not chosen yet. Nothing core-specific landed — no workspace,\n' +
|
|
325
|
+
'no framework, no lockfile. planner decides which core applies at\n' +
|
|
326
|
+
'planning intake, then bootstrap lands that core\'s workspace for\n' +
|
|
327
|
+
'the first time.',
|
|
328
|
+
),
|
|
329
|
+
);
|
|
330
|
+
}
|
|
309
331
|
}
|
|
310
332
|
|
|
311
333
|
async function update() {
|
|
@@ -359,8 +381,10 @@ async function dbCommand(args) {
|
|
|
359
381
|
|
|
360
382
|
// Resolves the project's core definition: an authored .hedgehog/core.yaml
|
|
361
383
|
// takes precedence (spec: "Authored cores"); otherwise the shipped Golden
|
|
362
|
-
// Core landed at repo root by `
|
|
363
|
-
// with the rest of src/golden-cores/<core>).
|
|
384
|
+
// Core landed at repo root by `bootstrap` (its core.yaml copies there
|
|
385
|
+
// along with the rest of src/golden-cores/<core>). Neither exists yet on
|
|
386
|
+
// a deferred install (plain `init`, no explicit core flag) until
|
|
387
|
+
// `bootstrap` runs — this returns null until then.
|
|
364
388
|
async function resolveCorePath() {
|
|
365
389
|
if (await exists(join(DEST_ROOT, AUTHORED_CORE_PATH))) {
|
|
366
390
|
return join(DEST_ROOT, AUTHORED_CORE_PATH);
|
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 the workspace for whichever core `planner` selected at Phase 0. On full-stack-app, that's core (via hedgehog-bootstrap-full-stack-app-core, one pass) then 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. On landing-page, that's a single pass of hedgehog-bootstrap-landing-page-core with no add-on steps — one invocation, done. On an authored core (`.hedgehog/core.yaml` present), that's a single pass of hedgehog-bootstrap-authored-core,
|
|
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 only agents/skills/the build graph, nothing core-specific. On full-stack-app, that's core (via hedgehog-bootstrap-full-stack-app-core, one pass) then 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. On landing-page, that's a single pass of hedgehog-bootstrap-landing-page-core with no add-on steps — one invocation, done. On an authored core (`.hedgehog/core.yaml` present), that's a single pass of hedgehog-bootstrap-authored-core, generating the workspace live for the stack `hedgehog-core-design` chose. Not for per-phase/per-module work — that's this core's own loop skill and its agents. Skip entirely if the core's workspace already exists (nx.json for full-stack-app, astro.config.mjs for landing-page, or the matching `feat(<id>): workspace` commit for an authored core).
|
|
4
4
|
model: sonnet
|
|
5
5
|
color: green
|
|
6
6
|
tools: Read, Glob, Grep, Edit, Write, Bash
|
|
@@ -27,10 +27,7 @@ What "bootstrap" means differs by core:
|
|
|
27
27
|
there's no "next step" to hand off to.
|
|
28
28
|
- **an authored core** (`.hedgehog/core.yaml` present, written by
|
|
29
29
|
`hedgehog-core-design`) has one part, no add-on layer, like
|
|
30
|
-
landing-page: `hedgehog-bootstrap-authored-core`
|
|
31
|
-
default golden-core scaffold `init` speculatively landed (`init` always
|
|
32
|
-
scaffolds `full-stack-app` by default, since the CLI has to copy
|
|
33
|
-
something before `planner` ever runs Phase 0), then generates a fresh
|
|
30
|
+
landing-page: `hedgehog-bootstrap-authored-core` generates a fresh
|
|
34
31
|
workspace live for the stack `hedgehog-core-design` chose — there's no
|
|
35
32
|
pre-built template for an authored core's stack the way there is for
|
|
36
33
|
the two shipped cores — verifies it, one commit. One invocation closes
|
|
@@ -145,10 +142,9 @@ Bootstrap is already closed and `hedgehog-authored-loop` owns everything
|
|
|
145
142
|
from here (stop, say so).
|
|
146
143
|
|
|
147
144
|
Open `hedgehog-bootstrap-authored-core` and follow it in full: confirm not
|
|
148
|
-
already run,
|
|
149
|
-
|
|
150
|
-
`.hedgehog/
|
|
151
|
-
`.hedgehog/core-design.md` and `.hedgehog/core.yaml`, generate that
|
|
145
|
+
already run, fill root `CLAUDE.md`'s `{{CORE_SECTION}}` placeholder with
|
|
146
|
+
`CLAUDE.core.authored.md` if it's still unfilled, read the stack choice
|
|
147
|
+
from `.hedgehog/core-design.md` and `.hedgehog/core.yaml`, generate that
|
|
152
148
|
stack's workspace via its own ecosystem's generator, install, run every
|
|
153
149
|
layer's `verify` command clean, one commit (`feat(<id>): workspace`),
|
|
154
150
|
check the Bootstrap box. That's the whole of Bootstrap on this core —
|
|
@@ -167,8 +163,8 @@ there's no next Bootstrap step.
|
|
|
167
163
|
add-on-style steps for this core; it doesn't have any.
|
|
168
164
|
- **authored core**: one pass, one commit, no hand-off, no add-on layer.
|
|
169
165
|
This pass generates the workspace from the stack in
|
|
170
|
-
`.hedgehog/core-design.md` and
|
|
171
|
-
|
|
166
|
+
`.hedgehog/core-design.md` and fills root `CLAUDE.md`'s core section;
|
|
167
|
+
`hedgehog-bootstrap-authored-core` owns both.
|
|
172
168
|
- Never re-run a step whose commit already exists — see the per-core
|
|
173
169
|
"which step is yours" sections above. A felt need to redo a landed
|
|
174
170
|
step is a Correction Protocol case (patch it at its source, per that
|
|
@@ -1,25 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hedgehog-bootstrap-authored-core
|
|
3
|
-
description: Use once, at the start of a new Hedgehog project on an authored core (`hedgehog-core-design` wrote `.hedgehog/core.yaml`), to
|
|
3
|
+
description: Use once, at the start of a new Hedgehog project on an authored core (`hedgehog-core-design` wrote `.hedgehog/core.yaml`), to generate a verified workspace for the stack `hedgehog-core-design` chose. Runs as the `bootstrap` agent's only move on this core, and closes Bootstrap.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Hedgehog Bootstrap — authored core
|
|
7
7
|
|
|
8
8
|
Lands the workspace for a project whose core `hedgehog-core-design`
|
|
9
|
-
designed.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
`hedgehog init` scaffolds a default golden-core payload before `planner`
|
|
16
|
-
runs Phase 0 — a CLI has to pick something to copy, and `full-stack-app`
|
|
17
|
-
is that default (`bin/cli.mjs`'s `DEFAULT_CORE`). When Phase 0 designs a
|
|
18
|
-
core instead, that scaffold (`nx.json`, `packages/`, `apps/api`,
|
|
19
|
-
`apps/web`, the root `package.json`, full-stack-app's section of root
|
|
20
|
-
`CLAUDE.md`) is speculative output this project never confirmed. Clearing
|
|
21
|
-
it is this skill's first job: left in place, it collides with the
|
|
22
|
-
generated workspace on `package.json`, lockfiles, and root config.
|
|
9
|
+
designed. `hedgehog init` never scaffolds anything core-specific until a
|
|
10
|
+
core is actually chosen, so nothing needs clearing here — this skill is
|
|
11
|
+
the first thing that writes a workspace for this project. The stack
|
|
12
|
+
varies per project (`hedgehog-core-design`'s Step 2 stack table), so it's
|
|
13
|
+
generated live from the ecosystem's own tooling and verified before it's
|
|
14
|
+
committed.
|
|
23
15
|
|
|
24
16
|
## Steps
|
|
25
17
|
|
|
@@ -33,43 +25,19 @@ produce (e.g. `wxt.config.ts` for a WXT browser extension,
|
|
|
33
25
|
there. A workspace that looks wrong is a Correction Protocol case against
|
|
34
26
|
the specific file.
|
|
35
27
|
|
|
36
|
-
### 2.
|
|
37
|
-
|
|
38
|
-
`
|
|
39
|
-
`
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
- Delete these root directories in full: `packages/` (`config`, `db`),
|
|
50
|
-
`apps/` (`api`, `api-e2e`, `web`, `web-e2e`), `tools/`
|
|
51
|
-
(`phase-gate.cjs`), `.github/` (`workflows/phase-gate.yml`),
|
|
52
|
-
`.vscode/`. None of it was ever installed — `pnpm install` hasn't run
|
|
53
|
-
on a fresh `init` — so this removes scaffolded source files, with no
|
|
54
|
-
running infra and no data involved.
|
|
55
|
-
- The generator in step 4 lands its own `.gitignore`; if it doesn't,
|
|
56
|
-
write one for the chosen stack before committing.
|
|
57
|
-
- Rebuild root `CLAUDE.md` from the templates `init` landed in
|
|
58
|
-
`.hedgehog/templates/`: take `CLAUDE.md` (the shell) and replace its
|
|
59
|
-
`{{CORE_SECTION}}` placeholder with the full contents of
|
|
60
|
-
`CLAUDE.core.authored.md`. Carry over the `{{PROJECT_NAME}}` and
|
|
61
|
-
`{{PROJECT_SUMMARY}}` values `planner` already filled into the current
|
|
62
|
-
root `CLAUDE.md` — those are project content, written at planning
|
|
63
|
-
intake, and the rebuild must not blank them. Delete
|
|
64
|
-
`.hedgehog/templates/` once the rebuild lands; it exists for this one
|
|
65
|
-
step.
|
|
66
|
-
- Leave `.claude/agents/`, `.claude/skills/`, `skills/BMAD/`,
|
|
67
|
-
`skills/GSAP/`, and the rest of `.hedgehog/` in place — the build
|
|
68
|
-
graph, the planning archive, and the design files this step reads from
|
|
69
|
-
install the same regardless of which core Phase 0 picks.
|
|
70
|
-
|
|
71
|
-
`nx.json` absent means the scaffold was already cleared — skip straight
|
|
72
|
-
to the `CLAUDE.md` rebuild, which still applies.
|
|
28
|
+
### 2. Fill in `CLAUDE.md`'s core section
|
|
29
|
+
|
|
30
|
+
Root `CLAUDE.md` was landed by `init` as a shell with its
|
|
31
|
+
`{{CORE_SECTION}}` placeholder still unfilled (no core was known yet).
|
|
32
|
+
Read `src/templates/CLAUDE.core.authored.md` from the installed Hedgehog
|
|
33
|
+
package and write its contents in place of the placeholder — every other
|
|
34
|
+
line in root `CLAUDE.md`, including the `{{PROJECT_NAME}}`/
|
|
35
|
+
`{{PROJECT_SUMMARY}}` values `planner` already filled at planning intake,
|
|
36
|
+
stays untouched.
|
|
37
|
+
|
|
38
|
+
If the placeholder is already filled (a project that ran `init` with an
|
|
39
|
+
explicit core flag and only reached an authored core through a later
|
|
40
|
+
redesign), this step is a no-op — move on.
|
|
73
41
|
|
|
74
42
|
### 3. Read the stack choice
|
|
75
43
|
|
|
@@ -151,9 +119,6 @@ core's bootstrap, which closes Bootstrap. State plainly that
|
|
|
151
119
|
- Write no domain content in the generated workspace — no business
|
|
152
120
|
logic, no first layer's files. That's the first build task, started
|
|
153
121
|
once this Bootstrap commit lands.
|
|
154
|
-
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
template output.
|
|
158
|
-
- A repo with no default scaffold at all makes step 2 a no-op on the
|
|
159
|
-
workspace files; the `CLAUDE.md` rebuild still runs.
|
|
122
|
+
- Never overwrite `{{PROJECT_NAME}}`/`{{PROJECT_SUMMARY}}` in root
|
|
123
|
+
`CLAUDE.md` while filling `{{CORE_SECTION}}` — those are `planner`'s
|
|
124
|
+
content, not this skill's.
|
|
@@ -86,14 +86,18 @@ natively-installed Postgres. See **Local infra: Docker, always** below.
|
|
|
86
86
|
|
|
87
87
|
### 3. Land `src/golden-cores/full-stack-app/`
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
`
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
89
|
+
`hedgehog init --ts-full-stack-app` copies `src/golden-cores/full-stack-app/`
|
|
90
|
+
to the repo root at install time, the same way it copies `src/agents` to
|
|
91
|
+
`.claude/agents` — check whether the core files are already present
|
|
92
|
+
(same check as step 1) before copying again. On a project that ran
|
|
93
|
+
plain `init` (no core flag) and only reaches `full-stack-app` because
|
|
94
|
+
`planner` picked it at Phase 0, this hasn't happened yet: copy
|
|
95
|
+
`src/golden-cores/full-stack-app/`'s contents to the repo root now. Also
|
|
96
|
+
merge this core's `CLAUDE.md` section into root `CLAUDE.md`
|
|
97
|
+
(`src/templates/CLAUDE.core.full-stack-app.md` fills the shell's
|
|
98
|
+
`{{CORE_SECTION}}` placeholder left unfilled by a deferred install) —
|
|
99
|
+
skip this if the section is already filled. Either way, by the end of
|
|
100
|
+
this step every file listed in "What lands" above should be on disk.
|
|
97
101
|
|
|
98
102
|
### 4. Install and start local infra
|
|
99
103
|
|
|
@@ -59,15 +59,18 @@ re-copy: patch the specific file at its source.
|
|
|
59
59
|
|
|
60
60
|
### 2. Land `src/golden-cores/landing-page/`
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
`src/golden-cores/landing-page/`'s contents to the repo root now
|
|
69
|
-
|
|
70
|
-
|
|
62
|
+
`hedgehog init --landing-page` copies `src/golden-cores/landing-page/` to
|
|
63
|
+
the repo root at install time, the same way it copies `src/agents` to
|
|
64
|
+
`.claude/agents` — check whether the core files are already present
|
|
65
|
+
(same check as step 1) before copying again. On a project that ran plain
|
|
66
|
+
`init` (no core flag) and only reaches `landing-page` because `planner`
|
|
67
|
+
picked it at Phase 0, this hasn't happened yet: copy
|
|
68
|
+
`src/golden-cores/landing-page/`'s contents to the repo root now. Also
|
|
69
|
+
merge this core's `CLAUDE.md` section into root `CLAUDE.md`
|
|
70
|
+
(`src/templates/CLAUDE.core.landing-page.md` fills the shell's
|
|
71
|
+
`{{CORE_SECTION}}` placeholder left unfilled by a deferred install) —
|
|
72
|
+
skip this if the section is already filled. Either way, by the end of
|
|
73
|
+
this step every file listed in "What lands" above should be on disk.
|
|
71
74
|
|
|
72
75
|
### 3. Install
|
|
73
76
|
|
|
@@ -239,10 +239,9 @@ runs `hedgehog-planning-intake`'s Phase 1 mining against this core the
|
|
|
239
239
|
same way it would against a shipped one, then hands off to `bootstrap`.
|
|
240
240
|
|
|
241
241
|
This skill never touches the workspace itself — no `pnpm init`, no
|
|
242
|
-
generator, no install. `init`
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
is what later removes that speculative default and generates the real
|
|
242
|
+
generator, no install. `hedgehog init` lands nothing core-specific until
|
|
243
|
+
a core is chosen, so there's nothing on disk yet for this skill to
|
|
244
|
+
conflict with; its job ends at the design artifacts. `bootstrap`'s
|
|
245
|
+
`hedgehog-bootstrap-authored-core` is what later generates the real
|
|
247
246
|
workspace for the stack chosen here — a separate step, run only once
|
|
248
247
|
Phase 1 mining and Confirm & Lock have both landed.
|