promo-writer
Generates platform-specific social media copy from album themes, track concepts, and lyrics. Use when promo/ templates need to be populated before release.
What this skill does
# Promo Writer Skill
Generate social media copy for album promotion across Twitter/X, Instagram, TikTok, Facebook, and YouTube. Produces native-feeling content for each platform from album context — themes, track concepts, and streaming lyrics.
## Purpose
Populate the `promo/` directory with platform-specific copy ready for review. Each platform gets content shaped to its format, tone, and conventions — not the same text cross-posted everywhere.
## When to Use
- After track concepts and lyrics are written (need material to pull from)
- Before release — generate copy to fill promo/ templates
- User says "write promo copy", "create social media posts", or "fill in the promo templates"
- When promo/ files exist but are still template placeholders
## Position in Workflow
```
Lyrics Written → Promo Videos (optional) → **[Promo Writer]** → [Promo Review] → Release
```
Between content completion and promo-reviewer. The promo-reviewer polishes what this skill generates.
## Supporting Files
- **[copy-formulas.md](copy-formulas.md)** — Hook formulas, CTA templates, post structures, hashtag recipes
- **[/reference/promotion/social-media-best-practices.md](/reference/promotion/social-media-best-practices.md)** — Platform strategy and content guidance
- **[/skills/promo-reviewer/platform-rules.md](/skills/promo-reviewer/platform-rules.md)** — Character limits and hashtag rules
---
## Workflow
### 1. Album Resolution
**Resolve the album from arguments:**
Use MCP `find_album` with the album name from `$ARGUMENTS`. If no album specified, check `get_session` for last album context.
**Verify readiness:**
- Album must have track concepts written
- At least some tracks should have streaming lyrics (for quotable hooks)
- If no streaming lyrics exist, warn: "No streaming lyrics found — using track concepts only. Hooks will be less specific."
### 2. Data Gathering
Gather album context in batch to minimize round-trips:
1. **Album data**: `get_album_full(album_slug, "concept,streaming,musical-direction")` — album narrative + track content
2. **Track list**: from album data — all track names, concepts, statuses
3. **Streaming lyrics**: from album data sections — pull quotable hooks from streaming lyrics (NOT Suno lyrics, which contain phonetic spellings)
4. **User preferences**: `load_override("promotion-preferences.md")` — tone, platform priorities, messaging themes, hashtag preferences, AI positioning
**Critical**: Use **streaming lyrics** for quotable hooks. Suno lyrics contain phonetic spellings (`bit-wize`, `Luh-rock-uh`) that must never appear in public-facing copy.
### 3. Generate Campaign Strategy (campaign.md)
Generate `campaign.md` first — it's the strategy foundation that informs all platform copy.
**Content to generate:**
| Section | What to Write |
|---------|---------------|
| Campaign Overview | Album name, release date (or TBD), primary platform, campaign duration |
| Key Messages | 3 core messages derived from album themes — the "why should anyone care" |
| Target Audience | 2-3 audience segments based on genre and themes |
| Schedule | Pre-release, release week, post-release calendar with specific content types |
| Hashtags | Primary (discovery + genre) and secondary (album-specific, AI if applicable) |
**Derive key messages from album data:**
- What is the album about? → Message 1 (concept hook)
- What makes it different? → Message 2 (unique angle)
- Why listen now? → Message 3 (urgency/relevance)
**Present to user for approval before proceeding to platform copy.**
### 4. Language Selection
**Before generating any copy, determine the output language(s).**
**If override exists** with a `## Language` section in `promotion-preferences.md`, use that preference without asking.
**Otherwise, ask:**
```
What language(s) should the promo copy be written in?
[1] English (default)
[2] German (Deutsch)
[3] French (Français)
[4] Spanish (Español)
[5] Bilingual — two languages per post (e.g., DE + EN, FR + EN)
[6] Other — tell me which language(s)
```
**Bilingual mode**: When two languages are selected, each post gets both versions stacked in the same code block, separated by a `---` divider. The primary language comes first, the secondary language second. Hashtags stay in English (international discovery).
**Override file addition** (`{overrides}/promotion-preferences.md`):
```markdown
## Language
- Primary: de
- Secondary: en
- Mode: bilingual
```
Store the selected language(s) and apply to all generated copy in this session.
### 5. Platform Selection
**If platform specified in arguments**, generate only that platform.
**If override exists**, follow platform priority list and skip list from `promotion-preferences.md`.
**Otherwise, ask:**
```
Which platforms should I generate copy for?
[A] All platforms (Twitter, Instagram, TikTok, Facebook, YouTube)
[1] Twitter/X
[2] Instagram
[3] TikTok
[4] Facebook
[5] YouTube
```
### 6. Per-Platform Generation
For each selected platform, generate native content following the structures in [copy-formulas.md](copy-formulas.md) and best practices from the reference guide.
**Read the promo template** for the platform first (`templates/promo/{platform}.md` or existing `promo/{platform}.md`) to match the expected heading structure.
**Per-platform content to generate:**
#### Twitter/X (`twitter.md`)
- Release announcement tweet (1-2 tweets or thread)
- Per-track promo tweets (one per track — hook + concept + link placeholder)
- Behind-the-scenes tweet (process/making-of angle)
- Engagement tweet (question or poll)
- Each tweet: show character count, verify under 280
- 1-2 hashtags per tweet, never starting with a hashtag
#### Instagram (`instagram.md`)
- Release announcement caption (hook in first 125 chars)
- 2-3 track highlight captions (story angle, personal)
- Behind-the-scenes caption
- Hashtag block (15-20 tags, separated from caption)
- Show character count for each caption
#### TikTok (`tiktok.md`)
- Release announcement caption (under 150 chars)
- Per-track captions (short, casual, under 150 chars)
- Behind-the-scenes caption
- 3-5 hashtags per post
- Note: video content does the heavy lifting — captions are secondary
#### Facebook (`facebook.md`)
- Release announcement (longer storytelling format, 150-300 words)
- Track highlight posts (2-3, with personal angle)
- Behind-the-scenes story post
- 3-5 hashtags per post, at end
#### YouTube (`youtube.md`)
- Album/track description template (hook in first 2-3 lines)
- Credits section
- Social links section
- 3-5 hashtags
### 7. Present for Approval
Present each platform's generated copy with metrics:
```
## Twitter/X — Generated Copy
### Release Announcement
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[Generated tweet text]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Chars: 187/280 | Hashtags: 2 | Status: Within limits
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### Track 01: [Track Name]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[Generated tweet text]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Chars: 214/280 | Hashtags: 2 | Status: Within limits
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[... more posts ...]
Actions:
[A] Approve all — write to promo/twitter.md
[R] Revise specific posts — tell me which ones and what to change
[N] Next platform — skip this platform
```
### 8. Write Approved Copy
Write approved copy to the `promo/` directory in the album path:
```
{content_root}/artists/{artist}/albums/{genre}/{album}/promo/
```
**Match the file structure expected by promo-reviewer:**
- Use `##` and `###` headings to delineate sections
- Put post copy inside ``` code blocks
- Include any platform-specific metadata (character counts not written to file)
**If promo/ directory doesn't exist**, create it.
**If files already exist**, ask before overwriting:
```
promo/twitter.md already has content. Overwrite? [Y/n]
```
### 9. Summary and Next Steps
After all platforms are written:
```
## Promo Copy Generated
| Platform | Posts | Status |
|----------|---Related in Writing & Docs
jax-development
IncludedUse this skill when the user is writing, debugging, profiling, refactoring, reviewing, benchmarking, parallelising, exporting, or explaining JAX code, or when they mention JAX, jax.numpy, jit, grad, value_and_grad, vmap, scan, lax, random keys, pytrees, jax.Array, sharding, Mesh, PartitionSpec, NamedSharding, pmap, shard_map, Pallas, XLA, StableHLO, checkify, profiler, or the JAX repo. It helps turn NumPy or PyTorch-style code into pure functional JAX, fix tracer/control-flow/shape/PRNG bugs, remove recompiles and host-device syncs, choose transforms and sharding strategies, inspect jaxpr/lowering/IR, and benchmark compiled code correctly.
nature-article-writer
IncludedDrafts, rewrites, diagnostically critiques, and style-calibrates primary research manuscripts for Nature and Nature Portfolio journals. Use when the user wants a Nature-style title, summary paragraph or abstract, introduction, results, discussion, methods, figure legends, presubmission enquiry, cover letter, reviewer response, or when a scientific draft sounds generic, jargon-heavy, structurally weak, or AI-ish and needs precise, broad-reader-friendly prose without inventing data, analyses, or references. Best for primary research articles and letters rather than reviews or press releases unless explicitly adapting one.
deckrd
IncludedDocument-driven framework that derives requirements, specifications, implementation plans, and executable tasks from goals through structured AI dialogue. Use when user says "write requirements", "create spec", "plan implementation", "derive tasks", "structure this feature", "break down into tasks", or "document this module". Also use for reverse engineering existing code into docs (/deckrd rev). Do NOT use for direct code writing — use /deckrd-coder after tasks are generated. Do NOT use when the user only wants to run or fix existing code without planning.
clinical-decision-support
IncludedGenerate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug development, clinical research, and evidence synthesis.
handling-sf-data
IncludedSalesforce data operations with 130-point scoring. Use this skill to create, update, delete, bulk import/export, generate test data, and clean up org records using sf CLI and anonymous Apex. TRIGGER when: user creates test data, performs bulk import/export, uses sf data CLI commands, needs data factory patterns for Apex tests, or needs to seed/clean records in a Salesforce org. DO NOT TRIGGER when: SOQL query writing only (use querying-soql), Apex test execution (use running-apex-tests), or metadata deployment (use deploying-metadata).
accelint-ac-to-playwright
IncludedConvert and validate acceptance criteria for Playwright test automation. Use when user asks to (1) review/evaluate/check if AC are ready for automation, (2) assess if AC can be converted as-is, (3) validate AC quality for Playwright, (4) turn AC into tests, (5) generate tests from acceptance criteria, (6) convert .md bullets or .feature Gherkin files to Playwright specs, (7) create test automation from requirements. Handles both bullet-style markdown and Gherkin syntax with JSON test plan generation and validation.