@skyf0xx/hedgehog 2.0.11 → 2.0.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 +78 -60
- package/package.json +1 -1
- package/src/agents/landing-builder.md +18 -10
- package/src/agents/landing-copywriter.md +216 -137
- package/src/agents/landing-critic.md +19 -12
- package/src/agents/landing-headline-writer.md +89 -0
- package/src/agents/landing-sequencer.md +52 -10
- package/src/agents/landing-strategist.md +8 -5
- package/src/agents/landing-systems.md +2 -2
- package/src/skills/hedgehog-landing-loop/SKILL.md +46 -21
- package/src/skills/landing-copy-cta/SKILL.md +82 -0
- package/src/skills/landing-copy-headline/SKILL.md +133 -0
- package/src/skills/landing-copy-hero/SKILL.md +84 -0
- package/src/skills/landing-copy-mechanism/SKILL.md +86 -0
- package/src/skills/landing-copy-objection/SKILL.md +85 -0
- package/src/skills/landing-copy-problem/SKILL.md +81 -0
- package/src/skills/landing-copy-proof/SKILL.md +82 -0
- package/src/templates/CLAUDE.core.landing-page.md +30 -10
- package/src/templates/TODO.core.landing-page.md +2 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: landing-copy-objection
|
|
3
|
+
description: Use whenever `landing-copywriter` drafts an objection-handling section — FAQ, risk-reversal, or direct address of the reader's stated hesitation. Trigger when the section's role in `landing-sequencer`'s list is to remove a specific, nameable doubt before the CTA, distinct from proof (backs up a claim already made) or the CTA section itself (the ask).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Landing Copy: Objection handling
|
|
7
|
+
|
|
8
|
+
This section names the reader's actual hesitation and answers it
|
|
9
|
+
directly. It is not a second proof section, and it is not a place to
|
|
10
|
+
restate the mechanism — its job is to name a doubt the reader is likely
|
|
11
|
+
already holding and resolve it in the reader's own terms, not the
|
|
12
|
+
product's.
|
|
13
|
+
|
|
14
|
+
## What this section answers
|
|
15
|
+
|
|
16
|
+
One question per objection handled: **what is the specific, nameable
|
|
17
|
+
reason this reader might not act, and what directly removes it?** A
|
|
18
|
+
generic FAQ ("How does it work?" restating the mechanism section) isn't
|
|
19
|
+
this — a real objection is something the reader would say out loud if
|
|
20
|
+
pushed ("this sounds like it'll take longer than what I do now," "I've
|
|
21
|
+
been burned by a tool like this before"). If the brief or upstream chain
|
|
22
|
+
doesn't supply a real, specific objection, that's a gap to flag, not a
|
|
23
|
+
license to invent a generic FAQ to fill the section.
|
|
24
|
+
|
|
25
|
+
## The algorithm
|
|
26
|
+
|
|
27
|
+
Paragraph count from the beat count `landing-sequencer` assigned, with
|
|
28
|
+
one addition specific to this archetype: **one objection per beat**, not
|
|
29
|
+
one paragraph of general reassurance. A 3-beat objection section handles
|
|
30
|
+
3 distinct, named objections, not one objection developed across 3
|
|
31
|
+
paragraphs.
|
|
32
|
+
|
|
33
|
+
Per objection:
|
|
34
|
+
|
|
35
|
+
1. **Name the objection in the reader's own words**, not the product's
|
|
36
|
+
framing of it — a question or a stated doubt, not a euphemism for it.
|
|
37
|
+
2. **Answer it directly**, in one or two sentences. No hedge stacks, no
|
|
38
|
+
"well, actually" — a direct answer or, if the honest answer is a
|
|
39
|
+
limitation, a direct acknowledgment of the limitation and why it
|
|
40
|
+
doesn't undermine the reader's specific job (from
|
|
41
|
+
`landing-strategist`'s subject statement).
|
|
42
|
+
3. **Don't re-litigate proof or mechanism here.** If the honest answer to
|
|
43
|
+
an objection is "see the proof section above," reference it briefly
|
|
44
|
+
rather than restating the evidence.
|
|
45
|
+
|
|
46
|
+
If genuinely FAQ-shaped (3+ parallel question/answer pairs), render as a
|
|
47
|
+
list per `landing-copywriter`'s output format — each item a
|
|
48
|
+
question-plus-answer pair, not a bare noun phrase.
|
|
49
|
+
|
|
50
|
+
## Writing standard (scoped to this section)
|
|
51
|
+
|
|
52
|
+
- Apply `landing-copywriter`'s full writing standard.
|
|
53
|
+
- **Answer honestly, including real limitations.** A section that only
|
|
54
|
+
handles softball objections ("Is it easy to use? Yes!") reads as
|
|
55
|
+
evasive by omission — if there's a genuine, known limitation the
|
|
56
|
+
audience would ask about, address it directly rather than picking only
|
|
57
|
+
favorable objections to list.
|
|
58
|
+
- **No hedge stacks in the answer.** "It could potentially work for most
|
|
59
|
+
teams" fails here specifically, since the whole point of this section
|
|
60
|
+
is removing uncertainty, not restating it in softer language.
|
|
61
|
+
- **No manufactured drama in the question framing.** State the objection
|
|
62
|
+
plainly, the way the reader would actually think it.
|
|
63
|
+
|
|
64
|
+
## Self-test
|
|
65
|
+
|
|
66
|
+
- Each objection handled is specific and nameable — not a generic FAQ
|
|
67
|
+
restating the mechanism or proof sections.
|
|
68
|
+
- Each answer is direct — no hedge stack, no deflection to "it depends."
|
|
69
|
+
- At least one genuine limitation or edge case is addressed honestly, if
|
|
70
|
+
the subject statement or brief surfaces one — not only favorable
|
|
71
|
+
objections selected.
|
|
72
|
+
- No objection restates content already fully covered in
|
|
73
|
+
`landing-copy-mechanism` or `landing-copy-proof` — if it must reference
|
|
74
|
+
that content, it does so briefly, not by repeating it.
|
|
75
|
+
|
|
76
|
+
## Constraints
|
|
77
|
+
|
|
78
|
+
- Never invent a generic FAQ to fill this section's beat count if no
|
|
79
|
+
real objection is available — flag the gap back rather than padding
|
|
80
|
+
with "How does pricing work?" unless pricing genuinely is a live
|
|
81
|
+
objection for this audience.
|
|
82
|
+
- Never handle more objections than the assigned beat count allows —
|
|
83
|
+
one objection per beat, not stacked.
|
|
84
|
+
- Never soften an honest limitation into a non-answer — a hedge here
|
|
85
|
+
undermines the section's entire purpose.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: landing-copy-problem
|
|
3
|
+
description: Use whenever `landing-copywriter` drafts a problem/agitation section — the section that names what currently prevents the reader from having the headline's outcome. Trigger when the section's role in `landing-sequencer`'s list is to establish stakes or friction before the mechanism section resolves it.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Landing Copy: Problem / Agitation
|
|
7
|
+
|
|
8
|
+
This section's job is to make the gap between the reader's current state
|
|
9
|
+
and the headline's promised outcome feel real and specific — not to
|
|
10
|
+
introduce the product, and not to resolve the gap. That's
|
|
11
|
+
`landing-copy-mechanism`'s job, in the section after this one. A problem
|
|
12
|
+
section that starts explaining the solution has skipped ahead.
|
|
13
|
+
|
|
14
|
+
## What this section answers
|
|
15
|
+
|
|
16
|
+
One question: **what, specifically, is stopping the reader from already
|
|
17
|
+
having what the headline promised?** Not a generic industry pain point —
|
|
18
|
+
the specific friction `landing-strategist`'s subject statement and
|
|
19
|
+
adjective pairs point to. A problem statement that could open a
|
|
20
|
+
competitor's page unchanged (the swap test) hasn't located the real
|
|
21
|
+
friction yet.
|
|
22
|
+
|
|
23
|
+
## The algorithm
|
|
24
|
+
|
|
25
|
+
Paragraph count from the beat count `landing-sequencer` assigned (1–3
|
|
26
|
+
paragraphs, per `landing-copywriter`'s ceiling). Order the content within
|
|
27
|
+
that budget:
|
|
28
|
+
|
|
29
|
+
1. **Name the current state.** What the reader is actually doing today,
|
|
30
|
+
concretely — not "teams struggle with X" in the abstract, but the
|
|
31
|
+
specific behavior or workaround the subject statement implies they're
|
|
32
|
+
stuck with.
|
|
33
|
+
2. **Name the cost.** What that current state actually costs the reader —
|
|
34
|
+
time, money, trust, control, whatever the adjective pairs' reflective-
|
|
35
|
+
layer sort (Norman) flagged as the real stake. Concrete over abstract:
|
|
36
|
+
a claim like "this wastes time" ships only with the specific
|
|
37
|
+
consequence that makes it checkable.
|
|
38
|
+
3. **Sharpen the gap, don't resolve it.** The section's last sentence
|
|
39
|
+
should land on the tension at its most acute point — not a hint of the
|
|
40
|
+
solution. Ending this section on relief instead of tension borrows
|
|
41
|
+
from the mechanism section's job.
|
|
42
|
+
|
|
43
|
+
A 1-beat problem section compresses all three into one paragraph (state
|
|
44
|
+
plus cost in the same breath, sharpened in the closing clause); a 3-beat
|
|
45
|
+
section gets a full paragraph each.
|
|
46
|
+
|
|
47
|
+
## Writing standard (scoped to this section)
|
|
48
|
+
|
|
49
|
+
- Apply `landing-copywriter`'s full writing standard.
|
|
50
|
+
- **Create contrast that clarifies, not drama that manufactures it.**
|
|
51
|
+
"Most AI tools help you generate more code. Hedgehog helps you keep
|
|
52
|
+
control of it" sharpens the reader's picture of what's actually
|
|
53
|
+
missing — it isn't manufactured urgency for its own sake.
|
|
54
|
+
- **No manufactured drama.** No "here's the scary part" or rhetorical-
|
|
55
|
+
question openers. State the friction plainly; specificity does the
|
|
56
|
+
work drama would otherwise be recruited to fake.
|
|
57
|
+
- **No solution language.** Don't name the product, a feature, or how it
|
|
58
|
+
helps — that's `landing-copy-mechanism`'s content, and pulling it
|
|
59
|
+
forward here undercuts that section's job of resolving the tension
|
|
60
|
+
this one builds.
|
|
61
|
+
|
|
62
|
+
## Self-test
|
|
63
|
+
|
|
64
|
+
- The problem stated is specific to the subject statement, not a generic
|
|
65
|
+
industry pain point — fails the swap test if a competitor's page could
|
|
66
|
+
run it unchanged.
|
|
67
|
+
- The section names both the current state and its concrete cost, not
|
|
68
|
+
just a feeling of friction.
|
|
69
|
+
- The section ends on the tension at its sharpest, not on a hint of
|
|
70
|
+
resolution.
|
|
71
|
+
- No product name, feature, or mechanism appears in this section's copy.
|
|
72
|
+
|
|
73
|
+
## Constraints
|
|
74
|
+
|
|
75
|
+
- Never introduce the product, a feature name, or how the product works
|
|
76
|
+
— that's `landing-copy-mechanism`'s section, immediately after.
|
|
77
|
+
- Never resolve the tension this section builds — ending on relief is a
|
|
78
|
+
defect here, not a bonus.
|
|
79
|
+
- Never inflate the paragraph count past what the assigned beat count
|
|
80
|
+
allows to fit in more agitation — flag a genuinely thin beat back to
|
|
81
|
+
`landing-sequencer` instead.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: landing-copy-proof
|
|
3
|
+
description: Use whenever `landing-copywriter` drafts a proof/evidence section — social proof, numbers, case studies, benchmarks, testimonials. Trigger when the section's role in `landing-sequencer`'s list is to make an already-explained claim believable, distinct from the mechanism section (explains the how) or the objection section (handles doubt directly).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Landing Copy: Proof
|
|
7
|
+
|
|
8
|
+
This section's only job is to make an already-stated claim checkable.
|
|
9
|
+
It doesn't introduce a new claim, and it doesn't explain how anything
|
|
10
|
+
works — that's `landing-copy-mechanism`, already run. A proof section
|
|
11
|
+
that's making its case for the first time here, rather than backing up a
|
|
12
|
+
claim made earlier, is out of order.
|
|
13
|
+
|
|
14
|
+
## What this section answers
|
|
15
|
+
|
|
16
|
+
One question: **why should the reader believe the mechanism section's
|
|
17
|
+
claim is true, not just plausible?** Every sentence in this section
|
|
18
|
+
exists to make one specific upstream claim checkable — a number, a name,
|
|
19
|
+
a comparison, a quoted result. A proof section with no specific,
|
|
20
|
+
attributable evidence isn't a proof section; it's an unearned assertion
|
|
21
|
+
wearing this section's placement as false credibility.
|
|
22
|
+
|
|
23
|
+
## The algorithm
|
|
24
|
+
|
|
25
|
+
Paragraph count from the beat count `landing-sequencer` assigned, but
|
|
26
|
+
proof content is the one archetype most likely to be genuinely
|
|
27
|
+
list-shaped — a set of parallel data points (3 stats, 3 logos, 3 quotes)
|
|
28
|
+
reads better as a list than forced into prose. Decide the shape first:
|
|
29
|
+
|
|
30
|
+
1. **Single strong proof point** (1 case study, 1 headline stat) → prose,
|
|
31
|
+
1 paragraph: name the evidence, state the specific number or result,
|
|
32
|
+
connect it back to the exact claim it's proving.
|
|
33
|
+
2. **Multiple parallel proof points** (3+ stats, logos, or quotes of
|
|
34
|
+
equal weight) → a `-` list per `landing-copywriter`'s output format,
|
|
35
|
+
each item a specific, named data point — not restated as full
|
|
36
|
+
sentences if a short parallel phrase does the job.
|
|
37
|
+
3. **Mixed** (one lead proof point plus supporting parallel evidence) →
|
|
38
|
+
one prose paragraph for the lead point, followed by a `-` list for the
|
|
39
|
+
rest.
|
|
40
|
+
|
|
41
|
+
Every item, in either shape, names its source: a specific number, a
|
|
42
|
+
named customer, a dated benchmark, a quoted individual — never "users
|
|
43
|
+
report" or "studies show" without the name attached (per
|
|
44
|
+
`landing-copywriter`'s no-unnamed-authority rule, which applies with
|
|
45
|
+
extra weight here since this entire section exists to be checkable).
|
|
46
|
+
|
|
47
|
+
## Writing standard (scoped to this section)
|
|
48
|
+
|
|
49
|
+
- Apply `landing-copywriter`'s full writing standard.
|
|
50
|
+
- **No unnamed authority — this is the section's core failure mode.** If
|
|
51
|
+
a proof point has no name, number, or date attached, it doesn't ship in
|
|
52
|
+
this section in that form. Reframe it as the subject's own claim
|
|
53
|
+
(belongs in `landing-copy-mechanism` instead) or cut it.
|
|
54
|
+
- **Concrete over abstract, absolute in this section.** "Significant
|
|
55
|
+
improvement" never ships here — this is the one section whose entire
|
|
56
|
+
purpose is the number that makes a claim checkable.
|
|
57
|
+
- **Each proof point traces to a specific upstream claim.** A proof point
|
|
58
|
+
floating free, proving nothing stated earlier in the page, is
|
|
59
|
+
decoration, not evidence — connect it explicitly or cut it.
|
|
60
|
+
|
|
61
|
+
## Self-test
|
|
62
|
+
|
|
63
|
+
- Every proof point names a specific source — a number, a customer, a
|
|
64
|
+
date, a quoted person. None reads as "studies show" or "users love it"
|
|
65
|
+
without attribution.
|
|
66
|
+
- Each proof point connects to a specific claim made in an earlier
|
|
67
|
+
section (usually `landing-copy-mechanism`'s), not floating as generic
|
|
68
|
+
credibility.
|
|
69
|
+
- The shape (prose vs. list vs. mixed) matches whether the content is
|
|
70
|
+
genuinely one strong point or several parallel ones — not forced into
|
|
71
|
+
prose to avoid "too many bullets," and not listed out of laziness when
|
|
72
|
+
one point deserves real prose development.
|
|
73
|
+
|
|
74
|
+
## Constraints
|
|
75
|
+
|
|
76
|
+
- Never include a proof point with no named source — an unnamed claim
|
|
77
|
+
doesn't belong in this section in any form.
|
|
78
|
+
- Never introduce a new claim here that wasn't already made upstream —
|
|
79
|
+
this section proves, it doesn't originate.
|
|
80
|
+
- Never explain how the product works here — that's already
|
|
81
|
+
`landing-copy-mechanism`'s completed job; this section only backs it
|
|
82
|
+
up.
|
|
@@ -32,6 +32,13 @@ pinned icon source. Neither restates the other's decision.
|
|
|
32
32
|
Lucide as the pinned icon source. `landing-systems` points into it
|
|
33
33
|
when naming the signature element's family; `landing-sequencer` and
|
|
34
34
|
`landing-builder` invoke it for the concrete recipe.
|
|
35
|
+
- **`landing-copy-headline`, `landing-copy-hero`, `landing-copy-problem`,
|
|
36
|
+
`landing-copy-mechanism`, `landing-copy-proof`, `landing-copy-objection`,
|
|
37
|
+
`landing-copy-cta`** — the per-archetype copywriting algorithms: what
|
|
38
|
+
question each section type answers, what order to answer it in, and its
|
|
39
|
+
own self-test. `landing-headline-writer` invokes `landing-copy-headline`
|
|
40
|
+
for the headline; `landing-copywriter` invokes whichever of the other
|
|
41
|
+
six matches the section's role, as assigned by `landing-sequencer`.
|
|
35
42
|
- **`conventional-commits`** — when a change spans several phases in one
|
|
36
43
|
working-tree pass and needs splitting back into per-phase commits
|
|
37
44
|
(mainly Correction Protocol cleanups).
|
|
@@ -55,19 +62,32 @@ pinned icon source. Neither restates the other's decision.
|
|
|
55
62
|
the token system that reconciles them, and the signature element. Owns
|
|
56
63
|
everything that becomes a Tailwind token or a copy rule.
|
|
57
64
|
- **`landing-sequencer`** — per-section transition type, weight, spacing,
|
|
58
|
-
|
|
65
|
+
beat structure, and copy archetype role (Hero/Problem/Mechanism/Proof/
|
|
66
|
+
Objection/CTA) — the Motion/Lenis pacing spec, plus the taxonomy
|
|
67
|
+
`landing-copywriter` reads to pick its per-section skill, the Builder
|
|
59
68
|
implements against.
|
|
60
|
-
- **`landing-
|
|
61
|
-
|
|
62
|
-
the
|
|
63
|
-
user
|
|
69
|
+
- **`landing-headline-writer`** — the headline, plus 2 backups from
|
|
70
|
+
distinct rhetorical mechanisms (via the `landing-copy-headline` skill),
|
|
71
|
+
written to the voice spec. Presented as its own artifact and locked by
|
|
72
|
+
the user before any section's body copy is drafted.
|
|
73
|
+
- **`landing-copywriter`** — every section's body text and CTA text, one
|
|
74
|
+
section per invocation, in the sequence's order — each section written
|
|
75
|
+
to its archetype role's dedicated skill and a fixed paragraph-count
|
|
76
|
+
algorithm (one paragraph per beat `landing-sequencer` assigned it),
|
|
77
|
+
to the voice spec, and presented as its own artifact for the user to
|
|
78
|
+
read, edit, and lock before the next section is drafted. Output is
|
|
79
|
+
semantic markdown (paragraph/list/blockquote) so `landing-builder`
|
|
80
|
+
reads section structure directly.
|
|
64
81
|
- **`landing-critic`** — the reconciled traceability/distinctiveness
|
|
65
|
-
audit (does every choice, including the
|
|
66
|
-
statement, does anything match a known
|
|
67
|
-
usability pass (Fitts's Law on the CTA,
|
|
68
|
-
Has veto power; cannot rewrite, only
|
|
82
|
+
audit (does every choice, including the headline and every section's
|
|
83
|
+
copy, trace to the subject statement, does anything match a known
|
|
84
|
+
AI-default cluster) and the usability pass (Fitts's Law on the CTA,
|
|
85
|
+
affordance/signifier check). Has veto power; cannot rewrite, only
|
|
86
|
+
redline back to the owning agent.
|
|
69
87
|
- **`landing-builder`** — builds the audited spec exactly in Astro,
|
|
70
|
-
placing `landing-
|
|
88
|
+
placing `landing-headline-writer`'s locked headline and
|
|
89
|
+
`landing-copywriter`'s section copy verbatim, mapping each section's
|
|
90
|
+
markdown structure to the matching markup. Anything that can't be
|
|
71
91
|
built as specified is flagged back up the chain, never silently
|
|
72
92
|
improvised around.
|
|
73
93
|
|
|
@@ -20,7 +20,8 @@ noted. Do not start a phase until the one above it is checked. -->
|
|
|
20
20
|
- [ ] strategy — subject/audience/job + adjective pairs + visceral/behavioral/reflective sort + note timing — `landing-strategist`
|
|
21
21
|
- [ ] systems — dial table + voice spec (parallel) → token system → signature element — `landing-systems`
|
|
22
22
|
- [ ] sequence — per-section transitions, weight, spacing, beat structure — `landing-sequencer`
|
|
23
|
-
- [ ]
|
|
23
|
+
- [ ] headline — headline + 2 backups, from distinct mechanisms, reviewed and locked by the user — `landing-headline-writer`
|
|
24
|
+
- [ ] copy — one section at a time, per the paragraph algorithm, each section reviewed and locked by the user before the next starts — `landing-copywriter`
|
|
24
25
|
- [ ] audit — traceability/distinctiveness + usability, reconciled to a pass — `landing-critic`
|
|
25
26
|
- [ ] build — the artifact, in Astro — `landing-builder`
|
|
26
27
|
|