@skyf0xx/hedgehog 6.2.5 → 6.2.7

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 CHANGED
@@ -192,6 +192,18 @@ Bundle
192
192
  Join
193
193
  ```
194
194
 
195
+ ### Copywriting
196
+
197
+ Copy is drafted and revised against a mechanical gate instead of prompting alone:
198
+
199
+ ``` text
200
+ Brief
201
+
202
+ Draft ⇄ zod validation()
203
+ ↓ pass
204
+ Ship
205
+ ```
206
+
195
207
  ### Anything else
196
208
 
197
209
  A CLI, a library, a browser extension, a data pipeline, etc. gets its build order.
package/README.zh-CN.md CHANGED
@@ -192,6 +192,18 @@ Bundle
192
192
  Join
193
193
  ```
194
194
 
195
+ ### 文案写作
196
+
197
+ 文案的撰写与修改会经过一道机械化的关卡,而不是仅靠提示词:
198
+
199
+ ``` text
200
+ Brief
201
+
202
+ Draft ⇄ zod validation()
203
+ ↓ pass
204
+ Ship
205
+ ```
206
+
195
207
  ### 其他任意类型
196
208
 
197
209
  CLI、库、浏览器扩展、数据管道等,都会拥有各自的构建顺序。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyf0xx/hedgehog",
3
- "version": "6.2.5",
3
+ "version": "6.2.7",
4
4
  "description": "Install the Hedgehog build discipline (agents + skills) into a repo, for Claude Code, Cursor, or Gemini CLI.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bootstrap
3
- description: Use once per invocation, at the start of a new Hedgehog project, to land the workspace for whichever core `planner` selected at Phase 0 — the first real workspace this project gets, since `init` with no explicit core flag lands the shared agents/skills/build-graph payload and leaves the workspace to bootstrap. Reads the chosen core's own bootstrap skill, installed from that core's package, and follows it: how many steps Bootstrap takes and what each one lands are that skill's to state, not this agent's. Not for per-phase/per-module work — that's the core's own loop skill and its agents. Skip entirely if the core's workspace already exists, per the already-ran check the core's bootstrap skill opens with.
3
+ description: Use once per invocation, at the start of a new Hedgehog project, to land the workspace for whichever core `planner` selected at Phase 0 — the first real workspace this project gets, since `init` with no explicit core flag lands the shared agents/skills/build-graph payload and leaves the workspace to bootstrap. Reads the chosen core's own bootstrap skill, installed from that core's package, and follows it: how many steps Bootstrap takes and what each one lands are that skill's to state, not this agent's. Not for per-phase/per-module work — that's the core's own loop skill and its agents. Skip entirely if the core's workspace already exists, per the already-ran check the core's bootstrap skill opens with. Never dispatched for copywriting — that core ships no bootstrap skill; `init --copywriting` lands its whole workspace at install time, and its own planning intake runs `hedgehog plan` directly instead of handing off here.
4
4
  model: sonnet
5
5
  color: green
6
6
  tools: Read, Glob, Grep, Edit, Write, Bash
@@ -21,7 +21,9 @@ You run on two paths, and Workflow step 2 decides which:
21
21
 
22
22
  - **First run** (the graph holds no intents): **Phase 0 — core
23
23
  selection**, the gate below, then **Phase 1 — planning intake** in the
24
- shape the chosen core defines, then the `bootstrap` handoff.
24
+ shape the chosen core defines, then the `bootstrap` handoff — except
25
+ copywriting, which has no bootstrap skill and whose planning intake
26
+ runs `hedgehog plan` itself; see step 9.
25
27
  - **Re-entry** (the graph already holds intents): new scope entering play
26
28
  on a project that's already been built or is mid-build, on a core with
27
29
  a module axis to add an intent to (full-stack-app, authored). The core
@@ -88,7 +90,8 @@ memory of what a core is. Read every entry before choosing; the first
88
90
  plausible match is not the answer until the rest have been ruled out.
89
91
  A core whose `when` fits and whose `flag` is listed is chosen by name
90
92
  and handed to `bootstrap`, which installs that core's package and
91
- follows the bootstrap skill it ships.
93
+ follows the bootstrap skill it ships — except copywriting, which ships
94
+ no bootstrap skill; see step 9.
92
95
 
93
96
  **Before matching against `when` paragraphs, ask up to three
94
97
  clarifying questions if the description alone doesn't already settle
@@ -259,6 +262,25 @@ the first-run shape; on re-entry, run `hedgehog-planning-intake`'s
259
262
  owns `.hedgehog/chain/00-brief.md` and this core's own Confirm & Lock
260
263
  stage; `.hedgehog/BMAD/` is written by the shared Phase 0 in
261
264
  `hedgehog-planning-intake`.
265
+ - **`copywriting`** → open `hedgehog-copywriting-loop`'s planning-intake
266
+ section and follow it: it opens with `hedgehog-planning-intake`'s
267
+ Phase 0 (the same vendored BMAD shelf `full-stack-app` runs, in full,
268
+ archived to `.hedgehog/BMAD/` — the same skill, not a separate copy of
269
+ its steps), then does its own mining into a draft brief (what's being
270
+ written, the audience, the register), the copywriting counterpart to
271
+ `hedgehog-planning-intake`'s Phase 1 (domain modules and an Add-ons
272
+ decision on full-stack-app). The mined draft is shown back at this
273
+ core's own Confirm & Lock stage, pre-filled from BMAD's output, for
274
+ the user to accept or correct. State the same BMAD attribution as
275
+ full-stack-app before that Phase 0 begins. `hedgehog-copywriting-loop`
276
+ owns `.hedgehog/copy/00-brief.md` and this core's own Confirm & Lock
277
+ stage; `.hedgehog/BMAD/` is written by the shared Phase 0 in
278
+ `hedgehog-planning-intake`. This core's own Confirm & Lock runs
279
+ `hedgehog plan` itself and does not hand off to `bootstrap` — its
280
+ workspace (`scripts/check-copy/` and `core.yaml`) is already fully
281
+ installed by `init --copywriting`, before planning intake ever starts,
282
+ and this core ships no bootstrap skill. Step 9 below does not apply to
283
+ it; the core's own loop skill picks up from here directly.
262
284
  - **`deepseek-harness`** → no BMAD shelf runs on this core, and none of
263
285
  `hedgehog-planning-intake` applies. Intake is mechanical, owned
264
286
  entirely by `hedgehog-dsh-loop`'s own Planning intake section: confirm
@@ -473,6 +495,10 @@ as full-stack-app's Auth/Queue/Mobile trio.
473
495
  run**, don't run `plan` yet — no core is installed until step 9's
474
496
  `bootstrap` handoff lands one, and `plan` requires `core.yaml` to
475
497
  exist. Leave the written intents `proposed` and continue to step 8.
498
+ **Copywriting is the one exception**: its own Confirm & Lock (see the
499
+ core-specific procedures above) already ran `hedgehog plan` as part
500
+ of step 6, since its `core.yaml` is on disk before planning intake
501
+ ever starts — nothing left to defer here.
476
502
  8. **Commit planning intake's output as one commit** — not on the
477
503
  adoption re-entry path, where `hedgehog-adopt` already committed its
478
504
  own work as `chore(planning): adopt change` (step 2). Elsewhere:
@@ -488,18 +514,22 @@ as full-stack-app's Auth/Queue/Mobile trio.
488
514
  only). Write these with the `no-history-in-output` skill: current
489
515
  state only, no narration of the intake conversation. This is planning
490
516
  intake's own unit of work, landed before `bootstrap` touches anything.
491
- 9. **First run only, and not on the brownfield path hand off to the
492
- `bootstrap` agent** once the commit lands. It scaffolds the chosen
493
- core's workspace (and, for full-stack-app, whichever add-ons are on;
494
- for pwa-app, whichever of sync/remote entities is on) before any build
495
- step starts. Once that workspace exists, `core.yaml` exists too this
496
- is the point at which the `hedgehog plan` step 7 deferred on a first
497
- run can finally succeed. `bootstrap` runs it before closing (see
498
- `bootstrap.md`'s "Closing Bootstrap"), so the intents planner wrote are
499
- compiled into tasks before the core's loop skill picks anything up. On
500
- re-entry on any other core the workspace already exists and step 7
501
- already ran `plan`: hand straight to that core's loop skill instead,
502
- which picks the new work up from `hedgehog next`.
517
+ 9. **First run only, not on the brownfield path, and not on
518
+ copywriting — hand off to the `bootstrap` agent** once the commit
519
+ lands. It scaffolds the chosen core's workspace (and, for
520
+ full-stack-app, whichever add-ons are on; for pwa-app, whichever of
521
+ sync/remote entities is on) before any build step starts. Once that
522
+ workspace exists, `core.yaml` exists too this is the point at which
523
+ the `hedgehog plan` step 7 deferred on a first run can finally
524
+ succeed. `bootstrap` runs it before closing (see `bootstrap.md`'s
525
+ "Closing Bootstrap"), so the intents planner wrote are compiled into
526
+ tasks before the core's loop skill picks anything up. On re-entry on
527
+ any other core the workspace already exists and step 7 already ran
528
+ `plan`: hand straight to that core's loop skill instead, which picks
529
+ the new work up from `hedgehog next`. **On copywriting**, first run or
530
+ not, there is no `bootstrap` handoff at all — its own Confirm & Lock
531
+ already ran `plan` (see the core-specific procedures above); hand
532
+ straight to `hedgehog-copywriting-loop` instead.
503
533
  10. **Return a summary**: which core (naming it as authored or adopted,
504
534
  if it is), the intents added (or subject statement, for
505
535
  landing-page), any open questions.
package/src/db/plan.mjs CHANGED
@@ -5,11 +5,11 @@
5
5
  //
6
6
  // full-stack-app and pwa-app: one task per layer per intent (an intent is
7
7
  // a domain module — see the core definition's `{module}` placeholder).
8
- // landing-page, deepseek-harness, and authored (whether designed from
9
- // scratch or adopted onto an existing repo): one task per phase/layer, no
10
- // module axis. All are the same operation — walk a core definition's layer
11
- // chain once per intent — because a linear chain is the degenerate case of
12
- // the layer graph (spec: MVP scope item 5).
8
+ // landing-page, copywriting, deepseek-harness, and authored (whether
9
+ // designed from scratch or adopted onto an existing repo): one task per
10
+ // phase/layer, no module axis. All are the same operation — walk a core
11
+ // definition's layer chain once per intent — because a linear chain is
12
+ // the degenerate case of the layer graph (spec: MVP scope item 5).
13
13
  //
14
14
  // Layer cardinality: a layer marked `once: true` in the core definition
15
15
  // opts out of that per-intent multiplication and compiles a single task
@@ -13,6 +13,7 @@ export const AGENT_CAPABILITY = {
13
13
  // Build and scaffold: read, write, and run commands.
14
14
  'backend-eng': 'full',
15
15
  bootstrap: 'full',
16
+ 'copy-writer': 'full',
16
17
  'front-end-eng': 'full',
17
18
  'harness-eng': 'full',
18
19
  'landing-builder': 'full',
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hedgehog",
3
- "version": "6.2.5",
3
+ "version": "6.2.7",
4
4
  "description": "Hedgehog build discipline: ordered, tested, verified build steps.",
5
5
  "contextFileName": "GEMINI.md"
6
6
  }
@@ -51,6 +51,15 @@
51
51
  "language": "typescript",
52
52
  "repository": "https://github.com/skyf0xx/hedgehog-core-adopted",
53
53
  "selects_when": "The description is about bringing Hedgehog's discipline to a codebase that already exists, rather than building something new — the repo already has real source files, or the user says so explicitly: \"adopt this repo\", \"add Hedgehog to my existing project\", \"I want scope/verify enforcement on my changes here\". Not chosen by matching a `when` paragraph the way a shipped core is: hedgehog-adopt reads the repo read-only, proposes a linear-chain .hedgehog/core.yaml whose verify commands are the repo's own, and writes only .hedgehog/ — never a workspace, never a stack migration. This is the core most often confused with authored: adopted brings discipline to an existing repo, while authored designs and scaffolds a workspace from scratch for something being built new — route here only when the work is landing on a codebase that already exists."
54
+ },
55
+ {
56
+ "name": "copywriting",
57
+ "flag": "--copywriting",
58
+ "package": "@skyf0xx/hedgehog-core-copywriting",
59
+ "version": "^0.1.1",
60
+ "language": "typescript",
61
+ "repository": "https://github.com/skyf0xx/hedgehog-core-copywriting",
62
+ "selects_when": "The description asks for a piece of writing or prose to be written or fixed as its own deliverable — marketing copy, a product announcement, UI microcopy strings, docs prose, an email, a pitch, an article, an essay, a blog post, or any other standalone written piece — with no page, app, or other artifact being built around it. Concrete signals: \"write an article about X\", \"write copy for X\", \"help me write a blog post\", \"make this sound less like AI\", \"fix this copy\", \"improve this writing\", \"draft a product announcement\", a request to run text through an AI-tell or humanizer check. Not just marketing/product framing — any standalone prose request qualifies, articles and essays included. The core drafts against `checkCopy()`, a real script running deterministic AI-tell and prose-quality checks (banned vocabulary, passive voice, readability score, sentence-length variance), not an agent's own self-review — a piece of writing ships because the script exited 0. This is the core most often confused with landing-page: landing-page's own copy skill still owns copy that's part of a full page build (headline, hero, section copy sequenced through that core's Chain Method); route here only when the writing is the entire ask, not one stage of a larger build."
54
63
  }
55
64
  ]
56
65
  }
@@ -1,9 +1,10 @@
1
1
  // Core package registry. One entry per Hedgehog core — full-stack-app,
2
- // pwa-app, landing-page, deepseek-harness, and authored — naming the npm
3
- // package that ships its agents, skills, and (for the first four) scaffold,
4
- // plus the CLI flag `hedgehog init` accepts for it and the prose `planner`
5
- // reads aloud in Phase 0 to choose one. A fixed table, one entry per core,
6
- // discovered by name or flag rather than convention.
2
+ // pwa-app, landing-page, copywriting, deepseek-harness, and authored —
3
+ // naming the npm package that ships its agents, skills, and (for the
4
+ // first five) scaffold, plus the CLI flag `hedgehog init` accepts for it
5
+ // and the prose `planner` reads aloud in Phase 0 to choose one. A fixed
6
+ // table, one entry per core, discovered by name or flag rather than
7
+ // convention.
7
8
  //
8
9
  // `authored` carries no flag — it is never selected off a fixed list at
9
10
  // install time. hedgehog-core-design chooses it during planning (from-scratch
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: hedgehog-planning-intake
3
- description: Use on any core for first-run planning intake — Phase 0 runs the vendored BMAD-METHOD planning shelf, shared by every core, and Phase 1 (mining `04-prd.md` into intent records plus the Add-ons/sync-and-remote-entities decision) is full-stack-app's and pwa-app's shared procedure — identical mechanics, a different decision at step 5/8. Phase 0 also defines compressed intake, the path a user's explicit "just build it" choice takes on full-stack-app, pwa-app, and authored cores: one batched round of questions in place of the shelf, writing the same archive at the same path so Phase 1, `ux-planner`, and the Re-entry pass all keep their documented source. Also use for the Re-entry pass, which mines new scope into additional intents without re-running the shelf, on any core with a module axis to add an intent to (full-stack-app, pwa-app, authored) — landing-page has none, so its own new-scope path runs through `hedgehog-landing-loop`'s Correction Protocol instead. Invoked by the `planner` agent, which decides the path; don't run standalone. landing-page runs this skill's Phase 0 on first run, then mines the same archive through `hedgehog-landing-loop`'s own planning-intake section, that core's counterpart to this skill's Phase 1. An authored core runs this skill's Phase 0, then `hedgehog-core-design`, then this skill's Phase 1 mining against the designed layer sequence. A brownfield adoption (`hedgehog-adopt`) never runs this skill's shelf at all — the drivers BMAD elicits are already settled facts of a repo that already exists.
3
+ description: Use on any core for first-run planning intake — Phase 0 runs the vendored BMAD-METHOD planning shelf, shared by every core, and Phase 1 (mining `04-prd.md` into intent records plus the Add-ons/sync-and-remote-entities decision) is full-stack-app's and pwa-app's shared procedure — identical mechanics, a different decision at step 5/8. Phase 0 also defines compressed intake, the path a user's explicit "just build it" choice takes on full-stack-app, pwa-app, and authored cores: one batched round of questions in place of the shelf, writing the same archive at the same path so Phase 1, `ux-planner`, and the Re-entry pass all keep their documented source. Also use for the Re-entry pass, which mines new scope into additional intents without re-running the shelf, on any core with a module axis to add an intent to (full-stack-app, pwa-app, authored) — landing-page has none, so its own new-scope path runs through `hedgehog-landing-loop`'s Correction Protocol instead. Invoked by the `planner` agent, which decides the path; don't run standalone. landing-page runs this skill's Phase 0 on first run, then mines the same archive through `hedgehog-landing-loop`'s own planning-intake section, that core's counterpart to this skill's Phase 1. copywriting runs this skill's Phase 0 the same way, then mines the same archive through `hedgehog-copywriting-loop`'s own planning-intake section into a what/audience/register brief — no module axis, so its own new-scope path runs through that loop's Correction Protocol rather than the Re-entry pass below. An authored core runs this skill's Phase 0, then `hedgehog-core-design`, then this skill's Phase 1 mining against the designed layer sequence. A brownfield adoption (`hedgehog-adopt`) never runs this skill's shelf at all — the drivers BMAD elicits are already settled facts of a repo that already exists.
4
4
  ---
5
5
 
6
6
  # Hedgehog Planning Intake
@@ -11,12 +11,15 @@ every core) and mining its output. On full-stack-app and pwa-app that
11
11
  mining is this skill's own Phase 1, into intent records written via
12
12
  `hedgehog intent
13
13
  add`; on landing-page it's `hedgehog-landing-loop`'s planning-intake
14
- section, into a subject/audience/job statement. This is the mechanics
14
+ section, into a subject/audience/job statement; on copywriting it's
15
+ `hedgehog-copywriting-loop`'s planning-intake section, into a
16
+ what/audience/register brief. This is the mechanics
15
17
  `planner` calls once its Phase 0 core-selection check has picked a core —
16
18
  the interpretive judgment (which Feature becomes which intent, Confirm &
17
19
  Lock either way) belongs to `planner`; this skill (Phase 0, and Phase 1 on
18
- full-stack-app and pwa-app) and `hedgehog-landing-loop` (landing-page's
19
- own mining) are the fixed procedures that judgment runs inside.
20
+ full-stack-app and pwa-app), `hedgehog-landing-loop` (landing-page's own
21
+ mining), and `hedgehog-copywriting-loop` (copywriting's own mining) are
22
+ the fixed procedures that judgment runs inside.
20
23
 
21
24
  That shelf run is a **first run**, once per project. When new scope
22
25
  enters play later on a core with a module axis (full-stack-app, pwa-app,