Recoup Release — Plan Rollout
The whole release lifecycle. plan runs the full workflow end to end; brief /
campaign / doc are the individual stages, runnable alone. Everything reads from and
writes to releases/{artist-slug}/{release-slug}/. The workspace schema is in
references/release-workspace.md (read it first); the scaffold is in
templates/release-workspace/. Deterministic helpers ship in scripts/
(build_campaign_timeline.py, validate_release.py). Requires RECOUP_API_KEY for
the brief/targeting stages.
Mode: plan (the full workflow — don't stop between phases)
Run every phase in order; do not stop to ask what's next. Stop only when the
workspace is populated (brief + campaign + RELEASE.md exist) or a hard blocker hits.
- Intake + scaffold (≤30s). Confirm release facts in one prompt (artist, title,
type, date-or-TBD, goal, channels, one-line creative direction, asset gaps). Derive
slugs. Copy
templates/release-workspace/ into the workspace and fill
assumptions.yaml.
- Creative brief → run brief mode; land in
brief/.
- Dated campaign → compute dates deterministically:
python3 scripts/build_campaign_timeline.py --release-date {YYYY-MM-DD|TBD} --type {type}
(returns every milestone + timing warnings like the ~28-day DSP editorial window),
then run campaign mode; land in campaign/.
- Master doc + deliverables → run doc mode; pull every fact from
assumptions.yaml + the brief, never from memory.
- Playlist targeting (chained) → call recoup-research-playlist-targets (targets +
gaps) and recoup-research-find-contacts (curator + drafted pitch — draft only); if
audience is thin, recoup-research-artist-overview (audience). Land in
targeting/.
- Arm monitoring → note standing watches: recoup-release-track-drop (drop +
launch alert) and recoup-research-weekly-brief (recurring + streaming spikes).
- Review + completion gate (do not skip). Run
python3 scripts/validate_release.py releases/{artist-slug}/{release-slug} — it
must return status: "ok"; fix anything in missing[] and re-run, then dispatch
the release-readiness-reviewer agent. On Claude Code a Stop hook enforces this;
elsewhere it's your job.
End with the landing card: workspace path, "open first" list (RELEASE.md, brief/,
campaign/, targeting/, reports/), an honest "what I did NOT do and why" bullet per
gap, and next stages. Truthfulness over polish — never claim "ready" while a
stage is missing.
Mode: brief (the creative brief)
Require artist, title, date-or-TBD, type, one-line creative direction, asset gaps
(ask once if missing). Pull in parallel (references/endpoints.md): audience
(TikTok+IG), similar, current playlists. Synthesize to brief/brief-$(date +%F).md:
creative direction (verbatim) · narrative thread · 3 visualizer directions ·
5 content angles · platform hooks (each anchored in a concrete audience number) ·
ranked playlist targets · geo rollout · open decisions. It's a plan, not assets — to
produce assets use the recoup-content-* skills. No invented audience numbers.
Mode: campaign (the dated rollout schedule)
Compute the timeline with scripts/build_campaign_timeline.py (never hand-do
release-date math), then turn it + the brief into a phase-by-phase plan (pre-release →
release-week → post-release) with channels, assets, owners, and exact dates counted
back from the release date. Land in campaign/. Flag timing risks.
Mode: doc (the master RELEASE.md + deliverables)
Create/maintain RELEASE.md as the single source of truth using
references/release-template.md + references/section-guide.md, then generate the
DSP pitch and press one-sheet into reports/ per references/deliverables.md. Pull
every fact from assumptions.yaml + the brief. Copy that needs the house voice →
recoup-content-write-caption. Never fabricate placements/press — blank + flag in §8.
Guardrails
- No mid-workflow stops in plan mode — run the next phase anyway.
- One workspace — everything under
releases/{artist-slug}/{release-slug}/.
- Deterministic dates —
build_campaign_timeline.py, never by hand.
- Completion gate —
validate_release.py must say ok before "ready".
- Never fabricate release facts, numbers, placements, or press — blank + flag.
References
references/release-workspace.md · references/endpoints.md ·
references/response-shapes.md · references/release-template.md ·
references/section-guide.md · references/deliverables.md
scripts/build_campaign_timeline.py · scripts/validate_release.py — ship
alongside this skill; invoke relatively.
1---2name: recoup-release-plan-rollout3description: Plan and run a music release end to end — scaffold the workspace, write the creative brief, build the dated rollout schedule, produce the master RELEASE.md + DSP pitch + one-sheet, target playlists, and arm monitoring. Use for "start/plan a release", "take [title] start to finish", "creative brief", "rollout schedule", or "RELEASE.md / DSP pitch / one-sheet". Modes: plan (default, full workflow), brief, campaign, doc. Everything lands in releases/{artist}/{release}/. To confirm the drop afterward use recoup-release-track-drop.4---5
6# Recoup Release — Plan Rollout
7
8The whole release lifecycle. **plan** runs the full workflow end to end; brief /
9campaign / doc are the individual stages, runnable alone. Everything reads from and
10writes to `releases/{artist-slug}/{release-slug}/`. The workspace schema is in
11`references/release-workspace.md` (read it first); the scaffold is in
12`templates/release-workspace/`. Deterministic helpers ship in `scripts/`
13(`build_campaign_timeline.py`, `validate_release.py`). Requires `RECOUP_API_KEY` for
14the brief/targeting stages.
15
16## Mode: plan (the full workflow — don't stop between phases)
17
18Run every phase in order; **do not stop to ask what's next**. Stop only when the
19workspace is populated (brief + campaign + RELEASE.md exist) or a hard blocker hits.
20
211. **Intake + scaffold (≤30s).** Confirm release facts in one prompt (artist, title,
22 type, date-or-TBD, goal, channels, one-line creative direction, asset gaps). Derive
23 slugs. Copy `templates/release-workspace/` into the workspace and fill
24 `assumptions.yaml`.
252. **Creative brief** → run **brief** mode; land in `brief/`.
263. **Dated campaign** → compute dates deterministically:
27 `python3 scripts/build_campaign_timeline.py --release-date {YYYY-MM-DD|TBD} --type {type}`
28 (returns every milestone + timing warnings like the ~28-day DSP editorial window),
29 then run **campaign** mode; land in `campaign/`.
304. **Master doc + deliverables** → run **doc** mode; pull every fact from
31 `assumptions.yaml` + the brief, never from memory.
325. **Playlist targeting (chained)** → call recoup-research-playlist-targets (targets +
33 gaps) and recoup-research-find-contacts (curator + drafted pitch — draft only); if
34 audience is thin, recoup-research-artist-overview (audience). Land in `targeting/`.
356. **Arm monitoring** → note standing watches: recoup-release-track-drop (drop +
36 launch alert) and recoup-research-weekly-brief (recurring + streaming spikes).
377. **Review + completion gate (do not skip).** Run
38 `python3 scripts/validate_release.py releases/{artist-slug}/{release-slug}` — it
39 must return `status: "ok"`; fix anything in `missing[]` and re-run, then dispatch
40 the release-readiness-reviewer agent. On Claude Code a Stop hook enforces this;
41 elsewhere it's your job.
42
43End with the landing card: workspace path, "open first" list (RELEASE.md, brief/,
44campaign/, targeting/, reports/), an honest "what I did NOT do and why" bullet per
45gap, and next stages. **Truthfulness over polish** — never claim "ready" while a
46stage is missing.
47
48## Mode: brief (the creative brief)
49
50Require artist, title, date-or-TBD, type, one-line creative direction, asset gaps
51(ask once if missing). Pull in parallel (`references/endpoints.md`): `audience`
52(TikTok+IG), `similar`, current `playlists`. Synthesize to `brief/brief-$(date +%F).md`:
53creative direction (verbatim) · narrative thread · **3 visualizer directions** ·
54**5 content angles** · platform hooks (each anchored in a concrete audience number) ·
55ranked playlist targets · geo rollout · open decisions. It's a plan, not assets — to
56produce assets use the recoup-content-* skills. No invented audience numbers.
57
58## Mode: campaign (the dated rollout schedule)
59
60Compute the timeline with `scripts/build_campaign_timeline.py` (never hand-do
61release-date math), then turn it + the brief into a phase-by-phase plan (pre-release →
62release-week → post-release) with channels, assets, owners, and exact dates counted
63back from the release date. Land in `campaign/`. Flag timing risks.
64
65## Mode: doc (the master RELEASE.md + deliverables)
66
67Create/maintain `RELEASE.md` as the single source of truth using
68`references/release-template.md` + `references/section-guide.md`, then generate the
69DSP pitch and press one-sheet into `reports/` per `references/deliverables.md`. Pull
70every fact from `assumptions.yaml` + the brief. Copy that needs the house voice →
71recoup-content-write-caption. Never fabricate placements/press — blank + flag in §8.
72
73## Guardrails
74
75- **No mid-workflow stops** in plan mode — run the next phase anyway.
76- **One workspace** — everything under `releases/{artist-slug}/{release-slug}/`.
77- **Deterministic dates** — `build_campaign_timeline.py`, never by hand.
78- **Completion gate** — `validate_release.py` must say `ok` before "ready".
79- **Never fabricate** release facts, numbers, placements, or press — blank + flag.
80
81## References
82
83- `references/release-workspace.md` · `references/endpoints.md` ·
84 `references/response-shapes.md` · `references/release-template.md` ·
85 `references/section-guide.md` · `references/deliverables.md`
86- `scripts/build_campaign_timeline.py` · `scripts/validate_release.py` — ship
87 alongside this skill; invoke relatively.