---
name: shortform-ideation
description: "Use when an account that already posts (or is about to start posting) Reels/TikTok/Shorts needs a ranked batch of next video ideas grounded in its own performance log plus live trending sounds/formats/hashtags, and a ledger that ties each idea-bet to its measured outcome. Use to fold this week's trending audio into ideas, to decide which 3 of 12 ideas to shoot first, or to review why the bets you made flopped. Triggers: 'give me 10 Reels ideas for next week', 'which of these ideas do we make first', 'fold this week's trending TikTok sounds into our idea list', 'why did the ones we bet on last month flop', 'idea backlog for our TikTok', 'idéame Reels para esta semana basándote en lo que ya nos funcionó', 'prioritza idees de vídeo curt per aquesta setmana'. NOT writing the shot-by-shot script or edit decision sheet for a chosen idea (that is video-shorts), NOT setting cadence/pillars/positioning (that is shortform-strategy), NOT captions/covers/hashtag-sets for a finished cut (that is shortform-packaging)."
tags: [shortform, reels, tiktok, ideation, content-ideas, trend-jacking, experiment-log]
recommends: [video-shorts, shortform-strategy, shortform-packaging, analytics, content-engine]
origin: risco
---

# Shortform Ideation — The Idea Engine and the Bet Ledger

*You run the closed loop for a Reels/TikTok/Shorts account: hypothesis → bet → measured outcome → a better next batch.* You own the idea list, the priority score, and the experiment ledger. You do not write the spoken lines, you do not pick the cadence, and you do not finalize the caption.

**Your output stops at a ranked, evidenced idea carrying a chosen trend hook and a written hypothesis.** The moment you start writing spoken lines or beat timecodes, you have crossed into `video-shorts`. Hand off; do not squat.

An idea you cannot defend with (a) this account's own performance log and (b) a dated trend signal is a brainstorm, not a bet. This skill refuses to emit a brainstorm dump.

## Decision gate — are you even in ideation?

Read the ask against this table before you generate anything. *Why: half the misfires here are scope creep into a sibling that owns the real deliverable.*

| The ask | Owner | Why it is not you |
|---|---|---|
| "Give me N ranked ideas / which do we shoot first" | **you** | generating + scoring + ranking is the core loop |
| "Fold this week's trending sounds into ideas" | **you** | trend-grounded ideation is the signature move |
| "Why did the bets we made flop?" | **you** | the outcome ledger ties bet → result; that is yours |
| "Write the shot-by-shot script / edit sheet for this idea" | `video-shorts` | you stop at the idea + hook angle + chosen sound |
| "What should our pillars / cadence / positioning be?" | `shortform-strategy` | you consume pillars as input, you do not set them |
| "Write the caption + hashtags + cover for this finished cut" | `shortform-packaging` | you may *suggest* a hashtag as a trend signal, not finalize one |
| "YouTube ideas with thumbnail-first packaging" | `youtube-ideation` | that pipeline is packaging-led and decays slower |
| "Run the cross-channel calendar across blog/email/social" | `content-engine` | you feed ranked ideas *into* a calendar, you don't run it |
| "Build me a metrics dashboard" | `analytics` | you *read* the perf log to score ideas, you don't build reporting |

## The loop — four phases, in order

```text
Phase 1 GROUND        Phase 2 SOURCE TRENDS     Phase 3 GENERATE+SCORE   Phase 4 LOG THE BET
read 02-DOCS perf  ─▶ capture dated trend    ─▶ idea = topic × format ─▶ write hypothesis to
log; pull winning     signals (legally, no       × trend-hook × pacing    02-DOCS/shortform/
hooks/formats and     scraping); flag stale      → score → rank backlog   experiments/, leave
proven flops          signals                                             result fields pending
```

**Never skip Phase 1.** Ideas not grounded in this account's own data are guesses dressed as a plan. Grounding is what makes the score mean something. *Why: a hook that won on a cooking account can die on a B2B SaaS account; only the log tells you which one you are.*

## Phase 1 — Ground in 02-DOCS

The account's performance log lives at `02-DOCS/shortform/performance.md` (or `performance.csv`). Read it first, every cycle.

Extract four things and keep them in working memory for scoring:

1. **Winning hooks** — the opening 1–3s patterns that earned >60% 3s-hold.
2. **Winning formats** — talking-head, faceless voiceover, screen-record, skit, listicle — whichever over-indexed.
3. **Dead topics/formats** — what under-indexed twice or more. These are negative evidence; do not re-pitch them with a fresh coat of paint.
4. **Best 3s-hold patterns** — the specific first-frame moves that held viewers, because the 3s-hold is the metric the whole batch is optimizing for (see Metrics).

**If no log exists, bootstrap a minimal one** at `02-DOCS/shortform/performance.md` with columns `date | url | format | hook line | 3s-hold | shares | saves | views | note`, seed it with whatever the user can recall, and mark every idea this cycle as `unvalidated` so the next cycle knows the score was a prior, not a posterior. *Why: a missing log is not a reason to guess silently — it is a reason to start measuring.*

## Phase 2 — Source trends (legally)

Capture trending sounds, formats, and hashtags and **date every single signal**, because short-form trend windows are short and a stale signal is worse than no signal.

**Hard rule: never scrape. TikTok Creative Center has no public trends API and automated harvesting violates its ToS** (reinforced by the April 2026 rule updates). Trend Discovery (trending songs/hashtags/Top Ads) is browsable in-app without login by switching the region to United States; programmatic access requires the sanctioned Research API or Commercial Content API on developers.tiktok.com. You instruct *manual or assisted* capture — ask the user to paste the Creative Center view, or read from a sanctioned API — and you bake **zero** scraping commands into any artifact you emit. *Why: a scraper is both a ToS violation and a brittle dependency that breaks the loop.*

Four capture lanes, summarized here, with the per-source recipes in `references/trend-sources.md`:

- **TikTok Creative Center** — region-switch to US, and **compare 7-day vs 30-day movement.** Data refreshes every 24–48h. A sound that only moves on the 30-day view may already be dying; weight 7-day-rising signals higher.
- **Instagram trending audio** — the native Trending Audio list is gated to US Professional accounts; a trending sound shows an **upward-arrow indicator** next to its name in-app. Non-US/non-pro accounts lean on Explore, niche-creator repeat-use, and cross-platform origin tracking.
- **TikTok → Reels lead window** — Reels trends often lag TikTok by **3–7 days.** A sound viral on TikTok with **<5,000 Reels** using it on Instagram is a documented head-start window; flag it as `early` and prioritize it.
- **Niche-creator repeat-use** — when 3+ creators in the account's niche reuse the same sound/format inside a week, treat it as a niche-validated signal even before it shows on a global list.

Tag each captured signal: `signal | platform | first-seen date | 7d trend | 30d trend | freshness(early|peaking|stale)`. A signal with no date does not enter Phase 3.

## Phase 3 — Generate + score

**An idea is a product, not a topic:**

```text
idea = topic × format × trend-hook × pacing-archetype
```

- **topic** — drawn from the account's pillars and winning topics (Phase 1).
- **format** — a winning format from the log, or one deliberate experiment.
- **trend-hook** — a *dated, non-stale* signal from Phase 2, or "evergreen" if none fits.
- **pacing-archetype** — and a target length, because watch-time-per-length beats raw length: education tolerates +5–10s and proof, entertainment wants 1–2s cuts. Attach a target length so the bet is testable.

Score every idea on a weighted 1–5 rubric. The weights encode what actually drives short-form reach — hook strength and shareability, not topic interest.

| Criterion | Weight | What 5 looks like |
|---|---|---|
| Hook strength | ×3 | first 3s opens a loop / pattern-break that matches a proven winning hook |
| On-account fit | ×2 | topic+format both over-indexed in this account's log; never a proven flop |
| Trend freshness | ×2 | 7-day-rising sound, or TikTok→Reels `early` (<5k Reels) window |
| Shareability / save | ×2 | viewer has a clear reason to send or save it (utility, status, "this is so us") |
| Effort (inverse) | ×1 | low production lift; score 5 = shoot today with what you have |

`weighted_score = 3·hook + 2·fit + 2·fresh + 2·share + 1·(6−effort)` → max 50. Rank descending into the backlog.

**Backlog table schema** (this is the checkable artifact — `02-DOCS/shortform/backlog.md`):

| id | idea | hook line | trend signal + date | format | target len | score | status |
|---|---|---|---|---|---|---|---|
| SF-001 | … | … | … (2026-06-01, 7d↑) | … | … | 42 | planned |

`status` ∈ `{planned, shooting, posted, killed}`.

**Bad → Good idea:**

- **Bad:** "Do a video about our espresso machine." — a topic with no hook, no format, no trend, no score. Unrankable.
- **Good:** `SF-007 | "The €4 latte lie" cost-breakdown | hook: pour shot + on-screen "your café charges 900% markup" | trend: voiceover-receipt format, TikTok 7d↑, 3k Reels (early) 2026-06-01 | faceless voiceover | 18s | score 45 | planned` — a defensible bet with a loop-opening hook, a fresh dated signal, and a save reason (people screenshot the math).

## Phase 4 — Log the bet

Every idea you advance to `shooting`/`posted` gets a hypothesis file at `02-DOCS/shortform/experiments/<YYYY-MM-DD>-<slug>.md`. Schema and a worked before/after example are in `references/experiment-ledger.md`.

The hypothesis is one falsifiable sentence:

> **Hypothesis:** *trend* `voiceover-receipt` **+ hook** `"900% markup"` **will lift** `3s-hold` **above** `60%` **for topic** `café pricing`.

Then leave the **result fields pending** — `result: pending | 3s-hold: __ | hook-rate: __ | shares: __ | saves: __ | verdict: __` — to be filled after the video runs. The next cycle reads these verdicts in Phase 1: a confirmed hypothesis becomes a winning pattern; a falsified one becomes a dead pattern. *Why: logging the bet but never the outcome turns the ledger into a graveyard of guesses — the loop only learns if the result loop closes.*

## Metrics that matter

Score and judge on these, not on raw views. *Why: views are lagging and gameable; these are the levers the algorithm actually rewards.*

| Metric | Read | Source fact |
|---|---|---|
| **3s-hold** | >60% = strong; <40% = kill the pattern | up to ~50% drop in first 3s; >60%-hold Reels can out-reach <40% ones by 5–10× |
| **Hook rate** | ~28% is the Meta short-form average; beat it | a hook/jump-cut in the first 3s correlates ~72% higher viral likelihood |
| **Shares + saves** | the discovery currency — weight in scoring | the algorithm rewards watch-time and shares for distribution |
| **Watch-time-per-length** | a 10s @ 80% beats a 60s @ 30% | optimize retention-for-length, not duration |

## Anti-patterns

| Anti-pattern | Why it fails | Do instead |
|---|---|---|
| Brainstorm dump with no scores | unrankable; the user can't decide what to shoot first | always emit the ranked backlog table with a score per idea |
| Chasing a 30-day-only trending sound | 30-day-only movement often means the sound is already dying | weight 7-day-rising; flag 30d-only as `stale` |
| Re-pitching a topic the log proved dead | ignores the account's own negative evidence | check Phase-1 flops before scoring; never pitch a proven flop |
| Scraping Creative Center for trends | violates ToS, breaks the loop, ships brittle code | manual/assisted capture or sanctioned API; zero scrape commands in artifacts |
| Scoring by topic interest, not hook strength | a fascinating topic with a dead first 3s still flops | hook strength carries ×3 weight; score the first frame first |
| Logging the bet but never the outcome | the loop never learns; next batch re-guesses | leave result fields and fill them; Phase 1 reads the verdicts |
| Writing the full script/timecodes here | crosses into `video-shorts`; muddies the idea ledger | stop at hook line + chosen sound; hand off |
| Capturing a trend signal with no date | freshness is unscorable; you may brief a dead sound | every signal carries a first-seen date or it doesn't enter Phase 3 |

## Hand-off

- Chosen an idea and need the shot-by-shot script + edit decision sheet? → [`../video-shorts/SKILL.md`](../video-shorts/SKILL.md).
- Missing the pillars/cadence/positioning the ideas should fit inside? → `shortform-strategy` (it owns strategy; you consume it).
- The cut exists and needs caption/cover/hashtag-set? → `shortform-packaging`.
- Feeding the ranked backlog into a multi-channel calendar? → [`../content-engine/SKILL.md`](../content-engine/SKILL.md).
- Long-form/YouTube idea pipeline instead? → [`../youtube-ideation/SKILL.md`](../youtube-ideation/SKILL.md).

To structurally lint an emitted backlog or experiment file, point `scripts/verify.sh` at it (read-only): `bash scripts/verify.sh 02-DOCS/shortform/`.
