- GROUND EVERY LINE IN THE REAL PRODUCT. Read
.ulpi/launch/positioning.md if present; else ground from
the live site (via browse), README, and product docs. Never invent features, metrics, customers, or
awards. If you cannot determine what the product does and who it is for, ask — do not guess.
- HONOR THE ASSET PROFILE EXACTLY. Respect every hard limit (character counts), the requested voice, and
any compliance rules the caller passes. Count characters; never ship copy over a hard limit.
- OBEY COMPLIANCE NOTES. If the caller passes a compliance rule (e.g. "Product Hunt: never solicit
upvotes"; "Hacker News: no hype, no marketing-speak"), every line must pass it. When in doubt, ask the
caller; never produce copy that would violate a platform's rules.
- PRODUCE OPTIONS, NOT ONE GUESS. Draft each requested asset in multiple angle versions (see
references/angles.md) and mark a recommended one with a one-line rationale.
- NO SLOP. Lead with the benefit/outcome, be specific (a real noun or number), and pass the cold-read
test. Ban buzzword soup, empty superlatives, and (unless the voice asks for it) emojis and hype.
- WRITE THE BRIEF ONCE. If you ground the product fresh, save it to
.ulpi/launch/positioning.md so
every other channel and launch skill reuses it instead of re-deriving.
launch-copy
Inputs
$request: the channel(s) and asset(s) to draft, plus optional links. When invoked by a launch skill,
the caller also passes an asset profile (below). When run standalone, gather the profile from the
user with one or two focused questions.
The asset profile (the contract callers pass)
channel: e.g. product-hunt | hacker-news | directory | landing | email
voice: e.g. "benefit-led, concrete, no hype" | "technical, humble, no marketing-speak"
compliance: any phrasing rules, e.g. "never solicit upvotes" | "no superlatives/emoji"
assets: a list of —
- id: e.g. tagline | short-desc | long-desc | first-comment | gallery-headlines
purpose: what this asset does / where it renders
limit: hard character/word limit (if any)
versions: how many angle variants to draft (default 3–4)
notes: format, a skeleton to fill, or examples to calibrate against
If a launch skill invoked you, use its profile verbatim and skip re-asking. If anything is missing
(voice, a limit), infer a sensible default and state it.
Goal
Return grounded, on-brand, within-limit copy for every requested asset, in labeled angle versions
with one recommended each. Persist where the caller expects it (default .ulpi/launch/<channel>/copy.md,
or hand the drafts back for the caller to assemble), and keep .ulpi/launch/positioning.md current.
Step 0: Resolve the brief
If invoked with an asset profile, adopt it (see references/asset-profiles.md for how to read/normalize a
profile). If standalone, ask at most a couple of questions — the channel, the product/URL, and what assets
are needed — then build a profile from the matching baseline in references/asset-profiles.md. Success
criteria: channel, product, and asset list are known.
Step 1: Ground the product → .ulpi/launch/positioning.md
Read .ulpi/launch/positioning.md if it exists and reuse it. Otherwise ground from the live site (visit
it with the browse skill), the README, and product docs; also read a .claude/.cursor
project-context.md (Sections 1–9) and .ulpi/design/DESIGN.md if present. Distill: one-line what-it-is,
ICP, the core value in the user's words, top 3 differentiators, concrete proof points, the category,
and links. Save it so it's reused. Load references/copy-craft.md. Success criteria: a real product
brief no line will contradict — nothing invented.
Step 2: Choose angles
Pick the angle set that fits the channel and product (load references/angles.md): A feature-led ·
B benefit-led · C comparison/alternative · D audience-led. For most launches benefit-led and
audience-led win; comparison-led shines when the reference product is well known. Success criteria: a
palette of distinct angles is chosen for the channel (not rewordings of one); each multi-version asset
draws on as many distinct angles as its profile versions requests, while single-version assets (e.g.
first-comment, gallery-headlines) get one well-chosen angle. The per-asset versions field is the single
source of truth for how many to draft.
Step 3: Draft each asset, in versions, within limits
For every asset in the profile, draft the requested number of versions across the chosen angles, in the
requested voice, within the hard limit (count the characters). Fill any skeleton the profile provides
(e.g. a first-comment structure). Mark one version recommended with a one-line why. Use
references/copy-craft.md for the craft rules and references/asset-profiles.md for common per-channel
profiles and how to read them. Success criteria: every asset has labeled options, each within limit
and on-voice, with a recommendation.
Step 4: Self-check (the copy gate)
Before returning, verify each line: grounded in the real product? specific (a real noun/number)? within
the hard limit (counted)? matches the requested voice? passes every compliance rule? passes the cold-read
test (a stranger gets it)? zero banned slop tells? Fix anything that fails, then return.
Success criteria: every box holds; nothing invented, over-limit, or non-compliant.
Guardrails
- Ground everything; never invent features, metrics, logos, or social proof.
- Respect hard limits to the character; respect the voice and compliance rules to the letter.
- Give options with a recommendation, not a single take.
- Write the gallery slide headlines (copy) when the profile asks; never the gallery visual design or
shot-list — that's the platform skill — nor long-form content.
- Reuse
.ulpi/launch/positioning.md; don't re-derive the product brief if it already exists.
- Degrade gracefully if
browse or a site is missing — ask the user for the key facts and proceed.
When To Load References
references/copy-craft.md — the craft: ground-in-product, benefit-led, specificity, the cold-read
test, and the banned slop tells (Steps 1, 3, 4).
references/angles.md — the A/B/C/D angle framework with patterns and real examples (Step 2).
references/asset-profiles.md — how to read an asset profile, plus ready profiles for Product Hunt,
Hacker News, directories, and landing pages (Steps 0, 3).
Output Contract
Return / write:
.ulpi/launch/positioning.md — created or reused (the shared product brief)
- for each requested asset: the profile's requested number of labeled versions (default 3–4 for
taglines/headlines/one-liners; fewer where the profile specifies — e.g. 1 for first-comment and
gallery-headlines, 2 for descriptions), each within its hard limit (character counts shown), with one
marked recommended and a one-line rationale
- when run standalone, the drafts written to
.ulpi/launch/<channel>/copy.md; when invoked by a launch
skill, the drafts handed back for the caller to assemble (per the Goal)
- a one-line confirmation that every line is grounded, within limit, on-voice, and compliant
1---2name: launch-copy3description: Draft the copy a launch needs, in multiple angles, all bound to the REAL product — never generic placeholders. Produces taglines/headlines, one-liners, short and long descriptions, and the launch post / first comment in feature-led, benefit-led, comparison, and audience-led versions with one recommended each. Reads and reuses `.ulpi/launch/positioning.md` (the platform-agnostic product brief) so the product is described once and reused everywhere; grounds via the `browse` skill + repo when it's absent. Honors the caller's **asset profile** — hard character limits, voice, and compliance rules — to the letter. Shared copy block of the launch-* family, feeding the per-platform runners' posts (`launch-product-hunt` listing, `launch-hacker-news` Show HN, `launch-x` / `launch-linkedin` threads) or run standalone; writes to `.ulpi/launch/<channel>/copy.md` or hands drafts back. Use when a launch needs on-brand, within-limit copy grounded in one real product.4---5
6<EXTREMELY-IMPORTANT>
7This skill drafts launch copy. Non-negotiable rules:
8
91. GROUND EVERY LINE IN THE REAL PRODUCT. Read `.ulpi/launch/positioning.md` if present; else ground from
10 the live site (via `browse`), README, and product docs. Never invent features, metrics, customers, or
11 awards. If you cannot determine what the product does and who it is for, ask — do not guess.
122. HONOR THE ASSET PROFILE EXACTLY. Respect every hard limit (character counts), the requested voice, and
13 any compliance rules the caller passes. Count characters; never ship copy over a hard limit.
143. OBEY COMPLIANCE NOTES. If the caller passes a compliance rule (e.g. "Product Hunt: never solicit
15 upvotes"; "Hacker News: no hype, no marketing-speak"), every line must pass it. When in doubt, ask the
16 caller; never produce copy that would violate a platform's rules.
174. PRODUCE OPTIONS, NOT ONE GUESS. Draft each requested asset in multiple angle versions (see
18 `references/angles.md`) and mark a recommended one with a one-line rationale.
195. NO SLOP. Lead with the benefit/outcome, be specific (a real noun or number), and pass the cold-read
20 test. Ban buzzword soup, empty superlatives, and (unless the voice asks for it) emojis and hype.
216. WRITE THE BRIEF ONCE. If you ground the product fresh, save it to `.ulpi/launch/positioning.md` so
22 every other channel and launch skill reuses it instead of re-deriving.
23</EXTREMELY-IMPORTANT>
24
25# launch-copy
26
27## Inputs
28
29- `$request`: the channel(s) and asset(s) to draft, plus optional links. When invoked by a launch skill,
30 the caller also passes an **asset profile** (below). When run standalone, gather the profile from the
31 user with one or two focused questions.
32
33### The asset profile (the contract callers pass)
34
35```
36channel: e.g. product-hunt | hacker-news | directory | landing | email
37voice: e.g. "benefit-led, concrete, no hype" | "technical, humble, no marketing-speak"
38compliance: any phrasing rules, e.g. "never solicit upvotes" | "no superlatives/emoji"
39assets: a list of —
40 - id: e.g. tagline | short-desc | long-desc | first-comment | gallery-headlines
41 purpose: what this asset does / where it renders
42 limit: hard character/word limit (if any)
43 versions: how many angle variants to draft (default 3–4)
44 notes: format, a skeleton to fill, or examples to calibrate against
45```
46
47If a launch skill invoked you, **use its profile verbatim** and skip re-asking. If anything is missing
48(voice, a limit), infer a sensible default and state it.
49
50## Goal
51
52Return **grounded, on-brand, within-limit copy** for every requested asset, in labeled angle versions
53with one recommended each. Persist where the caller expects it (default `.ulpi/launch/<channel>/copy.md`,
54or hand the drafts back for the caller to assemble), and keep `.ulpi/launch/positioning.md` current.
55
56## Step 0: Resolve the brief
57
58If invoked with an asset profile, adopt it (see `references/asset-profiles.md` for how to read/normalize a
59profile). If standalone, ask at most a couple of questions — the channel, the product/URL, and what assets
60are needed — then build a profile from the matching baseline in `references/asset-profiles.md`. **Success
61criteria**: channel, product, and asset list are known.
62
63## Step 1: Ground the product → `.ulpi/launch/positioning.md`
64
65Read `.ulpi/launch/positioning.md` if it exists and reuse it. Otherwise ground from the live site (visit
66it with the `browse` skill), the README, and product docs; also read a `.claude`/`.cursor`
67`project-context.md` (Sections 1–9) and `.ulpi/design/DESIGN.md` if present. Distill: one-line what-it-is,
68ICP, the core value in the user's words, **top 3 differentiators**, concrete proof points, the category,
69and links. Save it so it's reused. Load `references/copy-craft.md`. **Success criteria**: a real product
70brief no line will contradict — nothing invented.
71
72## Step 2: Choose angles
73
74Pick the angle set that fits the channel and product (load `references/angles.md`): **A feature-led ·
75B benefit-led · C comparison/alternative · D audience-led**. For most launches benefit-led and
76audience-led win; comparison-led shines when the reference product is well known. **Success criteria**: a
77palette of distinct angles is chosen for the channel (not rewordings of one); each multi-version asset
78draws on as many distinct angles as its profile `versions` requests, while single-version assets (e.g.
79first-comment, gallery-headlines) get one well-chosen angle. The per-asset `versions` field is the single
80source of truth for how many to draft.
81
82## Step 3: Draft each asset, in versions, within limits
83
84For every asset in the profile, draft the requested number of versions across the chosen angles, in the
85requested voice, **within the hard limit** (count the characters). Fill any skeleton the profile provides
86(e.g. a first-comment structure). Mark one version **recommended** with a one-line why. Use
87`references/copy-craft.md` for the craft rules and `references/asset-profiles.md` for common per-channel
88profiles and how to read them. **Success criteria**: every asset has labeled options, each within limit
89and on-voice, with a recommendation.
90
91## Step 4: Self-check (the copy gate)
92
93Before returning, verify each line: grounded in the real product? specific (a real noun/number)? within
94the hard limit (counted)? matches the requested voice? passes every compliance rule? passes the cold-read
95test (a stranger gets it)? zero banned slop tells? Fix anything that fails, then return.
96**Success criteria**: every box holds; nothing invented, over-limit, or non-compliant.
97
98## Guardrails
99
100- Ground everything; never invent features, metrics, logos, or social proof.
101- Respect hard limits to the character; respect the voice and compliance rules to the letter.
102- Give options with a recommendation, not a single take.
103- Write the gallery slide **headlines** (copy) when the profile asks; never the gallery visual design or
104 shot-list — that's the platform skill — nor long-form content.
105- Reuse `.ulpi/launch/positioning.md`; don't re-derive the product brief if it already exists.
106- Degrade gracefully if `browse` or a site is missing — ask the user for the key facts and proceed.
107
108## When To Load References
109
110- `references/copy-craft.md` — the craft: ground-in-product, benefit-led, specificity, the cold-read
111 test, and the banned slop tells (Steps 1, 3, 4).
112- `references/angles.md` — the A/B/C/D angle framework with patterns and real examples (Step 2).
113- `references/asset-profiles.md` — how to read an asset profile, plus ready profiles for Product Hunt,
114 Hacker News, directories, and landing pages (Steps 0, 3).
115
116## Output Contract
117
118Return / write:
119
1201. `.ulpi/launch/positioning.md` — created or reused (the shared product brief)
1212. for each requested asset: the profile's requested number of labeled versions (default 3–4 for
122 taglines/headlines/one-liners; fewer where the profile specifies — e.g. 1 for first-comment and
123 gallery-headlines, 2 for descriptions), each within its hard limit (character counts shown), with one
124 marked **recommended** and a one-line rationale
1253. when run standalone, the drafts written to `.ulpi/launch/<channel>/copy.md`; when invoked by a launch
126 skill, the drafts handed back for the caller to assemble (per the Goal)
1274. a one-line confirmation that every line is grounded, within limit, on-voice, and compliant