Communitygithub.com

ericrisco/rsc-harness

Use when a Reels/TikTok/Shorts account needs its next video ideas scored into a ranked backlog, grounded in its own performance log plus dated trending sounds, each bet logged so its outcome feeds the next batch. NOT scripting a chosen idea (that is `video-shorts`), NOT pillars or cadence (that is `shortform-strategy`), NOT packaging a finished cut (that is `shortform-packaging`).

rsc-harness とは?

rsc-harness is a Claude Code agent skill that use when a Reels/TikTok/Shorts account needs its next video ideas scored into a ranked backlog, grounded in its own performance log plus dated trending sounds, each bet logged so its outcome feeds the next batch. NOT scripting a chosen idea (that is `video-shorts`), NOT pillars or cadence (that is `shortform-strategy`), NOT packaging a finished cut (that is `shortform-packaging`).

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ericrisco/rsc-harness/tree/HEAD/skills/shortform-ideation

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

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.

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, and hand off by the same table when a request lands outside your column. Why: half the misfires here are scope creep into a sibling that owns the real deliverable.

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

The loop — four phases, in order

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:

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.

CriterionWeightWhat 5 looks like
Hook strength×3first 3s opens a loop / pattern-break that matches a proven winning hook
On-account fit×2topic+format both over-indexed in this account's log; never a proven flop
Trend freshness×27-day-rising sound, or TikTok→Reels early (<5k Reels) window
Shareability / save×2viewer has a clear reason to send or save it (utility, status, "this is so us")
Effort (inverse)×1low 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):

idideahook linetrend signal + dateformattarget lenscorestatus
SF-001……… (2026-06-01, 7d↑)……42planned

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.

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

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.

MetricReadSource fact
3s-hold>60% = strong; <40% = kill the patternup 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 ita hook/jump-cut in the first 3s correlates ~72% higher viral likelihood
Shares + savesthe discovery currency — weight in scoringthe algorithm rewards watch-time and shares for distribution
Watch-time-per-lengtha 10s @ 80% beats a 60s @ 30%optimize retention-for-length, not duration

Anti-patterns

Anti-patternWhy it failsDo instead
Brainstorm dump with no scoresunrankable; the user can't decide what to shoot firstalways emit the ranked backlog table with a score per idea
Chasing a 30-day-only trending sound30-day-only movement often means the sound is already dyingweight 7-day-rising; flag 30d-only as stale
Re-pitching a topic the log proved deadignores the account's own negative evidencecheck Phase-1 flops before scoring; never pitch a proven flop
Scraping Creative Center for trendsviolates ToS, breaks the loop, ships brittle codemanual/assisted capture or sanctioned API; zero scrape commands in artifacts
Scoring by topic interest, not hook strengtha fascinating topic with a dead first 3s still flopshook strength carries ×3 weight; score the first frame first
Logging the bet but never the outcomethe loop never learns; next batch re-guessesleave result fields and fill them; Phase 1 reads the verdicts
Writing the full script/timecodes herecrosses into video-shorts; muddies the idea ledgerstop at hook line + chosen sound; hand off
Capturing a trend signal with no datefreshness is unscorable; you may brief a dead soundevery signal carries a first-seen date or it doesn't enter Phase 3

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

ericrisco/rsc-harness

Use when writing the words on a single conversion page — the hero headline and subhead, the offer, the proof and testimonials, and one primary CTA — or diagnosing a page that gets traffic and does not convert, as a copy problem rather than a layout one. NOT the paid ad that drives the click (that is `ads`), NOT the visual layout the words sit in (that is `design`), NOT the experiment that picks the winning variant (that is `ab-testing`).

ericrisco/rsc-harness

Use when you need to render an actual video file with Remotion — React compositions, the Composition/Sequence/TransitionSeries graph, transitions, burned-in word-by-word captions from a transcript, automatic silence removal, b-roll overlays, headless CI renders, and a final MP4 or MOV. NOT writing the script, hook, beats or caption text (that is `video-shorts`), NOT mastering audio to LUFS or building an RSS feed (that is `podcast`), NOT structuring the narrative arc (that is `course-storytelling`).

ericrisco/rsc-harness

Use when you have raw 9:16 footage and need it cut into a post-ready vertical short — dead air removed, fast jump cuts, karaoke word-by-word burned-in captions from a transcript, cuts and zooms snapped to the music beat, safe-area placement so captions clear the platform UI, and a platform-correct MP4 export. NOT writing the script, hook, beats or caption text (that is `video-shorts`), NOT building a Remotion React composition codebase (that is `remotion-video`), NOT deciding when or where to post (that is `social-publisher`).

ericrisco/rsc-harness

Use when a vertical short is shot or scripted and you need the upload-form copy and cover that win the feed — the hook line, the first-frame on-screen text, the search-led caption, a tight hashtag set, and the cover frame; it learns from what performed via the 02-DOCS log. NOT inventing the idea (that is `shortform-ideation`), NOT scripting or directing the cuts (that is `video-shorts`), NOT executing the edit (that is `shortform-editing`), NOT scheduling the post (that is `social-publisher`).

ericrisco/rsc-harness

Use when the unit of work is a TikTok/Reels account, not one clip: positioning, sustainable cadence and format mix, ride-or-skip on a trend or sound, recurring series, diagnosing a flat account, and the dated learning loop. NOT the single script or hook variants (that is `video-shorts`), NOT the idea backlog (that is `shortform-ideation`).

ericrisco/rsc-harness

Use when connecting a real TikTok account to code via the Content Posting, Display and Business Account APIs — OAuth, chunked video publish with status polling, and pulling views, watch time and impression sources, then logging that performance into the wiki as a dated feedback record. Covers short-lived tokens breaking a cron, unverified pull-from-URL ownership, and rate limits. NOT what to post or how to package it (that is `shortform-strategy` and `shortform-packaging`).

ericrisco/rsc-harness

Use when scripting or directing the edit of a single vertical short that has to hold attention from the first frame — turning a topic, a clip or a long video into a shot-by-shot script and an edit decision sheet, fixing a hook that dies in second three, generating hook variants to test, and planning cuts and on-screen text. NOT scheduling or cross-platform cadence (that is `social-publisher`), NOT running the editorial calendar (that is `content-engine`), NOT defining the durable brand tone (that is `brand-voice`).

ericrisco/rsc-harness

Use to judge whether a short-form clip is worth publishing — scores a reel, short or podcast excerpt 0-100 on ten weighted criteria with automatic penalties, then ranks a batch and says where the cut-off falls. Run it on transcript candidates before rendering. NOT writing the hook or caption (that is `shortform-packaging`), NOT inventing the idea (that is `shortform-ideation`), NOT executing the edit (that is `shortform-editing`).

関連スキル