Repurpose content into a native TikTok script and caption. Take a LinkedIn post, blog, newsletter, or X thread that worked elsewhere and rebuild it as a spoken script: hook in the first second, every line sayable in one breath, open on the payoff, a trend angle where it fits, plus a caption, published via Publora on approval. Adapts content across platforms. Not for a fresh hook (use tt-hook-scripter), not the caption only (use tt-caption-writer), not auditing a script (use tt-humanizer --mode audit).
npx skills add https://github.com/sergebulaev/tiktok-skills --skill tt-repurposer
Turn something you already made into a TikTok video script that sounds like it was born on camera. Repurposing is not copy-paste. A post that killed on LinkedIn will die on TikTok if you read it aloud: wrong open, wrong rhythm, sentences no one can say in one breath, and artifacts ("link in bio", hashtag walls, corporate phrasing) that scream off-platform.
This skill transforms, it does not generate. It reads your source, keeps the idea, and rebuilds the delivery as a spoken script plus a short caption for TikTok.
Not for a blank-page hook (use tt-hook-scripter), not for the caption on its own (use tt-caption-writer), and not for reviewing an already-TikTok script (use tt-humanizer --mode audit).
Voice profile first (all drafts). If ../../references/voice-profile.md has filled: yes, load it and match the user's voice fingerprint, hard rules, and CTA/link style throughout. If it is not filled, mention once that tt-humanizer --mode profile can learn their voice from a few posts, then proceed with the generic voice rules.
Never invent the specifics. The rules below ask for a concrete number, a date and a named entity, because that is what separates a real post from a generated one. Take them from what the user actually said in this conversation. Do not invent a figure, a date, a client name or a result, and do not soften a vague claim into a plausible-looking number. If the user has nothing concrete for a beat, ask them once, and if they still have nothing, drop the claim rather than decorate it. A published invented number is a retraction; a missing one is only a weaker post.
tt-hook-scripter: the spoken line, the on-screen text, and the opening visual firing at once, picked by the goal.tt-trend-mapper to check fit and script the twist. Skip it if forcing a trend would bury the point.tt-caption-writer: under 2,200 chars, 3 to 5 mixed-reach hashtags, TikTok settings.10. Humanizer pass. Run tt-humanizer V3: it scrubs 2026 AI vocab by density, em dashes above the cap (caption about one per 100 words, card at most one), stacked triads, reveal bridges, sincerity openers and "hey guys" filler, fixes only a teleprompter-flat run (never inserts a punch line), and checks every line is sayable out loud in one breath. Keep the user's real numbers and named entities from the source.
11. Approval card. Show: source -> TikTok mapping (what became what), the script (hook / value / loop-close), on-screen text, the trend or sound angle if any, the caption, char counts, primary goal.
12. On approval. Publish the caption via lib.publish("video", draft_text=<approved caption>, target_url="https://www.tiktok.com/upload", video_path=<render_or_None>, platforms=[<TIKTOK_PLATFORM_ID>], scheduled_time=<iso_or_None>). Without a rendered .mp4, lib.publish returns the script, caption, and settings as a copy-paste block to upload in the TikTok app.
Global voice rules: see root SKILL.md Voice rules. Additional skill-specific rules:
../../references/hook-formulas.md - the 10 TikTok 3-second hook formulas to re-hook with../../references/algorithm-heuristics.md - 2026 TikTok ranking rules (completion, rewatch, shares, sound timing)../../references/voice-rules.md - the canonical spoken-script and caption voice rulestt-hook-scripter - script the first-second hook (repurposer hands the open here)tt-trend-mapper - check trend fit and script the twist for a sound anglett-caption-writer - write the caption, hashtags, and settings (repurposer hands the caption here)tt-humanizer - scrub AI tells and check lines are sayable, plus --mode audit to review the resultTake sergebulaev/tt-repurposer from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.