evals/evals.json
{
"skill": "cross-platform-repurposing",
"version": "1.0.0",
"description": "Scenario tests for cross-platform-repurposing. A run passes only when every item in 'expect' is satisfied. Written before the skill body (test-first).",
"evals": [
{
"name": "happy-path-fan-out",
"input": "Repurpose this post for Instagram, LinkedIn, X, and Pinterest.",
"expect": [
"reads brand-profile and voice first",
"extracts the core atom rather than translating the wrapper",
"produces a genuinely native version per platform (different hook, format, length, CTA)",
"keeps the voice constant while shifting register per platform",
"hands the finished versions to scheduling-and-queue for fan-out"
]
},
{
"name": "not-copy-paste",
"input": "Just post this same caption on all my platforms.",
"expect": [
"explains why identical cross-posting underperforms and looks like spam",
"rebuilds the post natively for each platform instead of duplicating it",
"each version differs in more than hashtags"
]
},
{
"name": "long-form-atomize",
"input": "Turn this blog post into social content.",
"expect": [
"lists multiple distinct atoms from the long piece rather than summarizing it into one post",
"turns each strong atom into its own native post",
"does NOT reduce a rich piece to a single 'check out my blog' post"
]
},
{
"name": "stands-alone-and-native",
"input": "Repurpose my LinkedIn post for Instagram and TikTok.",
"expect": [
"each version stands on its own (no 'as I said on LinkedIn')",
"the Instagram and TikTok versions are rebuilt as native video/visual, not the text pasted",
"register shifts looser for TikTok"
]
},
{
"name": "composes-content-skills",
"input": "Make this idea into a Reel, a thread, and a carousel.",
"expect": [
"uses hook-writer for a fresh hook per format",
"hands the video to reels-script and the thread to thread-writer",
"the carousel breaks the atom into slides",
"all share the same core atom and voice"
]
},
{
"name": "knows-when-not-to-repurpose",
"input": "Repurpose this reply-guy joke I posted on X everywhere.",
"expect": [
"recognizes platform-specific/native content that shouldn't be forced elsewhere",
"advises against repurposing it, or adapts only if there's a real native angle",
"does not mechanically clone it across platforms"
]
},
{
"name": "audience-overlap-vary-angle",
"input": "Post this on both my Instagram and Facebook (same followers mostly).",
"expect": [
"flags the heavy audience overlap",
"varies the angle or format between the two rather than showing the same post twice",
"does not just relocate identical content"
]
},
{
"name": "video-to-text-not-transcript",
"input": "Turn my 15-minute YouTube video into posts.",
"expect": [
"pulls spoken insights/quotes/moments as written atoms",
"builds native text/visual posts from them",
"does NOT dump a transcript as the 'posts'"
]
}
]
}
references/examples.md
# Examples — repurposing end to end
Two worked flows: one atom fanned out to five native versions, and a long-form piece atomized.
Voice is the blunt indie-founder voice from earlier skills (short, dry, no exclamation marks,
concrete). Your output uses the loaded `voice.md`.
---
## Example 1 — one atom → five native versions
**The atom:** we deleted our most-requested feature because nobody used it; the "boring"
replacement became the most-used in two days. Lesson: build less, watch behavior not requests.
### Instagram — Reel
- **Hook (visual):** hand hitting "delete" on a block of code. **On-screen:** "Deleting 6 months
of work." **Spoken:** "We just deleted our most-requested feature."
- Beats: the why → the boring fix → the result. **CTA:** save this for your next roadmap meeting.
### LinkedIn — text post
- **Hook line:** "'Requested' is the most expensive word in product."
- Whitespace-formatted, expands the lesson (built for words, not behavior), ends on a genuine
question. **CTA:** "Anyone actually build straight from requests and have it work?" Link in
comments if any.
### X — single post
- "'Customers requested it' is how you justify six months building something nobody uses.
Deleted ours today. Watching behavior from now on."
- Two lines, the point up front. No hashtags.
### Instagram — carousel
- Cover: "We deleted our most-requested feature →". Slides: 1) the ask vs the use, 2) requested ≠
used, 3) build the boring thing, 4) shipping less is a feature. **CTA:** save.
### Pinterest — pin
- Keyword-rich: "Product roadmap lesson: why customer requests mislead | build less". Image: the
"requested vs used" contrast graphic. Links to the full blog. Evergreen, searchable.
**Notice:** same atom, five genuinely different builds — different hooks, formats, lengths, CTAs,
register. None is a copy-paste of another.
**The bad version (avoid):** the LinkedIn paragraph pasted identically into IG, X, and a Pinterest
description. Fits none, looks like spam to anyone following on two, and underperforms everywhere.
---
## Example 2 — long-form → many atoms
**Source:** a 1,800-word blog post, "10 things we learned in our first year."
**Atomize (don't summarize):** pull the strongest standalone atoms —
1. the deleted-feature lesson (→ the five posts above),
2. "our first hire was a mistake — here's the signal we missed,"
3. "the pricing change that doubled revenue,"
4. "the channel we wasted 6 months on,"
5. "the one metric we should've watched sooner."
Each atom → its own native post(s) across platforms. One blog → ~3 weeks of content. Optionally,
one post points to the full blog (the hero link), but every atom stands alone.
**Anti-pattern:** "Just published a new blog: 10 things we learned 👇 [link]" as the *only* post.
That throws away nine atoms.
---
## What both examples show
- **Atomize first**, then build native — don't translate a wrapper.
- Each version is **different and stands alone**.
- **Voice constant, register shifts** per platform.
- Long-form yields **many** posts, not one summary.
- Quality per platform is the gate; volume is the byproduct.
references/platform-transforms.md
# Platform Transforms — one atom, native everywhere
How the *same* core idea becomes each platform's native post. These are transform recipes: feed
in the atom, get out a version built for that platform. Each changes the hook, format, length,
mechanics, and register — never just the hashtags.
> For full caption mechanics see `caption-writer/references/platforms.md`; for hook craft per
> format see `hook-writer/references/formats.md`. This reference is the *transform* layer that
> sits on top of both. Re-verify platform specs periodically.
---
## → Instagram
- **Native forms:** Reel (video), carousel (visual teaching), single image.
- **Pick by atom:** a *moment/story* → Reel; a *how-to/list* → carousel; a *single point* →
image.
- **Hook:** visual + on-screen text; caption first line within ~125 chars.
- **Mechanics:** link in bio; a few relevant hashtags. Register: warm.
- **CTA:** save / send / follow.
## → TikTok
- **Native form:** short video, 9:16, sound-on, trend/sound-aware.
- **Transform:** make it faster and looser than the Reel; lead with the hook in frame one;
keyword the caption for search.
- **Register:** casual, native, less polished. (Hand to `tiktok-script` for trend-led ideas.)
- **CTA:** comment / follow.
## → LinkedIn
- **Native form:** text post (or a document/PDF carousel).
- **Transform:** expand the atom into a short, whitespace-heavy post; lead with the hook line
(~140-char cutoff); more authority/insight register.
- **Mechanics:** link in comments (not body); 3–5 hashtags. Longer is fine if it earns the read.
- **CTA:** a genuine question (comments) or a soft point.
## → X / Twitter
- **Native form:** a single punchy post, or a thread for multi-atom ideas.
- **Transform:** strip to the sharpest line; lead with the point; cut everything else.
- **Mechanics:** 0–2 hashtags; conversational. (Hand multi-atom ideas to `thread-writer`.)
- **CTA:** reply / repost, or none — a strong last line earns engagement.
## → Threads
- **Native form:** short, conversational post or light thread.
- **Transform:** reactive, opinion-forward, lower-polish than LinkedIn; one topic tag.
- **CTA:** invite replies.
## → Bluesky
- **Native form:** short text post; links are clickable and welcome (no link penalty culture).
- **Transform:** like X but warmer/less combative; skeet-length punchy take; hashtags barely used.
- **CTA:** reply / repost.
## → Facebook
- **Native form:** text + image/video post; group-friendly, conversational.
- **Transform:** slightly longer and more personal than X; lead with a relatable line; minimal
hashtags; links fine in the post.
- **CTA:** comment / share.
## → YouTube Shorts
- **Native form:** short vertical video.
- **Transform:** like the Reel, but the first line doubles as a **searchable** title; the
lean-in audience tolerates a slightly stronger payoff.
- **CTA:** subscribe / watch the long version.
## → Pinterest
- **Native form:** a pin — image (or video) + **destination link** + keyword-rich description.
- **Transform:** make it evergreen and **searchable** (keywords, not hashtags); the visual must
stand alone; the link is the point (real traffic driver).
- **CTA:** save / visit the link.
---
## The transform table (quick reference)
| Platform | Native form | Length | Hook | Links | Register |
|---|---|---|---|---|---|
| Instagram | Reel / carousel / image | short–med | visual + text | bio | warm |
| TikTok | short video | short | frame-one | bio | casual |
| LinkedIn | text post / doc | med–long | line + whitespace | comments | authority |
| X | post / thread | short | the point | inline | conversational |
| Threads | post / light thread | short | the take | inline | casual |
| Bluesky | short post | short | the take | inline | casual-warm |
| Facebook | text + media post | short–med | relatable line | inline | personal |
| YT Shorts | short video | short | searchable line | description | clear |
| Pinterest | pin + link | short | keyword | clickable | descriptive |
Same atom, nine different builds. If your versions don't differ across these columns, you
haven't repurposed — you've relocated.
references/repurposing-model.md
# The Repurposing Model — Atomize → Adapt
The method that separates real repurposing from lazy reposting. Internalize this and every
output is native; skip it and you produce duplicate spam.
## Why copy-paste fails
Pasting the same caption everywhere fails three ways at once:
- **It fits none of them.** A LinkedIn-length post dies on X; a TikTok caption looks lazy on
LinkedIn. Each platform has its own format, mechanics, and audience mindset.
- **It looks like spam.** People who follow you on two platforms see the identical post twice and
unfollow one.
- **It gets suppressed.** Several platforms down-rank obviously cross-posted content (e.g.,
recycled Reels with another app's watermark, duplicate text).
Native-everywhere beats same-everywhere, every time.
## The model
**Atomize → Adapt.**
### Atomize — extract the reusable core
The **atom** is the smallest reusable unit of value in the source: the point, the insight, the
story, the stat, the moment, the quote. It's platform-agnostic — it's *what you're saying*, not
*how*.
- A single post usually contains **one atom**.
- A long piece (blog, 20-min video, podcast, newsletter) contains **many atoms** — each strong
enough to be its own post. The skill of long-form repurposing is *finding the atoms*, not
summarizing the whole.
### Adapt — rebuild the atom natively per target
Take the atom and build it fresh for each platform: a new hook, the right format and length,
native mechanics, the right CTA, the right register. You're not translating the wrapper — you're
rebuilding it around the same core.
## What stays vs what changes
| Stays constant | Changes per platform |
|---|---|
| The **atom** (core idea) | The **hook** (per platform's mechanics) |
| The **brand voice** | The **format** (Reel / carousel / thread / post) |
| The **truth** / facts | The **length** and structure |
| The brand **guardrails** | The **CTA** (matched to platform + goal) |
| | **Mechanics** — hashtags, links, tags |
| | **Register** (voice tone-map: formal ↔ loose) |
If your two versions differ only in hashtags, you changed nothing that matters — go back and
re-hook, re-format, re-length.
## The directions of repurposing
Each direction has different mechanics:
- **One → many platforms (fan-out):** one atom, re-natived for each platform. The most common.
- **Long → short (atomize):** a blog/video/podcast → many short posts, one per atom. The biggest
multiplier — one "hero" asset can feed weeks of posts.
- **One format → many formats:** a written insight → a carousel (slides), a Reel (script), a
thread. Same platform or across.
- **Cross-medium:** video → text (pull the spoken insights as written atoms) and text → video
(hand the atom to `reels-script`). Never just transcribe or read aloud.
- **Across time (recycle):** evergreen atoms re-posted later, refreshed — see `content-recycling`.
## The hero → atoms mental model
The efficient operation runs on a few **hero assets** (a deep blog post, a long video, a big
launch) that each get **atomized into many small posts** across platforms and time. Plan the
heroes; the atoms fill the calendar. That's how `batch-content-plan`'s capacity math works
without burning the user out on net-new ideas.
## The gate
Volume is the goal, but **quality per platform is the gate.** Five native posts beat fifteen
copy-pastes. If a version doesn't feel built for its platform, it's not done.
references/source-types.md
# Source Types — repurposing by direction
Different sources atomize differently. This is how to handle each, so you pull the most posts
without padding.
---
## Long-form → many short posts (the biggest multiplier)
Sources: a blog post, a 20-minute video, a podcast episode, a newsletter, a webinar, a talk.
**Method — atomize, don't summarize:**
1. Read/scan the whole piece and **list every atom** — each distinct insight, story, stat,
quote, contrarian take, or step. A solid blog post yields 5–10; a podcast can yield more.
2. Score the atoms — which are strongest, most surprising, most standalone.
3. Turn each strong atom into its **own** native post (per `platform-transforms.md`). One atom =
one post, not "here's a summary of my blog."
4. Optionally keep one post that points to the full piece (the "hero" link), but the atoms each
stand alone.
**Anti-pattern:** compressing a rich 2,000-word post into one thin "I wrote a blog, check it
out" post. That wastes 90% of the material.
## One strong post → fan out (one → many platforms)
Sources: a post that did well, or a fresh single idea.
**Method:** it's one atom — re-native it for each target platform (new hook, format, length,
CTA, register). Space the posts out; vary the angle where audiences overlap. This is the default
fan-out covered in the main flow.
## One format → many formats
Sources: a written insight you want in more shapes.
**Method:** the same atom becomes:
- a **carousel** (break the point into slides),
- a **Reel/Short** (hand to `reels-script`),
- a **thread** (hand to `thread-writer`),
- a **single post**.
Pick the formats that suit the atom and the platforms; don't force all four.
## Cross-medium (video ↔ text)
- **Video → text:** pull the **spoken insights, quotes, and moments** as written atoms — then
build native text posts. Don't dump a transcript; transcripts aren't posts.
- **Text → video:** hand the atom to `reels-script` to build it *as a video* (hook + beats +
shots). Don't read the caption aloud over a static image.
- **Long video → clips:** see `captions-and-clipping` for cutting clips; pair each clip with a
native caption.
## Across time (recycle)
Evergreen atoms can run again later, refreshed (new hook, updated example, different format) so
it doesn't read as a literal repost. This is the time dimension — see `content-recycling` for
cadence and refresh rules.
---
## Choosing how far to push it
- A **hero asset** (deep blog, big video, launch) → atomize hard; it can feed weeks.
- A **single light idea** → one or two native versions; don't manufacture filler to hit a count.
- The test: every post must clear the quality bar on its own. If you're padding to reach a
number, stop — fewer, stronger posts win.
SKILL.md
---
name: cross-platform-repurposing
description: >-
Use to turn one piece of content into multiple platform-native posts — adapt, never
copy-paste. Run when the user says "repurpose this," "turn this into posts for every platform,"
"cross-post," "make this work on TikTok/LinkedIn/X too," "one idea into a week of content,"
"turn this blog/video/podcast into social posts," or wants to fan content out. Reads
brand-profile and voice first, extracts the core idea, then re-natives it for each platform
(different hook, format, length, mechanics, CTA) using the content skills, and hands the
fan-out to scheduling-and-queue. This is the multiplier that makes a content operation
sustainable — but every version must stand on its own and feel native, never duplicated.
metadata:
version: 1.0.0
license: MIT
---
# Cross-Platform Repurposing
This skill turns one idea into many posts — the single biggest lever for producing content
sustainably. One blog post becomes a week of social; one strong insight becomes five
platform-native posts. It's how a small team posts like a big one.
The principle that makes it work — and the trap that ruins most attempts:
> **Repurposing is not reposting.** Pasting the same caption onto every platform is the lazy
> version: it fits none of them natively, it looks like spam to anyone who follows you in two
> places, and several platforms quietly suppress obviously cross-posted content. The craft is
> **atomize → adapt**: extract the core idea, then rebuild it natively for each target — a
> different hook, format, length, and CTA, same truth and voice.
## When to use this
- Fan one post out across platforms (one → many).
- Atomize a long piece (blog, video, podcast, newsletter) into many short posts (long → short).
- Convert one format into others (a written insight → a carousel, a Reel, a thread).
- Inside `batch-content-plan`, to stretch limited raw material into a full calendar.
**When NOT to use it:** when content is genuinely platform-specific (an in-joke, a
platform-native trend, a reply) — forcing it elsewhere reads wrong. And when the audience
overlaps almost entirely on two platforms, vary the *angle*, don't just relocate the post. Know
when a piece shouldn't travel.
## Step 0 — Read the foundation first
Load `brand-profile.md` and `voice.md`. Voice stays constant across platforms; **register
shifts** per platform (use the voice tone-map — LinkedIn more formal, TikTok looser). Carry
guardrails everywhere.
## Step 1 — Atomize: find the core idea
Extract the reusable **atom** from the source — the point, the insight, the story, the stat, the
moment. For a single post that's usually one atom; for long-form (a blog, a 20-minute video) it's
**several** atoms, each strong enough to be its own post. Don't summarize a long piece into one
weak post — pull its best 5–10 atoms. See `references/repurposing-model.md`.
## Step 2 — Pick targets and direction
Decide the **platforms** and the **direction** of the repurpose (one→many, long→short,
format→format, video↔text — see `references/source-types.md`). Direction determines the
mechanics.
## Step 3 — Re-native per platform (don't translate, rebuild)
For each target, rebuild the atom natively — composing the right skills:
- **A new hook per platform** (`hook-writer`) — what hooks on a LinkedIn feed differs from a
TikTok first frame.
- **The right format and length** for that platform.
- **The copy** (`caption-writer`), the **script** if video (`reels-script`), or the **thread**
(`thread-writer`).
- **Native mechanics** — hashtags, links (bio vs clickable vs comments), CTA.
What stays the same: the **atom** and the **voice**. What changes: hook, format, length,
structure, CTA, mechanics, register. See `references/platform-transforms.md`.
## Step 4 — Quality-check: does each stand alone and feel native?
Every version must pass two tests:
1. **Stands alone** — someone who only sees this one post gets full value (no "as I said on
LinkedIn…").
2. **Feels native** — it looks built *for* this platform, not relocated. If you can tell it was
copy-pasted, rebuild it.
If two platforms share most of the audience, change the *angle* between them, not just the
formatting.
## Step 5 — Hand off to scheduling
Pass the finished, per-platform versions to `scheduling-and-queue` to schedule/fan out (it
confirms and validates first; WoopSocial applies per-platform fields). Space them out — don't
fire the same idea everywhere at the same minute.
## Quality bar — self-check
- Did you **atomize** (extract the core idea) rather than translate the wrapper?
- Is each version **genuinely native** — different hook, format, length, CTA — not copy-paste?
- Does each **stand on its own**?
- Is the **voice constant** with the **register shifted** per platform?
- For long-form, did you pull **multiple atoms**, not one summary?
- Did you recognize anything that **shouldn't** be repurposed?
If two versions are the same text with different hashtags, you reposted — go back to Step 3.
## Edge cases
- **Heavy audience overlap across platforms** → vary the angle/format between them so followers
don't see the same post twice.
- **Platform-specific content** (trends, replies, in-jokes) → don't force it elsewhere; say so.
- **Long-form with one idea** → it's one atom; don't manufacture filler to hit a post count.
- **Video → text** → pull the spoken insights/quotes as written atoms; don't just transcribe.
- **Text → video** → hand the atom to `reels-script` to build it as a video, don't read the
caption aloud.
- **Regulated/sensitive** → carry compliance guardrails into every version.
## Related skills
- `brand-profile`, `voice-builder` — voice + register + guardrails.
- `hook-writer` — a fresh hook for each platform.
- `caption-writer`, `reels-script`, `thread-writer` — build each native version.
- `content-recycling` — repurposing across **time** (refresh evergreen later).
- `captions-and-clipping`, `opus-clip` — cutting clips from long video (podcasts, webinars) at depth.
- `batch-content-plan` — uses this to stretch material into a calendar.
- `scheduling-and-queue` — schedules/fans out the finished versions.
## References
- `references/repurposing-model.md` — atomize → adapt; what stays vs changes; the directions.
- `references/platform-transforms.md` — how one idea becomes each platform's native post.
- `references/source-types.md` — repurposing by source/direction (long-form, fan-out, cross-medium).
- `references/examples.md` — one idea → five native versions, and a long-form atomization.