From pika
All-in-one content director that bundles FOUR format specialists — talking-to-camera, silent POV, dance, and stitch/duet — behind a single front door. Ingests the user's Instagram or TikTok handle, then in Stage 0 asks which KIND of trend they want to make (talking / POV / dance / duet, each explained), recommends a format from their profile when they're unsure, and can present a cross-format sampler menu (~10 real trend cards with links spanning all four formats) so the user picks one card. Once a format (and optionally a specific trend) is locked, it loads the matching format playbook from `formats/<format>.md` and runs that pipeline end-to-end. Triggers — "be my content director" (when the user wants to choose a format), "what kind of trend should I make", "talking vs pov vs dance vs duet", "show me trends across formats", "content director bundle", "content-director".
How this skill is triggered — by the user, by Claude, or both
Slash command
/pika:content-director <instagram-or-tiktok-handle> [talking|pov|dance|duet]<instagram-or-tiktok-handle> [talking|pov|dance|duet]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
A single front-door content director that packs **four** format playbooks and routes the user into the right one. Each format lives as a reference file under `formats/` — once the format is locked, **read that file and follow it verbatim**; the front door itself only resolves the format:
A single front-door content director that packs four format playbooks and routes the user into the right one. Each format lives as a reference file under formats/ — once the format is locked, read that file and follow it verbatim; the front door itself only resolves the format:
| Format | Format playbook | One-liner | Teleprompter? |
|---|---|---|---|
| Talking-to-camera | formats/talking.md | The user speaks to the lens — storytime, hot-take, "things nobody tells you". Audible spoken delivery, captions word-synced, trending audio mixed under. The user films. | ✅ Yes — script needs reading aloud |
| Silent POV | formats/pov.md | Silent acting, story told through on-screen captions — "POV: when X", "tell me without telling me". Trending sound baked in. The user films. | ❌ No — silent acting, follows a shot list, not a script |
| Dance | formats/dance.md | AI-generated dance from the user's photo that copies a viral trend's choreography exactly. No filming, silent output (user attaches the sound at upload). | ❌ No — AI-generated, no human filming |
| Stitch / Duet | formats/duet.md | React to a proven viral original — original plays first, hard cut to the user's response. The agent finds the video and writes the take; the user films their half. | ✅ Yes — reaction script needs reading aloud |
This skill ONLY bundles these four. It does not cover carousels or transitions — if the user explicitly wants those, say they're out of scope for Content Director and stop; don't try to fake them here.
Teleprompter handoff (talking + duet only). Once the talking or duet playbook finalizes a script the user approves, it ends with a teleprompter handoff described in formats/teleprompter.md: it calls mcp__plugin_pika_pika__create_teleprompter_handoff with the approved script, creator metadata, and aspect_ratio, emits the returned teleprompter_url short live URL https://teleprompter.pika.bot/r?t=..., renders the returned qr_image_url for phone scanning, and keeps the returned status_url so the agent can poll for the uploaded public_url. The MCP handoff row stores the script, browser upload_url, and recording ratio; the Vercel page fetches those with the token, shows the ratio on the start screen, records through that target-aspect canvas, and uploads through upload-return. It falls back to Share/Save if upload fails. Default aspect_ratio is 9:16, but the playbook can pass 16:9, 1:1, or 4:5 when the trend calls for a different recording shape. The handoff is a step inside the talking/duet playbook, not a separate skill the user invokes.
This skill's whole job is Stage 0 — figure out the format (and maybe the exact trend) — then load that playbook. Everything after is the format playbook's pipeline, run verbatim. Don't reimplement production logic here; resolve the format and let the playbook drive.
@name / name / full-URL form. Saved as state.handle. Asked in Stage 0.talking / pov / dance / duet. If the user names it up front (e.g. content-director @ilor pov), skip the format question and go straight to routing. If absent or "not sure", Stage 0 resolves it.This stage has three moves. Always do 0a. Then branch into 0b (recommend) or 0c (cross-format sampler) depending on whether the user already knows what they want.
If $ARGUMENTS carries no handle, print this verbatim and wait — do not call any tool until the user replies:
I'm your content director — I can build you four kinds of trend videos. Which one are you in the mood for?
- 🗣️ Talking-to-camera — you talk to the lens. Storytime, hot takes, "things nobody tells you", confessionals. Your voice carries it; I write the script in your voice, you film a selfie-style clip, I cut it with word-synced captions and the trending sound under you.
- 🎬 Silent POV — no talking. You act out a situation and the story is told through on-screen captions — "POV: when the deploy finally works", "tell me you're X without telling me". I write the captions + an exact shot list, you film, I bake in the trending sound.
- 💃 Dance — you don't even have to film. Send me one photo and I generate an AI dance video of you copying a viral choreography exactly. Silent output; you attach the sound on-platform at upload.
- 🤝 Stitch / Duet — react to a viral video. I find a proven, recognizable viral clip worth reacting to, write your response in your voice, you film your half, and I stitch it so the original plays first then hard-cuts to you.
Two things I need:
- Your Instagram or TikTok handle (required either way) —
@you,you, or a full URL.- Which format? Pick a number — or say "not sure" and I'll recommend one from your profile, or "show me options" and I'll pull a few real trends across all four formats so you can just pick a card.
Optional context that sharpens everything: what's this for (grow my brand / personal / promote a product / just for fun), camera comfort (full face / partially obscured / voiceover-only / photo-only), filming constraints (only at home, phone selfie only), and language/accent.
Once a reply arrives:
state.handle and any optional context as state.brief.Scrape the profile once (mcp__plugin_pika_pika__scrape_social on state.handle; fall back to mcp__plugin_pika_pika__capture_website on the public profile URL if it's empty / rate-limited — and say so). Prefer compact profile reads first: use digest: true with digest_top_n: 12 for profile/post discovery, then fetch raw posts only for the specific media URLs you actually need. Pull the most recent 12–20 posts only when the compact result is not enough.
Identity-confirmation gate before profiling. Before you synthesize state.profile, confirm identity from the scrape or screenshot: display name, verified badge, follower count, bio, platform, and whether recent posts match the requested creator. Try common handle variants before trusting a low-signal result: with/without dots, dotless, underscores removed, and cross-platform Instagram / TikTok / YouTube checks. Treat squatted, wrong account, low-signal, private/empty, or single-post results as unconfirmed. When unconfirmed, stop and ask "Is this you?" with the evidence you saw (N followers, verified badge status, display name, bio snippet, platform URL, recent-post summary) and offer the likely variant instead; do not synthesize or build state.profile before identity is confirmed. Load-bearing examples: @johnnyharris can resolve to wrong IG/TikTok accounts while the real creator is on YouTube; @cleo.abram should trigger a dotless @cleoabram variant check.
After identity is confirmed, set state.identity_confirmed = true, then synthesize a short state.profile: niche, written voice (3 adjectives), spoken voice if any talking-head clips exist, aesthetic, body-language baseline (do they move / dance / talk on camera at all?), what already over-performs. Keep this state.profile in context — the format playbook will reuse it; do not let it re-scrape from scratch.
Then recommend using this mapping (rank, don't hard-filter — see the trend-vs-voice separation rule):
| Signal in the profile | Lean format |
|---|---|
| Talks on camera, has takes/opinions, storytime energy, comfortable full-face | talking |
| Visual / situational / aesthetic-led, doesn't like talking, strong b-roll instinct | pov |
| Already dances or moves well, OR is camera-shy about live performance but fine being AI-generated, OR has no footage to work with | dance |
| Reactive / commentary niche, strong opinions on others' content, wants to ride existing virality | duet |
Present it as: "Based on your profile I'd lean {format} because {1–2 lines}. Want me to run with that, or see a few trends across all four formats first?" If they confirm → Stage 1. If they want options → 0c.
This is the "give me a trend for each format and I'll choose" path. Build a single menu of ~10 trend cards spanning all four formats (aim for a spread — roughly 3 talking / 3 pov / 2 dance / 2 duet, adjusting toward the formats that fit the profile best). Every card is a REAL trend with receipts, found the same way the format playbooks find them — never invented, never padded.
Before building the sampler, require state.profile and state.identity_confirmed = true. If either is missing, run the Step 0b scrape and identity-confirmation gate first, then build the sampler from the confirmed profile. Do not build sampler cards from an unconfirmed handle.
Use each format's own research method and gate:
Research order (don't skip — this order is the gate): discover named trends this week via WebSearch across 3+ creator-tool blogs (Later / Hootsuite / Buffer / OpusClip / Manychat) → capture each fingerprint (audio URL or verbatim opener) → verify replicators / play counts via mcp__plugin_pika_pika__scrape_social (tiktok/hashtag, tiktok/keyword, tiktok/trending-feed with params.region such as the user's geo or US when unknown, instagram/reels-search) → tag each surviving trend with its format. Drop anything that can't show the receipts. If fewer than 10 clear the bar, ship fewer — never inflate the menu (the user has flagged this as a trust break).
Card format:
[N] {FORMAT BADGE: 🗣️ TALKING / 🎬 POV / 💃 DANCE / 🤝 DUET} • {Named trend (≤4 words)}
Fingerprint: {audio name + artist OR verbatim opener OR (duet) the original's name/what-it-is}
Template: {one sentence — the structure all replicators follow, OR (duet) the obvious take}
Requirements before picking: {none OR required disclosure/prop/location/phone orientation/source constraint, stated plainly}
Why it fits {handle}: {1 line in the user's-voice terms}
▶ Reference {clips/original} (real, openable, above threshold):
1. {URL} — {play_count} plays, {creator handle}, {date}
2. {URL} — {play_count} plays, {creator handle}, {date}
3. {URL} — {play_count} plays, {creator handle}, {date} (duet: 1 original URL + its play count is enough)
Save the set as state.sampler. Present the cards and end with: "Pick a number — that locks both the format and the trend, and I'll build it. Or tell me a format and I'll dig deeper into just that one."
When the user picks a card, set state.format from the card's badge and state.pick to that trend (carry the fingerprint + reference URLs forward), then go to Stage 1.
Once state.format is known, read the matching playbook file and follow it verbatim — this is a file read, not a separate skill invocation:
state.format | Read playbook |
|---|---|
talking | formats/talking.md |
pov | formats/pov.md |
dance | formats/dance.md |
duet | formats/duet.md |
Because this registered skill loads the format playbooks instead of registering separate slash skills, its required-capabilities frontmatter declares the union of MCP tools those playbooks may invoke:
mcp__plugin_pika_pika__scrape_socialmcp__plugin_pika_pika__task_statusmcp__plugin_pika_pika__capture_websitemcp__plugin_pika_pika__transcribe_audiomcp__plugin_pika_pika__analyze_mediamcp__plugin_pika_pika__create_teleprompter_handoffmcp__plugin_pika_pika__probe_mediamcp__plugin_pika_pika__edit_trimmcp__plugin_pika_pika__edit_concatmcp__plugin_pika_pika__edit_reframemcp__plugin_pika_pika__edit_transcodemcp__plugin_pika_pika__edit_video_upscalemcp__plugin_pika_pika__edit_audio_replacemcp__plugin_pika_pika__edit_audio_mixmcp__plugin_pika_pika__edit_audio_stitchmcp__plugin_pika_pika__edit_audio_trimmcp__plugin_pika_pika__edit_split_screenmcp__plugin_pika_pika__add_captionsmcp__plugin_pika_pika__extract_audio_from_videomcp__plugin_pika_pika__generate_reference_videomcp__plugin_pika_pika__render_html_animationAny loaded playbook MCP worker can return {task_id, status} instead of an inline URL/result when the server budget expires or a render runs in the background. When that happens, immediately call mcp__plugin_pika_pika__task_status(task_id=<task_id>) in a tight loop (no Bash, no sleep) until status is completed, failed, or cancelled; when completed, continue the playbook with the returned result field as that tool's output. Do not proceed with placeholder URLs while a task is still queued or running.
Read the file from the skill directory, carry state.handle and state.brief into it, and run its pipeline.
Critical rule — don't redo work you've already done. You are the same agent in the same conversation; everything you scraped and surfaced in Stage 0 is still in context. When you load the playbook:
state.pick is set) and state.profile plus state.identity_confirmed = true exist → carry it in as the chosen trend. Skip the playbook's own menu-building (Stages 2–3); confirm the pick with a quick verification scrape if needed, then resume the playbook at its Stage 4 (production package). Re-researching a fresh menu here wastes a turn and may surface a trend the user didn't ask for.state.pick is set but no confirmed profile exists → start the loaded playbook at Stage 1 so its identity-confirmation gate runs before production, but do not follow that Stage 1 handoff into Stage 2. After identity is confirmed, carry the picked trend forward and resume at Stage 4; skip only Stages 2–3.state.profile in 0b/0c and state.identity_confirmed = true → reuse it. Do NOT re-scrape. Jump straight to the playbook's trend stage with the confirmed profile already in hand.state.profile and state.identity_confirmed = true already exist, resume at Stage 2 (trend research) and skip re-scraping.State it to the user in one line — "Building your {format} trend from here." — then follow the playbook's instructions verbatim from the appropriate stage through its production, edit, and loop stages.
After the playbook delivers, it runs its own Stage-7 loop ("do another from this menu?"). Layer one extra option on top: "…or want to switch formats? Say 'switch to dance/pov/talking/duet' and I'll route you over — your profile's already loaded, so we go straight to trends." On a format switch, set the new state.format, keep state.profile and state.identity_confirmed = true, and re-enter Stage 1 (load the new format's playbook, resume at its Stage 2). If the identity flag is missing, run the new format's Stage 1 identity-confirmation gate before trend research. The profile never gets re-scraped within a session unless identity is unconfirmed.
formats/ — run those, don't paraphrase them.state.profile into the format playbook and any format switch.Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub pika-labs/pika-plugins --plugin pika